Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Как купить рекламу на форуме


Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 04.11.2010, 18:03   #1
hasana
Пользователь
 
Регистрация: 09.05.2010
Сообщений: 43
По умолчанию Арифметическое переполнение

вот процедурая, которая чертит круг...
почему то выскакивает арифметическое переполнение, когда d<0;
Код:
uses graph;
PROCEDURE DrawCircle(xc, yc, Radius : Word);
VAR
   X,Y: Integer;
   d:integer;

Begin
     { draw the circle }
     d:=0;
     d:= 3 - (2 * Radius); ---здесь и происходит переполнение 
     X:=0;
     Y := Radius;

     while Not(x=y) Do
     Begin
          if (d<0) Then
             d := d+(4*x)+6
          else
          Begin
               d := d+((x-y)*4)+10;
               Y := Y - 1;
          End;
          { Bottom-Right }
          putpixel(xc+x,yc+y,4);
          { Top-Right }
          putpixel(xc+x,yc-y,4);
          { Bottom-Left }
          putpixel(xc-x,yc+y,4);
          { Top-Left }
          putpixel(xc-x,yc-y,4);
          { Right-Bottom }
          putpixel(xc+y,yc+x,4);
          { Right-Top }
          putpixel(xc+y,yc-x,4);
          { Left-Bottom }
          putpixel(xc-y,yc+x,4);
          { Left-Top }
          putpixel(xc-y,yc-x,4);

          Inc(x);
          If X > Y Then Break;
     End;
End;
var device,mode:integer;
xc,yc,radius:word;
begin
writeln('please, enter the x and y center and radius');
readln(xc,yc,radius);
initgraph(device,mode,'');
DrawCircle(xc, yc, Radius);
readln;
circle(xc,yc,radius);
readln;
closegraph;
end.
hasana вне форума Ответить с цитированием
Старый 04.11.2010, 18:05   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Вот почему:
Код:
 Radius : Word
Код:
 d:integer;
А должны быть оба Integer.

Последний раз редактировалось _-Re@l-_; 04.11.2010 в 18:56.
_-Re@l-_ вне форума Ответить с цитированием
Старый 04.11.2010, 18:08   #3
hasana
Пользователь
 
Регистрация: 09.05.2010
Сообщений: 43
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
Вот почему:
Код:
 Radius : Word
Код:
 d:integer;
А должны быть оба Integer. ^)

всё, понял... спасибо
hasana вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме 20000 рублей в месяц

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переполнение деления!!! zero-cool Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 28.09.2010 20:10
Переполнение при делении JeyKip Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 20.03.2010 14:04
Переполнение стека NoHeart Общие вопросы Delphi 8 08.11.2009 16:03
Переполнение стека Ake Паскаль, Turbo Pascal, PascalABC.NET 3 30.05.2009 21:39
Переполнение Стека Викдон Паскаль, Turbo Pascal, PascalABC.NET 0 19.12.2008 19:16


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS