home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol133 / initial.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1984-04-29  |  1.9 KB  |  94 lines

  1. EXTERNAL LINEAR::INITIAL(2);
  2.  
  3. Procedure INITIAL;
  4. {$E+}
  5. VAR    Rcd,        {Record counter}
  6.     I,J : integer;
  7.     sum : real;
  8.     XEOF,        {End of File flag for a NON text File}
  9.     firstin : boolean;
  10.     B : ROW;
  11.     C : COL;
  12. begin
  13.   For I:=1 to maxrow do
  14.     For J:=1 to maxcol do ABAR[I,J] := 0.0 ;
  15.   firstin := false;
  16.   Rcd := 0;{start at the beginning}
  17.   READ(fa:Rcd+bias, F);
  18.   XEOF := (F.tag=99);
  19.   If F.tag=0 then
  20.     begin
  21.       firstin    := true;
  22.       Pname    := F.name;
  23.       M        := F.num1; {No. Rows}
  24.       N        := F.num2; {No. Columns}
  25.       MP    := M + 2;
  26.       M1    := M + 1;
  27.       PRINTH
  28.     end(* IF *)
  29.   Else
  30.     begin
  31.       writeln;
  32.       writeln(' Bad file format');
  33.       writeln;
  34.       Result := 2
  35.     end(* ELSE *);
  36.   While (firstin) AND (NOT XEOF) do
  37.     begin
  38.     With F do
  39.       CASE TAG of
  40.     1: begin(* heading *)
  41.        heading := header;
  42.        hdrflag := true
  43.        end;
  44.     2: begin(* row_name & RHS *)
  45.        Rowname[Rindex] := Rname;
  46.        B[Rindex] := RHS
  47.        end;
  48.     4: begin(* col_name & OBJ *)
  49.        Colname[Cindex] := Cname;
  50.        C[Cindex] := OBJ
  51.        end;
  52.     6: ABAR[R,S] := T;
  53.        99: (* NULL *)
  54.       End{With/Case};
  55.     Rcd := Rcd + 1;
  56.     READ(fa:Rcd+bias, F);
  57.     XEOF := (F.tag=99);
  58.     end(* While *);
  59.   If firstin then
  60.     begin
  61.     PRINTC(B,C);
  62.     For J:=1 to N do ABAR[M1,J] := C[J];
  63.     For I:=1 to M do
  64.       If B[I]<0.0 then
  65.     begin
  66.     B[I] := -B[I];
  67.     For J:=1 to N do ABAR[I,J] := -ABAR[I,J]
  68.     end;
  69.     For J:=1 to N do
  70.       begin
  71.     SUM := 0.0;
  72.     For I:=1 to M do SUM := SUM - ABAR[I,J];
  73.     ABAR[MP,J] := SUM
  74.       end;
  75.     B[M1] := 0.0;
  76.     SUM := 0.0;
  77.     For I:=1 to M do SUM := SUM - B[I];
  78.     B[MP] := SUM;
  79.     For I:=1 to MP do
  80.       begin
  81.     X[I] := B[I];
  82.     list[I] := N +I;
  83.     For J:=1 to MP do U[I,J] := 0.0
  84.       end;
  85.     For I:=1 to MP do U[I,I] := 1.0;
  86.     PRINTD;
  87.     Rowname[M1] := '       M+1          ';
  88.     Rowname[MP] := '       M+2          ';
  89.     {PRINTX    OMITTED FOR LINPROG}
  90.     end(* If firstin *);
  91.   Writeln
  92. end(*---of INITIAL---*);
  93.  .
  94.