Cześć. Pisałem program w Borland C++ Builderze 6, którego zadaniem jest rysowanie histogramu. Fragment kodu (wykonuje się po wciśnięciu przycisku):
void __fastcall TForm1::Button2Click(TObject *Sender)
{
double min, max, d, n;
vector<int> p (1);
vector<int> przedzialyp (1);
vector<int> przedzialyk (1);
lista.sort();
min = lista.front();
max = lista.back();
lpomiarow = lista.size();
n = floor(sqrt(lpomiarow));
d = (max - min)/n;
int lklas = Edit1 -> Text.ToInt();
przedzialyp[0] = min;
for(int i=1; i<lklas; i++)
{
przedzialyp[i] = przedzialyp[i-1] + d;
}
for(int i=0; i<lklas; i++)
{
przedzialyk[i] = przedzialyp[i] + d;
}
for (list<double>::iterator i = lista.begin(); i!= lista.end(); ++i)
{
for(int j = 0; j < lklas; j++)
{
if((*i >= przedzialyp[j])&&(*i < przedzialyk[j]))
{
p[j]++;
}
else if ((*i==max)) p[j]++;
}
}
for(int i=0;i<n;i++)
{
Chart1->Series[0]->Add(p[i], "", clRed);
}
}
Wcześniej próbowałem też wersję w której liczba klas nie była pobierana od usera, ale była równa wartości zmiennej n. Niestety, przy niektórych wartościach jest dobry histogram, ale przy innych pojawia się dziwny. Co jest nie tak?
n = floor(sqrt(lpomiarow));
?