14.10.2010, 23:05
общий
это ответ
Здравствуйте, novij2011!
Предлагаю следующий вариант решения задачи.
Код в приложении.
На форме - Button1 - расчет данных, Button2 - формирование массива
Memo1 - исходный массив Memo2 - результирующий
Chart1 - диаграмма
Stringgrid1 - отображение расчета для наглядности
Вопросы - пишите
Приложение:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DateUtils, OleServer, ExcelXP, Grids, ComCtrls, StdCtrls,
TeEngine, Series, ExtCtrls, TeeProcs, Chart;
type
TForm1 = class(TForm)
Memo1: TMemo;
Chart1: TChart;
Button1: TButton;
StringGrid1: TStringGrid;
Button2: TButton;
Series1: TPieSeries;
Memo2: TMemo;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
var
i: integer;
begin
randomize;
Memo1.Clear; //очистка форм
Memo2.Clear;
for i:= 1 to 200 do // формирование массива
Memo1.Lines.Add(Format('%6.4f', [Random]));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
temp: integer;
mas: array of integer;
begin
Memo2.Clear;
Chart1.Series[0].Clear; // очистка форм
StringGrid1.Cells[0,0]:= 'Интервал';
StringGrid1.Cells[1,0]:= 'Частота';
setlength(mas, 0);
setlength(mas, 10); //установка массива
for i:=0 to Memo1.Lines.Count - 1 do
begin
temp:= Trunc(StrToFloat(Memo1.Lines.Strings[i]) * 10); // определение принадлежности к интервалу
if temp = 10 then // при попадании числа 1.0000 присоединяем его к последнему интервалу
temp:= 9;
mas[temp]:= mas[temp] + 1;
end;
for i:= 1 to 10 do //вывод в диаграмму, Memo2 и StringGrid1
begin
Chart1.Series[0].AddXY(i, mas[i-1] / 200, Format('%3.1f', [(i - 1) / 10]) + ' - ' + Format('%3.1f', [i / 10]));
Memo2.Lines.Add('Интервал:' + Format('%3.1f', [(i - 1) / 10]) + ' - ' + Format('%3.1f', [i / 10]) + ' Вероятность: ' + Format('%5.3f', [mas[i-1] / 200]));
StringGrid1.Cells[0,i]:= Format('%3.1f', [(i - 1) / 10]) + ' - ' + Format('%3.1f', [i / 10]);
StringGrid1.Cells[1,i]:= IntToStr(mas[i-1]);
end;
end;
end.