x,y:real;{extended;} i:integer; Begin grDriver:=Detect; InitGraph(grDriver, grMode, ''); for i:=OXYminX to OXYmaxX do putpixel(zcrtX+i,zcrty,colorOXY); for i:=OXYminY to OXYmaxY do putpixel(zcrtX,zcrty-i,colorOXY);
x:=lgr; while x<=pgr do begin if x<>1 then begin y:=сos(x)/(x+2); writeln(y:1:8); putpixel(zcrtx+trunc(x*mtrX),zcrty-trunc(y*mtrY),colorg) end; x:=x+shag; end; readkey; closegraph; end.
klem4
23.03.2011 22:51
Паскаля под рукой нету, проверить не могу, проверь, не получается ли у тебя отрицательных значений в аргументах putpixel, инициализируется ли вообще граф режим, нету ли деления на 0, например тут: y:=сos(x)/(x+2);
volvo
23.03.2011 23:00
Ошибка будет еще до деления, когда при приближении X к (-2) значение Y начнет резко возрастать. Как только zcrtx+trunc(x*mtrX) или zcrty-trunc(y*mtrY) перестанет помещаться в Integer (ну, в этом случае, естественно, второй вариант) - программа вылетит...
Как проверить: описываешь переменную b : boolean, присваиваешь ей значение False, и делаешь вот так:
b := b or (zcrtx+round(x*mtrX) = 300); if b then begin writeln(' x = ', x:10:6, ' y = ', y:10:6, zcrtx+round(x*mtrX):10,zcrty-round(y*mtrY):10); end;
, а то ждать полчаса будешь, пока дойдешь до ошибки...
Вот кусок того, что непосредственно предшествует вылету:
x = -2.000900 y = 463.294760 300 -4393 x = -2.000800 y = 521.093025 300 -4971 x = -2.000700 y = 595.405088 300 -5714 x = -2.000600 y = 694.487854 300 -6705 x = -2.000500 y = 833.203759 300 -8092 x = -2.000400 y = 1041.277701 300 -10173 x = -2.000300 y = 1388.067838 300 -13641 x = -2.000200 y = 2081.649020 300 -20576 x = -2.000100 y = 4162.399968 300 -41384 No heap dump by heaptrc unit Exitcode = 201 Runtime error 201 at $00401A1C
Relrin
23.03.2011 23:08
Цитата(volvo @ 23.03.2011 20:00)
Ошибка будет еще до деления, когда при приближении X к (-2) значение Y начнет резко возрастать. Как только zcrtx+trunc(x*mtrX) или zcrty-trunc(y*mtrY) перестанет помещаться в Integer (ну, в этом случае, естественно, второй вариант) - программа вылетит...
Как проверить: описываем переменную b : boolean, присваиваешь ей значение False, и делаешь вот так:
b := b or (zcrtx+round(x*mtrX) = 300); if b then begin writeln(' x = ', x:10:6, ' y = ', y:10:6, zcrtx+round(x*mtrX):10,zcrty-round(y*mtrY):10); end;
, а то ждать полчаса будешь, пока дойдешь до ошибки...
Вот кусок того, что непосредственно предшествует вылету:
x = -2.000900 y = 463.294760 300 -4393 x = -2.000800 y = 521.093025 300 -4971 x = -2.000700 y = 595.405088 300 -5714 x = -2.000600 y = 694.487854 300 -6705 x = -2.000500 y = 833.203759 300 -8092 x = -2.000400 y = 1041.277701 300 -10173 x = -2.000300 y = 1388.067838 300 -13641 x = -2.000200 y = 2081.649020 300 -20576 x = -2.000100 y = 4162.399968 300 -41384 No heap dump by heaptrc unit Exitcode = 201 Runtime error 201 at $00401A1C
Ок. Спасибо, буду разбираться дальше ;)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.