
- •1. Анализ методов и моделей прогнозирования
- •1.1 Виды и классификация методов прогнозирования
- •1.1.1 Планирование на предприятии
- •1.1.2 Классификация методов прогнозирования по степени формализации
- •1.1.3 Классификация методов прогнозирования по источникам получения информации
- •1.1.4 Классификация методов прогнозирования финансового состояния предприятия
- •1.1.5 Классификация методов прогнозирования в системах маркетинга
- •1.2 Примеры постановок задач
- •1.3 Применение методов прогнозирования в автоматизированных системах
- •1.3.1 Система управления парус
- •1.3.2 Методы прогнозирования временных рядов, реализованные в программе ForExSal
- •1.3.3 Корпоративная система «Галактика»
- •1.4 Методы прогнозирования, применяемые для моделей с сезонной компонентой
- •1.4.1 Введение
- •1.4.2 Элементы временного ряда
- •1.4.3.1 Расчет сезонной компоненты в аддитивных моделях
- •1.4.3.2 Десезонализация данных при расчете тренда
- •1.4.3.3 Расчет ошибок
- •1.4.3.4 Прогнозирование по аддитивной модели
- •1.4.4 Анализ модели с мультипликативной компонентой
- •1.4.4.1 Расчет значений сезонной компоненты
- •1.4.4.2 Десезонализация данных и расчет уравнения тренда
- •1.4.4.4 Прогнозирование по модели с мультипликативной компонентой
- •2. Примеры применения методов технико-экономического планирования и прогнозирования для моделей с сезонной компонентой
- •2.1 Пример №1
- •2.1.1 Анализ значений квартальных объемов выпуска на основе модели с аддитивной компонентой
- •2.1.2 Нахождение прогноза объема выпуска на последний квартал третьего года
- •2.2 Пример №2
- •2.1.1 Анализ значений квартальных объемов выпуска на основе модели с аддитивной компонентой
- •2.1.2 Нахождение прогноза объема выпуска на последний квартал третьего года и первый квартал четвертого года
- •3. Программная реализация методов скользящего среднего и линейной регрессии для решения задач прогнозирования с сезонной компонентой
- •3.1 Описание программы прогнозирования спроса
- •3.2 Решение задач с использованием программы
3.2 Решение задач с использованием программы
Ниже приведены данные о прибыли компании за последние 10 кварталов (скорректированные на инфляцию).
Таблица 3.1
Год |
1991 |
1992 |
1993 | |||||||
Квартал |
1 |
2 |
3 |
4 |
1 |
2 |
3 |
4 |
1 |
2 |
Прибыль |
146 |
106 |
123 |
89 |
97 |
74 |
80 |
53 |
56 |
35 |
Требуется:
1. Рассчитать данные для построения модели временного ряда с мультипликативной компонентой.
2. Дать прогноз на 2 следующих квартала года 3.
Решим задачу с использованием программы.
1) В окне настроек выберем тип сезонов «Кварталы». Начальным периодом будет «1 квартал 1991 г.», конечным – «2 квартал 1993 г.». Выбираем их из выпадающих списков и нажимаем кнопку «Заполнить».
2) Вводим данные (прибыль) из условия задачи в соответствующие ячейки появившейся справа таблицы. С помощью переключателя выбираем тип модели «С мультипликативной компонентой» и нажимаем кнопку «Рассчитать». Окно настроек закроется, в главном окне появятся рассчитанные данные.
Таблица 3.2
Период |
Прибыль |
Итого за 4 квартала |
Скользящая средняя за 4 квартала |
Центрированная скользящая средняя |
Коэффициент сезонности |
Скорректированный коэффициент сезонности |
1 квартал 1991 г. |
146 |
|
|
|
|
1.074 |
|
|
|
|
|
|
|
2 квартал |
106 |
|
|
|
|
0.919 |
|
|
464 |
116 |
|
|
|
3 квартал |
123 |
|
|
109.875 |
1.119 |
1.125 |
|
|
415 |
103.75 |
|
|
|
4 квартал |
89 |
|
|
99.75 |
0.892 |
0.882 |
|
|
383 |
95.75 |
|
|
|
1 квартал 1992 г. |
97 |
|
|
90.375 |
1.073 |
1.074 |
|
|
340 |
85 |
|
|
|
2 квартал |
74 |
|
|
80.5 |
0.919 |
0.919 |
|
|
304 |
76 |
|
|
|
3 квартал |
80 |
|
|
70.875 |
1.129 |
1.125 |
|
|
263 |
65.75 |
|
|
|
4 квартал |
53 |
|
|
60.875 |
0.871 |
0.882 |
|
|
224 |
56 |
|
|
|
1 квартал 1993 г. |
56 |
|
|
|
|
1.074 |
|
|
|
|
|
|
|
2 квартал |
35 |
|
|
|
|
0.919 |
Таблица 3.3
Период |
Десезонализированная объем прибыли |
Данные для уравнения линии тренда |
Трендовое значение |
Ошибка | ||
T * S |
A/(T*S) |
A-(T*S) | ||||
1 квартал 1991 г. |
135.940 |
Sum(x) = 55 |
130.88351 |
140.569 |
1.039 |
+5.431 |
2 квартал |
115.343 |
Sum(x2) = 385 |
120.77142 |
110.989 |
0.955 |
-4.989 |
3 квартал |
109.333 |
Sum(y) = 853.791 |
110.65933 |
124.492 |
0.988 |
-1.492 |
4 квартал |
100.907 |
Sum(xy) = 3861.603 |
100.54724 |
88.683 |
1.004 |
+0.317 |
1 квартал 1992 г. |
90.317 |
n = 10 |
90.43515 |
97.127 |
0.999 |
-0.127 |
2 квартал |
80.522 |
b = -10.11209 |
80.32305 |
73.817 |
1.002 |
+0.183 |
3 квартал |
71.111 |
a = 140.99560 |
70.21096 |
78.987 |
1.013 |
+1.013 |
4 квартал |
60.091 |
|
60.09887 |
53.007 |
0.999 |
-0.007 |
1 квартал 1991 г. |
52.142 |
|
49.98678 |
53.686 |
1.043 |
+2.314 |
2 квартал |
38.085 |
|
39.87469 |
36.645 |
0.955 |
-1.645 |
3) Для расчета прогноза на 3-й квартал 1993 г. введем с помощью двух выпадающих списков в области для нахождения прогноза «3 квартал 1993 г.». После нажатия кнопки «Найти» на экран выведется значение предполагаемой прибыли: 33.483. Аналогично получаем прогноз на 4-й квартал 1993 г.: 17,332.
Таким образом, при помощи использования программы была рассчитана модель временного ряда с мультипликативной компонентой (см. табл. 3.2 и табл. 3.3), а также получен прогноз на следующие два квартала 1993 года: 33.483 и 17.332 соответственно.
Заключение
До настоящего времени разработано огромное количество всевозможных методов прогнозирования и планирования, что позволяет менеджерам компаний давать более точные прогнозы, если использовать их в совокупности. Это ведет к росту доходов предприятий и снижению их убытков. Преобладающее большинство методов зашито в различные программные комплексы, позволяя ещё больше упростить процесс нахождения прогнозов. Можно даже сказать, что вся работа менеджера состоит в том, чтобы выбрать наиболее подходящий программный продукт, который был бы максимально соответствующим деятельности фирмы, и в который было бы интегрировано большое количество наиболее популярных и точных методов прогнозирования.
Литературные источники
Эддоус М, Стэнсфилд Р. Методы принятия решений. М.: Юнити, 1997.-590 с.
К.Сурков, Д.Сурков, А.Вальвачев. Программирование в среде Delphi 2.0. Мн.: ООО «Попурри», 1997. – 640 с.
http://www.i-u.ru
http://masters.donntu.edu.ua
http://www.benchmarking.ru/FORECAST/forecast.htm
http://www.parus.ru
http://www.iteam.ru
http://www.mark-info.ru
http://www.kgtdv.ru
Приложение
Код программы Season Forecaster
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, Grids, StdCtrls;
type
TMainForm = class(TForm)
MainMenu: TMainMenu;
MainItem: TMenuItem;
OptionsItem: TMenuItem;
ExitItem: TMenuItem;
HelpItem: TMenuItem;
AboutItem: TMenuItem;
SeasonGrid: TStringGrid;
Label1: TLabel;
QFindBox: TComboBox;
YFindBox: TComboBox;
Find: TButton;
Prognose: TEdit;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Flag: TLabel;
Label5: TLabel;
procedure ExitItemClick(Sender: TObject);
procedure OptionsItemClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SeasonGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure FindClick(Sender: TObject);
procedure AboutItemClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
uses Unit2, Unit3;
{$R *.dfm}
procedure TMainForm.ExitItemClick(Sender: TObject);
begin
Close;
end;
procedure TMainForm.OptionsItemClick(Sender: TObject);
begin
Options.Show;
end;
procedure TMainForm.FormCreate(Sender: TObject);
var i: integer;
begin
Height := 440;
Label2.Visible := False;
Prognose.Visible := False;
Label3.Visible := False;
Label4.Visible := False;
Label5.Visible := False;
Flag.Visible := False;
SeasonGrid.Visible := False;
end;
procedure TMainForm.SeasonGridDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
var s:string;
Flag: Cardinal;
h:integer;
begin
SeasonGrid.Canvas.FillRect(Rect);
s := SeasonGrid.Cells[ACol,ARow];
Flag := DT_CENTER;
Flag := Flag or DT_WORDBREAK;
Inc(Rect.Left,2); // отступ слева
Dec(Rect.Right,2); // отступ справа
H := DrawText(SeasonGrid.Canvas.Handle,PChar(s),length(s),Rect,Flag);
if H > SeasonGrid.RowHeights[ARow] then
SeasonGrid.RowHeights[ARow] := H; //увеличиваем
end;
procedure TMainForm.FindClick(Sender: TObject);
var YStart, QStart, quarter, year, i, n: integer;
SComp: extended;
begin
If (QFindBox.Text = '') or (YFindBox.Text = '') Then Begin
ShowMessage(' Не введены данные.');
exit;
End;
Qstart := StrToInt(Copy(SeasonGrid.Cells[0,1],0,1));
YStart := StrToInt(Copy(SeasonGrid.Cells[0,1],10,5));
If QFindBox.Text = '1 квартал' Then Begin
quarter := 1;
SComp := StrToFloat(Options.Label8.Caption);
End;
If QFindBox.Text = '2 квартал' Then Begin
quarter := 2;
SComp := StrToFloat(Options.Label9.Caption);
End;
If QFindBox.Text = '3 квартал' Then Begin
quarter := 3;
SComp := StrToFloat(Options.Label10.Caption);
End;
If QFindBox.Text = '4 квартал' Then Begin
quarter := 4;
SComp := StrToFloat(Options.Label11.Caption);
End;
year := StrToInt(YFindBox.Text);
If year < YStart Then Begin
ShowMessage(' Период, на который производится прогноз, должен превышать первый период в таблице.');
exit;
End;
If year = YStart Then Begin
If Qstart > quarter then Begin
ShowMessage(' Период, на который производится прогноз, должен превышать первый период в таблице.');
exit;
End;
End;
Case QStart Of
1: n := 4 + quarter + (year - YStart - 1)*4;
2: n := 3 + quarter + (year - YStart - 1)*4;
3: n := 2 + quarter + (year - YStart - 1)*4;
4: n := 1 + quarter + (year - YStart - 1)*4;
End;
Label5.Caption := FloatToStr(SComp);
Label2.Caption := 'Прогноз на ' + QFindBox.Text + ' ' + YFindBox.Text + ' г.';
Case StrToInt(Flag.Caption) Of
1:Prognose.Text := FloatToStr(StrToFloat(Label4.Caption) + StrToFloat(Label3.Caption)*n + SComp);
2:Prognose.Text := FloatToStr((StrToFloat(Label4.Caption) + StrToFloat(Label3.Caption)*n) * SComp);
End;
Prognose.Visible := True;
Label2.Visible := True;
end;
procedure TMainForm.AboutItemClick(Sender: TObject);
begin
About.ShowModal;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Grids;
type
TOptions = class(TForm)
SeasonRadioBox: TGroupBox;
DayRadio: TRadioButton;
DecadeRadio: TRadioButton;
QuarterRadio: TRadioButton;
QuarterBox1: TComboBox;
Label1: TLabel;
YearBox1: TComboBox;
Label2: TLabel;
QuarterBox2: TComboBox;
YearBox2: TComboBox;
Fill: TButton;
Label3: TLabel;
Label4: TLabel;
DataGrid: TStringGrid;
Compute: TButton;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
ModelRadioBox: TGroupBox;
AddRadio: TRadioButton;
MultiRadio: TRadioButton;
Notice1: TLabel;
Notice2: TLabel;
procedure SeasonRadioBoxClick(Sender: TObject);
procedure FillClick(Sender: TObject);
procedure DataGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure FormCreate(Sender: TObject);
procedure ComputeClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Options: TOptions;
implementation
uses Unit1;
{$R *.dfm}
procedure TOptions.SeasonRadioBoxClick(Sender: TObject);
begin
Label1.Visible := Sender = QuarterRadio;
Label2.Visible := Sender = QuarterRadio;
QuarterBox1.Visible := Sender = QuarterRadio;
QuarterBox2.visible := Sender = QuarterRadio;
YearBox1.Visible := Sender = QuarterRadio;
YearBox2.Visible := Sender = QuarterRadio;
Fill.Visible := Sender = QuarterRadio;
Notice1.Visible := Sender = DecadeRadio;
Notice2.Visible := Sender = DayRadio;
end;
procedure TOptions.FillClick(Sender: TObject);
var QCount,i, j, i1, i2, a, b, c, year1, year2: integer;
Row_Count: integer;
season, year: string;
Label _End;
begin
//-----------Начальный период------------
For i1 := 0 to QuarterBox1.Items.Count Do Begin
Case QuarterBox1.ItemIndex of
0:Begin
a := 4;
c := 1;
End;
1:Begin
a := 3;
c := 2;
End;
2:Begin
a := 2;
c := 3;
End;
3:Begin
a := 1;
c := 4;
End;
Else
a := 0;
End;
End;
If a = 0 Then Begin
MainForm.SeasonGrid.Visible := False;
ShowMessage(' Неправильно введен период.');
exit;
End;
//------------Конечный период-----------------
For i1 := 0 to QuarterBox2.Items.Count Do Begin
Case QuarterBox2.ItemIndex of
0:b := 1;
1:b := 2;
2:b := 3;
3:b := 4;
Else
b := 0;
End;
End;
If b = 0 Then Begin
MainForm.SeasonGrid.Visible := False;
ShowMessage(' Неправильно введен период.');
exit;
End;
//----------Проверка правильности ввода периодов-----------
year1 := 0;
year2 := 0;
If (YearBox1.Text = '') or (YearBox2.Text = '') then Begin
MainForm.SeasonGrid.Visible := False;
ShowMessage(' Неправильно введен период.');
exit;
End
Else Begin
year1 := StrToInt(YearBox1.Text);
year2 := StrToInt(YearBox2.Text);
End;
If year2 < year1 Then Begin
MainForm.SeasonGrid.Visible := False;
ShowMessage(' Неправильно введен период.');
exit;
End;
If year1 = year2 Then Begin
If c > b Then Begin
MainForm.SeasonGrid.Visible := False;
ShowMessage(' Неправильно введен период.');
exit;
End;
End;
QCount := a + b + (year2 - year1)*4 - 4;
Row_Count := QCount;
MainForm.SeasonGrid.RowCount := Row_Count + 1;
DataGrid.RowCount := Row_Count + 1;
//-----------Заполнение------------
i2 := 1;
season := QuarterBox1.Text;
year := YearBox1.Text;
While i2 <= MainForm.SeasonGrid.RowCount Do Begin
If season = '1 квартал' Then Begin
MainForm.SeasonGrid.Cells[0,i2] := season + ' ' + year + ' г.';
DataGrid.Cells[0,i2] := season + ' ' + year + ' г.';
season := '2 квартал'
End
Else If season = '2 квартал' Then Begin
MainForm.SeasonGrid.Cells[0,i2] := season + ' ';
DataGrid.Cells[0,i2] := season + ' ';
season := '3 квартал';
End
Else If season = '3 квартал' Then Begin
MainForm.SeasonGrid.Cells[0,i2] := season + ' ';
DataGrid.Cells[0,i2] := season + ' ';
season := '4 квартал';
End
Else If season = '4 квартал' Then Begin
MainForm.SeasonGrid.Cells[0,i2] := season + ' ';
DataGrid.Cells[0,i2] := season + ' ';
season := '1 квартал';
year := IntToStr(StrToInt(year) + 1)
End
Else Begin
MainForm.SeasonGrid.Visible := False;
ShowMessage(' Неизвестная ошибка.');
End;
i2 := i2 + 1;
End;
MainForm.SeasonGrid.Cells[0,1] := QuarterBox1.Text + ' ' + YearBox1.Text + ' г.';
DataGrid.Cells[0,1] := QuarterBox1.Text + ' ' + YearBox1.Text + ' г.';
If MainForm.SeasonGrid.RowCount < 9 then Begin
ShowMessage(' Недостаточно данных для расчета. Попробуйте расширить диапазон.');
exit;
End;
Options.Width := 430;
DataGrid.Visible := True;
Compute.Visible := True;
DayRadio.Enabled := False;
DecadeRadio.Enabled := False;
QuarterRadio.Enabled := False;
ModelRadioBox.Visible := True;
QuarterBox1.Enabled := False;
QuarterBox2.Enabled := False;
YearBox1.Enabled := False;
YearBox2.Enabled := False;
Fill.Enabled := False;
_End:end; //Конец процедуры
procedure TOptions.DataGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var s:string;
Flag: Cardinal;
h, i:integer;
begin
DataGrid.Canvas.FillRect(Rect);
s := DataGrid.Cells[ACol,ARow];
Flag := DT_CENTER;
Flag := Flag or DT_WORDBREAK;
Inc(Rect.Left,2); // отступ слева
Dec(Rect.Right,2); // отступ справа
H := DrawText(DataGrid.Canvas.Handle,PChar(s),length(s),Rect,Flag);
if H > DataGrid.RowHeights[ARow] then
DataGrid.RowHeights[ARow] := H; //увеличиваем
end;
procedure TOptions.FormCreate(Sender: TObject);
begin
DataGrid.Visible := False;
DataGrid.Width := 181;
DataGrid.Cells[0,0] := 'Период';
DataGrid.Cells[1,0] := 'Данные на период';
DataGrid.ColWidths[0] := 95;
DataGrid.ColWidths[1] := 80;
Width := 240;
Compute.Visible := False;
ModelRadioBox.Visible := False;
Label3.Visible := False;
Label4.Visible := False;
Label5.Visible := False;
Label6.Visible := False;
Label7.Visible := False;
Label8.Visible := False;
Label9.Visible := False;
Label10.Visible := False;
Label11.Visible := False;
Notice1.Visible := False;
Notice2.Visible := False;
Notice1.Caption := 'Недоступно в данной версии программы.';
Notice2.Caption := 'Недоступно в данной версии программы.';
end;
procedure TOptions.ComputeClick(Sender: TObject);
var i, j, count, n: integer;
plus, a, b, x, x2, y, T, xy: extended;
Label _End, _AddStart, _MultiStart;
begin
For i := 1 to (DataGrid.RowCount - 1) Do Begin
Try
MainForm.SeasonGrid.Cells[1,i] := FloatToStr(StrToFloat(DataGrid.Cells[1,i]));
Except
ShowMessage(' Неправильно введены данные.');
exit;
End;
End;
//--------Итого за 4 квартала--------
For i := 1 to (MainForm.SeasonGrid.RowCount - 4) Do Begin
MainForm.SeasonGrid.Cells[2,i] := FloatToStr(StrToFloat(MainForm.SeasonGrid.Cells[1,i]) +
StrToFloat(MainForm.SeasonGrid.Cells[1,i+1]) + StrToFloat(MainForm.SeasonGrid.Cells[1,i+2]) +
StrToFloat(MainForm.SeasonGrid.Cells[1,i+3]));
End;
//--------Скользящая средняя за 4 квартала--------
For i := 1 to (MainForm.SeasonGrid.RowCount - 4) Do Begin
MainForm.SeasonGrid.Cells[3,i] := FloatToStr(StrToFloat(MainForm.SeasonGrid.Cells[2,i]) / 4);
End;
//-----Центрированная скользящая средняя----------
For i := 1 to (MainForm.SeasonGrid.RowCount - 5) Do Begin
MainForm.SeasonGrid.Cells[4,i+2] := FloatToStr((StrToFloat(MainForm.SeasonGrid.Cells[3,i])
+ StrToFloat(MainForm.SeasonGrid.Cells[3,i+1])) / 2);
End;
If AddRadio.Checked = True then
GoTo _AddStart
Else
Goto _MultiStart;
_AddStart:
MainForm.SeasonGrid.ColWidths[0] := 95;
MainForm.SeasonGrid.ColWidths[1] := 60;
MainForm.SeasonGrid.ColWidths[2] := 80;
MainForm.SeasonGrid.ColWidths[3] := 80;
MainForm.SeasonGrid.ColWidths[4] := 90;
MainForm.SeasonGrid.ColWidths[5] := 80;
MainForm.SeasonGrid.ColWidths[6] := 70;
MainForm.SeasonGrid.ColWidths[7] := 130;
MainForm.SeasonGrid.ColWidths[8] := 110;
MainForm.SeasonGrid.ColWidths[9] := 70;
MainForm.SeasonGrid.ColWidths[10] := 55;
MainForm.SeasonGrid.RowHeights[0] := 30;
MainForm.SeasonGrid.Cells[0,0] := 'Период';
MainForm.SeasonGrid.Cells[1,0] := 'Объем продаж';
MainForm.SeasonGrid.Cells[2,0] := 'Итого за 4 квартала';
MainForm.SeasonGrid.Cells[3,0] := 'Скользящая средняя за 4 квартала';
MainForm.SeasonGrid.Cells[4,0] := 'Центрированная скользящая средняя';
MainForm.SeasonGrid.Cells[5,0] := 'Оценка сезонной компоненты';
MainForm.SeasonGrid.Cells[6,0] := 'Сезонная компонента';
MainForm.SeasonGrid.Cells[7,0] := 'Десезонализированный объем продаж';
MainForm.SeasonGrid.Cells[8,0] := 'Данные для уравнения линии тренда';
MainForm.SeasonGrid.Cells[9,0] := 'Трендовое значение';
MainForm.SeasonGrid.Cells[10,0] := 'Ошибка';
MainForm.Flag.Caption := '1';
//----------Оценка сезонной компоненты---------------
For i := 1 to (MainForm.SeasonGrid.RowCount - 5) Do Begin
MainForm.SeasonGrid.Cells[5,i+2] := FloatToStr(StrToFloat(MainForm.SeasonGrid.Cells[1,i+2])
- StrToFloat(MainForm.SeasonGrid.Cells[4,i+2]));
If StrToFloat(MainForm.SeasonGrid.Cells[5,i+2]) > 0 Then
MainForm.SeasonGrid.Cells[5,i+2] := '+' + MainForm.SeasonGrid.Cells[5,i+2];
End;
//----------Средние значения сезонной компоненты--------
Case StrToInt(Copy(MainForm.SeasonGrid.Cells[0,3],0,1)) Of
//--------Если первым периодом является первый квартал:------------
3:Begin
count := 0;
j := 3;
Label3.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label3.Caption := FloatToStr(StrToFloat(Label3.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label3.Caption := FloatToStrF((StrToFloat(Label3.Caption) / count),fffixed,8,3);
count := 0;
j := 4;
Label4.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label4.Caption := FloatToStr(StrToFloat(Label4.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label4.Caption := FloatToStrF((StrToFloat(Label4.Caption) / count),fffixed,8,3);
count := 0;
j := 5;
Label5.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label5.Caption := FloatToStr(StrToFloat(Label5.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label5.Caption := FloatToStrF((StrToFloat(Label5.Caption) / count),fffixed,8,3);
count := 0;
j := 6;
Label6.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label6.Caption := FloatToStr(StrToFloat(Label6.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label6.Caption := FloatToStrF((StrToFloat(Label6.Caption) / count),fffixed,8,3);
End;
//--------Если первым периодом является второй квартал:------------
4:Begin
count := 0;
j := 3;
Label4.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label4.Caption := FloatToStr(StrToFloat(Label4.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label4.Caption := FloatToStrF((StrToFloat(Label4.Caption) / count),fffixed,8,3);
count := 0;
j := 4;
Label5.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label5.Caption := FloatToStr(StrToFloat(Label5.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label5.Caption := FloatToStrF((StrToFloat(Label5.Caption) / count),fffixed,8,3);
count := 0;
j := 5;
Label6.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label6.Caption := FloatToStr(StrToFloat(Label6.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label6.Caption := FloatToStrF((StrToFloat(Label6.Caption) / count),fffixed,8,3);
count := 0;
j := 6;
Label3.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label3.Caption := FloatToStr(StrToFloat(Label3.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label3.Caption := FloatToStrF((StrToFloat(Label3.Caption) / count),fffixed,8,3);
End;
//--------Если первым периодом является третий квартал:------------
1:Begin
count := 0;
j := 3;
Label5.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label5.Caption := FloatToStr(StrToFloat(Label5.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label5.Caption := FloatToStrF((StrToFloat(Label5.Caption) / count),fffixed,8,3);
count := 0;
j := 4;
Label6.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label6.Caption := FloatToStr(StrToFloat(Label6.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label6.Caption := FloatToStrF((StrToFloat(Label6.Caption) / count),fffixed,8,3);
count := 0;
j := 5;
Label3.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label3.Caption := FloatToStr(StrToFloat(Label3.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label3.Caption := FloatToStrF((StrToFloat(Label3.Caption) / count),fffixed,8,3);
count := 0;
j := 6;
Label4.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label4.Caption := FloatToStr(StrToFloat(Label4.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label4.Caption := FloatToStrF((StrToFloat(Label4.Caption) / count),fffixed,8,3);
End;
//--------Если первым периодом является четвертый квартал:------------
2:Begin
count := 0;
j := 3;
Label6.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label6.Caption := FloatToStr(StrToFloat(Label6.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label6.Caption := FloatToStrF((StrToFloat(Label6.Caption) / count),fffixed,8,3);
count := 0;
j := 4;
Label3.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label3.Caption := FloatToStr(StrToFloat(Label3.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label3.Caption := FloatToStrF((StrToFloat(Label3.Caption) / count),fffixed,8,3);
count := 0;
j := 5;
Label4.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label4.Caption := FloatToStr(StrToFloat(Label4.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label4.Caption := FloatToStrF((StrToFloat(Label4.Caption) / count),fffixed,8,3);
count := 0;
j := 6;
Label5.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label5.Caption := FloatToStr(StrToFloat(Label5.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label5.Caption := FloatToStrF((StrToFloat(Label5.Caption) / count),fffixed,8,3);
End;
End;//---------Конец CASE-----------
//--------Сумма оценок средних значений сезонной компоненты-------------
Label7.Caption := FloatToStr(StrToFloat(Label3.Caption) +
StrToFloat(Label4.Caption) + StrToFloat(Label5.Caption) +
StrToFloat(Label6.Caption));
//--------Корректировка средних значений сезонной компоненты----------
plus := StrToFloat(Label7.Caption) / 4;
If StrToFloat(Label7.Caption) > 0 Then Begin
Label8.Caption := FloatToStrF(StrToFloat(Label5.Caption) - plus,fffixed,8,3);
Label9.Caption := FloatToStrF(StrToFloat(Label6.Caption) - plus,fffixed,8,3);
Label10.Caption := FloatToStrF(StrToFloat(Label3.Caption) - plus,fffixed,8,3);
Label11.Caption := FloatToStrF(StrToFloat(Label4.Caption) - plus,fffixed,8,3);
End
Else Begin
Label8.Caption := FloatToStrF(StrToFloat(Label5.Caption) + plus,fffixed,8,3);
Label9.Caption := FloatToStrF(StrToFloat(Label6.Caption) + plus,fffixed,8,3);
Label10.Caption := FloatToStrF(StrToFloat(Label3.Caption) + plus,fffixed,8,3);
Label11.Caption := FloatToStrF(StrToFloat(Label4.Caption) + plus,fffixed,8,3);
End;
//------Вывод сезонной компоненты в SeasonGrid-----------
i := 1;
While i <= MainForm.SeasonGrid.RowCount Do Begin
MainForm.SeasonGrid.Cells[6,i] := Label8.Caption;
MainForm.SeasonGrid.Cells[6,i+1] := Label9.Caption;
MainForm.SeasonGrid.Cells[6,i+2] := Label10.Caption;
MainForm.SeasonGrid.Cells[6,i+3] := Label11.Caption;
i := i + 4;
End;
For i := 1 to MainForm.SeasonGrid.RowCount Do Begin
If StrToFloat(MainForm.SeasonGrid.Cells[6,i]) > 0 Then
MainForm.SeasonGrid.Cells[6,i] := '(+' + MainForm.SeasonGrid.Cells[6,i] + ')'
Else
MainForm.SeasonGrid.Cells[6,i] := '(' + MainForm.SeasonGrid.Cells[6,i] + ')';
End;
//----------Десезонализированный объем продаж-------------
For i := 1 to (MainForm.SeasonGrid.RowCount - 1) Do Begin
MainForm.SeasonGrid.Cells[7,i] := FloatToStr(StrToFloat(MainForm.SeasonGrid.Cells[1,i]) -
StrToFloat(Copy(MainForm.SeasonGrid.Cells[6,i],2,Length(MainForm.SeasonGrid.Cells[6,i])-2)));
End;
//-----------Расчет данных для уравнения линии тренда--------
x := 0;
For i := 1 to (MainForm.SeasonGrid.RowCount - 1) Do Begin
x := x + i;
End;
MainForm.SeasonGrid.Cells[8,1] := 'Sum(x) = ' + FloatToStr(x);
x2 := 0;
For i := 1 to (MainForm.SeasonGrid.RowCount - 1) Do Begin
x2 := x2 + i*i;
End;
MainForm.SeasonGrid.Cells[8,2] := 'Sum(x^2) = ' + FloatToStr(x2);
y := 0;
For i := 1 to (MainForm.SeasonGrid.RowCount - 1) Do Begin
y := y + StrToFloat(MainForm.SeasonGrid.Cells[7,i]);
End;
MainForm.SeasonGrid.Cells[8,3] := 'Sum(y) = ' + FloatToStr(y);
xy := 0;
For i := 1 to (MainForm.SeasonGrid.RowCount - 1) Do Begin
xy := xy + StrToFloat(MainForm.SeasonGrid.Cells[7,i])*i;
End;
MainForm.SeasonGrid.Cells[8,4] := 'Sum(xy) = ' + FloatToStr(xy);
MainForm.SeasonGrid.Cells[8,5] := 'n = ' + FloatToStr(MainForm.SeasonGrid.RowCount - 1);
n := MainForm.SeasonGrid.RowCount - 1;
b := (n*xy - x*y)/(n*x2 - x*x);
a := y/n - (b*x)/n;
MainForm.SeasonGrid.Cells[8,6] := 'b = ' + FloatToStrF(b,fffixed,8,5);
MainForm.SeasonGrid.Cells[8,7] := 'a = ' + FloatToStrF(a,fffixed,8,5);
MainForm.Label3.Caption := FloatToStrF(b,fffixed,8,5);
MainForm.Label4.Caption := FloatToStrF(a,fffixed,8,5);
//--------Трендовое значение------------
For i := 1 to (MainForm.SeasonGrid.RowCount - 1) Do Begin
MainForm.SeasonGrid.Cells[9,i] := FloatToStrF(a + b*i,fffixed,8,5);
End;
//--------------Ошибка-------------------
For i := 1 to (MainForm.SeasonGrid.RowCount - 1) Do Begin
MainForm.SeasonGrid.Cells[10,i] := FloatToStrF(StrToFloat(MainForm.SeasonGrid.Cells[7,i]) -
StrToFloat(MainForm.SeasonGrid.Cells[9,i]),fffixed,8,5);
End;
MainForm.Height := 525;
MainForm.SeasonGrid.Visible := True;
AddRadio.Enabled := False;
MultiRadio.Enabled := False;
Compute.Enabled := False;
GoTo _End;
_MultiStart:
MainForm.SeasonGrid.ColCount := 13;
MainForm.SeasonGrid.ColWidths[0] := 95;
MainForm.SeasonGrid.ColWidths[1] := 60;
MainForm.SeasonGrid.ColWidths[2] := 80;
MainForm.SeasonGrid.ColWidths[3] := 80;
MainForm.SeasonGrid.ColWidths[4] := 90;
MainForm.SeasonGrid.ColWidths[5] := 80;
MainForm.SeasonGrid.ColWidths[6] := 110;
MainForm.SeasonGrid.ColWidths[7] := 130;
MainForm.SeasonGrid.ColWidths[8] := 110;
MainForm.SeasonGrid.ColWidths[9] := 70;
MainForm.SeasonGrid.ColWidths[10] := 55;
MainForm.SeasonGrid.ColWidths[10] := 70;
MainForm.SeasonGrid.ColWidths[11] := 70;
MainForm.SeasonGrid.ColWidths[12] := 70;
MainForm.SeasonGrid.RowHeights[0] := 30;
MainForm.SeasonGrid.Cells[0,0] := 'Период';
MainForm.SeasonGrid.Cells[1,0] := 'Объем продаж';
MainForm.SeasonGrid.Cells[2,0] := 'Итого за 4 квартала';
MainForm.SeasonGrid.Cells[3,0] := 'Скользящая средняя за 4 квартала';
MainForm.SeasonGrid.Cells[4,0] := 'Центрированная скользящая средняя';
MainForm.SeasonGrid.Cells[5,0] := 'Коэффициент сезонности';
MainForm.SeasonGrid.Cells[6,0] := 'Скорректированный коэффициент сезонности';
MainForm.SeasonGrid.Cells[7,0] := 'Десезонализированный объем продаж';
MainForm.SeasonGrid.Cells[8,0] := 'Данные для уравнения линии тренда';
MainForm.SeasonGrid.Cells[9,0] := 'Трендовое значение';
MainForm.SeasonGrid.Cells[10,0] := ' (Ошибка) T * S';
MainForm.SeasonGrid.Cells[11,0] := ' (Ошибка) A / (T * S)';
MainForm.SeasonGrid.Cells[12,0] := ' (Ошибка) A - (T * S)';
MainForm.Flag.Caption := '2';
//--------Коэффициент сезонности----------
For i := 1 to (MainForm.SeasonGrid.RowCount - 5) Do Begin
MainForm.SeasonGrid.Cells[5,i+2] := FloatToStrF(StrToFloat(MainForm.SeasonGrid.Cells[1,i+2])
/ StrToFloat(MainForm.SeasonGrid.Cells[4,i+2]),fffixed,8,3);
End;
//--------Средние значения коэффициента сезонности--------
Case StrToInt(Copy(MainForm.SeasonGrid.Cells[0,3],0,1)) Of
//--------Если первым периодом является первый квартал:------------
3:Begin
count := 0;
j := 3;
Label3.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label3.Caption := FloatToStr(StrToFloat(Label3.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label3.Caption := FloatToStrF((StrToFloat(Label3.Caption) / count),fffixed,8,3);
count := 0;
j := 4;
Label4.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label4.Caption := FloatToStr(StrToFloat(Label4.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label4.Caption := FloatToStrF((StrToFloat(Label4.Caption) / count),fffixed,8,3);
count := 0;
j := 5;
Label5.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label5.Caption := FloatToStr(StrToFloat(Label5.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label5.Caption := FloatToStrF((StrToFloat(Label5.Caption) / count),fffixed,8,3);
count := 0;
j := 6;
Label6.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label6.Caption := FloatToStr(StrToFloat(Label6.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label6.Caption := FloatToStrF((StrToFloat(Label6.Caption) / count),fffixed,8,3);
End;
//--------Если первым периодом является второй квартал:------------
4:Begin
count := 0;
j := 3;
Label4.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label4.Caption := FloatToStr(StrToFloat(Label4.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label4.Caption := FloatToStrF((StrToFloat(Label4.Caption) / count),fffixed,8,3);
count := 0;
j := 4;
Label5.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label5.Caption := FloatToStr(StrToFloat(Label5.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label5.Caption := FloatToStrF((StrToFloat(Label5.Caption) / count),fffixed,8,3);
count := 0;
j := 5;
Label6.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label6.Caption := FloatToStr(StrToFloat(Label6.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label6.Caption := FloatToStrF((StrToFloat(Label6.Caption) / count),fffixed,8,3);
count := 0;
j := 6;
Label3.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label3.Caption := FloatToStr(StrToFloat(Label3.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label3.Caption := FloatToStrF((StrToFloat(Label3.Caption) / count),fffixed,8,3);
End;
//--------Если первым периодом является третий квартал:------------
1:Begin
count := 0;
j := 3;
Label5.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label5.Caption := FloatToStr(StrToFloat(Label5.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label5.Caption := FloatToStrF((StrToFloat(Label5.Caption) / count),fffixed,8,3);
count := 0;
j := 4;
Label6.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label6.Caption := FloatToStr(StrToFloat(Label6.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label6.Caption := FloatToStrF((StrToFloat(Label6.Caption) / count),fffixed,8,3);
count := 0;
j := 5;
Label3.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label3.Caption := FloatToStr(StrToFloat(Label3.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label3.Caption := FloatToStrF((StrToFloat(Label3.Caption) / count),fffixed,8,3);
count := 0;
j := 6;
Label4.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label4.Caption := FloatToStr(StrToFloat(Label4.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label4.Caption := FloatToStrF((StrToFloat(Label4.Caption) / count),fffixed,8,3);
End;
//--------Если первым периодом является четвертый квартал:------------
2:Begin
count := 0;
j := 3;
Label6.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label6.Caption := FloatToStr(StrToFloat(Label6.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label6.Caption := FloatToStrF((StrToFloat(Label6.Caption) / count),fffixed,8,3);
count := 0;
j := 4;
Label3.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label3.Caption := FloatToStr(StrToFloat(Label3.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label3.Caption := FloatToStrF((StrToFloat(Label3.Caption) / count),fffixed,8,3);
count := 0;
j := 5;
Label4.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label4.Caption := FloatToStr(StrToFloat(Label4.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label4.Caption := FloatToStrF((StrToFloat(Label4.Caption) / count),fffixed,8,3);
count := 0;
j := 6;
Label5.Caption := '0';
While (MainForm.SeasonGrid.Cells[5,j] <> '') Do Begin
Label5.Caption := FloatToStr(StrToFloat(Label5.Caption) + StrToFloat(MainForm.SeasonGrid.Cells[5,j]));
j := j + 4;
count := count + 1;
End;
Label5.Caption := FloatToStrF((StrToFloat(Label5.Caption) / count),fffixed,8,3);
End;
End;//---------Конец CASE-----------
//--------Сумма оценок средних значений коэффициента сезонности-------------
Label7.Caption := FloatToStr(StrToFloat(Label3.Caption) +
StrToFloat(Label4.Caption) + StrToFloat(Label5.Caption) +
StrToFloat(Label6.Caption));
//--------Корректировка средних значений коэффициента сезонности----------
plus := 4 / StrToFloat(Label7.Caption);
Label8.Caption := FloatToStrF(StrToFloat(Label5.Caption) * plus,fffixed,8,3);
Label9.Caption := FloatToStrF(StrToFloat(Label6.Caption) * plus,fffixed,8,3);
Label10.Caption := FloatToStrF(StrToFloat(Label3.Caption) * plus,fffixed,8,3);
Label11.Caption := FloatToStrF(StrToFloat(Label4.Caption) * plus,fffixed,8,3);
//------Вывод скорректированного коэффициента сезонности в SeasonGrid-----------
i := 1;
While i <= MainForm.SeasonGrid.RowCount Do Begin
MainForm.SeasonGrid.Cells[6,i] := Label8.Caption;
MainForm.SeasonGrid.Cells[6,i+1] := Label9.Caption;
MainForm.SeasonGrid.Cells[6,i+2] := Label10.Caption;
MainForm.SeasonGrid.Cells[6,i+3] := Label11.Caption;
i := i + 4;
End;
//----------Десезонализированный объем продаж-------------
For i := 1 to (MainForm.SeasonGrid.RowCount - 1) Do Begin
MainForm.SeasonGrid.Cells[7,i] := FloatToStrF(StrToFloat(MainForm.SeasonGrid.Cells[1,i]) /
StrToFloat(MainForm.SeasonGrid.Cells[6,i]),fffixed,8,3);
End;
//-----------Расчет данных для уравнения линии тренда--------
x := 0;
For i := 1 to (MainForm.SeasonGrid.RowCount - 1) Do Begin
x := x + i;
End;
MainForm.SeasonGrid.Cells[8,1] := 'Sum(x) = ' + FloatToStr(x);
x2 := 0;
For i := 1 to (MainForm.SeasonGrid.RowCount - 1) Do Begin
x2 := x2 + i*i;
End;
MainForm.SeasonGrid.Cells[8,2] := 'Sum(x^2) = ' + FloatToStr(x2);
y := 0;
For i := 1 to (MainForm.SeasonGrid.RowCount - 1) Do Begin
y := y + StrToFloat(MainForm.SeasonGrid.Cells[7,i]);
End;
MainForm.SeasonGrid.Cells[8,3] := 'Sum(y) = ' + FloatToStr(y);
xy := 0;
For i := 1 to (MainForm.SeasonGrid.RowCount - 1) Do Begin
xy := xy + StrToFloat(MainForm.SeasonGrid.Cells[7,i])*i;
End;
MainForm.SeasonGrid.Cells[8,4] := 'Sum(xy) = ' + FloatToStr(xy);
MainForm.SeasonGrid.Cells[8,5] := 'n = ' + FloatToStr(MainForm.SeasonGrid.RowCount - 1);
n := MainForm.SeasonGrid.RowCount - 1;
b := (n*xy - x*y)/(n*x2 - x*x);
a := y/n - (b*x)/n;
MainForm.SeasonGrid.Cells[8,6] := 'b = ' + FloatToStrF(b,fffixed,8,5);
MainForm.SeasonGrid.Cells[8,7] := 'a = ' + FloatToStrF(a,fffixed,8,5);
MainForm.Label3.Caption := FloatToStrF(b,fffixed,8,5);
MainForm.Label4.Caption := FloatToStrF(a,fffixed,8,5);
//--------Трендовое значение------------
For i := 1 to (MainForm.SeasonGrid.RowCount - 1) Do Begin
MainForm.SeasonGrid.Cells[9,i] := FloatToStrF(a + b*i,fffixed,8,5);
End;
//--------------Ошибка-------------------
For i := 1 to (MainForm.SeasonGrid.RowCount - 1) Do Begin
MainForm.SeasonGrid.Cells[10,i] := FloatToStrF(StrToFloat(MainForm.SeasonGrid.Cells[9,i]) * StrToFloat(MainForm.SeasonGrid.Cells[6,i]),fffixed,8,5);
MainForm.SeasonGrid.Cells[11,i] := FloatToStrF(StrToFloat(MainForm.SeasonGrid.Cells[1,i]) / StrToFloat(MainForm.SeasonGrid.Cells[10,i]),fffixed,8,5);
MainForm.SeasonGrid.Cells[12,i] := FloatToStrF(StrToFloat(MainForm.SeasonGrid.Cells[1,i]) - StrToFloat(MainForm.SeasonGrid.Cells[10,i]),fffixed,8,5);
If StrToFloat(MainForm.SeasonGrid.Cells[12,i]) > 0 Then
MainForm.SeasonGrid.Cells[12,i] := '+' + MainForm.SeasonGrid.Cells[12,i];
End;
MainForm.Height := 525;
MainForm.SeasonGrid.Visible := True;
AddRadio.Enabled := False;
MultiRadio.Enabled := False;
Compute.Enabled := False;
GoTo _End;
_End:
Options.Hide;
end;
end.