Описание практической части
Постановка задачи: Даны целые числа n, а1,…,аn. Наименьший член этой последовательности заменить целой частью среднего арифметического всех положительных членов, остальные члены оставить без изменения. Если в последовательности несколько членов со значением min(а1,…,аn), то заменить последний по порядку.
Определим следующие переменные для решения задачи в таблице (таблица 1).
Таблица 1. Спецификация
№ |
Идентификатор переменной или функции |
Назначение в программе |
Тип |
1 |
a[n] |
Массив целых чисел |
Целый |
2 |
min[j] |
Массив минимальных элементов |
Целый |
3 |
i |
Порядковый номер элемента |
Целый |
4 |
sra |
Среднее арифметическое элементов массива a |
Вещественное |
5 |
n |
Число элементов массива a |
Целый |
6 |
j |
Число одинаковых минимальных элементов массива a |
Целый |
7 |
m |
Массив минимальных элементов |
Целый |
Для визуального представления алгоритма решения задачи и определения последовательности шагов составим блок-схему, что позволит понять структуру алгоритма, где определим все исходные параметры и действия для поиска результата.
Для написании программного кода используется язык программирования Visual C++, где реализация кода осуществляется путем создания консольного приложения:
#include<iostream.h>
#include<math.h>
#include<windows.h>
#include<iomanip.h>
char* Rus(const char* text);
char bufRus[256];
char* Rus(const char* text)
{
CharToOem(text,bufRus);
return bufRus;
}
void gotoxy(short x,short y)
{
HANDLE StdOut=GetStdHandle(STD_OUTPUT_HANDLE);COORD coord = {x,y};
SetConsoleCursorPosition(StdOut,coord);
}
void main()
{
int i,j,n,a[100],min[100],k,m;
double sra,p;
p=1;sra=0;
cout<<Rus("Число элментов последовательности, n = ");cin>>n;
cout<<Rus("Введите элементы последовательсности a")<<endl;
for(i=0;i<n;i++)
{gotoxy (i+i*2,2);cin>>a[i];}
j=0;
min[0]=a[0];
for(i=1;i<n;i++)
{
if (a[i]<min[j])
{
j=0;
min[j]=a[i];
}
else if (a[i]==min[j])
{j++;min[j]=a[i];k=i;}
}
m=0;
for(i=0;i<n;i++)
{
if (a[i]>0)
{
p=p+a[i];
m++;
}
}
sra=p/m;
a[k]=int(sra);
cout<<Rus("Массив минимальных элементов последовательности a")<<endl;
for(i=0;i<=j;i++)
{cout<<min[i]<<" ";}
cout<<endl;
cout<<Rus("Среднее арифметическое положительных элементов последовательности a = ")<<sra<<endl;
cout<<Rus("Порядковый номер изменяемого элемента: ")<<k+1<<endl;
cout<<Rus("Преобразованная последовательность a")<<endl;
for(i=0;i<n;i++)
{cout<<a[i]<<" ";}
cout<<endl;
}
Продемонстрируем результат выполнения программы. Количество элементов массива a было задано равным 10. Были последовательно через нажатие клавиши Enter введены 10 как положительных и отрицательных элементов. В результате выполнения программного кода на экран был выведен массив одинаковых минимальных элементов, среднее арифметическое положительных элементов последовательности a, порядковый номер заменяемого элемента и преобразованный массив a, в соответствии с рисунком 1.
Рисунок 1 - Результаты выполнения программы
При анализе результата можно увидеть следующее: в данном массиве два одинаковых минимальных элемента, равных - 6. В соответствии с условием задачи второй элемент, равный -6 был заменен на целую часть от среднего арифметического положительных элементов массива a.