Страницы

воскресенье, 16 августа 2015 г.

Расчет среднего, медиана и мода

Разработка программы на С++ для расчета среднего, медианы и моды в массиве элементов


Среднее значение, медиана и мода ряда чисел применяются при статистической обработке данных. Создадим программу, в которой будет использоваться массив из 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;
}
Среднее, медиана и мода числового ряда