1 ' Gauss
2 ' by Stuart McColl
3 ' Amstrad Action April 88
10 MODE 2:INK 1,0:INK 0,13:BORDER 10
20 PRINT "GAUSS JORDAN ELIMINATION.":PRINT
30 PRINT "A unique and simple method of solving any number ";
40 PRINT "of simultaneous equations,"
50 PRINT "consisting of any number of variables.":PRINT
60 '
70 ' Initialise variables and get positional
80 '       coefficients of each.
90 '
100 INPUT "Number of equations:",equnum
110 INPUT "Number of variables:",varnum
120 DIM a(equnum,varnum+1)
130 FOR loop = 1 TO varnum
140 LOCATE (7+loop*6),9
150 a$="x"+MID$(STR$(loop),2):PRINT a$;
160 NEXT
170 PRINT"       Answer"
180 FOR loop = 1 TO equnum
190 PRINT "Equation";loop;":";
200 FOR inner = 1 TO varnum + 1
210 INPUT ;"",a(loop,inner):PRINT TAB (13+6*inner)
220 IF inner = varnum THEN PRINT"= ";
230 NEXT inner
240 LOCATE 1,loop+10
250 NEXT loop
260 '
270 ' Reduce each row of the augmented matrix to
280 '           row echelon form.
290 '
300 IF varnum > equnum THEN maximum = equnum ELSE maximum = varnum
310 FOR row = 1 TO maximum
320 col = row
330 temp = a(row,col)
340 IF temp = 0 THEN 440
350 FOR loop = 1 TO varnum + 1
360 a(row,loop) = a(row,loop) / temp
370 NEXT
380 FOR loop = 1 TO equnum
390 IF loop = row THEN 430
400 FOR inner = varnum + 1 TO 1 STEP -1
410 a(loop,inner) = a(loop,inner) + (-(a(loop,col)) * a(row,inner))
420 NEXT inner
430 NEXT loop
440 NEXT row
450 '
460 ' Display the reduced equations in the same
470 '      format as they were entered.
480 '
490 PRINT
500 FOR loop = 1 TO equnum
510 FOR inner = 1 TO varnum + 1
520 PRINT TAB (6 + 6 * inner);
530 IF inner = varnum + 1 THEN PRINT" = ";
540 PRINT ROUND (a(loop,inner),2);
550 NEXT inner
560 PRINT
570 NEXT loop
580 PRINT:PRINT"Again ?"
590 a$=UPPER$(INKEY$)
600 IF a$="Y" THEN RUN ELSE IF a$<>"N" THEN 590