Sau lời giới thiệu chươngtrình sẽ có 1 menu để lựa chọn gồm các mục:
1. Mạchmới 2. Vídụ 3. Help 4. Về DOS
Bạn gõ cácchữ có màu riêng (M, V, H, O) để tự chọn
M — Bắt đầu chương trình với một mạch điện bạn yêu cầu. Bạn có thể nhập số liệu từ file trên đỉa hoặc từ chương trình.
V - Cho chạy mẫu một ví dụ lấy trong Lý thuyết mạch - tập I H — Xem các thông tin về sử dụngchương trình
o - Kết thúc sớmchương trình và trở về DOS
Bạn sẽ nhận được các hướng dẫnto'm tắt khi đang chạy chươngtrình.
Sau khi xem đặc tuyến, bạn sẽ nhận được menu thứ hai, gồm các mục:
1. Thay đổi dải tần 2. Sửa lại số liệu 3. Mở file cấtsố liệu 4. Mạch mới
5. Về'DOS
(1) Phụ lục này là kết quả ứng dụng của một nhóm sinh viên Dại học Bách khoa, Hà Nội. Chúng tôi nêu ta dề bạn đọc tham khảo.
Bạn gõ vào 1, 2, 3, 4, 5 để lựa chọn 1. Xem lại đặc tuyến vớidải tàn mới
2. Nếu kết quả chưa vừa ý, bạn chọn mục này để sửa lại các số liệu và chạy lại chương trình.
3. Cho phép bạn mở mộtfile trên đĩa để cất só liệu. Khimuốn chạy lại mục này bạn chỉ cần mở fileđể nhập số liệuvào tìíđầu chươngtrình.
4. Bắt đàu lại chương trìnhvới một mạchđiện mới 5. Kết thúc chương trình trở về DOS
* Cách nhập sốliệu vào từ chương trình:
Nếubạn nhập số liệu vào từ chương trình, bạn sẽthấy trên màn hình hiệnrabảngsau:
Nhánh Nút nguồn
Nút
đớch Ễũằ Lr
H
c,
F
Nhánh diều khiến
Gm Nguồn
dòng
Nguồn áp 1
2
Nnh
Qui ước: dòngđiện đi vào nút lấy dấu dương, dòngđi ra nút lấy dấu âm Nút nguồn: nút có dòng đi ra của nhánh
Nút đích: nút có dòng đi vào
Nhánh điều khiển: nếu nhánh bạn đang xétcó chứa nguồnđiều khiển (kiểu DÁ hoặc các kiểu khác đâ được đổi về kiểu DĂ) thì nhánh điều khiển bằng số thứ tự của nhánh chứa điện áp điều khiển, nếu nhánh đang xét không có nguồn điềukhiểnthì bạn cho nhánh điều khiểnbằng0
Gni: hệ số dẫn nạpcủanguồn DÁ (lị = gUị) hoặc các nguồn điều khiển khác sau khi đã đổi về kiểu DÁ
R, L, C: điện trở, điện cảm, điện dung của nhánh.
Nguồn đòng, nguồn áp: nguồn dòng vànguồn ápđộc lập trên nhánh
— Khi con trỏ ở vị trícột nàobạngõvào giátrị tươngứng và gõ Enter (Return), con trỏ sẽ nhảy sang cột tiếp theo. Nếu giá trị bằng 0 bạn chỉ càn gõ Enter (Return). Khi đọc xong giátrị cột cuối cùng(Nguồn áp) con trỏ sẽnhảy tớỉcộtđầutrên(Nút đích) của nhánh tiếp theo.
Chú ý: khi đọc vào nguồn dòng và nguồn áp, đầu tiên bạn gõ vào giá trị phằn thực rồi Enter (Return), bạnsẽ thấysau đố in ’+j’, tiếpđó bạn gõvào giá trị phần ảo.
- Sau khi nhập sốliệuxong bạn sẽ được hỏi có sửa số íiệukhông? Nếumuốnsửa lại số liệu bạn hây trả lời có ’C’.
Dể sửa số liệu bạn dùng các phím mũi tên để dịch chuyển contrỏ tớivị trí hàng cột cần sửa, r&i gõ vào giá trị mới. Bạn cầnchúý: chữ số đầu tiên bạn phảigõ 2 lần - lần đầu để xóa giá trịcũ, lầnthứhai mới bắt đầu nhận số liệuvào.Nếu mạch điện có số nhánhlớn hơn 15 thì khi sửa — số liệusẽ được chia thành cáctrang. Khi sửa xong số liệutrong trang
màn hình hiện tạibạn hãygõ PgUp, PgDn để sửa trang khác. Saukhi sửa xong bạn hãy gõ
’Q’ để tiếp tục chương trình. Nếu bạn muốn dừng chương trình trở về DOS bạn hãy gõ ESC.
— Sau khi nhập số liệuxong, chương trình thực hiện việc gán ma trận dẫn nạp nút yN và ma trận nguồn dòng ZN, giải hệ phương trình mạchbàngphương pháp khử Gauss.
Kết quả in ra trên màn hình bao gồm: Ma trậndẫn nạp nút yN, ma trận nguồn dòng 7N, điệnáp trên cácnút và điện áp trên các nhánh. Nếu bạn muốn tínhvớitần sốkhác bạn trả lời ’C’ khi được hỏi "Co' tính với tần số khác không? (C/K)" và gõ vào tần số mói.
— Đê’ vẽ đặc tuyến biên độ và pha của điện áp ra ở một nút nào đo' theo tàn sóbạn cần gõ vào chỉ só của nút càn lấy điện áp ra, các tần sốUTmin vàtơmax củadải tầncần xem.
Bạn tiếp tục sử dụngchương trìnhtheo các chỉ đẫn đã nêu ở trên.
3. Cách xây dựng các ma trận Yn, In và phương pháp khủ Gauss Ta co' hệ phương trình điện áp nút ở dạng ma trận như sau:
[yN]. [UNJ = [zngN] (*)
với [yN]: matrận dẫnnạpnút [UN]: matrận điện ápnút [ZngN]: ma trận nguỡn dòng
Ma trận dẫn nạpnút [yN] có thể xây dựng theocôngthức:
[yN] = [A]. [yN]. [Á]T
trong đó [A]: matrận nút [A]r: chuyển vị của [A]
[ynh]: ma trận dẫn nạpnhánh.
Tuy nhiên có thểxây dựngtrực tiếp [yN] và [ZngN] từ các số liệu đàu vào mô tả cách nối và tính chất củacác nhánh mạch điện. Việc xâydựng trực tiếp [yN] và [ZngN] dựa vào các tỉnh chất cùachúng:
— [yN]: + là ma trận vuông có hàngvà cột đánh số theo các nút
+ Các phàn tử trên đường chéo là tổng cácdẫn nạp nối vào nút đo'
+ Các phần tử đối xứng qua đường chéolàdẫn nạpnối chunggiữa 2nút với dấu âm.
- ^ngN^ là ma tr^n c®t (không có nút gốc), mỗi phần tử của 1 hàm bằng tổng các nguồn dòng nốivào nút (kểcả các nguồn áp đổithành nguồn dòng), vôi chiều qui ước: dòng đi đivào nút lấy dấu (+), đi ra lấy dấu (—).’
Co' thể chiara 2 loại nhánh:
— Nhánh dẫn nạp: không chứa nguồn điềukhiển, có thể chứa nguồn điện áp độclập - Nhánhcó chứa nguồn điều khiển.
Loại nhánh dẫn nạp:
có Zị = y,(^ - u. + 2?ị) - zng (1) y, I. = -YẠUị - Uị + E,) + Zng (2)
- Xây dựng ma trận dẫn nạp nút [yNJ:
+ Xây dựng ma trận dẫn nạp nút thành phàn lần lượt cho từng dòng điện nhánh ở các nút dựa vào các phương trìnhđặc tính (1) và(2)
+ Xây dựng trựctiếp ma trận [yN] của toàn mạch bằng cách lấy tổng các phần tử tương ứng với cáchàngvà cáccột của matrận dẫn nạp nút thành phànlàm thành phần tử ở các hàng và cột tương ứngvủa ma trận dẫn nạp [yN]
[41 =
[Y^]:matrậndẫn nạp nút thành phần của nhánh l Vị trí của các phần tử ma trận [ỵịự] toàn mạch:
... i.. j [y^íỊ-y, -y,
Ị L-y< Y>
- Xây dựng ma trận nguồn dòng [ZngNJ: viết dòng điện nguồn cho từng nhánh. Ỏ từng nút, lấy tổng các phàn tử của ma trận ZngN thành phàn ở các hàng tương ứng sẽ có ma trận ZngN của toàn mạch. Chiều củacác dòng điện như đã nói ở trên.
AigN 1
Aigl s rtfic
~ ^ngl ~ Aig
-^ng - w
Chú ý: Nếu núti (hoặcj) được chọn làm nút gốc thì trongma trận [yN], V| chí xuất hiện tại vị trí Vịị (hay Vjj) ứng với nútkhông chọn làm gốc.
i
(2) Loạinhánhcó nguồn diều khiển DA:
Phươngtrình đặctính:
ễ m
k s m
ễ tn
A = ểmôA< - un + Ec) - zngl
j
Ma trận dẫn nạp nút và ma trận nguồn dòng của nhánh1 nối giữa 2 nút i và j:
[^1 = ị i
j
Vị trí của trongma trận
[yN] = •
‘ j
ĩ
í-^ngN^ = J
[yN] của toànmạch và [/ngN]ị ... k ... m
••• ẽm ••• ~Sm
Aigl — Sm^c
~ ^ngl —
* Phươngpháp khử Gauss giải hệphương trình diện áp nút:
Sau khi xây dựngxong [yNl và [lngIq], có thể tính ra ma trân điện áp nút [Ỉ7N] từ công thức (*):
(yNi. [UN1 = ư,N] - [tzN] = J„N]. [yNr>
Làm theocáchnày sẽ phải tỉnhmatrận nghịch đảo [YN]~1 của [yN], việc này sẽ làm mất nhiều thời gian tính toán. Ta sẽ giải hệ nàybàng phương pháp khử Gauss:đưa matrận [YN] về dạng bậc thang có các phần tử trên đườngchéobằng 1 vàcác phần tử nàm dưới đường chéo đều bằng0
Thuật toán đưa ma trận về dạng bậc thang
— Xét matrận A[m X n]
1. Lấy As là ma trận phụ củaA. Dầu tiên As =A
2. Dò As theo từng cột từ trái sangphải cho đến khi gặp cột khác không (cột c). Nếu khụng cố cột nào ỹẫ 0 -ằ As = 0, chương trỡnh dựng
3. Dò theo cộtc tìí trên xuống dưới cho đến khi gặp phầntử khác không đầu tiên (ở hàngr)
4. Đổi hàng 1 và hàngr củaAs (các bướcphải thực hiện vớiAs mớinhất) 5. Nhânhàng 1 của Asvới nghịch đảocủa phần tử (l,c) của As đangxét.
6. Dưa tấtcảcác phầntử ởdưới hàng 1 thuộccột cvề 0: để đưa phần tử (m,c) ở hàng m về 0 talàmnhưsau: + nhân các phần tử hàng 1 của As vớiAs[m,c]
+ Lấy hàng m trừ đi các phần tử tương ứng của hàng 1
7. Sau 6 bước trên ta được mộtAs mới gồm các phần tử của As cũ trừ hàng 1 và cột c. Nếu As mới tồn tại thì quy vềbước2. Nếukhông chương trình kết thúc.
Sau khi đưa [yNJ về dạng bậc thang, hệ phương trình điện áp nút biểu diễn theo ma trận có dạng:
*S1
*21
y12...
*22 — K' n '
*^2N
1
Aigi Ạig2
*N1 *\n AigN (3)
1 0 0
^*12 — ^IN 1 - y>2N
0 1
u2
1 ng 1 ng
(4)
Ó 0 ... 0
xét hàngthứ í' có:
L ỨN 1 ngN
Ui + ,grjN. N Uị = rngi
N
Uị = ~ịỉ rJN ■ ư>
Từ (4) cóthể tính được các điện áp nút theo công thức (5) với thứ tự từ nút thứ N đến nút 1
Lưu đothuậi toán
PROGRAM NODAL;
USESCRT,GRAPH,WINDOWS,IO;
TYPE
string2=string[2];
Mangl = Array [Byte] of Real;
mang2=array[Byte] of Integer;
KYN=Array[1..40,1..41] of Real;
Mang3=Array [1..100] ofstring2;
VAR
YN1,YN2:KYN;
NNODE,NBR,I,J,NN:Byte;
Yl,Y2,R,L,C,Jl,J2,El,E2,G:Mangl;
NFR0M,NT0,IC0NT:Mang2;
omega:Real;
kndk:Mang3;
TL, T11, T12.T13, T14, T15,ch :Char;
k:Integer;
(*---...---♦) PROCEDURE GaussCVarAl,A2:KNY;Nl:Byte);
Var
ij,NNl,k,m:Byte;
Pl,P2,Ql,Q2,Ri,R2,TGl,TG2:Real;
Begin
NN1:=N1 + 1;
For j:= 1 to N1 do Begin
Pl:=Al[jj];P2:=A2[jj];
IfP1*P1+P2*P2=Othen Begin
■ m:=j;
Reprat m:=m+l Until (Al[mj]*Al[mj]+ A2[mj]*A2[mj])< >0;
Fori:= j to NN1 ddo Begin
TGl:=Al[j,i];TG2:=A2[j,i];
Al[j,i]:=Al[m,i];A2|j,i]:=A2[m,i];
Al[m,i]:=TGl;A2[m,i]:=TG2;
End;
End;
For i:=j to NN1 do Begin
Ql:=Al[j,i];Q2:=A2[j,i];
Al[j,i]:=(Pl*Ql+P2*Q2)/(Pl*Pl+P2*P2);
A2[j,i]:=(Pl*Q2-P2*Ql)/(Pl*Pl+P2*P2);
end;
For k: =j to N1 do
For i:=jto NN1 do Begin
Rl:=Al[k,i];R2:=A2[k,i];
Al[k,i]:-Al[k,i]-Rl*Al[j,i]+R2*A2[j,i];
A2[k,i]:=A2[k,i]-Rl*A2U,i]-R2*Al[j~i];
End;
End;
For j:=Nl-l downto 1 do For i:=j +l toN1 do
Begin
Al{j,NNl]:=Al[j,NNl]-Al[i>NNl]*Al[j,i]+A2[i,NNl]*A2|j,i];
A2U,NNl]:=21[j,NNl]-Al[i,NNl]*A2ij,i]-A2[i,NNl]*Al[j,ii;
End;
Writein;
End;
(*---*) PROCEDURE GACH_NGANG;
Var i:Byte;
Begin
GotoXY( 15, WhereY);Textcolor(7);
For i: = l to 30doWriteC ’);
GotoXY(15,WhereY+l);
End;
PROCEDURE IN2;
Var
j:Integer;
dau:Char;
Begin
Textcolor(14);
GotoXY(20,WhereY);
WritelnfDien ap tren cac nut ’);
GotoXY(20,WhereY);
WritelnC*********************’)- For j: = l to NNODE do
Begin
If YN2(j,NNODE+l]>0 then dau:=’+’ Else dau:=’-’;
WritelnC U’j,’=’,YNl|j,NNODE+l]:10:7,dau,’j’, Abs(YN2[j,NNODE+1]):10:7);
Ifj mod24=0than Repeat UntilKeypressed;
End;
Gach ngang;
Readln;
End;
--- ---*) PROCEDURE Ghichu(ch:Char);
Begin
Window(l,23,80,25);TextBackGround(7);Clrscr;
TextColor(O);
Case ch of
’S’:Begin
GotoXY(35,l);TextColor(4);write(’Fl:’);
TextColor(0);write(’HELP’);
GotoXY(2,2) ;TextColor(4);
Write(#27,’, ,#24,’,’,#25,’,,#26,’,’,’Home,End:’);TextColor(0);
Write(’Dich contro ’);
TextColor(4);Write(7PgUp,PgDn,Ctrl PgUp,Ctrl PgDn:’); TextColor(O);
WriteCDoi trang’);
GotoXY(10,3);TextColor(4);
Write(’\ Q:’);TextColor(0);Write(’Dung sua so lieu ’);
TextColor(4);Write(’ESC:’);
TextColor(0);Write(’Thoat khoi chuong trình’);
End;
’V’:Begin
GotoXY (5,1 );TextColor(4);
WriteCQUI UOC:’);TextColor(0);
WritelnCNut nguon : nut co dongdi ra,nut dich : nut codong di vao’);
GotoXY(5,2);TextColor(4);
WritefLuuy:’);TextColor(0);
WritelnCCac nguon dieu khien phai dua ve kieuDA’);
End;
End;
End;
(*...*) procedure Banquyen;
Begin
Window( 1,1,80,1);
TextBackGround(7);Clrscr;TextColor(4);
Writeln(’Fl:HELP’);
End;
(*—-...---*)
PROCEDURE Readfromdisk(Var nnguon,ndich,ndk:Mang2; Var tro,cam,tu,dongt,donga,apt,apa,g:Mangl; Var nut,nhanh:Byte; Var tanso:Real; name :String);
Var
F:Text;
st:string;
Begin Repeat
Assign(F,name);
{$!-}
Reset(F);
{$!+}
IfIOresult<>0then Writeln(’Khong mo duoc file voi ten nay ’);
Until loresuit=0;
ReadlnlF.nutjCh.nhanh.ch.tanso);
For i:= 1to nhanh do Begin
ReadlniF.nnguondl.CH.ndichm.CH.trotU.CH.camm^H^utU.CH, ndk[I],CH,g[I],CH,dongt[I],CH,donga[I],CH,Apt[I],CH,apa[I]);
End;
Close(F);
End;
(*...-...-...-...-♦) PROCEDURE Vaogiatri;
Var
ij,k,a,x,y:Integer;
ch,tl:char;Name:String;
(*-... ...*) PROCEDURE Kecot(y,n:Integer);
Begin
Write(’3’,y:3);
GotoXY(7,n);Write(’3’);
GotoXY(13,n);Write(’3’);
GotoXY(18,n);Write(’3’);
GotoXY(25,n);Write(’3’);
GotoXY(31,n);Write(’3’);
GotoXY(38,n);Write(’3’);
GotoXY(44,n),Write(’3’);
GotoXY(50,n),Write(’3’);
GotoXY(65,n);Write(’3’), GotoXY(79,n);Write(’3’);
End;
(*--- *) Begin
Clrscr;
omega: = 0;NN ODE:=0;NBR: =0;
TextMode(C40);TextBackGround(l);
clrscr;
Repeat clrscr;
CursorSize(’O’);
Setwindow(20,12,38,6,2);TextColor( 15);
GotoXY(4,3);
CursorSize(’S’);
Wriet(’l: Nhap so lieu tu file’);
GotoXY(4,4);
Write(’2: Nhapso lieu tuchuong trình’);
GotoXY(6,5);
WriteCBanchon(l,2):’);
Readln(tl);
Until Upcase(tl) in[’l’,’2’];
If Upcase(tl)=’r then Begin
clrscr;
GotoXY(2,2);TextColor(15);
WritelnCTen file chua so lieu GotoXY(3,3);Readln(name);
Readfromdisk(NFROM,NTO,ICONT,R,L,C,Jl,J2,Rl,R2,G,NNODE, NBR, omega,name);
Write!’ So lieu dadocvaoxong’);
Repeat Until Keypressed;
Exit;
End;
Repeat
TextColor( 15); clrscr; GotoXY(2,l);
WritelnCNhap vao tan so,so nut,so nhanh:’);
GotoXY(2,2);Write(’Tan so:’);Readln(omega);
GotoXY(20,2);Writeln(’rad/s’);
GotoXY(2,3);Write(’So nut(khong ke nut goc):’);Readln(NNODE);
GotoXY(2,4);Write(’So nhanh:’);Readln(NBR);
GotoXY(2,5);Write(’Co sua so lieukhong?(C/K):’);Readln(tl);
Until Upcase(tl) = ’K’;
TextMode(c80);TextBackGround(l);
Clrscr;TextColor( 14);
Writein;
WritelnC Tan so:’,omega:8,’rad/s’,’ So nut:’,NNODE,’ So nhanh:’,NRB);
WritelnCZ—--B-—-B---B-—-B—-B...B.B---B’);
Writeln(’3Nhanh3 Nut 3 Nut3 R 3 L 3 c 3Nhanh3 Gm Nguon 3Nguon 3’);
Writeln(’3 3nguon3dich3 (j) 3 (H) 3 (F) 3d.kh 3 3 dong3 ap ’);
WritelnCC----E'---E—-E-...E----E-...E---- E... E--- E—... -E’); Banquyen;
Ghichu(’V’);
Window(l,7,80,22);
Tex tBackgroundí 1) ;TextColor (14);
ifNBR>15 then k: = L5elsek:=NBR;
For i:= 1 to k do Kecot(i,i);
If k=NBR then
Writeln(@----Ar-—A-—A...A----A---A---A---A--- A--- A’);
GotoXYd.l);
For i:= 1 toNBR đo
Begin j:=i;
If i>15 then Begin
j. = 15;
GotoXY(l,l);DelLine;
GotoXY(1,15) ;Kecot (1,15);
End;
If (i=NBR)and(k< >NBR)then
Writeln(@—-A...A-—A...A...A...A—-A—-A...-A---A’);
NFROM[I]:=0;GotoXY(9j);ReadInteger(NFROM[I]);
NTO[I]:=0; GotoXY( 15 j);FteadInteger(NTO[I]);
R[I]: = 0;GotoXY( 19 j);ReadReal (R[I]);
L[I]:=0; GotoXY(26j);ReadReal(L[I]);
cm:=0, GotoXY(32j);ReadReal(C[I]);
ICONT[I]:=0; GotoXY(40j);ReadInteger(ICONT[IJ);
If ICONT[I]=0 thenICONT[H=i;
g[i]:=0;
If ICONT[I]<>i then Begin
GotoXY(46j);ReadReal(G[i]);
End;
Jl[I]:=0;J2[I]:=0;
GotoXY(51 j);ReadReal(Jl [I]);
GotoXY(59j),Write(’+j);
ReadReal(J2[I]);
El[I]:=0;R2[I]:=0;
GotoXY(66j);ReadReal(El [I]);
GotoXY(72j)-Writer +j’>;
ReadReal(E2[I]);
End;
End;
---*) PROCEDURE HELP; FORWARD;
(*---...---*)
PROCEDURE Sua(var nnguon,ndich,ndk:Mang2; Var tro,cam,tu,dongt, donga,apt,apa,g:Mangl);
Var
tr,i:0..30;
x,y,a,b:Byte;
ch,chl:Char;
(*--- - ---*) PROCEDURE Page(a:Byte);
Var
ij,n:Integer;
ch:€har;
Begin
TextMode(C80);TextColor(14);TextBackGround(l);Clrscr;
Writein;
Writein!’ Tan so:’,omega:8,’rad/s’,’ So nut:’,NNODE, ’Sonhanh:’,NBR);
WritelnC’Z—-B-—B---B——B——B---B—--B—-B ---B-————B’);
Writeln(’3Nhanh3Nut 3 Nut3 R3 L 3 c 3Nhanh3 Gm 3 Nguon 3 Nguon3’);
Writeln(’33nguon3dich3 (j) 3 (H) 3(F) 3d,kh 3 3 dong 3 ap’);
Writelni’C—--E—-E-—E--—-E--—E--—-E—--E-—E...—....-E...-3’);
Banquyen;Ghicuh!’S’);
Window! 1,7,80,22);TextBackGround(l);TextColor( 14);
Clrscr;GotoXY(l,l);
If(NBR-a*15)< 15then n:=NBR mod 15elsen:= 15;
For i:=l to ô do Begin
j:=a*15+i;
Write(’3’j:3);GotoXY(7,i);Write(’3’);If nnguon[j]<>0then Write(nnguon[j]:3);
GotoXY(13,i);Write( 3’);If ndich[j]< >0 then Write(ndich[j]:3);
GotoXY(18,i);Write(’3’);If tro[j]< >0 then Write! tro[j]:5:3);
GotoXY(25,i);Write(’3’);If cam[j]<>0then Write(cam[j]:5:3);
GotoXY(31,i);Write(’3);Iftu[j]<>0 then Write(tu[j]:5:3);
GotoXY(38,i);Write(’3’);If ndk[j]< >i then Write(ndk[j]:3);
GotoXY(44,i);Write(’3,);If (g[j]< >0) then Write(g|j] :5:3);
GotoXY(50,i);Write(’3’);If (dongt[j]< >0) or (donga[j]< >0) then Write(dongt[j]:5:3,’ +j’,donga[j]:5:3);
GotoXY(65,i);Write(’3’);If (apt[j]< >0) or(apa[j]< >0) then Write(apt[j]:5:3,’+j’,Apa[j]:5:3);
GotoXY(79,i);Writeln(’3’);
Endf
If(NBR-a*15)i< 15 then
Writeln(@- —A---A—-A-...A...A...A...A—-A...-A---A’);
GotoXY(9,l);
End;
(*... ...*) Begin
tr:=NBR div 15;i: = 0;
Page(i);
Repeat
x:=WhereX;y:=WhereY+i*15;
ch:=ReadKey;
If ch=#o then Begin
chl:=Readkey;
Case chi of
#72:Begin GotoXY(WhereX,WhereY-l);y:=y-l;End;
#75:GotoXY(WhereX-l,WhereY);
#77:GotoXY(WhereX+1, WhereY);
#80:Begin GotoXY(WhereX,WhereY+l);y:=y+l;End;
#73:If i< >0 then Begin i:=i-l;Page(i);End Else Begin i:=0;Page(0); End;
# 81 :If i<tr then Begini:=i + l;Page(i); End Else Begin i:=tr;Page(tr);End;
#71:GotoXY(8,WhereY);
# 79 :GotoXY(68, WhereY);
# 118:Begin i: = tr;Page(tr);End;
# 132:Begini: =0;Page(0);End;
#59:Begin Help;CursorSize(’S’);Page(i);End;
End;
End;
If chin [’O’..’9’] then Case X of
8..12:Begin
GotoXY(8,WhereY);
For j:= 8 to 12 do WriteC ’);
GotoXY( 10, WhereY);
Readinteger (NFROM [y]) ;GotoXY( 14, WhereY); End;
14..17:Begin
GotoXY(14,WhereY);
Forj:=14 to 17doWriteC ’);
GotoXY(15,Where Y);
ReadInteger(NTO [y]) ;GotoXY(19, WhereY); End;
19..25:Begin
GotoXY(19,WhereY);
For j:= 19 to 24 do WriteC ’);
GotoXY(19,WhereY);
ReadReal(R[y]);GotoXY(27,WhereYi);
End;
26..30:Begin
GotoXY(26,WhereY);
For j:=26 to 30doWriteC ’);
GotoXY(26,WhereY);
ReadReal(L[y]);GotoXY(27,WhereY);
End;
32..37:Begin
GotoXY(32, WhereY);
For j:=32to37do WriteC ’);
GotoXY(32,Where Y);
ReadReal(C[y]);GotoXY(40,WhereY);
End;
39..43:Begin
GotoXY(39, WhereY);
For j:=39 to43 do WriteC ’);
GotoXY(39, WhereY);
ReadInteger(ICONT[y]) ;GotoXY(46, WhereY); End;
45..49:Begin
GotoXY(45,WhereY);
For j:= 45 to49do WriteC’);
GotoXY(45, WhereY);
ReadReal(g[y]);GotoXY(51,WhereY);
End;
51..64:Begin
G otoXY( 51, WhereY);
For j: = 15 to64 doWriteC ’);
GotoXY(51, WhereY);
ReadRealQ 1 [y]) ;GotoXY(57,WhereY);
WriteC+j’);
ReadReal(j2[yJ);
GotoXY( 66, WhereY);
End;
66..79:Begin
GotoXY(66,WhereY);
For j:=66 to 79 doWriteC ’);
GotoXY(66, WhereY);
ReadReal(El[y]);GotoXY(72,Where Y);
Write(’+j’);
ReadReal (E2 [y]);
GotoXY(8,WhereY+l);
End;
End;
If ch= #27then Halt;
x:=WhereX;
UntilUPcase(ch)= ’Q’;
TextMode(C80);TextBackGround(10;TextColor(14);clrscr;
Clrscr;
End;
(*-...-... ... ...--*) PROCEDURE GAN(VarYN1,YN2:KYN);
Var
ij,IA,IB,IC,ID,ICON:BYTE;
Begin
for i:=1. to NBRdo Begin
Yl[i]:= 0;Y2[i]: = 0;
End;
For i: = 1 to NN ODE do For j:= 1 to NN do
Begin
YNl[ij]:=0;Yn2[ij]:=0;
End;
For i:= lto NBR do Begin
IfR[i]< >0 then Yl[i]:= 1/R[i];
If L[i]< >0then Y2[i]:=-l/(omega*L[i]);
If C[i]< > 0 then Y2[i]:=onega*C[i];
Ifg[i]<>0thenYl[i]:=g[iJ;
ICON:=ICONT[I];IA:=NFROM[I];IB:=NTO[I];
IC:=NFROM[ICON] ;ID:=NTO[ICON];
If (IA*IC)< >0then Begin
YN1 [IAJC]: =YN1 [IA.IC]+Y1 [I];
YN2[IA,IC]:=YN2[IA,IC]+Y1[I];
End;
If (IA*ID)< >0 then Begin
YN1 [IA,ID]:=YN1[IAJDJ-Y1 [I];
YN2[IA,ID]:=YN1[IA,ID]-Y2[I], End;
If (IB*IC)<>0 then Begin
YN1[IB,IC]:=YN1[IB,IC]-Y1[I];
YN2[IB,IC]:=YN2[IB,IC]-Y2[I], End;
If(IB*ID)< >0 then Begin
YN1[IB,ID]: =YN1 [IB,ID]+Y1 [I];
YN2 [IB, ID]: = YN2 [IB,ID] +Y2 [I]; End;
If IAo0 then Begin
YN1[IA,NN]:=YN1[LA,NN]-J 1 [I] + Y1[I] *E 1 [ICON]-Y2 [I] *E2 [ICON];
YN2[IA,NN]:=YN2[IA,NN]-J2[I]+Y1[I]+R1[ICON]+Y2[I]*E1[ICON]
End;
IfIBoO thẹn Begin
YN1 [IB,NN]:=YN1 [IB,NN]+ J1 [I] -Y1 [I] *E 1 [ICON]+Y2[I]*E2[ICON];
YN2[IB,NN]:=YN2[IB,NN]+J2[I]-Yl[I]*E2[ICON]-Y2[i]*El[ICON];
End;
End;
End;
(*...*) PROCEDURE INI;
Var
ij,NNl:Byte;
dau:Char;
Begin
NN1:=NNODE+ l;Writeln;TextColor(14);
GotoXY(20,WhereY);
Writeln(’Matrannguon dong’);
GotoXY(20, WhereY);
WritelnC******************’)- For i:= 1 to NNODEdo
Begin
If YN2[i,nnl]< >0 then dau:=’+’ Else dau:=’-’;
WritelnC IngN[’,i,’] = ’,YN 1 [i,NN1] :6:3, dau,’j’,Abs(YN2[i,NNl]):6:3);
. Ifi mod 24=0then Repeat Until Keypressed;
End;
Gach ngang;
Readln;
End;
(*-...-...*) PROCEDURE IN3;
Var
ij:Byte;
dau:String2;
Begin
Gachngang;
GotoXY(20,WhereY);TextColor( 14);
WritelnfMa trandannap nut’);
GotoXY(20,WhereY);
WritelnC*** ********** ******’)•
For i:=l to NNODE do Begin
For j:= 1 to NNODE do Begin