![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
у меня есть код,строящий график функций
Код:
procedure TForm2.GrClick(Sender: TObject);
function f(x:real): real;
Var
c : real;
Begin
c :=(2*x-1)/(sqr(x-1));
f:=c;
end;
Var
a,b,x : real;
x0,y0,i : integer;
flag:boolean;
Begin
flag:=true;
x0 := line1.Width div 2;
y0 := line1.Height div 2;
With line1.Canvas do
Begin
Pen.Color:=clBlack;
MoveTo(x0,0);
LineTo(x0,line1.ClientHeight);
MoveTo(0,y0);
LineTo(line1.ClientWidth,y0);
MoveTo(0,y0);
Pen.Color := clBlue;
a :=-line1.ClientHeight div 5;
b :=-line1.ClientWidth div 15;
x :=-10;
For i:=-100 to 100 do
Begin
x:=x+0.1;
if (not((x<-0.99) and (x>-1.01))) then begin
if(flag=true) then begin
MoveTo(Trunc(x0+x*b),Trunc(y0+f(-x)*a));
flag:=false;
end;
LineTo(Trunc(x0+x*b),Trunc(y0+f(-x)*a));
end;
End;
End;
End;
procedure TForm2.line1Click(Sender: TObject);
begin
end;
procedure TForm2.ExitClick(Sender: TObject);
begin
close;
end;
end.Код:
(not((x<-0.99) and (x>-1.01))) |
|
#2
|
||||
|
||||
|
Да не крашится, под D7 при диапазоне рисуется на форме сетка и пиковый зубец, а при постоянном х=-1 только сетка
|
|
#3
|
|||
|
|||
|
Цитата:
|
|
#4
|
||||
|
||||
|
Цитата:
Код:
if (not((x<-0.99) and (x>-1.01))) then begin... Последний раз редактировалось Alegun, 20.04.2017 в 21:52. |
|
#5
|
|||
|
|||
|
Цитата:
я понял что неправильно писал значение,но не знаю как написать Последний раз редактировалось perekatipole, 20.04.2017 в 21:55. |
|
#6
|
||||
|
||||
|
Можно, if x=-1 then.., надо было сразу спросить, для чего?
|
|
#7
|
|||
|
|||
|
Цитата:
|
|
#8
|
||||
|
||||
|
Не, строит, просто в другом месте и этого не видно
|
|
#9
|
|||
|
|||
|
Цитата:
Последний раз редактировалось perekatipole, 20.04.2017 в 22:33. |
|
#10
|
||||
|
||||
|
Цитата:
|
|
#11
|
|||
|
|||
|
а ничего, что при x = -1 деление на 0 получается?
ну и, до кучи, сравнивать действительные числа через =, это надо что бы круто свезло. Т.е. указание диапазона в том if'е вполне оправданно. |
|
#12
|
|||
|
|||
|
Цитата:
|
|
#13
|
|||
|
|||
|
А чего уж тут подробнее.
Имеет место проблема при прямом сравнении чисел с плавающей точкой, т.к. в следствии погрешности при расчете 2 действительных числа могут оказаться не равны с точки зрения компьютера. Соответсвенно, такие числа надо сравнивать через эпсилон. Вот пример как надо это сравнивать: Код:
procedure TForm1.Button1Click(Sender: TObject);
var
f1, f2 : double;
begin
f1 := 1.3000000;
f2 := 1.2999999;
if abs(f1-f2) < 0.00001
then ShowMessage('f1 and f2 are equal')
else ShowMessage('f1 and f2 are not equal');
end; |
|
#14
|
|||
|
|||
|
как в коде записать не диапазон а просто значение -1?
|
|
#15
|
|||
|
|||
|
Цитата:
|