Код:
Program F_An;
uses CRT;
type complex = record re, im: real;
end;
type Opis_comp = record nam:char;a,b:integer; par: real;
end;
const n=2; Ninp=1; Nout=2; Nf=21; f1=0.01; f2=100;
Zapis: array [1..2] of Opis_comp=
((nam: 'R'; a:1; b:2; par:1),
(nam: 'C'; a:2; b:0; par:0.159));
var i,j,k, m, a, b : integer;
f,df,w,Kvid,Kdb: real;
Cres,t, z, y1: complex;
Y:array [0..n,0..n+1] of complex;
Procedure CAdd(C1, C2: complex; var Cres:complex);
begin Cres.Re:= C1.Re+C2.Re; CRes.Im :=C1.Im+C2. Im
end;
Procedure CMinus(C1, C2: complex; var Cres:complex);
begin Cres.Re:= C1.Re-C2.Re; CRes.Im :=C1.Im-C2. Im
end;
Procedure CMult(c1, c2: complex; var Cres:complex);
begin Cres.re:= c1.Re*c2.Re-c1.im*c2.im;
CRes.im:= c1.re*c2.im+c2.re*c1.im
end;
Procedure CDiv(c1, c2: complex; var Cres:complex);
var q:real;
begin q:=c2.re*c2.re+c2.im*c2.im;
Cres.re:= (c1.Re*c2.Re+c1.im*c2.im)/q;
Cres.im:= (c1.im*c2.re-c1.re*c2.im)/q;
end;
Begin
ClrScr;
df:=exp((ln(f2)-ln(f1))/(Nf-1));
f:=f1;
for m:=1 to Nf do
begin
w:=2*Pi*f;
for i:=0 to n do
for j:=0 to n+1 do
with Y[i,j] do
begin re:=0; im:=0
end;
for i:=1 to 2 do
begin
with Zapis[i], y1 do
begin
case nam of
'R': begin re:=1/Par; im:=0
end;
'C': begin re:=0; im:=w*Par
end;
end; {case}
CAdd (Y[a,a], y1, Y[a,a]);
CAdd (Y[b,b], y1, Y[b,b]);
Cminus(Y[a,b], y1, Y[a,b]);
Cminus(Y[b,a], y1, Y[b,a]);
end; {with}
end; { for i }
Y[Ninp, n+1].re:=1;
for k:=1 to n-1 do
for i:=k+1 to n do
begin
CDiv(Y[i,k], Y[k,k], z);
for j:=1 to n+1 do
begin CMult(z, Y[k, j], t); CMinus(Y[i, j], t, Y[i, j])
end;
end;{direct step}
for i:=n downto 1 do {invers step}
begin
z:=Y[i,n+1];
for j:=i+1 to n do
begin CMult(Y[i, j], Y[j, n+1], t); CAdd(z, t, z)
end; {sum for j }
CDiv(z, Y[i, i], Y[i, n+1]);
end; { for i }
Cdiv(Y[Nout, n+1], Y[Ninp, n+1], y1);
Kvid:=sqrt(sqr(y1.re)+sqr(y1.im));
Kdb:=20*ln(Kvid)/ln(10);
writeln('f',m:2,'=',f:7:3,' kGc K= ', Kvid:5:3,' Kdb=',Kdb:3:0,' dB');
f:=f*df
end; {for m to Nf}
readln
end.