Скачиваний:
329
Добавлен:
04.03.2014
Размер:
3 Кб
Скачать
program slau;
uses crt;
type mas=array[byte] of real;
     mas_pr=array[1..10] of real;
var As,Bs,a,b,c,d,x,h,xs,ys,r:mas;
    l,k,m,i,n,flag,z,w,q,qa,qe,xx,yy:integer;
    xp,yp:mas_pr;
procedure fslau(n:integer;a,b,c,d:mas;var As,Bs,x:mas;var flag,z:integer);
label 1,5;
var i:integer;
    e,alf,bet:real;
begin  n:=n-1;z:=n;
{prymaya progonca}
As[1]:=-c[1]/b[1];
Bs[1]:=d[1]/b[1];
for i:=2 to n-1 do
  begin e:=a[i]*As[i-1]+b[i];
  if e=0 then begin flag:=1;z:=i;goto 1;end;
  As[i]:=-c[i]/e;
  Bs[i]:=(d[i]-a[i]*Bs[i-1])/e;
  end;
{obrathaya progonca}
alf:=a[n]*As[n-1]+b[n];
bet:=d[n]-a[n]*Bs[n-1];
if alf=0 then begin
    if bet=0 then flag:=2 else flag:=3;
    goto 1;
    end;
x[n]:=bet/alf;
for i:=n-1 downto 1 do x[i]:=As[i]*x[i+1]+Bs[i];
1:
end;
procedure pro(s:string;m:integer);
var j:integer;
begin for j:=1 to m do write(s);end;
function spline(mun:integer;u:real):real;
var p,t,f:real;
begin p:=xs[mun-1];
      t:=u-p;
      f:=a[mun]+b[mun]*t+c[mun]*t*t+d[mun]*t*t*t;
      spline:=f;
end;
function numb(n:integer;t:real;xs:mas):integer;
var l:integer;
begin l:=0;
      if t<xs[0] then numb:=1 else
      if t>xs[n] then numb:=n else begin
         repeat l:=l+1
         until ((t>=xs[l-1])and(t<=xs[l])) or (l>=n);
         if (t>=xs[l-1])and(t<=xs[l]) then numb:=l else numb:=0;
         end;
end;
procedure vvod(k:integer;var xp,yp:mas_pr);
var i,xx,yy,m:integer;
begin writeln('‚ўҐ¤ЁвҐ ¬ ббЁў Їа®¬. §­ зҐ­Ё©');
             for i:=1 to k do begin write('x[',i,']=  ');
                 xx:=wherex;yy:=wherey;
                 repeat gotoxy(xx,yy);pro(' ',10);
                        gotoxy(xx,yy);readln(xp[i]);
                        m:=numb(n,xp[i],x);
                 until m>0;
                 yp[i]:=spline(m,xp[i]);
             end;
end;
BEGIN clrscr;
write('‚ўҐ¤ЁвҐ n-  Є®«-ў® ®в१Є®ў');
readln(n);
w:=8;qa:=5;q:=7;qe:=8;
gotoxy(2,5);write('i');gotoxy(2,7);write('X(i)');gotoxy(2,8);write('Y(i)');
for i:=0 to n do begin
  gotoxy(w,qa);write(i);
  gotoxy(w,q);read(xs[i]);
  gotoxy(w,qe);read(ys[i]);
if i<>0 then begin
    h[i]:=xs[i]-xs[i-1];
    r[i]:=(ys[i]-ys[i-1])/h[i];
end;
w:=w+5;
end;
for i:=1 to n-1 do begin
  b[i]:=2*(h[i]+h[i+1]);
  d[i]:=3*(r[i+1]-r[i]);if i<>1 then a[i]:=h[i];
end;
for i:=1 to n-2 do c[i]:=h[i+1];
FSLAU(n,a,b,c,d,As,Bs,x,flag,z);
writeln('&&&&& ',n);
if flag=0 then begin
  for i:=1 to n-1 do begin
    c[i+1]:=x[i];c[1]:=0;c[n+1]:=0;
    end;
  for i:=1 to n do begin
    a[i]:=ys[i-1];
    b[i]:=r[i]-h[i]/3*(c[i+1]+2*c[i]);
    d[i]:=(c[i+1]-c[i])/3*h[i];
  end;
  for i:=1 to n do writeln(a[i]:3:5,' ',b[i]:3:5,' ',c[i]:3:5,' ',d[i]:3:5);
end;
{‚лзЁб«Ґ­Ёп ў Їа®¬. в®зЄ е}
writeln('‚ўҐ¤ЁвҐ Є®«-ў® Їа®¬. §­ зҐ­Ё© (<=10)');
readln(k);
VVod(k,xp,yp);
for i:=1 to k do writeln(' ',yp[i]:3:5,' ');
case flag of
1:writeln('‘Ёб⥬   ­Ґ  аҐи Ґвбп ¬Ґв®¤®¬ Їа®Ј®­ЄЁ');
2:writeln('‘Ёб⥬  Ё¬ҐҐв ЎҐбЄ®­Ґз­® ¬­®Ј® аҐиҐ­Ё©');
3:writeln('‘Ёб⥬         ­Ґ       б®ў¬Ґбв­ ');
end;
readln;
readln;
END.
Соседние файлы в папке Alex