Ïðèìåð: Ãëîáàëüíàÿ ñåòü INTERNET
ß èùó:
Íà ãëàâíóþ  |  Äîáàâèòü â èçáðàííîå  

Ãëàâíàÿ/

Ïðîãðàììèðîâàíèå, áàçû äàííûõ. /

Ìàòåìàòè÷åñêèå ìåòîäû è ÿçûêè ïðîãðàììèðîâàíèÿ: ñèìïëåêñ ìåòîä

Äîêóìåíò 1 | Äîêóìåíò 2 | Äîêóìåíò 3

←ïðåäûäóùàÿ  ñëåäóþùàÿ→
1 2 3 

PROGRAM SIMPLEX_METOD;

USES CRT;

LABEL ZN,ST,ELL,_END;

 

  TYPE MAS=ARRAY[1..30] OF REAL;

       MASB=ARRAY[1..30] OF STRING[3];

       MASX=ARRAY[1..30,1..30] OF REAL;

VAR Fo,FunctPr,B,H,Hnew,C,Cnew,CPr,CPrnew,FX:MAS;

    X,Xnew:MASX;

    BS,Bvsp,ZNAC:MASB;

    MIN,I1,I,J,Kx,Ky,Kit,NachKell,NachY,K_st:INTEGER;

    PriznacY,KLstr,KLst,ErrCode,Dop_X:INTEGER;

    P,P1,Mo,F0,Epsilon,Z:REAL;

    VSP,S,PrGomory:STRING;

    F:TEXT;

    DPx,DPy,Fm,Kell,Kstr:INTEGER;

                     { Ôóíêöèÿ ñîçäàíèÿ èíäåêñîâ }

FUNCTION SIMVB(V:INTEGER;S:CHAR):STRING;

  VAR M,Z:STRING;

BEGIN

 STR(V,M);

 Z:=S+M;

 SIMVB:=Z;

END;

                     { Ïðîöåäóðà çàïèñè äàííûõ â ôàéë }

PROCEDURE SAVE(X1:REAL;K:STRING;Mstr:INTEGER);

VAR V:STRING;

BEGIN

ASSIGN(F,'SIMPLEX.DAT');

APPEND(F);

CASE Mstr OF

 0:WRITELN(F,'');

 1:BEGIN

   IF K=' ' THEN STR(X1:1:0,V) ELSE STR(X1:10:4,V);

    WRITE(F,V);

    WRITE(F,'  ');

   END;

 2:WRITE(F,K);

 3:WRITELN(F,K);

END;

CLOSE(F);

END;

                     { Îïðåäåëåíèå äîïîëíèòåëüíûõ ïåðåìåííûõ }

PROCEDURE DOP_PER;

 BEGIN

   IF ZNAC[I1]='=' THEN

      BEGIN

       Kell:=Kell+1;Bvsp[Kell]:=SIMVB(DPy,'Y');

       DPy:=DPy+1;

       Xnew[I1,Kell]:=1;

       IF Fm=1 THEN FX[Kell]:=-1 ELSE FX[Kell]:=1;

       FunctPr[Kell]:=1;

       FOR I:=1 TO Kstr DO

        IF I<>I1 THEN Xnew[I,Kell]:=0;

      END;

   IF ZNAC[I1]='>=' THEN

      BEGIN

       Kell:=Kell+1;Bvsp[Kell]:=SIMVB(DPx,'X');

      DPx:=DPx+1;Dop_X:=Dop_X+1;

       Xnew[I1,Kell]:=-1;FX[Kell]:=0;

       FOR I:=1 TO Kstr DO

        IF I<>I1 THEN Xnew[I,Kell]:=0;

       Kell:=Kell+1;Bvsp[Kell]:=SIMVB(DPy,'Y');

       DPy:=DPy+1;

       Xnew[I1,Kell]:=1;

       IF Fm=1 THEN FX[Kell]:=-1 ELSE FX[Kell]:=1;

       FunctPr[Kell]:=1;

       FOR I:=1 TO Kstr DO

        IF I<>I1 THEN Xnew[I,Kell]:=0;

      END;

   IF ZNAC[I1]='<=' THEN

      BEGIN

      Kell:=Kell+1;Bvsp[Kell]:=SIMVB(DPx,'X');

      DPx:=DPx+1;Dop_X:=Dop_X+1;

       Xnew[I1,Kell]:=1;FX[Kell]:=0;

       FOR I:=1 TO Kstr DO

        IF I<>I1 THEN Xnew[I,Kell]:=0;

      END;

 END;

                     { Ïðîöåäóðà ñîêðàùåíèÿ Y }

PROCEDURE SOKR;

VAR P:INTEGER;

 BEGIN

  Kell:=Kell-1;

  FOR P:=NachKell+DOP_X TO Kell DO

   IF Bvsp[P]=BS[KLstr] THEN BEGIN

                         FOR J:=P TO Kell DO

                         Bvsp[J]:=Bvsp[J+1];

                         FunctPr[J]:=FunctPr[J+1];

                         Fx[J]:=Fx[J+1];

                         FOR I:=1 TO Kstr DO

                         Xnew[I,J]:=Xnew[I,J+1]

                             END;

 END;

                     { Ïðîöåäóðà, âûïîëíÿþùàÿ ìåòîä Ãîìîðè }

PROCEDURE GOMORY;

VAR MAX,Z:REAL;

