⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simplx.txt

📁 Numeric Programs
💻 TXT
字号:
Procedure SIMPLX(var A:matrx2; M, N, MP, NP, M1, M2, M3:integer;
                      var ICASE:integer;var IZROV, IPOSV:array of integer);
Label 1,2,3,4;
const
    EPS  =0.000001;
var
    L1,L2,L3:array[0..100] of integer;
    K,I,NL1,NL2,IR,KP,M12,IP,IQ,KH:integer;   Q1,BMAX:real;
begin
    If M <> M1 + M2 + M3 Then
    begin
        ShowMessage(' Bad input constraint counts');
        Exit;
    end;
    NL1:=N;
    For K:=1 To N do
    begin
        L1[K]:=K;
        IZROV[K]:=K;
    end; 
    NL2:=M;
    For I:=1 To M do
    begin
        If A[I + 1, 1] < 0  Then
        begin
            ShowMessage('Bad input tableau.');
            Exit;
        End;
        L2[I]:=I;
        IPOSV[I]:=N + I;
    end;
    For I:=1 To M2 do
        L3[I]:=1;
    IR:=0;
    If M2 + M3 = 0 Then GoTo 3;
    IR:=1;
    For K:=1 To N + 1 do
    begin
        Q1:=0;
        For I:=M1 + 1 To M do
            Q1:=Q1 + A[I + 1, K];
        A[M + 2, K]:=-Q1;
    end;
    repeat
        SIMP1(A, MP, NP, M + 1, L1, NL1, 0, KP, BMAX);
        If (BMAX <= EPS) And (A[M + 2, 1] < -EPS) Then
        begin
          ICASE:=-1;
          Exit;
        end
        Else If (BMAX <= EPS) And (A[M + 2, 1] <= EPS) Then
        begin
          M12:=M1 + M2 + 1;
          If M12 <= M Then
          begin
              For IP:=M12 To M do
              begin
                  If IPOSV[IP] = IP + N Then
                  begin
                      SIMP1(A, MP, NP, IP, L1, NL1, 1, KP, BMAX);
                      If BMAX > 0  Then GoTo 1;
                  end;
              end;
          end;
          IR:=0;
          M12:=M12 - 1;
          If M1 + 1 > M12 Then Exit;
          For I:=M1 + 1 To M12 do
          begin
              If L3[I - M1] = 1 Then
              begin
                  For K:=1 To N + 1 do
                      A[I + 1, K]:=-A[I + 1, K];
              end;
          end;
          goto 3;
        end;
        SIMP2(A, M, N, MP, NP, L2, NL2, IP, KP, Q1);
        If IP = 0 Then
        begin
          ICASE:=-1;
          Exit;
        end;
1:      SIMP3(A, MP, NP, M + 1, N, IP, KP);
        If IPOSV[IP] >= N + M1 + M2 + 1 Then
        begin
          For K:=1 To NL1 do
              If L1[K] = KP Then goto 4;
4:        NL1:=NL1 - 1;
          For IQ:=K To NL1 do
              L1[IQ]:=L1[IQ + 1];
        end
        Else
        begin
          If IPOSV[IP] < N + M1 + 1 Then GoTo 2;
          KH:=IPOSV[IP] - M1 - N;
          If L3[KH] = 0 Then GoTo 2;
          L3[KH]:=0;
        end;
        A[M + 2, KP + 1]:=A[M + 2, KP + 1] + 1;
        For I:=1 To M + 2 do
          A[I, KP + 1]:=-A[I, KP + 1];
2:      IQ:=IZROV[KP];
        IZROV[KP]:=IPOSV[IP];
        IPOSV[IP]:=IQ;
    until IR <> 0;
3:  SIMP1(A, MP, NP, 0, L1, NL1, 0, KP, BMAX);
    If BMAX <= 0  Then
    begin
        ICASE:=0;
        Exit;
    end;
    SIMP2(A, M, N, MP, NP, L2, NL2, IP, KP, Q1);
    If IP = 0 Then
    begin
        ICASE:=1;
        Exit;
    end;
    SIMP3(A, MP, NP, M, N, IP, KP);
    GoTo 2;
end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -