![]() |
|
|
#1
|
|||
|
|||
|
Здравствуйте, ребят подскажите пожалуйста мучаюсь уже не первый час! Как мне это реализовать в Delphi? Куда именно это написать -(
Код:
procedure Tform1.Regress(num: integer); {num кол-во элементов}
var
a, b, x_avg, y_avg, temp, temp2, cor: real;
t, min, max: integer;
ch: char;
begin
y_avg := 0;
x_avg := 0;
for t := 1 to num do
begin
y_avg := y_avg + StrToFloat(StringGrid1.Cells[t,1]);
x_avg := x_avg + StrToFloat(StringGrid1.Cells[t,0]);
end;
x_avg := x_avg/num;
y_avg := y_avg/num;
temp := 0; temp2 := 0;
for t := 1 to num do
begin
temp := temp +(StrToFloat(StringGrid1.Cells[t,1]) - y_avg)*(StrToFloat(StringGrid1.Cells[t,0])-x_avg);
temp2 := temp2 +(t - x_avg)*(t-x_avg);
end;
b := temp/temp2;
a := y_avg-(b*x_avg);
Image1.Canvas.Brush.Color:=clWhite;
Image1.Canvas.Pen.Color:=clWhite;
Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
Image1.Canvas.Brush.Color:=clRed;
Image1.Canvas.Pen.Color:=clRed;
For t:=1 to num do
image1.Canvas.Ellipse(Trunc(StrToFloat(StringGrid1.Cells[t,0]))-2,Image1.Height -Trunc(StrToFloat(StringGrid1.Cells[t,1]))-2,
Trunc(StrToFloat(StringGrid1.Cells[t,0]))+2,Image1.Height -Trunc(StrToFloat(StringGrid1.Cells[t,1]))+2);
Image1.Canvas.Pen.Color:=clBlack;
image1.Canvas.MoveTo(1, Image1.Height - Trunc(a+b));
image1.Canvas.LineTo(100,Image1.Height - Trunc(a+b*100));
Label2.Caption:='Y = '+FloatToStr(Trunc(b*100)/100)+'x + '+FloatToStr(Trunc(a*100)/100);
end; |
|
#2
|
|||
|
|||
|
Поможет кто? Не особо понимаю куда эту процедуру надо вписать ((
|
|
#3
|
|||
|
|||
|
в модуль формы Form1 перед End.
в описание формы вписать : Код:
procedure Regress(num: integer); Код:
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
sNotebook1: TsNotebook;
sLabel1: TsLabel;
Image1: TImage;
Button1: TButton;
Image2: TImage;
Button2: TButton;
Notebook1: TNotebook;
BitBtn2: TBitBtn;
StringGrid1: TStringGrid;
procedure Regress(num: integer);
procedure BitBtn1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;для вызова процедуры в обработчике события кнопки (например) вызываете по ее имени! |
|
#4
|
|||
|
|||
|
Цитата:
|
|
#5
|
|||
|
|||
|
остальное это что? конкретнее пожалуйста!
|
|
#6
|
|||
|
|||
|
Цитата:
Код:
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
sNotebook1: TsNotebook;
sLabel1: TsLabel;
Image1: TImage;
Button1: TButton;
Image2: TImage;
Button2: TButton;
Notebook1: TNotebook;
BitBtn2: TBitBtn;
StringGrid1: TStringGrid;
procedure Regress(num: integer);
procedure BitBtn1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;Код:
var
a, b, x_avg, y_avg, temp, temp2, cor: real;
t, min, max: integer;
ch: char;
begin
y_avg := 0;
x_avg := 0;
for t := 1 to num do
begin
y_avg := y_avg + StrToFloat(StringGrid1.Cells[t,1]);
x_avg := x_avg + StrToFloat(StringGrid1.Cells[t,0]);
end;
x_avg := x_avg/num;
y_avg := y_avg/num;
temp := 0; temp2 := 0;
for t := 1 to num do
begin
temp := temp +(StrToFloat(StringGrid1.Cells[t,1]) - y_avg)*(StrToFloat(StringGrid1.Cells[t,0])-x_avg);
temp2 := temp2 +(t - x_avg)*(t-x_avg);
end;
b := temp/temp2;
a := y_avg-(b*x_avg);
Image1.Canvas.Brush.Color:=clWhite;
Image1.Canvas.Pen.Color:=clWhite;
Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
Image1.Canvas.Brush.Color:=clRed;
Image1.Canvas.Pen.Color:=clRed;
For t:=1 to num do
image1.Canvas.Ellipse(Trunc(StrToFloat(StringGrid1.Cells[t,0]))-2,Image1.Height -Trunc(StrToFloat(StringGrid1.Cells[t,1]))-2,
Trunc(StrToFloat(StringGrid1.Cells[t,0]))+2,Image1.Height -Trunc(StrToFloat(StringGrid1.Cells[t,1]))+2);
Image1.Canvas.Pen.Color:=clBlack;
image1.Canvas.MoveTo(1, Image1.Height - Trunc(a+b));
image1.Canvas.LineTo(100,Image1.Height - Trunc(a+b*100));
Label2.Caption:='Y = '+FloatToStr(Trunc(b*100)/100)+'x + '+FloatToStr(Trunc(a*100)/100);
end; |
|
#7
|
|||
|
|||
|
нет я написал что текст процедуры надо вписать полностью:
Цитата:
|
|
#8
|
|||
|
|||
|
Цитата:
Код:
procedure Tform1.Regress(num: integer); {num кол-во элементов}
var
a, b, x_avg, y_avg, temp, temp2, cor: real;
t, min, max: integer;
ch: char;
begin
y_avg := 0;
x_avg := 0;
for t := 1 to num do
begin
y_avg := y_avg + StrToFloat(StringGrid1.Cells[t,1]);
x_avg := x_avg + StrToFloat(StringGrid1.Cells[t,0]);
end;
x_avg := x_avg/num;
y_avg := y_avg/num;
temp := 0; temp2 := 0;
for t := 1 to num do
begin
temp := temp +(StrToFloat(StringGrid1.Cells[t,1]) - y_avg)*(StrToFloat(StringGrid1.Cells[t,0])-x_avg);
temp2 := temp2 +(t - x_avg)*(t-x_avg);
end;
b := temp/temp2;
a := y_avg-(b*x_avg);
Image1.Canvas.Brush.Color:=clWhite;
Image1.Canvas.Pen.Color:=clWhite;
Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
Image1.Canvas.Brush.Color:=clRed;
Image1.Canvas.Pen.Color:=clRed;
For t:=1 to num do
image1.Canvas.Ellipse(Trunc(StrToFloat(StringGrid1.Cells[t,0]))-2,Image1.Height -Trunc(StrToFloat(StringGrid1.Cells[t,1]))-2,
Trunc(StrToFloat(StringGrid1.Cells[t,0]))+2,Image1.Height -Trunc(StrToFloat(StringGrid1.Cells[t,1]))+2);
Image1.Canvas.Pen.Color:=clBlack;
image1.Canvas.MoveTo(1, Image1.Height - Trunc(a+b));
image1.Canvas.LineTo(100,Image1.Height - Trunc(a+b*100));
Label2.Caption:='Y = '+FloatToStr(Trunc(b*100)/100)+'x + '+FloatToStr(Trunc(a*100)/100);
end; |
|
#9
|
|||
|
|||
|
Вроде понял, но теперь почему то он ругает "num" он же вроде описан в процедуре.
|
|
#10
|
|||
|
|||
|
Вот так:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure Regress(num: integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure Tform1.Regress(num: integer); {num кол-во элементов}
var
a, b, x_avg, y_avg, temp, temp2, cor: real;
t, min, max: integer;
ch: char;
begin
y_avg := 0;
x_avg := 0;
for t := 1 to num do
begin
y_avg := y_avg + StrToFloat(StringGrid1.Cells[t,1]);
x_avg := x_avg + StrToFloat(StringGrid1.Cells[t,0]);
end;
x_avg := x_avg/num;
y_avg := y_avg/num;
temp := 0; temp2 := 0;
for t := 1 to num do
begin
temp := temp +(StrToFloat(StringGrid1.Cells[t,1]) - y_avg)*(StrToFloat(StringGrid1.Cells[t,0])-x_avg);
temp2 := temp2 +(t - x_avg)*(t-x_avg);
end;
b := temp/temp2;
a := y_avg-(b*x_avg);
Image1.Canvas.Brush.Color:=clWhite;
Image1.Canvas.Pen.Color:=clWhite;
Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
Image1.Canvas.Brush.Color:=clRed;
Image1.Canvas.Pen.Color:=clRed;
For t:=1 to num do
image1.Canvas.Ellipse(Trunc(StrToFloat(StringGrid1.Cells[t,0]))-2,Image1.Height -Trunc(StrToFloat(StringGrid1.Cells[t,1]))-2,
Trunc(StrToFloat(StringGrid1.Cells[t,0]))+2,Image1.Height -Trunc(StrToFloat(StringGrid1.Cells[t,1]))+2);
Image1.Canvas.Pen.Color:=clBlack;
image1.Canvas.MoveTo(1, Image1.Height - Trunc(a+b));
image1.Canvas.LineTo(100,Image1.Height - Trunc(a+b*100));
Label2.Caption:='Y = '+FloatToStr(Trunc(b*100)/100)+'x + '+FloatToStr(Trunc(a*100)/100);
end;
end.киньте кнопку и 2 раза на нее нажмите: появится ее (кнопки) обработчик туда впишите чтоб было так: Код:
procedure TForm1.Button1Click(Sender: TObject); begin Regress(12); end; |
|
#11
|
|||
|
|||
|
если ругается на num значит сделали что то не так.
|
|
#12
|
|||
|
|||
|
Все! Вроде все правильно, только при нажатии на кнопку ничего не происходит кроме ошибки..флотинг поинт помоему! Но это как я знаю из-за того что в стринггриде пустые поля! А их никак нельзя заполнить? Просто хотел вписать в стринггрид и немогу ((
И почему кстати Regress(12) в скобках 12 а не 5 например? Последний раз редактировалось Lenovo, 16.12.2010 в 11:48. |
|
#13
|
|||
|
|||
|
12 просто так, откуда я знаю почему не 5
![]() за место 12 надо передать кол-во строк (?) стринггрида. |