BEGIN

 KLstr:=1;

  MAX:=H[1]-INT(H[1]);

 FOR I1:=2 TO Kstr DO

   IF (H[I1]-INT(H[I1]))>=MAX THEN BEGIN MAX:=H[I1]; KLstr:=I1;END;

  Kstr:=Kstr+1;

 Hnew[Kstr]:=H[KLstr]-INT(H[KLstr]);

  FOR I1:=1 TO Kell DO

   BEGIN

    Z:=INT(X[KLstr,I1]);

    IF X[KLstr,I1]<0 THEN Z:=Z-1;

    Xnew[Kstr,I1]:=X[KLstr,I1]-Z;

   END;

ZNAC[Kstr]:='>=';

END;

                     { Ïðîöåäóðà, âûïîëíÿþùàÿ Ñèìïëåêñ ìåòîä }

PROCEDURE SIMPLEX;

  LABEL POVZNAC,NACH;

BEGIN

         { Ïîäãîòîâêà ê ââîäó äàííûõ }

NachKell:=Kell;

DPx:=Kell+1;DPy:=1;

Kx:=1;Ky:=4;

Epsilon:=0.00001;

CLRSCR;

WRITELN('Ââåäèòå ñèñòåìó óðàâíåíèé:');

WRITELN('(êîýôôèöèåíòû ïðè âñåõ Õ,çíàê è ñâîáîäíûå ÷ëåíû)');

         { Ââîä äàííûõ }

  FOR I:=1 TO Kstr DO

   BEGIN

POVZNAC:

    WRITELN('Ââåäèòå ',I,'-å óðàâíåíèå:');

         { Ââîä êîýôôèöèåíòîâ ïðè X â I-òîì óðàâíåíèè }

    FOR J:=1 TO Kell DO

     BEGIN

      GOTOXY(Kx,Ky);Kx:=Kx+6;

      READLN(Xnew[I,J]);

     END;

         { Ââîä çíàêà â I-òîì óðàâíåíèè }

    Kx:=Kx+6;GOTOXY(Kx,Ky);READLN(ZNAC[I]);

              {Ïðîâåðêà ââåäåííîãî çíàêà íà ïðàâèëüíîñòü}

    IF (ZNAC[I]<>'>=') AND (ZNAC[I]<>'=') AND (ZNAC[I]<>'<=')

    THEN BEGIN

          WRITELN('Íåïðàâèëüíî çàäàí çíàê');

          Ky:=Ky+3;Kx:=1;

          GOTO POVZNAC;

         END;

    IF (ZNAC[I]='=') OR (ZNAC[I]='>=') THEN PriznacY:=1;

         { Ââîä ñâîáîäíîãî ÷ëåíà â I-òîì óðàâíåíèè }

    Kx:=Kx+6;GOTOXY(Kx,Ky);READ(B[I]);

    Kx:=1;

    Ky:=Ky+2;

   END;

WRITELN('Ââåäèòå êîýôôèöèåíòû ïðè Õ â öåëåâîé ôóíêöèè:');

         { Ââîä êîýôôèöèåíòîâ ïðè Õ â öåëåâîé ôóíêöèè }

   FOR J:=1 TO Kell DO

    BEGIN

     GOTOXY(Kx,Ky);Kx:=Kx+6;

     READ(FX[J]);

    END;

         { Ïîäãîòîâêà  èíäåêñàöèè X }

FOR J:=1 TO Kell DO

 Bvsp[J]:=SIMVB(J,'X');

         { Îïðåäåëåíèå äîïîëíèòåëüíûõ ïåðåìåííûõ }

FOR I1:=1 TO Kstr DO

 DOP_PER;

         { Çàìåíà îïòèìàëüíîé ôóíêöèè ñ MAX íà MIN ïðè íàëè÷èè

           â áàçèñå Y-êîâ åñëè èäåò èññëåäîâàíèå íà ìèíèìóì    }

MIN:=0;

IF (Fm=1) AND (PriznacY=1) THEN

   BEGIN

    MIN:=Fm;Fm:=2;

     FOR J:=1 TO Kell DO

      FX[J]:=-FX[J];

   END;

         { Ñîðòèðîâêà äîïîëíèòåëüíûõ ïåðåìåííûõ ïî èíäåêñó }

FOR I1:=NachKell+1 TO Kell DO

  FOR J:=I1+1 TO Kell DO

  IF Bvsp[J]<Bvsp[I1] THEN

     BEGIN

      VSP:=Bvsp[J];Bvsp[J]:=Bvsp[I1];Bvsp[I1]:=VSP;

      P:=FX[J];FX[J]:=FX[I1];FX[I1]:=P;

      P:=FunctPr[J];FunctPr[J]:=FunctPr[I1];FunctPr[I1]:=P;

      FOR I:=1 TO Kstr DO

      BEGIN

       P:=Xnew[I,I1];Xnew[I,I1]:=Xnew[I,J];Xnew[I,J]:=P;

      END;

     END;

Kit:=1;

CLRSCR;

         { Ïîäãîòîâêà ñòîëáöîâ C,B,H }

     FOR I:=1 TO Kstr DO

      BEGIN

       Hnew[I]:=B[I];

      FOR J:=NachKell+1 TO Kell DO

          IF Xnew[I,J]=1 THEN

             BEGIN

              BS[I]:=Bvsp[J];

              Cnew[I]:=FX[J];

              CPrnew[I]:=FunctPr[J];

        END;

             END;

NACH:;

REPEAT

PriznacY:=0;

         { Ïåðåäà÷à äàííûõ â èñõîäíûå ïåðåìåííûå c îáíóëåíèåì ÷èñåë,

           ïî ìîäóëþ ìåíüøèõ ÷åì 0.00001                           

←ïðåäûäóùàÿ  ñëåäóþùàÿ→
1 2 3 


Copyright © 2005—2007 «RefStore.Ru»