Братцы! Выручайте! .. Паскаль.. Падает прога.. Error 207: Invalid floating point operation. Очень срочно нужно исправить ошибку. В итоге должна выводиться гистограмма - это значения, превышающие или меньшие значений определяющей функции (строки 107-111).. Прога: Code: uses crt,graph; {#### CONFIG ####} const MAX = 10000; N = 10; {#### 0<N<50 ####} lambda = 1; {#### 0<lambda<50 ####} beta = 5; {#### beta>lambda ####} DOT = 4; var Data: array [1..MAX] of real; Hist: array [1..N] of integer; {#### FUNCTION ####} function w(x:real):real; begin if (lambda <= x) and (x <= ((beta + lambda)/2)) then w:= 4*(x-lambda)/sqr((beta - lambda)); if ((beta + lambda)/2 <= x) and (x <= beta) then w:= 4*(beta - x)/sqr((beta - lambda)); end; {#### PROCEDURE ####} procedure DrawHist; var i:integer; step:real; Max_Num:integer; s:string; k:real; m1:real; D:real; hi:real; wk:real; begin for i:=1 to N do Hist[i]:=0;{clearing array} {#### CALCULATE HIST ####} step:=lambda/N; for i:=1 to MAX do inc(Hist[1+trunc((Data[i]-beta+lambda/2)/step)]); {#### LOOK FOR Max_Num ####} Max_Num:=0; for i:=1 to N do if Max_Num<Hist[i] then Max_Num:=Hist[i]; {#### DRAWHIST ####} m1:=0;D:=0;hi:=0; for i:=0 to N-1 do begin SetColor(14); rectangle( round(i*GetMaxX/N), round(2*GetMaxY/3), round((i+1)*GetMaxX/N), round(2*GetMaxY/3*(1-Hist[i+1]/Max_Num))); str(Hist[i+1],s); SetColor(3); SetTextStyle(DefaultFont, VertDir, 1); OutTextXY(round(i*GetMaxX/N)+GetMaxX div N, round(2*GetMaxY/3)-40,s); str((i+1)*step+beta-lambda/2:1:1,s); SetColor(4); OutTextXY(round(i*GetMaxX/N)+GetMaxX div N, round(2*GetMaxY/3)+10,s); m1:=m1+((i+1)*step+beta-lambda/2)*Hist[i+1]/Max; D:=D+sqr(((i+1)*step+beta-lambda/2))*Hist[i+1]/Max; wk:=0.5*sqrt(2)* (sin(((i+1)*step+beta-lambda/2)*PI/2/lambda)*cos(PI*beta/2/lambda) -cos(((i+1)*step+beta-lambda/2)*PI/2/lambda)*sin(PI*beta/2/lambda) -sin((i*step+beta-lambda/2)*PI/2/lambda)*cos(PI*beta/2/lambda) +cos((i*step+beta-lambda/2)*PI/2/lambda)*sin(PI*beta/2/lambda)); hi:=hi+MAX*sqr(Hist[i+1]/MAX-wk)/wk; end; SetTextStyle(DefaultFont,HorizDir,1); SetColor(9); str(m1:0:DOT,s); OutTextXY(100,2*GetMaxY div 3 +70,'m1(prakt)= '+s); str(beta:0:DOT,s); OutTextXY(100,2*GetMaxY div 3 +90,'m1(teor) = '+s); D:=D-m1*m1; str(D:0:DOT,s); OutTextXY(250,2*GetMaxY div 3 +70,'D(prakt)= '+s); D:=(PI*PI-32+8*PI)*lambda*lambda/4/PI/PI; str(D:0:DOT,s); OutTextXY(250,2*GetMaxY div 3 +90,'D(teor) = '+s); str(hi:0:DOT,s); OutTextXY(400,2*GetMaxY div 3 +80,'hi2 ='+s); k:=-100000; for i:=0 to GetMaxX do if w(i*lambda/GetMaxX-lambda/2+beta)>k then k:=w(i*lambda/GetMaxX-lambda/2+beta); SetTextStyle(DefaultFont, HorizDir, 1); MoveTo(0,round(2*GetMaxY/3*(1-w(-lambda/2+beta)/k))); SetColor(4); for i:=0 to GetMaxX do begin LineTo(i,round(2*GetMaxY/3*(1-w(i*lambda/GetMaxX-lambda/2+beta)/k))); end; end; {#### REV FUNCTION ####} function F_Rev(x:real):real; begin if (lambda <= x) and (x <= ((beta + lambda)/2)) then F_Rev:= 2*sqr((x-lambda))/sqr((beta - lambda)); if ((beta + lambda)/2 <= x) and (x <= beta) then F_Rev:= 1 - 2*sqr((beta - x))/sqr((beta - lambda)); end; {#### GENERATE AND FULL ARRAY #### } procedure GenerateData; var y:real; i:integer; begin SetFillStyle(0,0); OutTextXY(0,0,'Generating...'); for i:=1 to MAX do begin y:=random; Data[i]:=F_Rev(y); end; Bar(0,0,GetMaxX,GetMaxY); end; {#### FIND DRIVERS ####} procedure OpenGraph; var Gd, Gm: Integer; begin Gd := Detect; InitGraph(Gd, Gm, 'c:\tp\bgi'); end; {#### OUT ####} begin ClrScr; Randomize; {GetParams;} OpenGraph; repeat GenerateData; DrawHist; delay(500); until keypressed; CloseGraph; WriteLn('Good!'); end.
http://forum.vingrad.ru/forum/s/6bec7e1f871e9fa05c83226fc6ea4d1b/topic-194088/anchor-entry1399234/0.html Может...
_http://forum.saratov.ru/lofiversion/index.php/t1699.html _http://subscribe.ru/archive/comp.soft.prog.pasplus/200611/07183040.html Dr.Check, я показал, что означает эта ошибка! ------ Я пытался помочь человеку! А ты ставишь минусы за помощь?! -----
2 De-visible ppc... тебя не спрашивали описания кодов ошибок... спросили как её исправить... глупость пишешь...
возможно переполняется какая-то из переменных, ща нет времеени смотреть,можешь скомпилить 32-ух битный ехе с дебаг инфо?
Уфф.. Dr.Check, вот так: махнул все real на extended.. Ничего.. Второй момент: после смены типов компилятор начал дико тупить: стал выделять OT, подчёркивать запятые... Hellsp@wn, Рандж чека не было.. Всё ещё актуальна проблема..
Давайте так: кто сделает стабильно рабочую прогу, с нормальной диаграммой, тому торжественно вручу шестизнак. Срок действия до 13.00.
Чтото тут с формулой не то, потому что в отладчике после for i:=1 to MAX do inc(Hist[1+trunc((Data-beta+lambda/2)/step)]); массиd Hist всё равно содержал нулевые элементы и по этому после for i:=1 to N do if Max_Num<Hist then Max_Num:=Hist; Max_Num было = 0; и в конечном счете в строке rectangle( round(i*GetMaxX/N), round(2*GetMaxY/3), round((i+1)*GetMaxX/N), round(2*GetMaxY/3*(1-Hist[i+1]/Max_Num))); вылетала ошибка при делении на 0. но почему-то код ошибки был левый.