1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
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.
Паскаля под рукой нету, проверить не могу, проверь, не получается ли у тебя отрицательных значений в аргументах putpixel, инициализируется ли вообще граф режим, нету ли деления на 0, например тут: y:=сos(x)/(x+2);
--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
Ошибка будет еще до деления, когда при приближении 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
Ошибка будет еще до деления, когда при приближении 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