|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
Цитата:
|