Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2009, 10:18   #1
Jaaq
 
Регистрация: 30.03.2009
Сообщений: 5
По умолчанию Err207 непонятна причина

Пишу программу в универ "табуляция функций". При компиляции выдает ошибку 207, но не могу её локализовать, ибо по F8 все проходит нормально. Бьюсь второй день, мистика какая-то. Помогите. Заранее благодарен

Код:
uses graph, crt;
const
 eps=0.00000001;
var
 gd,gm,n,i:integer;
 step,a,b,mash:real;
 col,cur:byte;
 c:char;

procedure osi (a,b,mash:real);      {ђЁб㥬 ®бЁ}
 var
  xos:integer;      {• Є®®а¤Ё**в* ®бЁ “}
  st:string;
 begin
 setcolor(8);       {“бв***ў«Ёў*Ґ¬ 梥⠮ᥩ}
 line(0,round(getmaxy/2),getmaxx,round(getmaxy/2)); {ђЁб㥬 ®бм •}
 outtextxy(getmaxx-10,round(getmaxy/2)-10,'X');     {Ќ*¤ЇЁбм ** ®бЁ •}
 for i:=0 to round(b-a) do
  begin
   str(round(a+i),st);                              {‚лзЁб«пҐ¬ жҐ«лҐ §*зҐ*Ёп Є®®а¤Ё**в ** ®бЁ • Ё ЇаҐ®Ўа*§гҐ¬ ў String}
   outtextxy(round(i*mash),round(getmaxy/2)+5,st);  {!ђЁб㥬! жҐ«лҐ §**зҐ*Ёп Ї® •}
   line(round(i*mash),round(getmaxy/2)-2,round(i*mash),round(getmaxy/2)+2); {ђЁб㥬 §*бҐзЄЁ ** ®бЁ •}
  end;

  if a*b<0 then xos:=round(-a*mash) else xos:=round(getmaxx/2); {“§**Ґ¬ **室Ёвмбп «Ё 0 Ї® • ў ўЁ¤Ё¬®© ®Ў«*бвЁ.}
  line(xos,0,xos,getmaxy);                                      {ђЁб㥬 ®бм “}
  outtextxy(xos+3,3,'Y');     {Ќ*¤ЇЁбм ** ®бЁ •}

  for i:=1 to round((getmaxy/mash)/2) do
   begin
    str(round(i),st);
    outtextxy(xos+5,round(getmaxy/2+i*mash),'-'+st);                 {ђЁб㥬 жҐ«лҐ §**зҐ*Ё Ї® “ ў ®ЎҐ бв®а®*л ®в 0}
    outtextxy(xos+5,round(getmaxy/2-i*mash),st);
    line(xos-2,round(getmaxy/2+i*mash),xos,round(getmaxy/2+i*mash)); {‘в*ўЁ¬ §*бҐзЄЁ}
    line(xos-2,round(getmaxy/2-i*mash),xos+2,round(getmaxy/2-i*mash));
   end;
 end;

procedure podpis (D:real;col:byte);  {‹ҐЈҐ*¤* Ја*дЁЄ®ў}
 var
  st:string;
 begin
  str(d:2:2,st);
  setfillstyle(1,col);
  bar(2,cur,7,cur+5);
  setcolor(8);                                {-D*sqrt(sqr(x)+2)*sin(x)}
  outtextxy(10,cur,st+'*lg(x1-3)');
  cur:=cur+10;
 end;

procedure draw(a,b,mash,step,D:real;col:byte);       {ђЁб㥬 Ја*дЁЄ}
 var
  x1,y1:real;
 begin
  setcolor(col);                            {“бв***ў«Ёў*Ґ¬ 梥⠣а*дЁЄ*}
  MoveTo(0,round(-D*sqrt(sqr(x1)+2)*sin(x1)*mash+getmaxy/2));
  x1:=a;
  for i:=1 to n do
   begin
    x1:=x1+step;                           {‚лзЁб«пҐ¬ Ї®б«Ґ¤го饥 §**зҐ*ЁҐ •}
    y1:=-D*sqrt(sqr(x1)+2)*sin(x1);           {‚лзЁб«пҐ¬ Ї®б«Ґ¤го饥 §**зҐ*ЁҐ “}

    if (y1<getmaxy)or(y1>0) then
     lineto(round((x1-a)*mash),round(y1*mash+getmaxy/2)); {ђЁб㥬 Єгб®Є Ја*дЁЄ*}
   end;
  podpis(D,col);
 end;

