Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
25
Добавлен:
09.12.2013
Размер:
2.24 Кб
Скачать
Program laba 1;
uses crt,graph;const n=9;h=1;
type mtype=array[1..n] of extended;
const y:array[1..n] of shortint=(1,-1,0,-2,1,-1,1,0,-1);
x:array[1..n] of shortint=(-4,-3,-2,-1,0,1,2,3,4);
var i:shortint;gd,gm:integer;
xk,yk,x0,y0,l:word;
hx,hy,buf,buf1:extended;
uo:integer;post:array[2..8] of extended;
var g,o:extended;m:mtype;
function lagel(xf:extended;j,k:shortint):extended;
begin
if k<=n then
begin
if k=0 then g:=y[j] else
if k<>j then g:=g*(xf-x[k])/(x[j]-x[k]);
lagel:=lagel(xf,j,k+1);
end else lagel:=g;
end;

function Lagransh(xf:extended;u:byte):extended;
begin
o:=o+lagel(xf,u,0);
if u<n then Lagransh:=Lagransh(xf,u+1) else
begin Lagransh:=o;o:=0;end;
end;
function f(b:mtype;t:byte):extended;begin
f:=(-b[t-1]-b[t+1]+post[t])/4;end;

procedure ms;
var w,e:byte;
begin
for w:=(n-1) downto 2 do post[w]:=3*(y[w-1]+y[w+1])/h;
m[1]:=0;m[n]:=0;
for e:=1 to 255 do
begin
for w:=2 to(n-1) do
m[w]:=f(m,w);
end;
end;
function Splain(xf:extended):extended;
var i,z:byte;
begin
for i:=1 to (n-1) do if (xf>=x[i])and(xf<=x[i+1]) then z:=i;
i:=z;
if (xf>=x[1])and(xf<=x[n])then
Splain:=sqr(x[i+1]-xf)*(2*(xf-x[i])+h)*y[i]/h/h/h+
sqr(xf-x[i])*(2*(x[i+1]-xf)+h)*y[i+1]/h/h/h+
sqr(x[i+1]-xf)*(xf-x[i])*m[i]/h/h+
sqr(xf-x[i])*(xf-x[i+1])*m[i+1]/h/h
else Splain:=-1;
end;

begin
ms;gd:=Detect;
initgraph(gd,gm,'');
setbkcolor(white);
cleardevice;
xk:=getmaxx-10;
yk:=getmaxy-10;
x0:=getmaxx div 2;
y0:=getmaxy div 2;
{Osi}
setcolor(9);
line(1,y0,getmaxx,y0);
line(x0,1,x0,getmaxy);
for l:=0 to 8 do
if l<>4 then line(8+l*(xk div 8),y0,8+l*(xk div 8),y0+5);
for l:=0 to 31 do
if l<>16 then line(x0,l*(yk div 31),x0+5,l*(yk div 31));
{konec Osi}

setlinestyle(0,0,1);
hx:=(n-1)/xk;
hy:=32/yk;
setcolor(lightgreen);
moveto(5,y0-round(yk/32));
for l:=1 to xk do
begin
buf1:=(-x0+5+l)*hx;
buf:=Splain(buf1)/hy;
buf:=-buf+y0;
uo:=round(buf);
lineto(5+l,uo);
end;
moveto(5,y0-round(yk/32) );
setcolor(magenta);
for l:=1 to xk do
begin
buf1:=(-x0+5+l)*hx;
buf:=Lagransh(buf1,1)/hy;
buf:=-buf+y0;
uo:=round(buf);
if l=xk then uo:=y0+round(yk/32);
lineto(5+l,uo);
end;
readln;closegraph;end.

Соседние файлы в папке LABA1~1