Объясните ошибку.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Объясните ошибку.

Сообщение silas » 27.02.2012 22:35:50

Здравствуйте . Пишу программу построения графика и не понимаю ,почему выделяется строчка- S:=(X1max-X1min) / (Xmax-Xmin);- серым цветом в Юните 2.

Юнит 1:

Код: Выделить всё
  unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Menus,
  StdCtrls, ExtCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)

    GroupBox1: TGroupBox;
    Image1: TImage;
    MainMenu1: TMainMenu;
    MenuItem1: TMenuItem;
    MenuItem10: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem3: TMenuItem;
    MenuItem4: TMenuItem;
    MenuItem5: TMenuItem;
    MenuItem6: TMenuItem;
    MenuItem7: TMenuItem;
    MenuItem8: TMenuItem;
    MenuItem9: TMenuItem;
    OpenDialog1: TOpenDialog;
    procedure MenuItem4Click(Sender: TObject);
    procedure OpenDialog1CanClose(Sender: TObject; var CanClose: boolean);
    procedure draw;
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation
uses unit2;

{$R *.lfm}

{ TForm1 }

procedure TForm1.MenuItem4Click(Sender: TObject);
begin
OpenDialog1.Execute;
end;

procedure TForm1.OpenDialog1CanClose(Sender: TObject; var CanClose: boolean);


begin
readdata(opendialog1.FileName);
draw;
end;

procedure TForm1.draw ;
var i,x0,y0,x01,y01: integer ;
    x1,y1,x2,y2,Sx,Hx,Sy,Hy,Xmin,Xmax,a,b : real;
begin
image1.Canvas.Brush.Color:=Clsilver;
image1.Canvas.FillRect(image1.BoundsRect);
image1.Canvas.Brush.Color:=clblack;
areal(x,Xmin,Xmax);
scale ( Sx,Hx,Xmin,Xmax,10,image1.Width-10);
areal (y,Xmin,Xmax);
scale (Sy,Hy, Xmin,Xmax,10,image1.Height-10);
for i:=0 to n-1 do
begin
  x0:= change(x[i],sx,hx);
  y0:=change(y[i],sy,hy);
  image1.Canvas.FillRect(x0,y0,x0+5,y0+5);
end;
//regression(a,b);
y1:=a*x1+b;
y2:=a*x2+b;
x0:=change(x1,sx,hx);
y0:=change(y1,sy,hy);
x01:=change(x2,sx,hx);
y01:=change(y2,sy,hy);
Image1.Canvas.Pen.Color:=clblue;
Image1.Canvas.Line(x0,y0,x01,y01);

end;

end.


Юнит 2:

Код: Выделить всё
unit Unit2;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils,FileUtil,stdctrls,math;

var  x,y:array[0..100] of real ; n: integer;
procedure readdata(name: string);
procedure areal ( m : array of real ; var a,b: real);
Procedure scale (var s, h: real; Xmin,Xmax,X1min,X1max:real);
function change(x,s,h:real): integer;
implementation

procedure areal ( m : array of real ; var a,b: real);
var i: integer;

begin
  a:=m[0]; b:=a;
  for i:=1 to n-1 do begin
   a:=min(a,m[i]);
   b:=max(a,m[i]);
  end;

end;
procedure readdata(name: string);
var f:text;
    s:string; i,c:integer;


begin
   AssignFile(f,name);
   Reset(f);
   i:=0;

   While not eof(f) do
   begin
    ReadLn(f,s);
    Val(s,x[i],c);
    ReadLn(f,s);
    Val(s,y[i],c);
    Inc(i);
   end;
   CloseFile(f);
   n:=i;
end;
Procedure scale (var s, h: real; Xmin,Xmax,X1min,X1max:real);
begin
S:=(X1max-X1min) / (Xmax-Xmin); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<---Выделяется серым эта строка!!!
H:=X1max-S*Xmax;
end;


function change(x,s,h:real): integer;
begin
  change:=ceil(s*x+h)

end;
{procedure regression(var a , b : real);
var
  a,b:real;
  i,c:integer;}






end.


Добавлено спустя 4 минуты 45 секунд:
ссылка на проект
Padre_Mortius: Для оформления кусков кода используйте тег code. Иначе ваше сообщение читать просто невозможно.
silas
незнакомец
 
Сообщения: 8
Зарегистрирован: 19.12.2011 21:05:40

Re: Объясните ошибку.

Сообщение Padre_Mortius » 27.02.2012 23:00:26

Ничего не выделяется. Проект нормально компилируется и запускается.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Объясните ошибку.

Сообщение zub » 27.02.2012 23:05:57

>>Ничего не выделяется. Проект нормально компилируется и запускается.
потом чуток работает и при попытке загрузить данные в данной строчке происходит деление на 0.

silas
а на ноль как известно делить не стоит. Поэтому случаи когда (Xmax-Xmin)=0 (а еще правильнее abs(Xmax-Xmin)<eps) надо обрабатывать както по другому.
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Объясните ошибку.

Сообщение Владимир » 28.02.2012 08:57:28

оо
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Объясните ошибку.

Сообщение silas » 28.02.2012 14:20:44

Спасибо за подсказки, Уважаемые)
silas
незнакомец
 
Сообщения: 8
Зарегистрирован: 19.12.2011 21:05:40


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 233

Рейтинг@Mail.ru
cron