//---------------------------------------------------------------------------
// Проект 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));
}
//---------------------------------------------------------------------------
