Witam, muszę przepisać program obliczający wartości wielomianu algorytmem Neville'a i mam mały problem. A mianowicie po przepisaniu go do Octave dostaję błąd:
syntax error
endfunction
^
Próbuje dojść od dłuższego czasu co ja dokładnie zrobiłem źle, lecz nie widzę.
Pascal
type vector = array [ 1..100] of Extended;
function Neville (n : Integer;
x : vector;
xx : Extended;
var f : vector;
var st : Integer) : Extended;
var i,k : Integer;
begin
if n<0
then st:=1
else begin
st:=0;
if n>0
then begin
i:=-1;
repeat
i:=i+1;
for k:=i+1 to n do
if x[i]=x[k]
then st:=2
until (i=n-1) or (st=2)
end;
if st=0
then begin
for k:=1 to n do
for i:=n downto k do
f[i]:=((xx-x[i-k])*f[i]-(xx-x[i])*f[i-1])
/(x[i]-x[i-k]);
Neville:=f[n]
end;
end;
end;
var n,st:Integer;
var x,f :vector;
xx,wynik :Extended;
BEGIN
n:=5;
x[0]:=1;x[1]:=2;x[2]:=3;x[3]:=4;x[4]:=5;x[5]:=6;
xx:=2.5;
f[0]:=1; f[1]:=4; f[2]:=9; f[3]:=16; f[4]:=25; f[5]:=36;
wynik:=Neville(n,x,xx,f,st);
writeln(wynik,' ',st);
readln();
END.
Octave:
function wynik=neville(n,x,xx,f,st)
if n<0
st=1; endifif n>0;
i=-1; endif
do
i=i+1;
for k=i+1:n
if x(i)==x(k)
st=2; endif endfor
while(i==n-1) || (st==2) endwhileif st==0
for k=1:n
for i=n:-1:k
f(i)=((xx-x(i-k))*f(i)-(xx-x(i))*f(i-1))/(x(i)-x(i-k));
endfor
wynik=f(n);
endforendif
st
endfunction
mad_penguinmad_penguin