//JOB(ERCC07,STEPHENS,T=200,L=10000)
//OPTIONS(QUOTES,OPT)
//ALGOL
'COMMENT'
                         ***************
                         *             *
                         *   ALGG048   *
                         *             *
                         ***************
;
'BEGIN'

'BEGIN'
       'COMMENT' THIS PROGRAMME ENABLES ONE TO EXPRESS THE FREQUENCY
                RESPONSE OF A DYNAMIC SYSTEM AS A RATIO OF TWO
                FREQUENCY DEPENDENT POLYNOMIALS;
       'COMMENT' A0,A6,A12,A30,B3037;
       'INTEGER' I,J,X,Y,Z,K,H,F1,F2;
       'REAL' PIC,SUM1,SUM2,SUM3,SUM4;

       X:=READ;Y:=READ;Z:=READ;
       'BEGIN'
       'REAL' 'ARRAY' LAMDA[0:2*X],S,T,U[0:2*Y],RR,II,AA,MAG,F[0:Z]
,
                    M[1:X+Y+1,1:X+Y+1],C,N[1:X+Y+1],
                    O[1:X+1,1:X+1],P[1:Y,1:X+1],Q[1:X+1,1:Y],
                    R[1:Y,1:Y],A[0:X+1],B[0:Y];
 'COMMENT'
         THIS PART OF THE PROGRAMME EVALUATES RR AND II;
A[0]:=A[1]:=A[2]:=A[3]:=A[4]:=0;
B[0]:=B[1]:=B[2]:=B[3]:=B[4]:=0;
       PIC:=3.14159265359/180;
       'FOR' K:=0 'STEP' 1 'UNTIL' Z 'DO'
       'BEGIN' MAG[K]:=READ;AA[K]:=READ*PIC;F[K]:=READ;
         RR[K]:=MAG[K]*COS(AA[K]);
              II[K]:=MAG[K]*SIN(AA[K]);
       'END';
       'FOR' H:=0 'STEP' 1 'UNTIL' 2*Y 'DO'
       'BEGIN' SUM1:=SUM2:=SUM3:=SUM4:=0;
              'FOR' K:=0 'STEP' 1 'UNTIL' Z 'DO'
              'BEGIN'
              SUM1:=('IF' H=0 'THEN' 1 'ELSE' F[K]**H)+SUM1;
              SUM2:=('IF' H=0 'THEN' 1 'ELSE'(F[K]**H*RR[K]))+SUM2;
              SUM3:=('IF' H=0 'THEN' 1 'ELSE'(F[K]**H*II[K]))+SUM3;
              SUM4:=('IF' H=0 'THEN' 1 'ELSE'(F[K]**H*(RR[K]**2+
              II[K]**2)))+SUM4;
       'END';
       LAMDA[H]:=SUM1;S[H]:=SUM2;T[H]:=SUM3;U[H]:=SUM4;
    'END';
 'COMMENT'
         THIS PART OF THE PROGRAMME SETS UP THE MATRICES [M],[N]
                 AND [C] USING THE VALUES OF LAMDA,S,T AND U PREVIOUSL
Y
                 EVAULATED.
                 LET THE TRANFER FUNCTION BE G(JW)=A(JW)/B(JW)
                 WHERE THE POLYNOMIALS A AND B ARE OF ORDER X AND Y
                 RESPECTIVELY. ASSUME B(0)=1;
L1:    'FOR' I:=1 'STEP' 1 'UNTIL' X+1 'DO'
       'FOR' J:=1 'STEP' 1 'UNTIL' X+1 'DO'
       'IF' (I+J)'/'2*2#I+J'THEN' O[I,J]:=0 'ELSE'
       O[I,J]:=LAMDA[I+J-2];
       'FOR' I:=1 'STEP' 1 'UNTIL' Y 'DO'
L2:    'FOR' J:=1 'STEP' 1 'UNTIL' X+1 'DO'
       'IF' (I+J)'/'2*2=I+J 'THEN' P[I,J]:=T[I+J-1] 'ELSE'
       P[I,J]:=S[I+J-1];
L3:    'FOR' I:=1 'STEP' 1 'UNTIL' X+1 'DO'
       'FOR' J:=1 'STEP' 1 'UNTIL' Y 'DO'
       'IF' (I+J)'/'2*2=I+J 'THEN' Q[I,J]:=T[I+J-1] 'ELSE'
       Q[I,J]:=S[I+J-1];
