Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Гистрограмма


Автор: Avatar1 19.10.2012, 23:46
Для полученной последовательности вычислить среднее значение и дисперсию и вывести ее в виде гистограммы, разделив диапазон на десять интервалов. Помогите плиз с гистрограммой, ошибка, где непойму
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <math>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{const int razod =50;
 const int razdv = razod * 2;
 String perv, vtor;
 int i,j, t, n[razod], m[razod], nm[razdv];
  double  ss,sd,tak,disp,sredn;

  ss=0;
  sd=0;
  Memo1->Clear();

  srand(time(0));
  //Первая последовательность
  for(i = 0; i <razod; i++)
   perv += IntToStr( n[i] = 5 * ( rand( ) % 6 + 1 ) + 1 ) + "  ";
  Edit1->Text = perv;

  //Вторая последовательность
  for(i = 0; i < razod; i++)
   vtor += IntToStr( m[i] = 5 * ( rand( ) % 6 + 1 ) + 1 ) + "  ";
  Edit2->Text = vtor;

 
  //Общая последовательность
  for(i = 0; i < razdv; i++)
   nm[i] = (i <razod)?n[i]:m[i % razod];


  //Сортировка  по возрастанию, метод пузырька
   for (j=0; j<razdv - 1;j++)
    for(i = 0; i < razdv - 1; i++)
     {
      if(nm[i] > nm[i + 1])
       {
        t = nm[i];
        nm[i] = nm[i + 1];
        nm[i + 1] = t;
       }
     }

  
  for(i = 0; i < razdv; i++)
  {
   Form1->Memo1->Lines->Add(IntToStr(i+1)+" --- "+nm[i]); //Вывод  общая последовательность
   ss+=nm[i];                         //Числитель сумма значений
  }
  sredn=ss/razdv;                      //Среднее значение
  Edit3->Text =sredn;

  for(i = 0; i < razdv; i++)
  sd+=nm[i]*nm[i]-sredn*sredn;
  disp=sd/razdv;
  Edit4->Text =disp;

  tak=nm[0]*nm[0]-sredn*sredn;
  Edit5->Text =tak;


  //Гистрограмма 

double max, min,zh, h, interval,pro,a [10],b[10];

Chart1->Series[0]->Clear();
max=nm[1];
min=nm[1];
h=0;


     for( i=1;; i= razdv )
         if (nm[i] > max)  max= nm[i];
     
     for( i=1; ;i= razdv )
         if (nm[i] < min) min= nm[i];
 
 

     interval=max-min;
     h=interval/10;
     zh=h;
     a[0]=0;
     for (i=1;;i=10)
     a[i]=a[i-1]+h;


    for (i=1;;i=10)
    {
     for (j=1;;j=razdv)
     {
         if ((nm[j]>a[i-1]) && (nm[j]<=a[i])) b[i]=b[i]+1;
     }
          zh=h+zh;
    }
 

    for (i=1;;i=10)
        Chart1->Series[0]->AddXY(a[i], b[i]);



 }

//---------------------------------------------------------------------------

Автор: Avatar1 21.10.2012, 17:04
В гистрограмме помогите исправить по оси Х были значения (вместо интегралов), и разделены равномерно
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <math>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{const int razod =50;
 const int razdv = razod * 2;
 String perv, vtor;
 int i,j, t, n[razod], m[razod], nm[razdv];
  double  ss,sd,tak,disp,sredn;

  ss=0;
  sd=0;
  Memo1->Clear();

  srand(time(0));
  //Первая последовательность
  for(i = 0; i <razod; i++)
   perv += IntToStr( n[i] = 5 * ( rand( ) % 6 + 1 ) + 1 ) + "  ";
  Edit1->Text = perv;

  //Вторая последовательность
  for(i = 0; i < razod; i++)
   vtor += IntToStr( m[i] = 5 * ( rand( ) % 6 + 1 ) + 1 ) + "  ";
  Edit2->Text = vtor;

 
  //Общая последовательность
  for(i = 0; i < razdv; i++)
   nm[i] = (i <razod)?n[i]:m[i % razod];


  //Сортировка  по возрастанию, метод пузырька
   for (j=0; j<razdv - 1;j++)
    for(i = 0; i < razdv - 1; i++)
     {
      if(nm[i] > nm[i + 1])
       {
        t = nm[i];
        nm[i] = nm[i + 1];
        nm[i + 1] = t;
       }
     }

  
  for(i = 0; i < razdv; i++)
  {
   Form1->Memo1->Lines->Add(IntToStr(i+1)+" --- "+nm[i]); //Вывод  общая последовательность
   ss+=nm[i];                         //Числитель сумма значений
  }
  sredn=ss/razdv;                      //Среднее значение
  Edit3->Text =sredn;

  for(i = 0; i < razdv; i++)
  sd+=nm[i]*nm[i]-sredn*sredn;
  disp=sd/razdv;
  Edit4->Text =disp;

  tak=nm[0]*nm[0]-sredn*sredn;
  Edit5->Text =tak;


//Гистрограмма

double st,max, min,zh, h, interval,pro,a [10],b[10];
Chart1->Series[0]->Clear();

min=nm[0];
max=nm[0];
 for( i=1;i<razdv; i++)
 {
 if (nm[i] > max)  max= nm[i];
 if (nm[i] < min) min= nm[i];
 }
interval=max-min;
h=interval/10;
st=min;
for (j=1;j<=10; j++)
{
b[j]=0;
for( i=0;i<razdv; i++  )
{
if ((nm[i]>=st) && (nm[i]<st+h)) ++b[j];
if (nm[i]==max) ++b[10];
}
st=st+h;
}


for (i=1;i<=10; i++)
Chart1->Series[0]->AddXY(i,b[i]);
}

//---------------------------------------------------------------------------

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)