|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.05.2008, 11:17 | #1 |
Регистрация: 07.05.2008
Сообщений: 3
|
Invalid floating point operation
Программа запускается, но потом останавливается и выдает: Invalid floating point operation в строке Hy:=round((3000-h)/10)+100;
где Hy - integer, h - real. Как исправить?
Паскаль - что это?
|
07.05.2008, 11:23 | #2 |
Участник клуба
Регистрация: 02.09.2007
Сообщений: 1,193
|
Все правильно. Вы не можете считать до бесконечности.
Значения integer могут быть в пределах [-2147483648..2147483647], если вы выходите за эти границы, возникает данная ошибка. |
07.05.2008, 11:36 | #3 |
Регистрация: 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.
Паскаль - что это?
|
07.05.2008, 12:16 | #4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
У тебя после того как (3000-h)/10 стало равно -2.0833589697E+03
сразу скачек на -4.4831474666E+15, а round только до E+8 берет. Тебе нужно либо формулу поправить либо нормализировать скачки.
I'm learning to live...
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |