|
|||
Текст программы ⇐ ПредыдущаяСтр 2 из 2 Текст программы unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Button1: TButton; StringGrid1: TStringGrid; Button2: TButton; Label2: TLabel; Edit2: TEdit; Label3: TLabel; Edit3: TEdit; Label4: TLabel; Label5: TLabel; Edit4: TEdit; Label6: TLabel; Edit5: TEdit; Label7: TLabel; Chart1: TChart; Series1: TBarSeries; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; //объявляем количество элементов массива глобальной переменной, //чтобы ее значение было доступно во всех процедурах N : integer; implementation {$R *.dfm} // процедура кнопки «Создать таблицу для ввода» procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin N:= StrToInt(Edit1.Text ); //ввод количества элементов массива StringGrid1.Visible :=True; //делаем видимой таблицу StringGrid1.ColCount:= N+1; //количество строк в таблице Stringgrid1.ColWidths[0]:=250; //изменяем ширину 2-го столбца Stringgrid1.Cells[0,1] := 'Год'; //подписываем строки Stringgrid1.Cells[0,2] := 'Среднее время обслуживания вызова, мин'; for i:=1 to N do StringGrid1.Cells [i,0]:= IntToStr(i); end; // процедура кнопки «Расчет» procedure TForm1.Button2Click(Sender: TObject); var Year: array [1..20] of integer; //массив для хранения значений лет TimeO : array [1..20] of real; //массив для хранения значений времени PrOtn, Max, Min : real; i, Nmax, Nmin : integer; begin //вводим массивы из таблицы for i:= 1 to N do begin Year[i]:=StrToInt(StringGrid1.Cells [i,1]) ; TimeO[i]:=StrToFloat(StringGrid1.Cells [i,2]) ; end; //изменяем количество строк таблицы для вывода прироста //и подписываем строку StringGrid1.RowCount :=4; Stringgrid1.Cells[0,3] := 'Относительный прирост к пред. году'; //вычисляем прирост и выводим в таблицу for i:= 2 to N do begin PrOtn:=(TimeO[i]-TimeO[i-1])/TimeO[i-1]*100 ; StringGrid1.Cells [i,3]:= FormatFloat('0.00',PrOtn)+ ' %' ; end; //определяем максимальное и минимальное время Max:= TimeO[1]; Min:= TimeO[1]; //и номера элементов с максимальным и минимальным значениями Nmax:=1; Nmin:=1; for i:= 2 to N do if Max< TimeO[i] then Begin Max:= TimeO[i]; Nmax:=i; end else if Min> TimeO[i] then Begin Min:= TimeO[i]; Nmin:=i; end; //выводим максимальное время и год с номером Nmax Edit2.Text:= FloatToStr(Max); Edit3.Text:= IntToStr(Year[Nmax]); //выводим минимальное время и год с номером Nmin Edit4.Text:= FloatToStr(Min); Edit5.Text:= IntToStr(Year[Nmin]); //очищаем серию Series1.Clear ; //делаем видимым график Chart1.Visible:= True; for i:= 1 to N do series1.AddXY(Year[i], TimeO[i]) ; //добавляем на график точку (столбик) end; end. Рисунок 4. Результаты работы программы Для построения круговой диаграммы для добавления новой точки к серии следует применять метод Add: function Add(const AValue:Double; Const ALabel:String; AColor:TColor): LongInt где AValue – значение, добавляемое к диаграмме. ALabel - надпись значения AColor - цвет, используемый при выводе. В программе следует написать следующий цикл for i:= 1 to N do Series1.Add(TimeO[i], floattostr(Year[i]), RGB(random(256), random(256), random(256)));
Рекомендуется выполнить двойной щелчок по области построения круговой диаграммы и на вкладке Series настроить дополнительные характеристики отображения серии: · на вкладке Format можно включить опцию Circled Pie, которая обеспечит при любом размере компонента Chart отображение диаграммы в виде круга; · на вкладке Marks (рис.5) переключатели в группе Style определяют, что будет написано на выносных линия, относящихся к отдельным сегментам диаграммы: Value — значение, Percent — проценты, Label — названия данных и т.д.
Рисунок 5. Настройка характеристик отображения круговой диаграммы
|
|||
|