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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2008, 11:17   #1
Skytis
 
Аватар для Skytis
 
Регистрация: 07.05.2008
Сообщений: 3
По умолчанию Invalid floating point operation

Программа запускается, но потом останавливается и выдает: Invalid floating point operation в строке Hy:=round((3000-h)/10)+100;
где Hy - integer, h - real.
Как исправить?
Паскаль - что это?
Skytis вне форума Ответить с цитированием
Старый 07.05.2008, 11:23   #2
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Все правильно. Вы не можете считать до бесконечности.
Значения integer могут быть в пределах [-2147483648..2147483647], если вы выходите за эти границы, возникает данная ошибка.
_Dmitry вне форума Ответить с цитированием
Старый 07.05.2008, 11:36   #3
Skytis
 
Аватар для Skytis
 
Регистрация: 07.05.2008
Сообщений: 3
По умолчанию

а что ж теперь делать...
может посмотрите?
вот тело
uses
Crt,Graph;
var
i,Gd,Gm:integer;
TxPred,Tx,Hy:integer;
tr,t:real;
apred,a,v,h,hr: real;
q:string;
k:real;
const
g=9.8;
m=70;
dt=0.01;
Label
1;

{================================== ===============================}
procedure initGraphs;
begin

DirectVideo:=False;
Gd:=Detect;
InitGraph(Gd,Gm, 'e:/tp7/bgi'); {}
For i:=0 to 2 do {}
begin {} {OCu KOOP9uHAT}
SetColor(i+2); {}
Line(20+i*160,400,150+i*160,400); {}
Line(20+i*160,80,20+i*160,400); {}
end;
SetColor(White); {}
MoveTo(21,90); Outtext('3 km'); {}
MoveTo(10,100); Outtext('h'); {} {PACTABuM METKu}
MoveTo(170,247); OutText('g-'); {}
MoveTo(330,100); Outtext('v'); {}
MoveTo(170,100); Outtext('a'); {}
end;
{================================== ================================}
Procedure Svob;
begin
If h=3000 Then begin Tx:=20; Hy:=100;end;
MoveTo(Tx,Hy);
a:=g-0.2*v*v/m;
v:=a*t;
h:=h-(a*(t*t))/2;
end;

Procedure Raskr;
begin
a:=g-(0.2+20*(t-(tr+1)))*v*v/m;
v:=a*t;
h:=h-(a*(t*t))/2;
end;

Procedure Plan;
begin
a:=g-20*v*v/m;
v:=a*t;
h:=h-(a*(t*t))/2;
If h<0 then h:=0;
end;

{================================== ================================}
procedure graphik;
begin
Tx:=20+round(t*40);
Hy:=round((3000-h)/10)+100;
LineTo(Tx,Hy);
PutPixel(160+Tx,250+round((g-a)*20),Green);
PutPixel(320+Tx,400-round(v*10),Green);
gotoXY(28,2); write('t(s)= ',t:3:2); {vivod tekushego t}
gotoXY(48,4); write('v= ',v:3:2);
gotoXY(28,4); write('a= ',a:3:2);
gotoXY(8,4); If h<0 Then write('h= 0 ') Else write('h= ',h:3:2)
end;


{===========================Osnovno i kod programmi========================== =}
begin
1:t:=0;
v:=0;
h:=3000;
initGraphs;
tr:=2;
repeat
If t<tr then Svob;
If (t>=tr)and(t<=tr+1) Then Raskr;
If (t>=tr) Then Plan;
graphik;
t:=t+dt;
delay(2000);
until H<=0;
Readln;
closegraph;
Write('Exit?(Y/N)');
Readln(q);
If (q<>'y') then GoTo 1;
end.
Паскаль - что это?
Skytis вне форума Ответить с цитированием
Старый 07.05.2008, 12:16   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

У тебя после того как (3000-h)/10 стало равно -2.0833589697E+03
сразу скачек на -4.4831474666E+15, а round только до E+8 берет.
Тебе нужно либо формулу поправить либо нормализировать скачки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Power Point lenivec Общие вопросы Delphi 9 17.06.2010 22:39
Сообщение об ошибке:Cannot perfom this operation on a closed dataset! Tanuska___:) БД в Delphi 1 04.08.2008 17:52
Возникает ошибка Invalid floating point operation Иринкаа Помощь студентам 3 29.11.2007 22:10
при пустой ячейке выскакивает "is not a valid floating point value" ПОМОГИТЕ serserser Помощь студентам 17 14.11.2007 07:46
Invalid pointer operation Димарик Общие вопросы Delphi 2 05.11.2007 09:53