{$N+}Program M; CONST n=20; bodu=100; TYPE vektor=array[1..n] of real; VAR i,j:integer; xn,yn,An,Bn,Cn,Dn,krok:real; a,b,c,x,y,y2,rho,mu,f:vektor; filein,fileout:text; BEGIN ASSIGN(filein,'vst.dat'); ASSIGN(fileout,'vystup.dat'); RESET(filein); REWRITE(fileout); FOR i:=1 TO n DO BEGIN READ(filein,x[i]); READ(filein,y[i]); rho[i]:=0; mu[i]:=0; y2[i]:=0; END; FOR i:=2 TO n-1 DO BEGIN c[i]:=(x[i]-x[i-1])/6; a[i]:=(x[i+1]-x[i-1])/3; b[i]:=(x[i+1]-x[i])/6; f[i]:=(y[i+1]-y[i])/(x[i+1]-x[i])-(y[i]-y[i-1])/(x[i]-x[i-1]); END; FOR i:=2 TO n-1 DO BEGIN mu[i+1]:=-b[i]/(c[i]*mu[i]+a[i]); rho[i+1]:=(f[i]-c[i]*rho[i])/(c[i]*mu[i]+a[i]); END; FOR i:=n-1 DOWNTO 2 DO y2[i]:=mu[i+1]*y2[i+1]+rho[i+1]; {FOR i:=1 TO n DO WRITELN(y2[i]:7:3);} krok:=(x[n]-x[1])/(bodu-1); xn:=x[1]; FOR i:=1 TO bodu DO BEGIN j:=1; WHILE (x[j]<=xn) DO BEGIN IF (j=n) THEN BREAK; j:=j+1; END; j:=j-1; An:=(x[j+1]-xn)/(x[j+1]-x[j]); Bn:=1-An; Cn:=An*(An*An-1)*(x[j+1]-x[j])*(x[j+1]-x[j])/6; Dn:=An*(An*An-1)*(x[j+1]-x[j])*(x[j+1]-x[j])/6; yn:=An*y[j]+Bn*y[j+1]+Cn*y2[j]+Dn*y2[j+1]; WRITELN(fileout,xn:5:3,' ',yn:5:3); xn:=xn+krok; END; CLOSE(filein); CLOSE(fileout); WRITELN('Hotovo'); READLN; END.