L4:    'FOR' I:=1 'STEP' 1 'UNTIL' Y'DO'
       'FOR' J:=1 'STEP' 1 'UNTIL' Y 'DO'
       'IF' (I+J)'/'2*2#I+J'THEN' R[I,J]:=0 'ELSE'
       R[I,J]:=U[I+J];
L5:    'FOR' I:=1 'STEP' 1 'UNTIL' X+1 'DO'
       'IF' I'/'2*2#I'THEN' C[I]:=S[I-1] 'ELSE' C[I]:=T[I-1];
L6:    'FOR' I:=X+2 'STEP' 1 'UNTIL' X+Y+1 'DO'
       'IF' (I-X-1)'/'2*2#I-X-1'THEN' C[I]:=0 'ELSE'
       C[I]:=U[I-X-1];
L7:    'FOR' I:=1 'STEP' 1 'UNTIL' X+1 'DO' N[I]:=A[I-1];
       'FOR' I:=X+2 'STEP' 1 'UNTIL' X+Y+1 'DO' N[I]:=B[I-X-1];
       'BEGIN' 'FOR' I:=1 'STEP' 1 'UNTIL' X+1 'DO'
              'IF' I'/'2*2#I'THEN'
L8:           'BEGIN' 'FOR' J:=3,4 'STEP' 4 'UNTIL' Y 'DO' Q[I,J]:=-Q[
I,
J];'END'
          'ELSE'
               'BEGIN'
              'FOR' J:=1,4 'STEP' 4 'UNTIL' Y 'DO' Q[I,J]:=-Q[I,J];
              'FOR' J:=3,4 'STEP' 4 'UNTIL' X+1 'DO' O[I,J]:=-O[I,J]
;
               'END';
       'END';
               'FOR' I:=1 'STEP' 1 'UNTIL' Y 'DO'
          'BEGIN'
              'IF' I'/'2*2#I'THEN'
L9:           'BEGIN' 'FOR' J:=1,2 'STEP' 4 'UNTIL' X+1 'DO' P[I,J]:=-
P[
I,J]; 'END'
             'ELSE'
L10:          'FOR' J:=3,4 'STEP' 4 'UNTIL' X+1 'DO' P[I,J]:=-P[I,J]
;
              'FOR' J:=3,4 'STEP' 4 'UNTIL' Y 'DO' R[I,J]:=-R[I,J];
       'END';
L11:   'BEGIN' 'FOR' I:=1 'STEP' 1 'UNTIL' X+Y+1 'DO'
              'FOR' J:=1 'STEP' 1 'UNTIL' X+Y+1 'DO'
L12:       'IF' I <= X+1 'AND' J <= X+1 'THEN'
              M[I,J]:=O[I,J] 'ELSE'
L13:      'IF' I>X+1 'AND' J <= X+1 'THEN'
              M[I,J]:=P[I-X-1,J] 'ELSE'
L14:          'IF' I <= X+1 'AND' J>X+1 'THEN'
              M[I,J]:=Q[I,J-X-1] 'ELSE'
              M[I,J]:=R[I-X-1,J-X-1];
       'END';

       'FOR' I:=1 'STEP' 1 'UNTIL' X+Y+1 'DO'
       'FOR' J:=1 'STEP' 1 'UNTIL' X+Y+1 'DO'
    'BEGIN'
      PRINT(M[I,J],0,4);
      'IF' J = X+Y+1 'OR' J'/'5*5= J 'THEN' NEWLINES(1);
    'END';
       'FOR' I:=1 'STEP' 1 'UNTIL' X+Y+1 'DO'
        'BEGIN'
      PRINT(N[I],0,4);
      'IF' I '/'5*5= I 'THEN' NEWLINES(1);
      PRINT(C[I],0,4);
      'IF' I '/'5*5= I 'THEN' NEWLINES(1);
      'END';
   'END';
 'END';
'END'

//RUN
4;4;13;1;0;0;1;5;0.1;1.02;10;0.21.12;24;0.5;1.24;31;0.7;1.44;
39;1;2.27;51.5;2;4.44;50.5;4;8.17;28;7;10.05;-6;10;5.56;-59;
20;2.55;-76;40;1.45;-82;70;1;-84;100;