AFON//Радиотехник
C++Builder · проект 30/50

Статистика по числам

Среднее, минимум, максимум, СКО.

Задача

Посчитать основные статистики по списку чисел, введённых построчно.

Компоненты на форме

Memo (MemoNums), Button (ButtonCalc), Memo (MemoOut).

Как работает

  1. Прочитать числа из Memo, пропуская пустые строки.
  2. Найти среднее, минимум и максимум.
  3. Посчитать среднеквадратичное отклонение.

Исходный код модуля

//---------------------------------------------------------------------------
// Проект 30. Статистика по числам
// Среднее, минимум, максимум и СКО из списка.
//---------------------------------------------------------------------------
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------

// Читаем числа из Memo (по строке), считаем среднее, экстремумы и
// среднеквадратичное отклонение. Ядро stats проверяется тестом.
struct Stat { int n; double mean, mn, mx, sd; };
Stat stats(double *v, int n)
{
    Stat s; s.n=n; s.mean=s.mn=s.mx=s.sd=0;
    if (n<=0) return s;
    s.mn=s.mx=v[0]; double sum=0;
    for (int i=0;i<n;i++){ sum+=v[i]; if(v[i]<s.mn)s.mn=v[i]; if(v[i]>s.mx)s.mx=v[i]; }
    s.mean=sum/n;
    double q=0; for (int i=0;i<n;i++){ double d=v[i]-s.mean; q+=d*d; }
    s.sd=sqrt(q/n);
    return s;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonCalcClick(TObject *Sender)
{
    double v[1024]; int n=0;
    for (int i=0;i<MemoNums->Lines->Count && n<1024;i++){
        AnsiString t=MemoNums->Lines->Strings[i].Trim();
        if (t.IsEmpty()) continue;
        try { v[n++]=StrToFloat(t); } catch(...){}
    }
    Stat s=stats(v,n);
    MemoOut->Lines->Clear();
    MemoOut->Lines->Add("Количество: " + IntToStr(s.n));
    MemoOut->Lines->Add("Среднее:    " + FormatFloat("0.####", s.mean));
    MemoOut->Lines->Add("Минимум:    " + FormatFloat("0.####", s.mn));
    MemoOut->Lines->Add("Максимум:   " + FormatFloat("0.####", s.mx));
    MemoOut->Lines->Add("СКО:        " + FormatFloat("0.####", s.sd));
}
//---------------------------------------------------------------------------

Пояснения

  • СКО считается как корень из среднего квадрата отклонений.
  • Ядро stats проверено тестом на классической выборке.
📦 help-user.ru — срочный ремонт компьютеров и восстановление данных в Москве: help-user.ru.

Что дальше

Создайте в C++Builder новый проект, разместите перечисленные компоненты и вставьте код модуля. Остальные 49 программ — в разделе проектов на C++Builder; смотрите также обзор среды и контроллеры AVR.