IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Нарисовать график функции, Ошибка 216
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 64
Пол: Мужской

Репутация: -  0  +


Взяв код из форума, решил нарисовать график функции вида: cos(x)/(x+2), однако возникает постоянно ошибка 216

Uses Graph,crt;
const
{ OPTIONS }
shag=0.0001;
lgr = -50;
pgr = 50;
zcrtX=320;
zcrty=240;
mtrX=10;
mtrY=10;
colorG=15;
colorOXY=4;
OXYminX=-200;
OXYmaxX=200;
OXYminY=-200;
oxymaxY=200;

Var grDriver : Integer;
grMode : Integer;

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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Паскаля под рукой нету, проверить не могу, проверь, не получается ли у тебя отрицательных значений в аргументах putpixel, инициализируется ли вообще граф режим, нету ли деления на 0, например тут: y:=сos(x)/(x+2);


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Ошибка будет еще до деления, когда при приближении 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;

putpixel(zcrtx+round(x*mtrX),zcrty-round(y*mtrY),colorg)

, а то ждать полчаса будешь, пока дойдешь до ошибки...

Вот кусок того, что непосредственно предшествует вылету:
 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



Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 64
Пол: Мужской

Репутация: -  0  +


Цитата(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;

putpixel(zcrtx+round(x*mtrX),zcrty-round(y*mtrY),colorg)

, а то ждать полчаса будешь, пока дойдешь до ошибки...

Вот кусок того, что непосредственно предшествует вылету:
 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



Ок. Спасибо, буду разбираться дальше ;)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 15.05.2024 1:49
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name