Negative85
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Здраствуйте, вот программа, рассчитывающая минимум функции методом фибоначчи, выдает ошибку 143, в чем дело? Помогите пожалуйста. Код: program fibonacci; uses crt; const n_m=40; type mas=array[1..n_m] of integer; type funo=function (x:real):real; var a,b,e:real; nom,n:integer; s:mas; procedure VvodIsxD_FC( var f:mas; var n:integer; var a,b,e:real); var i:integer; begin writeln('Ввод исходных данных для метода Фибоначчи'); write('Задайте N (количество разбиений): '); readln(n); writeln('Количество разбиений N = ',n); f[1]:=1; f[2]:=2; for i:=3 to n do f[i]:=f[i-1]+f[i-2]; write('Задайте EPSILON (точность) : '); readln(e); writeln('Задайте интервал (a,b)'); readln(a,b); writeln(a:12:8,', b = ',b:12:8); end; procedure Fibonach(z:funo; f:mas; n:integer; a,b,e:real); var k,i,p:integer; f2,f4,x1,x2,x3,x4:real; begin writeln; writeln('Нахождение оптимума по методу Фибоначчи'); x1:=a; x2:=a+((b-a)*f[n-1]+e)/f[n]; x3:=b; f2:=z(x2); writeln(' Текущий интервал'); k:=1; writeln(x1:12:8,' ',x3:12:8); repeat x4:=x1-x2+x3; f4:=z(x4); if f4>f2 then begin if x2<x4 then begin x3:=x4; writeln(x1:12:8,' ',x3:12:8); end else begin x1:=x4; writeln(x1:12:8,' ',x3:12:8); end; end else begin if x2<x4 then begin x1:=x2; x2:=x4; f2:=f4; writeln(x1:12:8,' ',x3:12:8); end else begin x3:=x2; x2:=x4; f2:=f4; writeln(x1:12:8,' ',x3:12:8); end end; k:=k+1; until k>n; writeln; writeln('Минимум найден по методу Фибоначчи'); write('Конечный интервал ['); writeln(x1:12:8,',',x3:12:8,' ]'); writeln('Значение функции F = ',f2:15:12); end; function q(x:real):real; begin q:=x*x*x*x-14*x*x*x+60*x*x-70*x; end; begin repeat Clrscr; writeln('Нахождение оптимума по методу Фибоначчи'); VvodIsxD_FC(s,n,a,b,e); Fibonach(q,s,n,a,b,e); write('Вычислять еще?Д-1.Н-0.');readln(nom); until nom=0; end. | |