home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1986-08-17 | 11.7 KB | 335 lines |
- 10 CLS: PRINT "FLOW GRAPH NODE REDUCTION PROGRAM V1.0M (8/18/86)
- 20 PRINT "Written by David Love for the TSC Electronics Program and
- 30 PRINT " *********************************************
- 40 PRINT " * *
- 50 PRINT " * DR. ALLEN KATZ, CHAIRMAN *
- 60 PRINT " * DEPT ELECTRONICS ENGINEERING TECHNOLOGY *
- 70 PRINT " * TRENTON STATE COLLEGE, CN550 *
- 80 PRINT " * TRENTON, NEW JERSEY 8625 *
- 90 PRINT " * *
- 100 PRINT " * THE AUTHOR RESERVES THE RIGHTS TO THIS *
- 110 PRINT " * PROGRAM; HOWEVER, COPYING AND USE FOR *
- 120 PRINT " * EDUCATIONAL PURPOSES IS ENCOURAGED. *
- 130 PRINT " * *
- 140 PRINT " * PLEASE REPORT ANY ERRORS OR PROBLEMS *
- 150 PRINT " * WITH THIS PROGRAM TO THE AUTHOR. *
- 160 PRINT " * TEL (609) 771 2487 *
- 170 PRINT " * *
- 180 PRINT " *********************************************
- 190 DIM L$(4): PI=4*ATN(1)
- 200 PRINT: INPUT "WANT AN EXPANATION (Y/N)"; Q$
- 210 IF Q$<>"Y" THEN GOSUB 1970: GOTO 240
- 220 CLS:
- 230 GOSUB 1750
- 240 INPUT"DATA OR COMMAND";U$
- 250 IF U$="ME" OR U$="HELP" THEN GOSUB 1970: GOTO 240
- 260 IF U$="LO" OR U$="LOAD" THEN 2510
- 270 IF U$="EX" THEN 2220
- 280 IF U$="EN" OR U$="END" THEN END
- 290 IF U$="HC" THEN GOSUB 2920: PRINT: GOTO 240
- 300 REM INPUT DATA SECTION ****************************************
- 310 INPUT"INPUT NUMBER OF LINES";MC
- 320 INPUT "INPUT NUMBER OF NODES";NI
- 330 PRINT:DIM M(3,5*MC),A(3,4*MC)
- 340 FOR N=1 TO MC
- 350 PRINT "LINE NUMBER";N
- 360 INPUT "INPUT SOURCE NODE";A(0,N)
- 370 INPUT "INPUT LOAD NODE";A(1,N)
- 380 INPUT "INPUT REFLECTION/XMISSION COEF IN ANGULAR FORM";A(2,N),A(3,N)
- 390 PRINT :NEXT
- 400 GOSUB 1650
- 410 REM MAIN DECISION BLOCK ***************************************
- 420 INPUT"MODS";U$
- 430 IF U$="CH" THEN GOSUB 2640
- 440 IF U$="DS" THEN D1=(D1+2)MOD4:PRINT "MATRIX DATA TURNED ";:IF D1=2 THEN PRINT "ON" ELSE PRINT "OFF"
- 450 IF U$="NS" THEN GOSUB 2750
- 460 IF U$="PR" THEN PR=2: GOSUB 1650: PR=0
- 470 IF U$="HC" THEN GOSUB 2920
- 480 IF U$="EN" OR U$="END" THEN 2900
- 490 IF U$="PP" THEN PS=(PS+2)MOD4 :PRINT "PROCESS TO PRINTER ";:IF PS=2 THEN PRINT "ENABLED" ELSE PRINT "DISABLED"
- 500 IF U$="PA" THEN PX=(PX+2)MOD4 :PRINT "ANSWER TO ";:IF PX=2 THEN PRINT "PRINTER" ELSE PRINT "CRT"
- 510 IF U$="SA" OR U$="SAVE" THEN GOSUB 2840
- 520 IF U$="ME" OR U$="HELP" THEN GOSUB 1970
- 530 IF U$="GP" THEN PR=2:PS=2:D1=2:PX=2:GOTO 560
- 540 IF U$<>"GO" THEN 420
- 550 REM POLAR TO RECTANGULAR *************************************
- 560 MD=MC:NJ=NI
- 570 IF D1=2 THEN GOSUB 1650
- 580 FOR X=1 TO MD
- 590 M(0,X)=A(0,X) :M(1,X)=A(1,X)
- 600 M(2,X)=A(2,X)*COS(PI*A(3,X)/180)
- 610 M(3,X)=A(2,X)*SIN(PI*A(3,X)/180)
- 620 NEXT X
- 630 IF PS=0 THEN PRINT "POLAR TO RECTANGULAR"
- 640 IF PS=2 THEN LPRINT "POLAR TO RECTANGULAR"
- 650 IF D1=2 THEN GOSUB 1530
- 660 REM PARALLEL LINE REDUCTION SECTION **************************
- 670 FOR J=1 TO MD-1
- 680 FOR K=J+1 TO MD
- 690 IF M(0,J)=0 THEN 800
- 700 IF M(0,J)=M(0,K) AND M(1,J)=M(1,K) THEN 730
- 710 GOTO 800
- 720 REM ADD LINE J TO LINE K
- 730 M(2,J)=M(2,J) + M(2,K)
- 740 M(3,J)=M(3,J) + M(3,K)
- 750 REM CANCEL LINE K
- 760 M(0,K)=0 :M(1,K)=0
- 770 IF PS=0 THEN PRINT "PARALLEL REDUCTION"
- 780 IF PS=2 THEN LPRINT "PARALLEL REDUCTION"
- 790 IF D1=2 THEN GOSUB 1530
- 800 NEXT :NEXT
- 810 IF NJ=2 THEN 1260
- 820 REM NODE REDUCTION SECTION **********************************
- 830 FOR X=1 TO MD
- 840 IF M(0,X)<>NJ THEN 970
- 850 AF=0
- 860 FOR Y=1 TO MD
- 870 IF M(1,Y)<>NJ THEN 950
- 880 AF=AF+1
- 890 IF M(0,AF)<>0 THEN 880
- 900 M(0,AF)=M(0,Y):M(1,AF)=M(1,X)
- 910 M(2,AF)=M(2,X)*M(2,Y)-M(3,X)*M(3,Y)
- 920 M(3,AF)=M(2,X)*M(3,Y)+M(3,X)*M(2,Y)
- 930 IF AF>HT THEN HT=AF
- 940 NK=NJ
- 950 NEXT Y
- 960 M(0,X)=0:M(1,X)=0
- 970 NEXT X
- 980 FOR Z=1 TO MD
- 990 IF M(1,Z)=NJ THEN M(0,Z)=0:M(1,Z)=0
- 1000 NEXT Z
- 1010 MD=HT
- 1020 IF NJ<>NK THEN PRINT"ILLEGAL FLOWGRAPH":PRINT:GOTO 540
- 1030 IF PS=0 THEN PRINT "NODE REDUCTION"
- 1040 IF PS=2 THEN LPRINT "NODE REDUCTION"
- 1050 IF D1=2 THEN GOSUB 1530
- 1060 REM "SELF LOOP REDUCTION" ************************************
- 1070 FOR J=1 TO MD
- 1080 IF M(0,J)<>M(1,J) OR M(0,J)=0 THEN 1240
- 1090 REM SUBTRACT 1
- 1100 M(2,J)=1-M(2,J)
- 1110 FOR K=1 TO MD
- 1120 IF M(1,K)=M(0,J) AND J<>K THEN 1150
- 1130 GOTO 1190
- 1140 REM COMPLEX DIVISION
- 1150 ST=M(2,J)*M(2,J)+M(3,J)*M(3,J)
- 1160 MEM=M(2,K)
- 1170 M(2,K)=(M(2,K)*M(2,J)+M(3,K)*M(3,J))/ST
- 1180 M(3,K)=(M(3,K)*M(2,J)-MEM*M(3,J))/ST
- 1190 NEXT K
- 1200 M(0,J)=0:M(1,J)=0
- 1210 IF PS=0 THEN PRINT "SELF LOOP"
- 1220 IF PS=2 THEN LPRINT "SELF LOOP"
- 1230 IF D1=2 THEN GOSUB 1530
- 1240 NEXT J:NJ=NJ-1:GOTO 670:REM RESTART
- 1250 REM "FINAL SECTION ******************************************
- 1260 FOR X=1 TO MD
- 1270 IF M(0,X)=1 THEN A=X
- 1280 IF M(0,X)=2 THEN B=X
- 1290 NEXT X
- 1300 IF B=0 THEN X=M(2,A):Y=M(3,A):GOTO 1410
- 1310 CR=M(2,A)*M(2,B)-M(3,A)*M(3,B)
- 1320 CI=M(2,A)*M(3,B)+M(3,A)*M(2,B)
- 1330 CR=1-CR
- 1340 REM DIVIDE
- 1350 IF PS=0 THEN PRINT "REVERSION"
- 1360 IF PS=2 THEN LPRINT "REVERSION"
- 1370 ST=CR*CR+CI*CI
- 1380 X=(M(2,A)*CR+M(3,A)*CI)/ST
- 1390 Y=(M(3,A)*CR-M(2,A)*CI)/ST
- 1400 IF D1=2 THEN PRINT:PRINT "REAL","IMAGINARY":PRINT X,Y:PRINT
- 1410 J=SQR(X*X+Y*Y)
- 1420 K=180*ATN(Y/X)/PI
- 1430 IF X<0 THEN K=K+180
- 1440 IF PX=0 THEN PRINT ELSE LPRINT
- 1450 IF PX=0 THEN PRINT "THE ANSWER IS"
- 1460 IF PX=2 THEN LPRINT "THE ANSWER IS"
- 1470 IF PX=0 THEN PRINT J;"MAGNITUDE",K;"DEGREES"
- 1480 IF PX=2 THEN LPRINT J;"MAGNITUDE",K;"DEGREES"
- 1490 IF PX=0 THEN PRINT ELSE LPRINT
- 1500 PR=0
- 1510 GOTO 420
- 1520 REM DEBUGGING SECTION *************************************
- 1530 IF PR=0 THEN PRINT ELSE LPRINT
- 1540 IF PR=0 THEN PRINT "LINE","SOURCE","LOAD","REAL","IMAGINARY"
- 1550 IF PR=2 THEN LPRINT "LINE","SOURCE","LOAD","REAL","IMAGINARY"
- 1560 FOR DP=1 TO MD
- 1570 IF PR=0 THEN PRINT DP,M(0,DP),M(1,DP),M(2,DP),M(3,DP)
- 1580 IF PR=2 THEN LPRINT DP,M(0,DP),M(1,DP),M(2,DP),M(3,DP)
- 1590 NEXT
- 1600 IF PR=0 THEN PRINT: PRINT: PRINT ELSE LPRINT: LPRINT
- 1610 IF PR=2 THEN RETURN
- 1620 INPUT U$
- 1630 RETURN
- 1640 REM ANGULAR MATRIX PRINTOUT **********************************
- 1650 IF PR=0 THEN PRINT ELSE LPRINT
- 1660 IF PR=0 THEN PRINT "LINE","SOURCE","LOAD","MAGNITUDE","ANGLE"
- 1670 IF PR=2 THEN LPRINT "LINE","SOURCE","LOAD","MAGNITUDE","ANGLE"
- 1680 FOR DP=1 TO MC
- 1690 IF PR=0 THEN PRINT DP,A(0,DP),A(1,DP),A(2,DP),A(3,DP)
- 1700 IF PR=2 THEN LPRINT DP,A(0,DP),A(1,DP),A(2,DP),A(3,DP)
- 1710 NEXT
- 1720 IF PR=0 THEN PRINT: PRINT: PRINT ELSE LPRINT: LPRINT
- 1730 RETURN
- 1740 REM MENU SECTION ***********************************************
- 1750 PRINT " MENU PAGE 1"
- 1760 PRINT
- 1770 PRINT "THIS PROGRAM WILL TAKE A MULTIPORT S PARAMETER NETWORK AND REDUCE"
- 1780 PRINT "IT THRU FLOW GRAPH TECNIQUES TO A SINGLE S PARAMETER BETWEEN"
- 1790 PRINT "NODES 1 AND 2. *"
- 1800 PRINT
- 1810 PRINT "THE PROGRAM REQUIRES THAT REFLECTION/XMISSION COEF DATA BE IN POLAR"
- 1820 PRINT ,"FORM, WITH A MAGNITUDE BETWEEN 0 AND 1, AND AN ANGLE BETWEEN 0 AND"
- 1830 PRINT "360 DEGREES. (INCIDENTALLY COMPUTATION IS DONE RECTANGULARLY.)"
- 1840 PRINT
- 1850 PRINT "MODIFICATIONS MAY BE MADE TO THE INPUTTED DATA AT THE APPROPRIATE"
- 1860 PRINT "POINTS DURING THE PROGRAM THRU THE USE OF THE KEY SYMBOLS LISTED"
- 1870 PRINT "BELOW."
- 1880 PRINT
- 1890 PRINT ,"ADDITIONALLY, MATRIX DATA MAY BE SAVED AND RECALLED TO THE DISC"
- 1900 PRINT "USING THE PROPER KEY SYMBOLS LISTED BELOW."
- 1910 PRINT :PRINT ,
- 1920 PRINT " * EACH S PARAMETER IS DEFINED IN THE MATRIX BY A LINE NUMBER"
- 1930 PRINT " WHICH SPECIFIES THE SOURCE NODE, LOAD NODE, AND REFLECTION/XMISSION
- 1940 PRINT " COEFFICIENT MAGNITUDE AND ANGLE."
- 1950 PRINT :PRINT
- 1960 INPUT " TO CONTINUE PRESS <RETURN>";U$
- 1970 CLS
- 1980 PRINT " MENU PAGE 2
- 1990 PRINT :PRINT
- 2000 PRINT "SYMBOL EXPLANATION"
- 2010 PRINT "------ -----------"
- 2020 PRINT " EX WILL CAUSE THE COMPUTER TO EXECUTE EXAMPLE PROGRAM."
- 2030 PRINT " (ONLY POSSIBLE AFTER THE FIRST MENUE LISTING.)"
- 2040 PRINT " CH CHANGE LINE DATA. "
- 2050 PRINT " NS NODE SWITCH, THIS SUBROUTINE MAKES IT POSSIBLE TO"
- 2060 PRINT " REDEFINE NODES 1 AND 2."
- 2070 PRINT " PR PRINT MODIFIED MATRIX DATA (LINE PRINTER).
- 2080 PRINT " HC HARD COPY OF MENU.
- 2090 PRINT " DS MATRIX DISPLAY OF COMPUTATIONS. PROMPTING IS REQUIRED"
- 2100 PRINT " TO ADVANCE IN THIS MODE."
- 2110 PRINT " EN EXIT PROGRAM. (ALSO END)
- 2120 PRINT " PP CAUSES REDUCTION PROCESSES TO LIST TO LINE PRINTER.
- 2130 PRINT " PA CAUSES ANSWER TO LIST TO LINE PRINTER.
- 2140 PRINT " GO INITIATES COMPUTATION.
- 2150 PRINT " SA MATRIX STORE TO DISC. (ALSO SAVE)
- 2160 PRINT " LO MATRIX LOAD FROM DISC. (ONLY POSSIBLE AFTER THE FIRST"
- 2170 PRINT " MENU LISTING. - ALSO LOAD)"
- 2180 PRINT " ME REDISPLAY MENU TO CRT. (ALSO HELP)
- 2190 PRINT:PRINT
- 2200 RETURN
- 2210 REM EXAMPLE SECTION *******************************************
- 2220 CLS
- 2230 PRINT "THIS EXAMPLE IS FOR A 3 PORT DIRECTIONAL COUPLER. THE COUPLING"
- 2240 PRINT "IS 10 dB, INSERTION LOSS IS 1.2 dB, DIRECTIVITY IS 25 dB. THE"
- 2250 PRINT "PHASE ANGLES WERE ARBITRARILY CHOSEN. THE LOAD AND DEVICE"
- 2260 PRINT "VSWR'S ARE 1.5 AND 1.25 RESPECTIVELY. PRESS THE CARRIAGE"
- 2270 PRINT "RETURN TO PROMPT THE EXAMPLE PROGRAM TO CONTINUE."
- 2280 L$(0)="INPUT NUMBER OF LINES "
- 2290 L$(1)="INPUT NUMBER OF NODES "
- 2300 L$(2)="INPUT SOURCE NODE "
- 2310 L$(3)="INPUT LOAD NODE "
- 2320 L$(4)="INPUT REFLECTION/XMISSION COEF IN POLAR FORM "
- 2330 PRINT
- 2340 PRINT L$(0);12 :MC=12
- 2350 PRINT L$(1);6 :NI=6
- 2360 INPUT U$
- 2370 DIM A(3,48),M(3,60)
- 2380 FOR X=1 TO 12
- 2390 PRINT
- 2400 PRINT "LINE NUMBER";X
- 2410 READ DA :PRINT L$(2);DA :A(0,X)=DA
- 2420 READ DA :PRINT L$(3);DA :A(1,X)=DA
- 2430 READ DA,DB :PRINTL$(4);DA;DB :A(2,X)=DA :A(3,X)=DB
- 2440 INPUT U$
- 2450 NEXT X
- 2460 GOTO 400
- 2470 DATA 6,1,.80,10,1,6,.89,20,1,2,.48,30,3,6,.48,30
- 2480 DATA 2,3,.80,50,3,2,.89,60,1,4,.93,70,5,6,.93,70
- 2490 DATA 3,4,.10,90,5,2,.10, 90,5,4,.89,110,4,5,.80,120
- 2500 REM FILE LOAD FROM DISC **********************************
- 2510 PRINT:INPUT "FILE NAME, FILES OR QUIT"; F$
- 2520 IF F$="FILES" THEN FILES "*.SMA":GOTO 2510
- 2530 IF F$="QUIT" THEN 420
- 2540 F$=F$+".SMA": ERASE A,M
- 2550 OPEN"I",#1,F$
- 2560 INPUT#1,MC,NI
- 2570 DIM A(3,4*MC),M(3,5*MC)
- 2580 FOR X=1 TO MC:FOR Y=0 TO 3
- 2590 INPUT#1,A(Y,X):NEXT:NEXT
- 2600 PRINT"FILE LOADED INTO MATRIX"
- 2610 CLOSE#1
- 2620 GOSUB 1640:GOTO 420
- 2630 REM CHANGE SECTION *****************************************
- 2640 PRINT:INPUT "INPUT LINE NUMBER TO BE CHANGED";LN
- 2650 IF LN>MC THEN MC=LN
- 2660 PRINT:PRINTA(0,LN),A(1,LN),A(2,LN),A(3,LN)
- 2670 PRINT:PRINT
- 2680 INPUT "INPUT SOURCE NODE";A(0,LN)
- 2690 IF A(0,LN)>NI THEN NI=A(0,LN)
- 2700 INPUT "INPUT LOAD NODE";A(1,LN)
- 2710 IF A(1,LN)>NI THEN NI=A(1,LN)
- 2720 INPUT "INPUT REFLECTION/XMISSION COEF IN POLAR FORM";A(2,LN),A(3,LN)
- 2730 GOSUB 1650:RETURN
- 2740 REM NODE SWITCH SUB ************************************
- 2750 PRINT:INPUT "INPUT NODE # TO REPLACE NODE 1";NA
- 2760 INPUT "INPUT NODE # TO REPLACE NODE 2";NB
- 2770 FOR X=1 TO MC:FOR Y=0 TO 1
- 2780 IF A(Y,X)=1 THEN A(Y,X)=NA:GOTO 2820
- 2790 IF A(Y,X)=2 THEN A(Y,X)=NB:GOTO 2820
- 2800 IF A(Y,X)=NA THEN A(Y,X)=1
- 2810 IF A(Y,X)=NB THEN A(Y,X)=2
- 2820 NEXT: NEXT:GOSUB 1640:RETURN
- 2830 REM SAVE TO DISC ******************************************
- 2840 PRINT:INPUT"FILE NAME";F$:F$=F$+".SMA"
- 2850 OPEN"O",#1,F$
- 2860 PRINT#1,MC,NI
- 2870 FOR X=1 TO MC:FOR Y=0 TO 3
- 2880 PRINT#1,A(Y,X):NEXT:NEXT
- 2890 CLOSE#1:RETURN
- 2900 END
- 2910 REM HARDCOPY OF MENU **********************************************
- 2920 LPRINT " MENU PAGE 1"
- 2930 LPRINT
- 2940 LPRINT "THIS PROGRAM WILL TAKE A MULTIPORT S PARAMETER NETWORK AND REDUCE"
- 2950 LPRINT "IT THRU FLOW GRAPH TECNIQUES TO A SINGLE S PARAMETER BETWEEN"
- 2960 LPRINT "NODES 1 AND 2. *"
- 2970 LPRINT
- 2980 LPRINT "THE PROGRAM REQUIRES THAT REFLECTION/XMISSION COEF DATA BE IN POLAR"
- 2990 LPRINT "FORM, WITH A MAGNITUDE BETWEEN 0 AND 1, AND AN ANGLE BETWEEN 0 AND"
- 3000 LPRINT "360 DEGREES. (INCIDENTALLY COMPUTATION IS DONE RECTANGULARLY.)"
- 3010 LPRINT
- 3020 LPRINT "MODIFICATIONS MAY BE MADE TO THE INPUTTED DATA AT THE APPROPRIATE"
- 3030 LPRINT "POINTS DURING THE PROGRAM THRU THE USE OF THE KEY SYMBOLS LISTED"
- 3040 LPRINT "BELOW."
- 3050 LPRINT
- 3060 LPRINT "ADDITIONALLY, MATRIX DATA MAY BE SAVED AND RECALLED TO THE DISC"
- 3070 LPRINT "USING THE PROPER KEY SYMBOLS LISTED BELOW."
- 3080 LPRINT :PRINT ,
- 3090 LPRINT " * EACH S PARAMETER IS DEFINED IN THE MATRIX BY A LINE NUMBER"
- 3100 LPRINT " WHICH SPECIFIES THE SOURCE NODE, LOAD NODE, AND REFLECTION/XMISSION
- 3110 LPRINT " COEFFICIENT MAGNITUDE AND ANGLE."
- 3120 LPRINT :LPRINT
- 3130 LPRINT :LPRINT
- 3140 LPRINT "SYMBOL EXPLANATION"
- 3150 LPRINT "------ -----------"
- 3160 LPRINT " EX WILL CAUSE THE COMPUTER TO EXECUTE EXAMPLE PROGRAM."
- 3170 LPRINT " (ONLY POSSIBLE AFTER THE FIRST MENUE LISTING.)"
- 3180 LPRINT " CH CHANGE LINE DATA. "
- 3190 LPRINT " NS NODE SWITCH, THIS SUBROUTINE MAKES IT POSSIBLE TO"
- 3200 LPRINT " REDEFINE NODES 1 AND 2."
- 3210 LPRINT " PR PRINT MODIFIED MATRIX DATA.(LINE PRINTER)
- 3220 LPRINT " HC HARD COPY OF MENU.
- 3230 LPRINT " DS MATRIX DISPLAY OF COMPUTATIONS. PROMPTING IS REQUIRED"
- 3240 LPRINT " TO ADVANCE IN THIS MODE."
- 3250 LPRINT " EN EXIT PROGRAM. (ALSO END)
- 3260 LPRINT " PP CAUSES REDUCTION PROCESSES TO LIST TO LINE PRINTER.
- 3270 LPRINT " PA CAUSES ANSWER TO LIST TO LINE PRINTER.
- 3280 LPRINT " GO INITIATES COMPUTATION.
- 3290 LPRINT " SA MATRIX STORE TO DISC. (ALSO SAVE)
- 3300 LPRINT " LO MATRIX LOAD FROM DISC. (ONLY POSSIBLE AFTER THE FIRST"
- 3310 LPRINT" MENU LISTING. - ALSO LOAD)"
- 3320 LPRINT" ME REDISPLAY MENU TO CRT. (ALSO HELP)
- 3330 LPRINT:LPRINT
- 3340 RETURN
-