Задача
Посчитать основные статистики по списку чисел, введённых построчно.
Компоненты на форме
Memo (MemoNums), Button (ButtonCalc), Memo (MemoOut).
Как работает
- Прочитать числа из Memo, пропуская пустые строки.
- Найти среднее, минимум и максимум.
- Посчитать среднеквадратичное отклонение.
Исходный код модуля
//---------------------------------------------------------------------------
// Проект 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.