begin
 write('‚‚Ґ¤ЁвҐ в®з*®бвм(n), a, b ');
 readln(n,a,b);           {D-Ї*ଥва, n-Є®«-ў® Їа®бзЁвлў*Ґ¬ле в®зҐЄ, a,b-®в१®Є Їа®аЁб®ўЄЁ дг*Є-жЁЁ}
 write('‡*¤*вм ¬*бив*Ў ўагз*го? (Y/N)');
 readln(c);

 if c='y' then
  begin
   writeln;
   write('Њ*бив*Ў= ');
   readln(mash);
   {if a<=3 then a:=3+eps;}
   step:=abs(b-a)/n;             {ђ*ббзЁвлў*Ґ¬ и*Ј в*Ўг«пжЁЁ}
   initgraph(gd,gm,'..\bgi'); {€*ЁжЁ*«Ё§Ёа㥬 Ја*дЁЄг}
  end
 else
  begin
   initgraph(gd,gm,'..\bgi'); {€*ЁжЁ*«Ё§Ёа㥬 Ја*дЁЄг}
   {if a<=3 then a:=3+eps;}
   mash:=getmaxx/abs(b-a);       {ђ*ббзЁвлў*Ґ¬ ¬*бив*Ў Ја*дЁЄ*}
   step:=abs(b-a)/n;             {ђ*ббзЁвлў*Ґ¬ и*Ј в*Ўг«пжЁЁ}
  end;

 osi(a,b,mash);             {ђЁб㥬 ®бЁ}
 draw(a,b,mash,step,-1,1);  {ђЁб㥬 Ја*дЁЄЁ}
 draw(a,b,mash,step,0.5,2);
 draw(a,b,mash,step,1,4);
 draw(a,b,mash,step,1.5,5);

 repeat until keypressed;   {†¤Ґ¬ **¦*вЁп «оЎ®© Є«*ўЁиЁ ¤«п ўл室*}

 closegraph;                {‡*Єалў*Ґ¬ Ја*дЁзҐбЄЁ© ०Ё¬}
end.
Jaaq вне форума Ответить с цитированием
Старый 15.04.2009, 10:47   #2
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

У меня вроде запускается, графики, хотя не совсем понятно, что за n, a, b. Какие для них значения лучше взять?

P. S. В уроке для начинающих в самом конце описано, как копипастить из Паскаля и обратно, сохраняя русские буквы.

P. S. S. Максимальный номер ошибки 162. Как может быть 207?
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 15.04.2009, 10:58   #3
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Ошибка при операциях с вещественными числами. Если код без ошибок, полазь в настройках, отключи эмуляцию сопроцессора
пыщь
JTG вне форума Ответить с цитированием
Старый 15.04.2009, 11:07   #4
Samopal
Пользователь
 
Аватар для Samopal
 
Регистрация: 23.12.2008
Сообщений: 24
По умолчанию

207. Ivnalid floating point operation - Недопустимая операция с плавающей точкой.
www.mybrest.net
Samopal вне форума Ответить с цитированием
Старый 15.04.2009, 11:09   #5
Jaaq
 
Регистрация: 30.03.2009
Сообщений: 5
По умолчанию

Цитата:
Сообщение от OCTAGRAM Посмотреть сообщение
P. S. S. Максимальный номер ошибки 162. Как может быть 207?
207 Invalid floating point operation - Недопустимая операция с плав. точкой


n-количество просчитываемых точек, a,b-интервал видимой части графика
Jaaq вне форума Ответить с цитированием
Старый 15.04.2009, 11:11   #6
Jaaq
 
Регистрация: 30.03.2009
Сообщений: 5
По умолчанию

Цитата:
Сообщение от JTG Посмотреть сообщение
Ошибка при операциях с вещественными числами. Если код без ошибок, полазь в настройках, отключи эмуляцию сопроцессора
Оу, мне эту работу сдавать, поэтому надо чтобы код был универсальным. Может какую Директиву компилятору сообщить?
Jaaq вне форума Ответить с цитированием
Старый 15.04.2009, 11:19   #7
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Цитата:
207 Invalid floating point operation - Недопустимая операция с плав. точкой
Значит, это ошибка не компилятора, а времени исполнения, потому что у компилятора их 162.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 15.04.2009, 11:21   #8
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Цитата:
Сообщение от JTG Посмотреть сообщение
Ошибка при операциях с вещественными числами. Если код без ошибок, полазь в настройках, отключи эмуляцию сопроцессора
А почему это должно улучшить? Я думаю, наоборот, на эмуляции лучше работает:

{$N-} {$E+}
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 15.04.2009, 13:29   #9
Jaaq
 
Регистрация: 30.03.2009
Сообщений: 5
По умолчанию

Цитата:
Сообщение от OCTAGRAM Посмотреть сообщение
А почему это должно улучшить? Я думаю, наоборот, на эмуляции лучше работает:

{$N-} {$E+}
Спасибо, вроде работает. Но не вник в суть ошибки. Объясни в паре слов, если не затруднит
Jaaq вне форума Ответить с цитированием
Старый 15.04.2009, 14:07   #10
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

В Паскале тип Real, так часто используемый, на самом деле является нестандартным, с размером 48бит, в то время, как в большинстве ЯП типы с плавающей точкой имеют размеры 32бита или 64бита.

Вот с этим нестандартным размером иногда возникают весёлые проблемы. А эмуляция использует только целочисленные инструкции, там глючить нечему.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите в чём причина :( Cannibal Компьютерное железо 3 16.02.2009 23:27