Разработка программы на С++ для расчета среднего, медианы и моды в массиве элементов
Среднее значение, медиана и мода ряда чисел применяются при статистической обработке данных. Создадим программу, в которой будет использоваться массив из 100 элементов, заполняемый случайными числами от 1 до 9. Расчет данных, сортировка и вывод массива на экран осуществляются в отдельных функциях. Аргументы этих функций – массив и размер массива.
Для вывода массива на экран используется функция display()
Среднее – это среднее арифметическое всех элементов массива. Оно рассчитывается, как сумма всех элементов, деленная на количество элементов.
Медиана – это середина ряда, то есть элемент, который находится в середине отсортированного массива. Если количество элементов массива – четное, то медиана считается как среднее двух элементов, которые находятся в середине. Медиана определяется в функции mediana. Для сортировки применяется функция sorting().
Мода – это значение, которое чаще всего встречается в массиве. Мода рассчитывается в функции mode(). Для подсчета частоты всех значений создадим еще один массив freq[10] из 10 элементов (0 не используется).
Для наглядного представления создадим гистограмму всех частот.
В цикле определяется максимальное значение – мода. Несколько значений могут встречаться одинаковое число раз. Все они будут выводиться на экран в дополнительном цикле.
Текст программы:
//программа для расчета среднего, медианы и моды
#include <iostream.h>
#include <iomanip.h>
#include<stdlib.h>
#include<time.h>
//функция расчета среднего
void sred( int[], int);
//функция расчета медианы
void mediana( int[], int);
//функция сортировки массива
void sorting(int[], int);
//вывод массива на экран
void display(int[], int);
//функция расчета моды
void mode( int[], int[], int);
main()
{
//инициализация генератора случ. чисел от системного времени
srand(time(NULL));
//размер массива
const int size = 100;
//массив частот значений
int freq[10] = {0};
//массив значений
int ar[size];
int i;
//заполняем массив случайными числами от 1 до 9
for(i=0;i<size;i++)
{
ar[i] = 1+ rand()%9;
}
//вывод на экран несортирвоанного массива
display(ar, size);
//расчет среднего
sred(ar, size);
//расчет медианы
mediana(ar, size);
//расчет моды
mode(freq, ar, size);
cin.get();
return 0;
}
//расчет среднего
void sred( int array[], int arraySize)
{
int total = 0; //общая сумма всех значений массива
for(int i = 0; i<arraySize; i++)
total += array[i];
cout<<"Srednee ravno: "<<total<<" / "<<arraySize;
//вывод числа с фиксированной точкой, точность 4 знака
cout<<" = "<<setiosflags(ios::fixed | ios::showpoint)
<<setprecision(4)<<(float)total/arraySize<<endl;
cout<<endl<<endl;
}
//вывод на экран по 20 чисел в строке
void display( int array[], int arraySize)
{
for(int i = 0; i<arraySize; i++)
{
if(i%20 == 0) cout<<endl;
cout<<setw(2)<<array[i];
}
cout<<endl<<endl;
}
//пузырьковая сортировка массива
void sorting(int array[], int arraySize)
{
int temp;//временное значение
for(int i=1; i< arraySize; i++)
for(int j = 0; j< arraySize - 1; j++)
{
if(array[j]>array[j+1])
{
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
//расчет медианы
void mediana(int array[], int arraySize)
{
int m;
cout<<"Mediana\n";
sorting(array, arraySize);
cout<<"Otsortirovannyi massiv\n\n";
display(array, arraySize);
cout<<"Mediana ravna ";
//определяем, четное ли число элементов массива
m = arraySize%2;
cout<<(m ? array[arraySize/2]: (array[arraySize/2 - 1] + array[arraySize/2])/2)<<endl;
}
//расчет моды
void mode(int freq[], int array[], int arraySize)
{
//максимальное значение
int max=0;
cout<<"Moda\n";
for(int i=1; i<= 9; i++)
freq[i] = 0;
//подсчитываем частоту каждого элемента
for(i = 0;i<arraySize; i++)
++freq[array[i]];
cout<<"Otvet"<<setw(11)<<"Chastota"<<setw(19)<<"Gistogramma"<<endl<<endl;
cout<<endl<<endl;
for(i=1; i<=9; i++)
{
//определяем максимальное значение
cout<<setw(7)<<i<<setw(8)<<freq[i]<<" ";
if(freq[i]>max)
{
max = freq[i];
}
//рисуем гистограмму
for(int j = 1; j<=freq[i]; j++)
cout<<'*';
cout<<endl;
}
cout<<"Moda: \n";
//ищем все моды в массиве частот
for(i=1; i<=9; i++)
{
if(freq[i] == max)
cout<<"Moda ravna "<<i<<" Ona vstrechaetsa "<<max<<" raz"<<endl;
}
return;
}
