> restart:
> # POWER METHOD ALGORITHM 9.1
> #
> # To approximate the dominant eigenvalue and an associated
> # eigenvector of the n by n matrix A given a nonzero vector x:
> #
> # INPUT:   Dimension n: matrix A: vector x: tolerance TOL: maximum
> #          number of iterations N.
> #
> # OUTPUT:  Approximate eigenvalue MU: approximate eigenvector x
> #          or a message that the maximum number of iterations was
> #          exceeded. 
> print(`This is the Power Method.\n`):
> OK := FALSE:
> print(`Choice of input method`):
> print(`1. input from keyboard - not recommended for large matrices`):
> print(`2. input from a text file`):
> print(`Please enter 1 or 2.`):
> FLAG := scanf(`%d`)[1]: print(`Your input is`): print(FLAG):
> if FLAG = 2 then
>    print(`The array will be input from a text file in the order`):
>    print(`A(1,1), A(1,2), ..., A(1,N), A(2,1), A(2,2), ..., 
>    A(2,N)`):
>    print(`..., A(N,1), A(N,2), ..., A(N,N)\n`):
>    print(`Place as many entries as desired on each line, but separate `):
>    print(`entries with`):
>    print(`at least one blank.\n`):
>    print(`The initial approximation should follow in same format.\n`):
>    print(`Has the input file been created? - enter 1 for yes or 2 for no.`):
>    AA := scanf(`%d`)[1]: print(`Your response is`): print(AA):
>    if AA = 1 then
>       print(`Input the file name in the form - drive:\\name.ext`):
>       print(`for example:   A:\\DATA.DTA`):
>       NAME := scanf(`%s`)[1]: print(`The file name is`): print(NAME):
>       INP := fopen(NAME,READ,TEXT):
>       OK := FALSE:
>       while OK = FALSE do
>          print(`Input the dimension n - an integer.`):
>          N := scanf(`%d`)[1]: print(`N is`): print(N):
>          if N > 0 then
>             for I1 from 1 to N do
>             for J from 1 to N do
>                A[I1-1,J-1] := fscanf(INP, `%f`)[1]:
>             od:
>             od:
>             for I1 from 1 to N do
>             X[I1-1] := fscanf(INP, `%f`)[1]:
>             od:
>             OK := TRUE:
>             fclose(INP):
>          else
>             print(`The number must be a positive integer.\n`):
>          fi:
>       od:
>    else 
>       print(`The program will end so the input file can be created.\n`):
>    fi:
> else
>    OK := FALSE:
>    while OK = FALSE do
>       print(`Input the dimension n - an integer.`):
>       N := scanf(`%d`)[1]: print(`N= `): print(N):
>       if N > 0 then
>          print(`Input Matrix `):
>          for I1 from 1 to N do
>          for J from 1 to N do
>             print(`input entry in position `,I1,J): 
>             A[I1-1,J-1] := scanf(`%f`)[1]:print(`Data is `):print(A[I1-1,J-1]):
>          od:
>          od:
>          print(`Input initial approximation vector `):
>          for I1 from 1 to N do
>             print(`input entry in position `,I1):
>             X[I1-1] := scanf(`%f`)[1]:print(`Data is `):print(X[I1-1]):
>          od:
>          OK := TRUE:
>       else 
>          print(`The number must be a positive integer.\n`):
>       fi:
>    od:
> fi:
> if OK = TRUE then
>    OK := FALSE:
>    while OK = FALSE do
>       print(`Input the tolerance.\n`):
>       TOL := scanf(`%f`)[1]:print(`Tolerance = `):print(TOL):
>       if TOL > 0 then
>          OK := TRUE:
>       else
>          print(`Tolerance must be positive number.\n`):
>       fi:
>    od:
>    OK := FALSE:
>    while OK = FALSE do
>       print(`Input maximum number of iterations `):
>       print(`- integer.\n`):
>       NN := scanf(`%d`)[1]:print(`Maximum number of iterations = `):print(NN):
> # Use NN in place of N
>       if NN > 0 then
>          OK := TRUE:
>       else
>          print(`Number must be positive integer.\n`):
>       fi:
>    od:
> fi:
> if OK = TRUE then
>    OUP := default:
>    fprintf(OUP, `The original matrix - output by rows:\n`):
>    for I1 from 1 to N do
>    for J from 1 to N do
>       fprintf(OUP, ` %11.8f`, A[I1-1,J-1]):
>    od:
>    fprintf(OUP, `\n`):
>    od:
>    fprintf(OUP, `The initial approximation vector is :\n`):
>    for I1 from 1 to N do
>       fprintf(OUP, ` %11.8f`, X[I1-1]):
>    od:
>    fprintf(OUP, `\n`):
> fi:
> if OK = TRUE then
>    print(`Choice of output method:`):
>    print(`1. Output to screen`):
>    print(`2. Output to text file`):
>    print(`Please enter 1 or 2.`):
>    FLAG := scanf(`%d`)[1]: print(`Input = `):print(FLAG):
>    if FLAG = 2 then
>       print(`Input the file name in the form - drive:\\name.ext`):
>       print(`for example   A:\\OUTPUT.DTA`):
>       NAME := scanf(`%s`)[1]:print(`Output = `):print(NAME):
>       OUP := fopen(NAME,WRITE,TEXT):
>    else
>       OUP := default:
>    fi:
>    fprint(OUP, `POWER METHOD\n\n`):
>    fprintf(OUP, `Iter Aapprox       Approx eigenvector\n`):
>    fprintf(OUP, `      eigenvalue\n`):
> # Step 1
>    K := 1:
> # Step 2
>    LP := 1:
>    AMAX := abs(X[0]):
>    for I1 from 2 to N do
>       if abs(X[I1-1]) > AMAX then
>          AMAX := abs(X[I1-1]):
>          LP := I1:
>       fi:
>    od:
> # Step 3
>    for I1 from 1 to N do
>       X[I1-1] := X[I1-1]/AMAX:
>    od:
> # Step 4
>    while K <= NN and OK = TRUE do
> # Step 5
>       for I1 from 1 to N do
>          Y[I1-1] := 0:
>          for J from 1 to N do
>             Y[I1-1] := Y[I1-1] + A[I1-1,J-1] * X[J-1]:
>          od:
>       od:
> # Step 6
>       YMU := Y[LP-1]:
> # Step 7
>       LP := 1:
>       AMAX := abs(Y[0]):
>       for I1 from 2 to N do
>          if abs(Y[I1-1]) > AMAX then
>             AMAX := abs(Y[I1-1]):
>             LP := I1:
>          fi:
>       od:
> # Step 8
>       if AMAX <= 0 then
>          print(`0 eigenvalue - select another `):
>          print(`initial vector and begin again\n`):
>          OK := FALSE:
>       else
> # Step 9
>          ERR := 0:
>          for I1 from 1 to N do
>             T := Y[I1-1]/Y[LP-1]:
>             if abs(X[I1-1]-T) > ERR then
>                ERR := abs(X[I1-1]-T):
>             fi:
>             X[I1-1] := T:
>          od:
>          fprintf(OUP, `%d    %12.8f`, K, YMU):
> # Step 10
>          for I1 from 1 to N do
>             fprintf(OUP, ` %11.8f`, X[I1-1]):
>          od:
>          fprintf(OUP, `\n`):
>          if ERR <= TOL then
>             fprintf(OUP, `\n\nThe eigenvalue = %12.8f`,YMU):
>             fprintf(OUP, ` to tolerance = %.10e\n`, TOL):
>             fprintf(OUP, `obtained on iteration number = %d\n\n`, K):
>             fprintf(OUP, `Unit eigenvector is :\n\n`):
>             for I1 from 1 to N do
>                fprintf(OUP, ` %11.8f`, X[I1-1]):
>             od:
>             fprintf(OUP, `\n`):
>             OK := FALSE:
>          fi:
> # Step 11
>          K := K+1:
>       fi:
> # Step 12
>    od:
>    if K > NN then
>      print(`Method did not converge within `,NN,` iterations`):
>    fi:
>    if OUP <> default then
>       fclose(OUP):
>       print(`Output file `,NAME,`  created successfully`):
>    fi:
> fi:
