Äîäàòîê ². Ïðîãðàìà ðîçðàõóíêó ïàðàìåòð³â ð³âíîâàãè ãàçîôàçíèõ îáîðîòíèõ ðåàêö³é

².1. Ïðîãðàìà íà ìîâ³ BASIC

10 REM  ********************************************************

20 REM  *              Ïðîãðàììà Ð01 RAVN                      *

30 REM  ********************************************************

40 REM  *Ðàñ÷åò ïàðàìåòðîâ ñîñòîÿíèÿ ðàâíîâåñèÿ øèðîêîãî êëàññà*

50 REM  *            ãàçîôàçíûõ îáðàòèìûõ ðåàêöèé              *

60 REM  *                                                      *

70 REM  *               aA + bB <=====> rR + sS                *

80 REM  *                                                      *

90 REM  ********************************************************

100 REM *          Ñ ÈÑÏÎËÜÇÎÂÀÍÈÅÌ ÌÅÒÎÄÀ ÍÜÞÒÎÍÀ             *

110 REM ********************************************************

120 OPTION BASE 1

130 DIM N(4), A(4), FU(8), B(4), P(4), C(4)

140 PRINT "****************************************************"

150 PRINT "*                                                  *"

160 PRINT "*                ÐÅØÅÍÈÅ ÇÀÄÀ×È                    *"

170 PRINT "*                                                  *"

180 PRINT "****************************************************"

190 PRINT

200 PRINT "************ÂÂÎÄ ÈÑÕÎÄÍÛÕ ÄÀÍÍÛÕ**************": PRINT

205 PRINT "ÂÂÅÄÈÒÅ:": PRINT

210 INPUT "NA, NB, NR, NS - Ñòåõèoìåòðè÷åñêèå êîýôôèöèåíòû "; N(1), N(2), N(3), N(4)

220 IF N(1) + N(2) = 0 THEN STOP

230 PRINT "A0, B0, R0, S0 - èñõîäíûå êîëè÷åñòâà"

235 INPUT "                 êîìïîíåíòîâ, Êìîëü             "; A(1), A(2), A(3), A(4)

240 INPUT "KP - êîíñòàíòà ðàâíîâåñèÿ, ÌÏà^(r+s-a-b)        "; RP

250 INPUT "T - òåìïåðàòóðà, Ê                              "; T

260 INPUT "P - äàâëåíèå, ÌÏà                               "; P

270 INPUT "X - íà÷. ïðèáëèæåíèå õàðàêòåðèñòèê ðàâíîâåñèÿ   "; X

280 REM

290 REM Îïðåäåëåíèå êîíñòàíò

300 REM ITMAX - Äîïóñòèìîå ÷èñëî îïåðàöèé

310 REM CV, DV - êðèòåðèè ñõîäèìîñòè

320 REM

330 ITMAX = 20

340 CV = .0001

350 DV = 100000!

360 NDELT = N(3) + N(4) - (N(1) + N(2)):

370 NSM0 = 0: FOR I = 1 TO 4

380 NSM0 = NSM0 + A(I): NEXT I: VM = 22.4 * T * .1 / 273 / P: V0 = NSM0 * VM

390 KP = RP / (8.310001E-03 * T) ^ NDELT * VM ^ NDELT

400 PRINT

410 PRINT "****************ÐÅÇÓËÜÒÀÒÛ ÐÀÑ×ÅÒÀ*************": PRINT

420 PRINT SPC(10); "Ïîñëåäîâàòåëüíûå ïðèáëèæåíèÿ"

430 PRINT

450 PRINT SPC(2); "I"; TAB(12); "X"; TAB(28); "DX"; TAB(44); "F(X)"

460 PRINT

470 REM

480 REM Èòåðàöèîííûé öèêë

490 REM

500 FOR II = 1 TO ITMAX

510 FOR J = 1 TO 4

520 IPR = N(J): IGO = J: GOSUB 1050: FU(J) = FUNC: NEXT J

530 FOR J = 5 TO 8

540 IPR = N(J - 4) - 1: IGO = J - 4: GOSUB 1050: FU(J) = FUNC: NEXT J

550 NSMR = NSM0 + NDELT * X

560 FO = KP * NSMR ^ NDELT * FU(1) * FU(2) - FU(3) * FU(4)

570 DF1 = -KP * NSMR ^ NDELT * (N(2) * N(2) * FU(1) * FU(6) + N(1) * N(1) * FU(2) * FU(5))

580 DF2 = KP * NDELT ^ 2 * NSMR ^ (NDELT - 1) * FU(1) * FU(2)

590 DF0 = DF1 + DF2 - N(4) * N(4) * FU(3) * FU(8) - N(3) * N(3) * FU(4) * FU(7)

600 IF ABS(DF0) <= 1E-25 GOTO 730

610 DX = FO / DF0

620 PRINT USING "##     #.#####^^^^"; II; X;

630 PRINT USING "   #.#####^^^^"; DX; FO

640 REL = ABS(DX / X)

650 IF REL <= CV GOTO 810

660 IF REL >= DV GOTO 750

670 X = X - DX: NEXT II

680 REM

690 REM ÏÅ×ÀÒÜ ÑÎÎÁÙÅÍÈÉ ÎÁ ÎØÈÁÊÅ È ÂÎÇÂÐÀÒ Ê ÍÀ×ÀËÓ ÏÐÎÃÐÀÌÌÛ

700 REM

710 PRINT " ÍÅÒ ÑÕÎÄÈÌÎÑÒÈ ÏÐÈ ITMAX="; ITMAX

720 GOTO 210

730 PRINT " ÔÓÍÊÖÈß DF(X) ÏÐÈÁËÈÆÀÅÒÑß Ê 0"

740 GOTO 210

750 PRINT "ÌÅÒÎÄ ÐÀÑÕÎÄÈÒÑß"

760 GOTO 210

770 REM

780 REM ÐÀÑ×ÅÒ ÐÀÂÍÎÂÅÑÍÛÕ ÊÎËÈ×ÅÑÒÂ, ÐÀÂÍÎÂÅÑÍÛÕ ÏÀÐÖÈÀËÜÍÛÕ

790 REM ÄÀÂËÅÍÈÉ ÊÎÌÏÎÍÅÍÒÎÂ È ÊÎÍÑÒÀÍÒÛ ÐÀÂÍÎÂÅÑÈß

800 REM

810 FOR I = 1 TO 4

820 IF I <= 2 THEN B(I) = A(I) - N(I) * X ELSE B(I) = A(I) + N(I) * X

830 NEXT I

840 V = VM * NSMR

850 FOR I = 1 TO 4

860 P(I) = B(I) * 8.310001E-03 * T / V: C(I) = B(I) / NSMR: NEXT I

870 PSUM = 0!: FOR I = 1 TO 4: PSUM = PSUM + P(I): NEXT I

880 PRINT

890 PRINT SPC(10); "ÐÀÂÍÎÂÅÑÍÛÅ ÊÎËÈ×ÅÑÒÂÀ ÊÎÌÏÎÍÅÍÒÎÂ": PRINT

900 PRINT "AEQ="; B(1); "BEQ="; B(2); "REQ="; B(3); "SEQ="; B(4); "[êìîëü]"

910 PRINT : PRINT SPC(5); "ÎÁÚÅÌ ÍÀ×ÀËÜÍÎÉ ÑÌÅÑÈ V0="; V0; "[ì^3]": PRINT

920 PRINT SPC(5); "ÎÁÚÅÌ ÐÀÂÍÎÂÅÑÍÎÉ ÑÌÅÑÈ V="; V; "[ì^3]": PRINT

930 PRINT SPC(5); "ÐÀÂÍÎÂÅÑÍÛÅ ÏÀÐÖÈÀËÜÍÛÅ ÄÀÂËÅÍÈß ÊÎÌÏÎÍÅÍÒÎÂ"

940 PRINT : PRINT "PA="; P(1); "PB="; P(2); "[ÌÏà]": PRINT

950 PRINT SPC(5); "ÐÀÂÍÎÂÅÑÍÎÅ ÎÁÙÅÅ ÄÀÂËÅÍÈÅ P="; PSUM; "[ÌÏà]": PRINT

960 PRINT SPC(5); "ÐÀÂÍÎÂÅÑÍÛÅ ÌÎËßÐÍÛÅ ÄÎËÈ ÊÎÌÏÎÍÅÍÒÎÂ": PRINT

970 PRINT "CA="; C(1); "CB="; C(2); "CR="; C(3); "CS="; C(4): PRINT

980 FOR I = 1 TO 4

990 IF P(I) = 0! THEN P(I) = 1!

995 NEXT I

1000 CALCRP = P(3) ^ N(3) * P(4) ^ N(4) / (P(1) ^ N(1) * P(2) ^ N(2))

1010 PRINT "ÐÀÑ×ÈÒÀÍÍÀß ÊÐ="; CALCRP; "[ÌÏà ^ ("; NDELT; ")]"

1020 PRINT : PRINT "ÂÛÏÎËÍÅÍÈÅ ÏÐÎÃÐÀÌÌÛ ÇÀÂÅÐØÅÍÎ"

1030 END

1040 REM

1050 REM ÏÎÄÏÐÎÃÐÀÌÌÀ FUNC

1070 REM

1080 IF IGO > 2 THEN K = 1 ELSE K = -1

1090 IF N(IGO) <= 0 GOTO 1110 ELSE BASE1 = A(IGO) + K * N(IGO) * X

1100 IF BASE1 > 0! THEN FUNC = BASE1 ^ IPR: RETURN

1110 FUNC = 1!

1120 RETURN

1130 END

 

 

 

 

 

².2. Ïðîãðàìà íà ìîâ³ FORTRAN

      REAL N,ITMAX,NDELT,NSM0,II,NSMR,I,IPR,IGO,J,K,KP

      DIMENSION N(4), A(4), FU(8), B(4), P(4), C(4)

      WRITE(*,*) '****************************************************'

      WRITE(*,*) '*                ÐÅØÅÍÈÅ ÇÀÄÀ×È                    *'

      WRITE(*,*) '****************************************************'

      WRITE(*,*) '************ÂÂÎÄ ÈÑÕÎÄÍÛÕ ÄÀÍÍÛÕ**************'

      WRITE(*,*)'ÂÂÅÄÈÒÅ:'

5     WRITE(*,*)'NA, NB, NR, NS - Ñòåõèoìåòðè÷åñêèå êîýôôèöèåíòû'

      READ(*,*)N(1),N(2),N(3),N(4)

      ZZ=N(1)+N(2)

      IF(ZZ.EQ.0) STOP

      WRITE(*,*)'A0,B0,R0,S0 - èñõîäíûå êîëè÷åñòâà êîìïîíåíòîâ, Êìîëü'

      READ(*,*)A(1),A(2),A(3),A(4)

      WRITE(*,*)'KP - êîíñòàíòà ðàâíîâåñèÿ, ÌÏà^(r+s-a-b)'

      READ(*,*)RP

      WRITE(*,*)'T - òåìïåðàòóðà, Ê'

      READ(*,*)T

      WRITE(*,*)'P - äàâëåíèå, ÌÏà'

      READ(*,*)PE

      WRITE(*,*)'X - íà÷. ïðèáëèæåíèå õàðàêòåðèñòèê ðàâíîâåñèÿ'

      READ(*,*)X

      ITMAX=40.

      CV=.0001

      DV=100000.

      NDELT = N(3)+N(4)-(N(1)+N(2))

      NSM0=0.

      DO I=1,4

      NSM0=NSM0+A(I)

      END DO

      VM=22.4*T*.1/(273.*PE)

      V0=NSM0*VM

      KP=RP/(((0.008310001*T)**NDELT)*(VM**NDELT))

      WRITE(*,*)

      WRITE(*,*)'****************ÐÅÇÓËÜÒÀÒÛ ÐÀÑ×ÅÒÀ*************'

      WRITE(*,*)'          Ïîñëåäîâàòåëüíûå ïðèáëèæåíèÿ'

      WRITE(*,*)'  I          X        DX                        F(X)'

C     Èòåðàöèîííûé öèêë

      II=1

9     DO J=1,4

      IPR=N(J)

      IGO=J

      FU(J)=FUNC(IGO,K,IPR,X,a,n)

      END DO

      DO J=5,8

      IPR=N(J-4)-1

      IGO=J-4

      FU(J)=FUNC(IGO,K,IPR,X,a,n)

      END DO

      NSMR=NSM0+NDELT*X

      FO=KP*NSMR**NDELT*FU(1)*FU(2)-FU(3)*FU(4)

      DF1=-KP*NSMR**NDELT*(N(2)*N(2)*FU(1)*FU(6)+N(1)*N(1)*FU(2)*FU(5))

      DF2=KP*NDELT**2*NSMR**(NDELT-1)*FU(1)*FU(2)

      DF0=DF1+DF2-N(4)*N(4)*FU(3)*FU(8)-N(3)*N(3)*FU(4)*FU(7)

      IF (ABS(DF0).LE.1/(10**25))GOTO 30

      DX=FO/DF0

      WRITE(*,10)II,X

10    FORMAT(F7.3,F7.2)

      WRITE(*,100)DX,FO

100   format(f7.3,f20.0)

      REL=ABS(DX/X)

      IF(REL.LE.CV) GOTO 40

      IF(REL.GE.DV) THEN

      GOTO 35

      X=X-DX

      END IF

      IF(II.EQ.ITMAX) THEN

      GOTO 15

      ELSE

      II=II+1

      GOTO 9

15    END IF

C     ÏÅ×ÀÒÜ ÑÎÎÁÙÅÍÈÉ ÎÁ ÎØÈÁÊÅ È ÂÎÇÂÐÀÒ Ê ÍÀ×ÀËÓ ÏÐÎÃÐÀÌÌÛ

      WRITE(*,*)'ÍÅÒ ÑÕÎÄÈÌÎÑÒÈ ÏÐÈ ITMAX=',ITMAX

      GOTO 5

30    WRITE(*,*)'ÔÓÍÊÖÈß DF(X) ÏÐÈÁËÈÆÀÅÒÑß Ê 0'

      GOTO 5

35    WRITE(*,*)'ÌÅÒÎÄ ÐÀÑÕÎÄÈÒÑß'

      GOTO 5

C     ÐÀÑ×ÅÒ ÐÀÂÍÎÂÅÑÍÛÕ ÊÎËÈ×ÅÑÒÂ, ÐÀÂÍÎÂÅÑÍÛÕ ÏÀÐÖÈÀËÜÍÛÕ

C     ÄÀÂËÅÍÈÉ ÊÎÌÏÎÍÅÍÒÎÂ È ÊÎÍÑÒÀÍÒÛ ÐÀÂÍÎÂÅÑÈß

40    CONTINUE

      DO I=1,4

      IF(I.LE.2) THEN

      B(I)=A(I)-N(I)*X

      ELSE

      B(I)=A(I)+N(I)*X

      END IF

      END DO

      V=VM*NSMR

      DO I=1,4

      P(I)=B(I)*.00831000188*T/V

      C(I)=B(I)/NSMR

      END DO

      PSUM=0

      DO I=1,4

      PSUM=PSUM+P(I)

      END DO

      WRITE(*,*)

      WRITE(*,*)'          ÐÀÂÍÎÂÅÑÍÛÅ ÊÎËÈ×ÅÑÒÂÀ ÊÎÌÏÎÍÅÍÒÎÂ'

      WRITE(*,*)

      WRITE(*,*)'AEQ=',B(1),'BEQ=',B(2),'REQ=',B(3),'SEQ=',B(4),

     * '[êìîëü]'

      WRITE(*,*)

      WRITE(*,*)'     ÎÁÚÅÌ ÍÀ×ÀËÜÍÎÉ ÑÌÅÑÈ V0=',V0,'[ì^3]'

      WRITE(*,*)

      WRITE(*,*)'     ÎÁÚÅÌ ÐÀÂÍÎÂÅÑÍÎÉ ÑÌÅÑÈ V=',V,'[ì^3]'

      WRITE(*,*)

      WRITE(*,*)'     ÐÀÂÍÎÂÅÑÍÛÅ ÏÀÐÖÈÀËÜÍÛÅ ÄÀÂËÅÍÈß ÊÎÌÏÎÍÅÍÒÎÂ'

      WRITE(*,*)

      WRITE(*,*)'PA=',P(1),'PB=',P(2),'[ÌÏà]'

      WRITE(*,*)

      WRITE(*,*)'     ÐÀÂÍÎÂÅÑÍÎÅ ÎÁÙÅÅ ÄÀÂËÅÍÈÅ P=',PSUM,'[ÌÏà]'

      WRITE(*,*)

      WRITE(*,*)'     ÐÀÂÍÎÂÅÑÍÛÅ ÌÎËßÐÍÛÅ ÄÎËÈ ÊÎÌÏÎÍÅÍÒÎÂ'

      WRITE(*,*)

      WRITE(*,*)'CA=',C(1),'CB=',C(2),'CR=',C(3),'CS=',C(4)

      WRITE(*,*)

      DO I=1,4

      IF(P(I).EQ.0) P(I)=1

      END DO

      CALCRP=P(3)**N(3)*P(4)**N(4)/(P(1)**N(1)*P(2)**N(2))

      WRITE(*,*)'ÐÀÑ×ÈÒÀÍÍÀß ÊÐ=',CALCRP,'[ÌÏà^(',NDELT,')]'

      WRITE(*,*)

      WRITE(*,*)'ÂÛÏÎËÍÅÍÈÅ ÏÐÎÃÐÀÌÌÛ ÇÀÂÅÐØÅÍÎ'

      END

     

      FUNCTION FUNC(IGO,K,IPR,X,a,n)

      dimension a(4),n(4)

      REAL IGO,K,IPR,n

      IF (IGO.GT.2) THEN

      K=1

      ELSE

      K=-1

      END IF

      IF(N(IGO).LE.0) THEN

      GOTO 111

      ELSE

      BASE1=a(igo)+K*n(igo)*X

      END IF

      IF (BASE1.gt.0)    THEN

      FUNC=BASE1**IPR

      RETURN

      ELSE

111   FUNC=1

      RETURN

      END IF

      END

     

     

².3. Ïðîãðàìà íà ìîâ³ PASCAL

uses math;

label l1,l2;

const

  ITMAX = 20;

  CV = 0.0001;

  DV = 100000;

var

  N, A, B, Pa, C : array [1..4] of real;

  FU : array [1..8] of real;

  igo,i,j,ii:integer;

  k,base1,x,ipr,rp,t,ndelt,nsm0,kp,p:real;

  vm,v0,fo,df0,df1,df2,dx,rel,v,psum,calcrp,nsmr:real;

function func():real;

begin

  IF IGO > 2 THEN K := 1 ELSE K := -1;

  IF N[IGO] <= 0 then begin FUNC := 1; exit; end

  ELSE BASE1 := A[IGO] + K * N[IGO] * X;

  IF BASE1 > 0 THEN begin FUNC := deg(BASE1 , IPR); exit; end;

  func:=1;

end;

begin

  {//  ********************************************************

  //  *              Ïðîãðàììà Ð01 RAVN                      *

  //  ********************************************************

  //  *Ðàñ÷åò ïàðàìåòðîâ ñîñòîÿíèÿ ðàâíîâåñèÿ øèðîêîãî êëàññà*

  //  *            ãàçîôàçíûõ îáðàòèìûõ ðåàêöèé              *

  //  *               aA + bB <=====> rR + sS                *

  //  ********************************************************

  // *          Ñ ÈÑÏÎËÜÇÎÂÀÍÈÅÌ ÌÅÒÎÄÀ ÍÜÞÒÎÍÀ             *

  // ********************************************************}

  writeln ('****************************************************');

  writeln ('*                ÐÅØÅÍÈÅ ÇÀÄÀ×È                    *');

  writeln ('****************************************************');  writeln;

  writeln ('************ÂÂÎÄ ÈÑÕÎÄÍÛÕ ÄÀÍÍÛÕ**************'); writeln;

  writeln ('ÂÂÅÄÈÒÅ: '); writeln;

//210

  l1:

  write ('NA, NB, NR, NS - Ñòåõèoìåòðè÷åñêèå êîýôôèöèåíòû '); readln(N[1], N[2], N[3], N[4]);

  IF N[1] + N[2] = 0 THEN halt(1);

  writeln ('A0, B0, R0, S0 - èñõîäíûå êîëè÷åñòâà');

  write( '                 êîìïîíåíòîâ, Êìîëü             '); readln(A[1], A[2], A[3], A[4]);

  write('KP - êîíñòàíòà ðàâíîâåñèÿ, ÌÏà^[r+s-a-b]        '); readln(RP);

  write('T - òåìïåðàòóðà, Ê                              '); readln(T);

  write( 'P - äàâëåíèå, ÌÏà                               '); readln(P);

  write( 'X - íà÷. ïðèáëèæåíèå õàðàêòåðèñòèê ðàâíîâåñèÿ   '); readln(X);

  { // Îïðåäåëåíèå êîíñòàíò

   // ITMAX - Äîïóñòèìîå ÷èñëî îïåðàöèé

   // CV, DV - êðèòåðèè ñõîäèìîñòè}

  NDELT := N[3] + N[4] - (N[1] + N[2]);

  NSM0 := 0; FOR I := 1 TO 4 do NSM0 := NSM0 + A[I];

  VM := 22.4 * T * 0.1 / 273 / P; V0 := NSM0 * VM;

  KP := RP / deg((8.310001E-03 * T),NDELT) * deg(VM,NDELT);

  writeln; writeln( '****************ÐÅÇÓËÜÒÀÒÛ ÐÀÑ×ÅÒÀ*************'); writeln;

  writeln('Ïîñëåäîâàòåëüíûå ïðèáëèæåíèÿ'); writeln;

  writeln('I              ','X              ', 'DX              ', 'F[X]  );

  writeln;

  {Èòåðàöèîííûé öèêë}

  FOR II := 1 TO ITMAX do begin

    FOR J := 1 TO 4 do begin

      IPR := N[J];

      IGO := J;

      FU[J] := FUNC;

    end;

    FOR J := 5 TO 8 do begin

      IPR := N[J - 4] - 1;

      IGO := J - 4;

      FU[J] := FUNC;

    end;

    NSMR := NSM0 + NDELT * X;

    FO := KP * deg(NSMR , NDELT) * FU[1] * FU[2] - FU[3] * FU[4];

    DF1 := -KP * deg(NSMR , NDELT) * (N[2] * N[2] * FU[1] * FU[6] + N[1] * N[1] * FU[2] * FU[5]);

    DF2 := KP * NDELT * NDELT * deg(NSMR , (NDELT - 1)) * FU[1] * FU[2];

    DF0 := DF1 + DF2 - N[4] * N[4] * FU[3] * FU[8] - N[3] * N[3] * FU[4] * FU[7];

    IF ABS(DF0)<=1E-25 then begin

      writeln( ' ÔÓÍÊÖÈß DF[X] ÏÐÈÁËÈÆÀÅÒÑß Ê 0');

      GOTO l1;

    end;

    DX := FO / DF0;

    write(II:20, X:20:5); writeln(DX:20:5, FO:20:5);

    REL := ABS(DX / X);

    IF REL <= CV then GOTO l2;

    IF REL >= DV then begin

      writeln( 'ÌÅÒÎÄ ÐÀÑÕÎÄÈÒÑß');

      GOTO l1;

    end;

    X := X - DX;

  end;

  writeln( ' ÍÅÒ ÑÕÎÄÈÌÎÑÒÈ ÏÐÈ ITMAX:=', ITMAX);

  GOTO l1;

    {ÐÀÑ×ÅÒ ÐÀÂÍÎÂÅÑÍÛÕ ÊÎËÈ×ÅÑÒÂ, ÐÀÂÍÎÂÅÑÍÛÕ ÏÀÐÖÈÀËÜÍÛÕ

     ÄÀÂËÅÍÈÉ ÊÎÌÏÎÍÅÍÒÎÂ È ÊÎÍÑÒÀÍÒÛ ÐÀÂÍÎÂÅÑÈß}

  //810

  l2:

  FOR I := 1 TO 4 do IF I <= 2 THEN B[I] := A[I] - N[I] * X ELSE B[I] := A[I] + N[I] * X;

  V := VM * NSMR;

  FOR I := 1 TO 4 do begin

    Pa[I] := B[I] * 8.310001E-03 * T / V;

    C[I] := B[I] / NSMR;

  end;

  PSUM := 0;

  FOR I := 1 TO 4 do PSUM := PSUM + Pa[I];

  writeln; writeln('ÐÀÂÍÎÂÅÑÍÛÅ ÊÎËÈ×ÅÑÒÂÀ ÊÎÌÏÎÍÅÍÒÎÂ'); writeln;

  writeln( '  AEQ:=', B[1]:8:5, '  BEQ:=', B[2]:8:5, '  REQ:=', B[3]:8:5, '  SEQ:=', B[4]:8:5, '[êìîëü]');

  writeln ; writeln('ÎÁÚÅÌ ÍÀ×ÀËÜÍÎÉ ÑÌÅÑÈ V0:=', V0:10:5, '[ì^3]');

  writeln('ÎÁÚÅÌ ÐÀÂÍÎÂÅÑÍÎÉ ÑÌÅÑÈ V:=', V:10:5, '[ì^3]');

  writeln('ÐÀÂÍÎÂÅÑÍÛÅ ÏÀÐÖÈÀËÜÍÛÅ ÄÀÂËÅÍÈß ÊÎÌÏÎÍÅÍÒÎÂ');

  writeln; writeln('PA:=', Pa[1]:10:5, 'PB:=', Pa[2]:10:5, '[ÌÏà]');

  writeln('ÐÀÂÍÎÂÅÑÍÎÅ ÎÁÙÅÅ ÄÀÂËÅÍÈÅ P:=', PSUM:10:5, '[ÌÏà]');

  writeln('ÐÀÂÍÎÂÅÑÍÛÅ ÌÎËßÐÍÛÅ ÄÎËÈ ÊÎÌÏÎÍÅÍÒÎÂ');

  writeln('CA:=', C[1]:10:5, 'CB:=', C[2]:10:5, 'CR:=', C[3]:10:5, 'CS:=', C[4]:10:5);

  FOR I := 1 TO 4 do IF Pa[I] = 0 THEN Pa[I] := 1;

  CALCRP := deg(Pa[3] , N[3]) * deg(Pa[4] , N[4]) / (deg(Pa[1] , N[1]) * deg(Pa[2] , N[2]));

  writeln( 'ÐÀÑ×ÈÒÀÍÍÀß ÊÐ:=', CALCRP:10:5, '[ÌÏà ^ [', NDELT, ']]');

  writeln ; writeln( 'ÂÛÏÎËÍÅÍÈÅ ÏÐÎÃÐÀÌÌÛ ÇÀÂÅÐØÅÍÎ');

end.

 

unit math;

interface

function IntPower(const Base: real; const Exponent: Integer): real;

function deg(const Base, Exponent: real): real;

implementation

function IntPower(const Base: real; const Exponent: Integer): real;

asm

        mov     ecx, eax

        cdq

        fld1                      { Result := 1 }

        xor     eax, edx

        sub     eax, edx          { eax := Abs(Exponent) }

        jz      @@3

        fld     Base

        jmp     @@2

@@1:    fmul    ST, ST            { X := Base * Base }

@@2:    shr     eax,1

        jnc     @@1

        fmul    ST(1),ST          { Result := Result * X }

        jnz     @@1

        fstp    st                { pop X from FPU stack }

        cmp     ecx, 0

        jge     @@3

        fld1

        fdivrp                    { Result := 1 / Result }

@@3:

        fwait

end;

function deg(const Base, Exponent: real): real;

begin

  if Exponent = 0.0 then

    Result := 1.0               { n**0 = 1 }

  else if (Base = 0.0) and (Exponent > 0.0) then

    Result := 0.0               { 0**n = 0, n > 0 }

  else if (Frac(Exponent) = 0.0) and (Abs(Exponent) <= MaxInt) then

    Result := IntPower(Base, Integer(Trunc(Exponent)))

  else

    Result := Exp(Exponent * Ln(Base))

end;

begin

end.

 

².4. Ïðîãðàìà íà ìîâ³ C++

#include <math.h>

#include <stdio.h>

#include <stdlib.h>

//********************************************************

//*              Ïðîãðàììà Ð01 RAVN                      *

//********************************************************

//*Ðàñ÷åò ïàðàìåòðîâ ñîñòîÿíèÿ ðàâíîâåñèÿ øèðîêîãî êëàññà*

//*            ãàçîôàçíûõ îáðàòèìûõ ðåàêöèé              *

//*               aA + bB <=====> rR + sS                *

//********************************************************

//*          Ñ ÈÑÏÎËÜÇÎÂÀÍÈÅÌ ÌÅÒÎÄÀ ÍÜÞÒÎÍÀ             *

//********************************************************

double FUNC1050(double IPR, int IGO, double X, double *N, double *A)

{

      double K;

      if (IGO > 1) K = 1;

      else K = -1;

      double BASE1;

      if (N[IGO] > 0.0)

      {

             BASE1 = A[IGO] + K*N[IGO]*X;

             if (BASE1 > 0.0) return pow(BASE1,IPR);

      }

      return 1;

}

void main(void)

{

      double N[4],A[4],FU[8],B[4],P[4],C[4];

      double RP,T,_P,X;

      //ïå÷àòü ñîîáùåíèé îá îøèáêå è âîçâðàò ê íà÷àëó ïðîãðàììû

      printf("****************************************************\n");

      printf("*                ÐÅØÅÍÈÅ ÇÀÄÀ×È                    *\n");

      printf("****************************************************\n\n");

      printf("****************ÂÂÎÄ ÈÑÕÎÄÍÛÕ ÄÀÍÍÛÕ****************\n\n");

      printf("ÂÂÅÄÈÒÅ:\n");

      while (true)

      {

      {

      float fN[4],fA[4];

      float fRP,fT,_fP,fX;

      printf("\nNA, NB, NR, NS - Ñòåõèoìåòðè÷åñêèå êîýôôèöèåíòû ");

      scanf("%f %f %f %f",&fN[0],&fN[1],&fN[2],&fN[3]);

      for (int i = 0; i < 4; i++) N[i] = fN[i];

      if (N[0] + N[1] == 0) return;

      printf("\nA0, B0, R0, S0 - èñõîäíûå êîëè÷åñòâà\n");

      printf("                 êîìïîíåíòîâ, Êìîëü             ");

      scanf("%f %f %f %f",&fA[0],&fA[1],&fA[2],&fA[3]);

      for (i = 0; i < 4; i++) A[i] = fA[i];

      printf("\nKP - êîíñòàíòà ðàâíîâåñèÿ, ÌÏà^(r+s-a-b)        "); scanf("%f",&fRP); RP = fRP;

      printf("\nT - òåìïåðàòóðà, Ê                              "); scanf("%f",&fT); T = fT;

      printf("\nP - äàâëåíèå, ÌÏà                               "); scanf("%f",&_fP); _P = _fP;

      printf("\nX - íà÷. ïðèáëèæåíèå õàðàêòåðèñòèê ðàâíîâåñèÿ   "); scanf("%f",&fX); X = fX;

      }

      // Îïðåäåëåíèå êîíñòàíò

      // ITMAX - Äîïóñòèìîå ÷èñëî îïåðàöèé

      // CV, DV - êðèòåðèè ñõîäèìîñòè

      int ITMAX = 20;

      double CV = 0.0001;

      double DV = 100000;

      double NDELT = (N[2] + N[3]) - (N[0] + N[1]);

      double NSM0 = 0;

      for (int i = 0; i < 4; i++) NSM0 = NSM0 + A[i];

      double VM = 22.4*T*0.1/273/_P;

      double V0 = NSM0*VM;

      double KP = RP/pow((8.310001E-03*T),NDELT)*pow(VM,NDELT);

      printf("\n");

      printf("****************ÐÅÇÓËÜÒÀÒÛ ÐÀÑ×ÅÒÀ******************\n\n");

      printf("          Ïîñëåäîâàòåëüíûå ïðèáëèæåíèÿ\n\n");

      printf("  I         X               DX              F(X)\n\n");

      // Èòåðàöèîííûé öèêë

      for(int ii = 0; ii < ITMAX; ii++)

      {

             for (int j = 0; j < 4; j++)

                   FU[j] = FUNC1050(N[j],j,X,N,A);

             for (j = 4; j < 8; j++)

                   FU[j] =  FUNC1050(N[j-4]-1,j-4,X,N,A);

             double NSMR = NSM0 + NDELT * X;

             double FO = KP*pow(NSMR,NDELT)*FU[0]*FU[1]-FU[2]*FU[3];

             double DF1 = -KP*pow(NSMR,NDELT)*(N[1]*N[1]*FU[0]*FU[5]+N[0]*N[0]*FU[1]*FU[4]);

             double DF2 = KP*NDELT*NDELT*pow(NSMR,(NDELT-1))*FU[0]*FU[1];

             double DF0 = DF1+DF2-N[3]*N[3]*FU[2]*FU[7]-N[2]*N[2]*FU[3]*FU[6];

             if (fabs(DF0) <= 1E-25)

             {

                   printf(" ÔÓÍÊÖÈß DF(X) ÏÐÈÁËÈÆÀÅÒÑß Ê 0\n");

                   break;

             }

             double DX = FO/DF0;

             printf("%2i   %1.6E   %1.6E   %1.6E\n",ii,X,DX,FO);

             double REL = fabs(DX/X);

             if (REL <= CV)

             {

                   //ðàñ÷åò ðàâíîâåñíûõ êîëè÷åñòâ, ðàâíîâåñíûõ ïàðöèàëüíûõ

                   //äàâëåíèé êîìïîíåíòîâ è êîíñòàíòû ðàâíîâåñèÿ

                   for (i = 0; i < 4; i++)

                         if (i < 2) B[i] = A[i] - N[i]*X;

                         else B[i] = A[i] + N[i]*X;

                   double V = VM * NSMR;

                   for (i = 0; i < 4; i++)

                   {

                         P[i] = B[i] * 8.310001E-03 * T / V;

                         C[i] = B[i] / NSMR;

                   }

 

                   double PSUM = 0.0;

                   for (i = 0; i < 4; i++)

                         PSUM = PSUM + P[i];

                   printf("\n");

                   printf("          ÐÀÂÍÎÂÅÑÍÛÅ ÊÎËÈ×ÅÑÒÂÀ ÊÎÌÏÎÍÅÍÒÎÂ\n\n");

                   printf("AEQ=%f  BEQ=%f REQ=%f SEQ=%f [êìîëü]\n\n",B[0],B[1],B[2],B[3]);

                   printf("     ÎÁÚÅÌ ÍÀ×ÀËÜÍÎÉ ÑÌÅÑÈ V0=%f [ì^3]\n\n",V0);

                   printf("     ÎÁÚÅÌ ÐÀÂÍÎÂÅÑÍÎÉ ÑÌÅÑÈ V= %f [ì^3]\n\n",V);

                   printf("     ÐÀÂÍÎÂÅÑÍÛÅ ÏÀÐÖÈÀËÜÍÛÅ ÄÀÂËÅÍÈß ÊÎÌÏÎÍÅÍÒÎÂ\n\n");

                   printf("PA=%f PB=%f [ÌÏà]\n\n",P[0],P[1]);

                   printf("     ÐÀÂÍÎÂÅÑÍÎÅ ÎÁÙÅÅ ÄÀÂËÅÍÈÅ P=%f [ÌÏà]\n\n",PSUM);

                   printf("     ÐÀÂÍÎÂÅÑÍÛÅ ÌÎËßÐÍÛÅ ÄÎËÈ ÊÎÌÏÎÍÅÍÒÎÂ\n\n");

                   printf("CA=%f CB=%f CR=%f CS=%f\n\n",C[0],C[1],C[2],C[3]);

                   for (i = 0; i < 4; i++)

                         if (P[i] == 0.0) P[i] = 1.0;

                   double CALCRP = pow(P[2],N[2])*pow(P[3],N[3])/(pow(P[0],N[0])*pow(P[1],N[1]));

                   printf("ÐÀÑ×ÈÒÀÍÍÀß ÊÐ=%f[ÌÏà^%.0f]\n\n",CALCRP,NDELT);

                   printf("ÂÛÏÎËÍÅÍÈÅ ÏÐÎÃÐÀÌÌÛ ÇÀÂÅÐØÅÍÎ\n\n");

                   exit(0);

             }

             if (REL >= DV)

             {

                   printf("ÌÅÒÎÄ ÐÀÑÕÎÄÈÒÑß\n\n");

                   break;

             }

             X = X - DX;

      }

      //Ïå÷àòü ñîîáùåíèé îá îøèáêå è âîçâðàò ê íà÷àëó ïðîãðàììû

      printf(" ÍÅÒ ÑÕÎÄÈÌÎÑÒÈ ÏÐÈ ITMAX=%i\n",ITMAX);

      }

}

 

².5. Ïðîãðàìà íà ìîâ³ DELPHI

unit lab1;

interface

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  StdCtrls, Menus, ExtCtrls;

type

  mas1 = array[1..4] of real;

  mas2 = array[1..4] of integer;

  TForm1 = class(TForm)

    Edit1: TEdit;

    Edit2: TEdit;

    Edit3: TEdit;

    Edit4: TEdit;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    Label4: TLabel;

    Edit5: TEdit;

    Edit6: TEdit;

    Edit7: TEdit;

    Edit8: TEdit;

    Label5: TLabel;

    Label6: TLabel;

    Edit9: TEdit;

    Label7: TLabel;

    Edit10: TEdit;

    Label8: TLabel;

    Edit11: TEdit;

    Label9: TLabel;

    Label10: TLabel;

    Edit12: TEdit;

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    Label11: TLabel;

    MainMenu1: TMainMenu;

    N1: TMenuItem;

    N2: TMenuItem;

    N3: TMenuItem;

    N4: TMenuItem;

    N5: TMenuItem;

    N6: TMenuItem;

    Edit13: TEdit;

    Edit14: TEdit;

    Edit15: TEdit;

    Edit16: TEdit;

    Label12: TLabel;

    Label13: TLabel;

    Label14: TLabel;

    Label15: TLabel;

    Label16: TLabel;

    Bevel1: TBevel;

    Bevel2: TBevel;

    Label17: TLabel;

    Label22: TLabel;

    Edit17: TEdit;

    Edit18: TEdit;

    Edit19: TEdit;

    Edit20: TEdit;

    Label18: TLabel;

    Label19: TLabel;

    Label23: TLabel;

    Label24: TLabel;

    Edit23: TEdit;

    Label25: TLabel;

    Edit24: TEdit;

    Edit25: TEdit;

    Edit26: TEdit;

    Edit27: TEdit;

    Label26: TLabel;

    Label27: TLabel;

    Label28: TLabel;

    Label29: TLabel;

    Label30: TLabel;

    Edit28: TEdit;

    Bevel3: TBevel;

    Bevel4: TBevel;

    Label20: TLabel;

    Label21: TLabel;

    Label31: TLabel;

    Label32: TLabel;

    Label33: TLabel;

    Label34: TLabel;

    Label35: TLabel;

    Label36: TLabel;

    Edit21: TEdit;

    Label37: TLabel;

    procedure Button3Click(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure EditKeyPress(Sender: TObject; var key: char);

    procedure Button2Click(Sender: TObject);

    procedure N6Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

implementation

{$R *.DFM}

function Power(Base,Exponent: Real): Real; {Vozv. v stepen}

var

 Tmp: Real;

begin

 Power:=0;

 if Int(Exponent/2)=Exponent/2 then Base:=Abs(Base);

 if Exponent=0 then begin

  Power:=1;

  Exit

 end;

 if Base=0 then begin

  power:=0;

  exit

 end;

 if Base>0 then begin

  Tmp:=Exp((Abs(Exponent))*Ln(Base));

  if Exponent>0 then begin

   power:=Tmp;

   exit

  end;

  if Exponent<0 then begin

   power:=1/Tmp;

   exit

  end;

 end;

 if Base<0 then begin

  Tmp :=Exp((Abs(Exponent))*Ln(Abs(Base)));

  if Exponent>0 then begin

   power:=-Tmp;

   exit

  end;

  if Exponent<0 then begin

   power:=-1/Tmp;

   exit

  end;

 end;

end;

function func1(igo,ipr:integer; X: real; A: mas1; N: mas2): real;

var

 base1: real;

 k: integer;

begin

 if igo>2 then k:=1 else k:=-1;

 if N[igo]>0 then

  begin

   base1:=A[igo]+k*N[igo]*x;

   if base1>0 then func1:=power(base1,ipr) else func1:=1;

  end

 else func1:=1;

end;

 

procedure Psiho(Edit1,Edit2,Edit3,Edit4,Edit5,Edit6,Edit7,Edit8,

 Edit9,Edit10,Edit11,Edit12,Edit13,Edit14,Edit15,Edit16,Edit17,

 Edit18,Edit19,Edit20,Edit21,Edit23,Edit24,Edit25,Edit26,Edit27,

 Edit28: TEdit; Label11: Tlabel);

const

 cv=0.0001;

 dv=1000000;

var

 i,j,ii,ipr,igo,itmax:integer;

 A,B,p,C: mas1;

 N: mas2;

 X,T,RP,Kp,Vo,V,dX,F0,DF0,DF1,DF2,Rel,calcrp,Ndelt,Nsm0,Nsmr,Vm,pp,psum:real;

 fu:array[1..8] of real;

 errormsg: string;

 done: boolean;

begin

 {Ñòåõèîìåòðè÷åñêèå êîýôôèöèåíòû}

 N[1]:=StrToInt(Edit1.Text);

 N[2]:=StrToInt(Edit2.Text);

 N[3]:=StrToInt(Edit3.Text);

 N[4]:=StrToInt(Edit4.Text);

 itmax:=StrToInt(Edit21.Text);

 if (N[1]+N[2])<>0 then

 begin

  {Èñõîäíûå êîëè÷åñòâà êîìïîíåíòîâ, Êìîëü}

  A[1]:=StrToFloat(Edit5.Text);

  A[2]:=StrToFloat(Edit6.Text);

  A[3]:=StrToFloat(Edit7.Text);

  A[4]:=StrToFloat(Edit8.Text);

  RP:=StrToFloat(Edit9.Text);{Êð - êîíñòàíòà ðàâíîâåñèÿ, ÌÏà}

  T:=StrToFloat(Edit10.Text);{Ò - òåìïåðàòóðà, Ê}

  pp:=StrToFloat(Edit11.Text);{ð - äàâëåíèå, ÌÏà}

  X:=StrToFloat(Edit12.Text);{Õ - íà÷. ïðèáëèæåíèå}

  Ndelt:=N[3]+N[4]-(N[1]+N[2]);{ðàçíèöà ñòåõèîìåòðè÷åñêèõ êîýôôèöèåíòîâ}

  Nsm0:=0;

  For i:=1 to 4 do Nsm0:=Nsm0+A[i];

  Vm:=22.4*T*0.1/273/pp;

  Vo:=Nsm0*Vm;

  Kp:=RP/power(((8.310001E-03)*T),Ndelt)*power(Vm,Ndelt);

  ii:=0;

  Done:=false;

  Repeat

  ii:=ii+1;

   For j:=1 to 4 do

   begin

    ipr:=N[j];

    igo:=j;

    Fu[j]:=func1(igo,ipr,X,A,N);

   end;

   For j:=5 to 8 do

   begin

    ipr:=N[j-4]-1;

    igo:=j-4;

    Fu[j]:=func1(igo,ipr,X,A,N);

   end;

   Nsmr:=Nsm0+Ndelt*X;

   F0:=Kp*power(Nsmr,Ndelt)* Fu[1]*Fu[2]-Fu[3]*Fu[4];

   DF1:=-Kp*power(Nsmr,Ndelt)*(N[2]*N[2]*Fu[1]*Fu[6]+N[1]*N[1]*Fu[2]*Fu[5]);

   DF2:=Kp*Ndelt*Ndelt*power(Nsmr,(Ndelt-1))*Fu[1]*Fu[2];

   DF0:=DF1+DF2-N[4]*N[4]*Fu[3]*Fu[8]-N[3]*N[3]*Fu[4]*Fu[7];

   dX:=F0/DF0;

   Rel:=ABS(dX/X);

   X:=X-dX;

   if rel<=cv then

   begin

    done:=true;

    errormsg:='';

    {Ðàñ÷¸ò ðàâíîâåñíîãî ñîñòîÿíèÿ}

    For i:=1 to 4 do if i<=2 then b[i]:=A[i]-N[i]*X else B[i]:=A[i]+N[i]*X;

    V:=Vm*Nsmr;

    For i:=1 to 4 do

    begin

     p[i]:=B[i]*(8.310001E-03)*T/V;

     C[i]:=B[i]/Nsmr;

    end;

    psum:=0;

    For i:=1 to 4 do psum:=psum+p[i];

    {Âûâîä ðåçóëüòàòîâ}

    Edit13.Text:=FloatToStr(B[1]);

    Edit14.Text:=FloatToStr(B[2]);

    Edit15.Text:=FloatToStr(B[3]);

    Edit16.Text:=FloatToStr(B[4]);

    Edit17.Text:=FloatToStr(Vo);

    Edit18.Text:=FloatToStr(V);

    Edit19.Text:=FloatToStr(p[1]);

    Edit20.Text:=FloatToStr(p[2]);

    Edit23.Text:=FloatToStr(psum);

    Edit24.Text:=FloatToStr(C[1]);

    Edit25.Text:=FloatToStr(C[2]);

    Edit26.Text:=FloatToStr(C[3]);

    Edit27.Text:=FloatToStr(C[4]);

    For i:=1 to 4 do if p[i]=0 then p[i]:=1;

    calcrp:=power(p[3],N[3])*power(p[4],N[4])/power(p[1],N[1])/power(p[2],N[2]);

    Edit28.Text:=FloatToStr(calcrp);

   end;

   if rel>=dv then

   begin

    errormsg:='Ìåòîä ðàñõîäèòñÿ!';

    done:=true;

   end;

   if (ii=itmax) and (not done) then

    errormsg:='Íåò ñõîäèìîñòè ïðè itmax='+IntToStr(itmax);

  until done or (ii=itmax);

 end

 else errormsg:='Çàäàéòå ñòåõèîìåòðè÷åñêèå êîýôôèöèåíòû!';

 label11.Caption:=errormsg;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

 Form1.Close;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

 if (Edit1.Text='') or (Edit2.Text='') or (Edit3.Text='') or (Edit4.Text='')

 or (Edit5.Text='') or (Edit6.Text='') or (Edit7.Text='') or (Edit8.Text='')

 or (Edit9.Text='') or (Edit10.Text='') or (Edit11.Text='')

 or (Edit12.Text='') or (Edit21.Text='')

 then

  begin

   MessageDlg('Èñõîäíûå äàííûå ââåäåíû íå ïîëíîñòüþ!',mtError,[mbCancel],0);

  end

 else

  Psiho(Edit1,Edit2,Edit3,Edit4,Edit5,Edit6,Edit7,Edit8,

  Edit9,Edit10,Edit11,Edit12,Edit13,Edit14,Edit15,Edit16,Edit17,

  Edit18,Edit19,Edit20,Edit21,Edit23,Edit24,Edit25,Edit26,Edit27,

  Edit28,Label11);

end;

 

procedure TForm1.EditKeyPress(Sender: TObject; var key: char);

var

 buf: string[20];

 dcm: char;

 l: boolean;

begin

 dcm:=decimalseparator;

 buf:='';

 l:=false;

 if Sender=Edit1 then begin buf:=Edit1.Text; l:=true; end;

 if Sender=Edit2 then begin buf:=Edit2.Text; l:=true; end;

 if Sender=Edit3 then begin buf:=Edit3.Text; l:=true; end;

 if Sender=Edit4 then begin buf:=Edit4.Text; l:=true; end;

 if Sender=Edit5 then buf:=Edit5.Text;

 if Sender=Edit6 then buf:=Edit6.Text;

 if Sender=Edit7 then buf:=Edit7.Text;

 if Sender=Edit8 then buf:=Edit8.Text;

 if Sender=Edit9 then buf:=Edit9.Text;

 if Sender=Edit10 then buf:=Edit10.Text;

 if Sender=Edit11 then buf:=Edit11.Text;

 if Sender=Edit12 then buf:=Edit12.Text;

 if Sender=Edit21 then begin buf:=Edit21.Text; l:=true; end;

 case key of

  '0'..'9',chr(8):;

  '-': key:=chr(0);

  ',','.' :    begin

                if (pos(dcm,buf)<>0) or l then key:=chr(0)

                else

                if key<>dcm then key:=dcm;

               end;

  chr(13): begin

            if Sender=Edit1 then Edit2.SetFocus;

            if Sender=Edit2 then Edit3.SetFocus;

            if Sender=Edit3 then Edit4.SetFocus;

            if Sender=Edit4 then Edit5.SetFocus;

            if Sender=Edit5 then Edit6.SetFocus;

            if Sender=Edit6 then Edit7.SetFocus;

            if Sender=Edit7 then Edit8.SetFocus;

            if Sender=Edit8 then Edit9.SetFocus;

            if Sender=Edit9 then Edit10.SetFocus;

            if Sender=Edit10 then Edit11.SetFocus;

            if Sender=Edit11 then Edit12.SetFocus;

            if Sender=Edit12 then Edit21.SetFocus;

            if Sender=Edit21 then

            begin

             Button1.SetFocus;

             Button1Click(Sender);

            end;

           end;

  else key:=chr(0);

 end;

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

 Edit1.Text:='';

 Edit2.Text:='';

 Edit3.Text:='';

 Edit4.Text:='';

 Edit5.Text:='';

 Edit6.Text:='';

 Edit7.Text:='';

 Edit8.Text:='';

 Edit9.Text:='';

 Edit10.Text:='';

 Edit11.Text:='';

 Edit12.Text:='';

 Edit13.Text:='';

 Edit14.Text:='';

 Edit15.Text:='';

 Edit16.Text:='';

 Edit17.Text:='';

 Edit18.Text:='';

 Edit19.Text:='';

 Edit20.Text:='';

 Edit23.Text:='';

 Edit24.Text:='';

 Edit25.Text:='';

 Edit26.Text:='';

 Edit27.Text:='';

 Edit21.Text:='';

end;

 

procedure TForm1.N6Click(Sender: TObject);

begin

 MessageDlg( 'Ravnogaz v1.03'+#13+#13

             + 'Ïðîãðàììà ðàñ÷¸òà ðàâíîâåñíîãî ñîñòîÿíèÿ'+#13

             +'ãàçîôàçíûõ ðåàêöèé'+#13+#13

             +'Àâòîð:'+#13+#13

             +'  Ñòóäåíò Êàôåäðû ÕÏÑÌ ÈÕÔ ÍÒÓÓ "ÊÏÈ"'+#13

             +'  Ïîãîäàåâ Êîíñòàíòèí Ñåðãååâè÷'+#13+#13

             +'  ãðóïïà ËÏ-01' ,

             MtInformation,[mbOK],0);

end;

end.

 

Äîäàòîê ²². Ïðîãðàìà ðîçðàõóíêó ê³íåòèêè ñêëàäíèõ õ³ì³÷íèõ ðåàêö³é

I².1. Ïðîãðàìà íà ìîâ³ BASIC

10 REM  *********************************************************************

20 REM  *               ÏÐÎÃÐÀÌÌÀ P03 KINRK                                 *

30 REM  *********************************************************************

40 REM  *                                                                   *

50 REM  *    ÐÅØÅÍÈÅ ÑÈÑÒÅÌÛ ÊÈÍÅÒÈ×ÅÑÊÈÕ ÓÐÀÂÍÅÍÈÉ ÕÈÌÈ×ÅÑÊÎÉ ÐÅÀÊÖÈÈ      *

60 REM  *                 ÑÎ ÑËÎÆÍÎÉ ÑÕÅÌÎÉ ÏÐÅÂÐÀÙÅÍÈß                     *

70 REM  *                                                                   *

80 REM  *                                 K1                                *

90 REM  *                        A + B --------> R + S                      *

100 REM *                              <-------                             *

110 REM *                                 K11                               *

120 REM *                                                                   *

130 REM *                                  K2                               *

140 REM *                        B + R --------> S + E                      *

150 REM *                                                                   *

160 REM *********************************************************************

170 REM *               ÌÅÒÎÄÎÌ ÐÓÍÃÅ-ÊÓÒÒÀ ×ÅÒÂÅÐÒÎÃÎ ÏÎÐßÄÊÀ              *

180 REM *     ÄÈÔÔÅÐÅÍÖÈÀËÜÍÛÅ ÓÐÀÂÍÅÍÈß ÎÏÈÑÀÍÛ Â ÏÎÄÏÐÎÃÐÀÌÌÅ FUNC        *

190 REM *********************************************************************

200 PRINT "*****************************************************************"

210 PRINT "*                                                               *"

220 PRINT "*                 Ð Å Ø Å Í È Å  Ç À Ä À × È                    *"

230 PRINT "*                                                               *"

240 PRINT "*****************************************************************"

250 PRINT : PRINT "********* ÂÂÎÄ ÈÑÕÎÄÍÛÕ ÄÀÍÍÛÕ ********"

260 PRINT : PRINT "     ÂÂÅÄÈÒÅ :": PRINT

270 INPUT "N  -÷èñëî óðàâíåíèé                                          "; N

280 DIM Y(N), VEC(N), G(N)

290 INPUT "K1,K11,K2 - êîíñòàíòû ñêîðîñòåé õèì. ðåàêöèé, ë/(ìîëü*ñ)"; K1, K11, K2

300 INPUT "X - ÍÀ×ÀËÎ ÏÐÎÂÅÄÅÍÈß ÐÅÀÊÖÈÈ, c                             "; X

310 INPUT "XK - ÏÐÎÄÎËÆÈÒÅËÜÍÎÑÒÜ ÐÅÀÊÖÈÈ, c                            "; XK

320 PRINT "ÍÀ×ÀËÜÍÀß ÊÎÍÖÅÍÒÐÀÖÈß ÊÎÌÏÎÍÅÍÒΠÐÅÀÊÖÈÈ, ìîëü/ë"

330 FOR J = 1 TO N: PRINT TAB(47); "Y0("; J; ")="; : INPUT Y(J): NEXT J

340 PRINT "    ÇÀÄÀÉÒÅ :  ": PRINT

350 INPUT "H - ØÀÃ ÈÍÒÅÃÐÈÐÎÂÀÍÈß                                       "; H

360 INPUT "Q - ØÀà ÏÅ×ÀÒÈ ÐÅÇÓËÜÒÀÒΠ                                  "; Q

380 PRINT : PRINT "********* ÐÅÇÓËÜÒÀÒÛ ÐÀÑ×ÅÒÀ *********": PRINT

390 PRINT " ÈÇÌÅÍÅÍÈÅ ÊÎÍÖÅÍÒÐÀÖÈÉ ÊÎÌÏÎÍÅÍÒÎÂ ÐÅÀÊÖÈÈ Y(J), ìîëü/ë "

400 PRINT "             ÂÎ ÂÐÅÌÅÍÈ   X,   c "

410 PRINT

420 GOSUB 540

430 M% = Q / H

440 GOSUB 580: REM îáðàùåíèå ê ï/ï Ðóãíå-Êóòòà

450 PRINT USING "###.##  "; X;

460 FOR J = 1 TO N: PRINT USING "####.####  "; Y(J); : NEXT J

470 PRINT

480 IF X <= XK THEN GOTO 440

500 PRINT

510 PRINT "ÂÛÏÎËÍÅÍÈÅ ÏÐÎÃÐÀÌÌÛ ÇÀÂÅÐØÅÍÎ"

520 END

540 PRINT "  X  "; : FOR J = 1 TO N: PRINT "   Y("; J; ")"; : NEXT J

550 PRINT

570 RETURN

580 REM ********************************************************************

590 REM *       ÏÎÄÏÐÎÃÐÀÌÌÀ ÐÅÀËÈÇÀÖÈÈ ÌÅÒÎÄÀ ÐÓÍÃÅ-ÊÓÒÒÀ RUNKUT          *

600 REM ********************************************************************

610 DIM T1(N), T2(N), T3(N), T4(N)

620 FOR J = 1 TO M%

630 FOR I = 1 TO N

640 G(I) = Y(I)

650 NEXT I

660 GOSUB 800: REM îáðàùåíèå ê ï/ï FUNC

670 FOR I = 1 TO N: T1(I) = H * VEC(I): Y(I) = G(I) + T1(I) / 2: NEXT I

680 GOSUB 800

690 FOR I = 1 TO N: T2(I) = H * VEC(I): Y(I) = G(I) + T2(I) / 2: NEXT I

700 GOSUB 800

710 FOR I = 1 TO N: T3(I) = H * VEC(I): Y(I) = G(I) + T3(I): NEXT I

720 GOSUB 800

730 FOR I = 1 TO N: T4(I) = H * VEC(I)

740 G(I) = G(I) + (T1(I) + 2 * (T2(I) + T3(I)) + T4(I)) / 6: NEXT I

750 FOR I = 1 TO N: Y(I) = G(I): NEXT I

760 X = X + H

770 NEXT J: ERASE T1, T2, T3, T4

780 RETURN

800 REM ********************************************************************

810 REM *    ÏÎÄÏÐÎÃÐÀÌÌÀ FUNC ÂÛ×ÈÑËÅÍÈß ÏÐÀÂÛÕ ×ÀÑÒÅÉ ÄÈÔ. ÓÐÀÂÍÅÍÈÉ     *

820 REM ********************************************************************

830 VEC(1) = -K1 * Y(1) * Y(2) + K11 * Y(3) * Y(4)

840 VEC(2) = -K1 * Y(1) * Y(2) + K11 * Y(3) * Y(4) - K2 * Y(2) * Y(3)

850 VEC(3) = K1 * Y(1) * Y(2) - K11 * Y(3) * Y(4) - K2 * Y(2) * Y(3)

860 VEC(4) = K1 * Y(1) * Y(2) - K11 * Y(3) * Y(4) + K2 * Y(2) * Y(3)

870 VEC(5) = K2 * Y(2) * Y(3)

880 RETURN

 

I².2. Ïðîãðàìà íà ìîâ³ FORTRAN

      PROGRAM      matm2

      REAL K1,K11,K2

      DIMENSION Y(5), VEC(5), G(5), T1(5), T2(5), T3(5), T4(5)

      OPEN (1,file='REZUL.txt')

      WRITE(*,*) '****************************************************'

      WRITE(*,*) '*                RESHENIE ZADACHI                  *'

      WRITE(*,*) '****************************************************'

      WRITE(*,*) '************VVOD ICXODNUX DANNUX**************'

      WRITE(*,*)'VVEDITE:'

      WRITE(*,*)'N - chislo uravnenii'

      READ(*,*) N

      WRITE(*,*)'K1,K11,K2 - konstantu skorostei him. reakcii,L/(mol*s)'

      WRITE(*,*) 'K1'

      READ(*,*) K1

      WRITE(*,*) 'K11'

      READ(*,*) K11

      WRITE(*,*) 'K2'

      READ(*,*) K2

      WRITE(*,*) 'X -    nachalo provedenia reakcii,s'

      READ(*,*) X

      WRITE(*,*) 'XK - prodoljitelnost reakcii,s'

      READ(*,*) XK

      WRITE(*,*) 'nachalnaya koncentraciya komponentov reakcii, mol/l'

      DO J=1,N

      WRITE(*,*)'YO(',J,')='

      READ(*,*) Y(J)

      END DO

      WRITE(*,*) 'ZADAITE'

      WRITE(*,*) 'H -    shag integrirovaniya'

      READ(*,*) H

      WRITE(*,*) 'Q - shag pechati rezultatov'

      READ(*,*) Q

      WRITE(1,*) '****************ÐÅÇÓËÜÒÀÒÛ ÐÀÑרÒÀ******************'

      WRITE(1,*)'èçìåíåíèå êîíöåíòðàöèè êîìïîíåíòîâ ðåàêöèè Y(J),ìîëü/ë'

      WRITE(1,*) '                  âî âðåìåíè X, ñ'

!     WRITE (1,*) 'X='

!     DO J=1,N

      WRITE (1,*)  '      X         Y(1)        Y(2)       Y(3)      Y(4)

     *         Y(5)'                 

!     END DO

      M=Q/H

10    GOTO 30

40    WRITE(1,*)       

!     DO J=1,N

      WRITE (1,3) X,Y(1),Y(2),Y(3),Y(4),Y(5)

3     format (3x,F9.4,3x,f8.4,3x,f8.4,3x,f8.4,3x,f8.4,3x,f8.4)

!     END DO

      IF(X.LT.XK)  GOTO 10

      WRITE(1,*) 'âûïîëíåíèå ïðîãðàììû çàâåðøåíî'

      STOP

30    CONTINUE

      DO J=0,M

      DO I=1,N

      G(I)=Y(I)

      END DO

      CALL FUN (VEC,N,K1,K2,K11,Y)

      DO I=1,N

      T1(I)=H*VEC(I)

      Y(I)=G(I)+T1(I)/2

      END DO

      CALL FUN (VEC,N,K1,K2,K11,Y)

      DO I=1,N

      T2(I)=H*VEC(I)

      Y(I)=G(I)+T2(I)/2

      END DO

      CALL FUN (VEC,N,K1,K2,K11,Y)

      DO I=1,N

      T3(I)=H*VEC(I)

      Y(I)=G(I)+T3(I)/2

      END DO

      CALL FUN (VEC,N,K1,K2,K11,Y)

      DO I=1,N

      T4(I)=H*VEC(I)

      G(I)=G(I)+(T1(I)+2*(T2(I)+T3(I))+T4(I))/6

      END DO

      DO I=1,N

      Y(I)=G(I)

      END DO

      X=X+H

      END DO

      GOTO 40

      END

 

c     Ïîäïðîãðàììà âû÷èñëåíèÿ ïðàâûõ ÷àñòåé äèô. óðàâíåíèé

      SUBROUTINE FUN (VEC,N,K1,K2,K11,Y)

      DIMENSION VEC(N),Y(4)

      REAL K1,K2,K11

      VEC(1)=-K1*Y(1)*Y(2)+K11*Y(3)*Y(4)

      VEC(2)=-K1*Y(1)*Y(2)+K11*Y(3)*Y(4)-K2*Y(2)*Y(3)

      VEC(3)=K1*Y(1)*Y(2)-K11*Y(3)*Y(4)-K2*Y(2)*Y(3)

      VEC(4)=K1*Y(1)*Y(2)-K11*Y(3)*Y(4)+K2*Y(2)*Y(3)

      VEC(5)=K2*Y(2)*Y(3)

      END

 

I².3. Ïðîãðàìà íà ìîâ³ PASCAL

const

  N=5; {'N  -÷èñëî óðàâíåíèé}

 

var

  Y, VEC, G : array [1..N] of real;

  k1,k11,k2:real;

  x,xk,h,q:real;

  j,m:integer;

 

procedure du();

begin

  {// ********************************************************************

    // *    ÏÎÄÏÐÎÃÐÀÌÌÀ FUNC ÂÛ×ÈÑËÅÍÈß ÏÐÀÂÛÕ ×ÀÑÒÅÉ ÄÈÔ. ÓÐÀÂÍÅÍÈÉ     *

    // ********************************************************************}

  VEC[1] := -K1 * Y[1] * Y[2] + K11 * Y[3] * Y[4];

  VEC[2] := -K1 * Y[1] * Y[2] + K11 * Y[3] * Y[4] - K2 * Y[2] * Y[3];

  VEC[3] := K1 * Y[1] * Y[2] - K11 * Y[3] * Y[4] - K2 * Y[2] * Y[3];

  VEC[4] := K1 * Y[1] * Y[2] - K11 * Y[3] * Y[4] + K2 * Y[2] * Y[3];

  VEC[5] := K2 * Y[2] * Y[3];

end;

 

procedure rk();

var

  T1, T2, T3, T4:array [1..n] of real;

  i,j:integer;

begin

  {rk -580 // ********************************************************************

  // *       ÏÎÄÏÐÎÃÐÀÌÌÀ ÐÅÀËÈÇÀÖÈÈ ÌÅÒÎÄÀ ÐÓÍÃÅ-ÊÓÒÒÀ RUNKUT          *

  // ********************************************************************}

  FOR J := 1 TO M do begin

    FOR I := 1 TO N do G[I] := Y[I];

    du;// îáðàùåíèå ê ï/ï FUNC

    FOR I := 1 TO N do begin

        T1[I] := H * VEC[I];

        Y[I] := G[I] + T1[I] / 2;

    end;

    du;

    FOR I := 1 TO N do begin

        T2[I] := H * VEC[I];

        Y[I] := G[I] + T2[I] / 2;

    end;

    du;

    fOR I := 1 TO N do begin

        T3[I] := H * VEC[I];

        Y[I] := G[I] + T3[I];

    end;

    du;

    FOR I := 1 TO N do begin

        T4[I] := H * VEC[I];

        G[I] := G[I] + (T1[I] + 2 * (T2[I] + T3[I]) + T4[I]) / 6;

    end;

    FOR I := 1 TO N do Y[I] := G[I];

    X := X + H;

  end;

end;

 

begin

  {//  *********************************************************************

  //  *               ÏÐÎÃÐÀÌÌÀ P03 KINRK                                 *

  //  *********************************************************************

  writeln ('**************************************************************');

  writeln ('*                 Ð Å Ø Å Í È Å  Ç À Ä À × È                 *');

  writeln ('**************************************************************');

  writeln;

  writeln ('********* ÂÂÎÄ ÈÑÕÎÄÍÛÕ ÄÀÍÍÛÕ ********');

  writeln('     ÂÂÅÄÈÒÅ :');

  write('K1,K11,K2 - êîíñòàíòû ñêîðîñòåé õèì. ðåàêöèé, ë/(ìîëü*ñ) ');  readln(K1, K11, K2);

  write('X - ÍÀ×ÀËÎ ÏÐÎÂÅÄÅÍÈß ÐÅÀÊÖÈÈ, c                             ');  readln(X);

  write('XK - ÏÐÎÄÎËÆÈÒÅËÜÍÎÑÒÜ ÐÅÀÊÖÈÈ, c                            '); readln(XK);

  writeln ('ÍÀ×ÀËÜÍÀß ÊÎÍÖÅÍÒÐÀÖÈß ÊÎÌÏÎÍÅÍÒΠÐÅÀÊÖÈÈ, ìîëü/ë');

  FOR J := 1 TO N do begin

    writeln('Y0(', J, ')=');

    readln(Y[J]);

  end;

  writeln ('    ÇÀÄÀÉÒÅ :  '); writeln;

  write('H - ØÀÃ ÈÍÒÅÃÐÈÐÎÂÀÍÈß                                       '); readln(H);

  write('Q - ØÀà ÏÅ×ÀÒÈ ÐÅÇÓËÜÒÀÒΠ                                  '); readln(Q);

  writeln; writeln('********* ÐÅÇÓËÜÒÀÒÛ ÐÀÑ×ÅÒÀ *********'); writeln;

  writeln(' ÈÇÌÅÍÅÍÈÅ ÊÎÍÖÅÍÒÐÀÖÈÉ ÊÎÌÏÎÍÅÍÒÎÂ ÐÅÀÊÖÈÈ Y(J), ìîëü/ë ');

  writeln('             ÂÎ ÂÐÅÌÅÍÈ   X,   c ');  writeln;

  write('  X  ');

  FOR J := 1 TO N do write ('   Y(', J, ')');  writeln;

  M := round(Q / H);

  repeat

    rk ;  // îáðàùåíèå ê ï/ï Ðóãíå-Êóòòà

    write (X:5:2);

    FOR J := 1 TO N do write(Y[J]:8:4);  writeln;

  until X > XK;

  writeln;

  writeln('ÂÛÏÎËÍÅÍÈÅ ÏÐÎÃÐÀÌÌÛ ÇÀÂÅÐØÅÍÎ');

end.

 

I².4. Ïðîãðàìà íà ìîâ³ C++

#include <math.h>

#include <iostream.h>

 

//    *********************************************************************

//    *               ÏÐÎÃÐÀÌÌÀ P03 KINRK                                 *

//    *********************************************************************

void DefRightPartEq(double *Y, double K1, double K11, double K2, double *VEC)

{

      VEC[0] = -K1*Y[0]*Y[1] + K11*Y[2]*Y[3];

      VEC[1] = -K1*Y[0]*Y[1] + K11*Y[2]*Y[3] - K2*Y[1]*Y[2];

      VEC[2] =  K1*Y[0]*Y[1] - K11*Y[2]*Y[3] - K2*Y[1]*Y[2];

      VEC[3] =  K1*Y[0]*Y[1] - K11*Y[2]*Y[3] + K2*Y[1]*Y[2];

      VEC[4] =  K2*Y[1]*Y[2];

}

void main(void)

{

      cout <<      "*************************************************" << endl;

      cout <<      "*                ÐÅØÅÍÈÅ ÇÀÄÀ×È                 *" << endl;

      cout <<      "*************************************************" << endl;

      cout <<      "****************ÂÂÎÄ ÈÑÕÎÄÍÛÕ ÄÀÍÍÛÕ*************" << endl;

      cout <<      "ÂÂÅÄÈÒÅ:" << endl;

      int N;

      cout <<      "N - ÷èñëî óðàâíåíèé                                      ";

      cin >> N;

      double *Y;Y = new double[N];

      double K1,K11,K2;

      cout <<      "K1,K11,K2 - êîíñòàíòû ñêîðîñòåé õèì. ðåàêöèé, ë/(ìîëü*ñ) ";

      cin >> K1 >> K11 >> K2;

      double X;

      cout <<      "X - ÍÀ×ÀËÎ ÏÐÎÂÅÄÅÍÈß ÐÅÀÊÖÈÈ, c                         ";

      cin >> X;

      double XK;

      cout <<      "XK - ÏÐÎÄÎËÆÈÒÅËÜÍÎÑÒÜ ÐÅÀÊÖÈÈ, c                        ";

      cin >> XK;

      cout << "ÍÀ×ÀËÜÍÀß ÊÎÍÖÅÍÒÐÀÖÈß ÊÎÌÏÎÍÅÍÒΠÐÅÀÊÖÈÈ, ìîëü/ë" << endl;

      int i;

      for (i = 0; i <    N; i++)

      {

             cout <<      "                                   Y0(" << i << ")=";

             cin >> Y[i];

      }

      cout <<      "ÇÀÄÀÉÒÅ :  " << endl;        

      double H;

      cout <<      "    H - ØÀÃ ÈÍÒÅÃÐÈÐÎÂÀÍÈß                               ";

      cin >> H;

      double Q;

      cout <<      "    Q - ØÀà ÏÅ×ÀÒÈ ÐÅÇÓËÜÒÀÒΠ                          ";

      cin >> Q;

      cout << endl;     

      cout <<      "********* ÐÅÇÓËÜÒÀÒÛ ÐÀÑ×ÅÒÀ *********" << endl;

      cout << " ÈÇÌÅÍÅÍÈÅ ÊÎÍÖÅÍÒÐÀÖÈÉ ÊÎÌÏÎÍÅÍÒÎÂ Y(J), ìîëü/ë" << endl;

      cout <<      "             ÂÎ ÂÐÅÌÅÍÈ   X,   c" << endl;

      cout <<      endl;

      cout << "  X    ";

      for (i = 0; i < N; i++)

             cout << "    Y(" << i << ")  ";

      cout << endl;           

      int M = Q/H;

      do {

      double *T1; T1 = new double[N];

      double *T2;  T2 = new double[N];

      double *T3;  T3 = new double[N];

      double *T4;  T4 = new double[N];

      double *VEC;VEC= new double[N]; for (int i = 0; i < N; i++) VEC[i] = 0;

      double *G;   G  = new double[N];

      for (int j = 0; j < M; j++)

      {

             for (i = 0; i < N; i++) G[i] = Y[i];

             DefRightPartEq(Y,K1,K11,K2,VEC);

             for (i = 0; i < N; i++) 

             {

                   T1[i] = H * VEC[i];

                   Y[i] = G[i] + T1[i]/2;

             }

             DefRightPartEq(Y,K1,K11,K2,VEC);

             for (i = 0; i < N; i++) 

             {

                   T2[i] = H * VEC[i];

                   Y[i] = G[i] + T2[i]/2;

             }

             DefRightPartEq(Y,K1,K11,K2,VEC);

             for (i = 0; i < N; i++) 

             {           

                   T3[i] = H * VEC[i];

                   Y[i] = G[i] + T3[i];

             }

             DefRightPartEq(Y,K1,K11,K2,VEC);

             for (i = 0; i < N; i++) 

             {           

                   T4[i] = H * VEC[i];

                   G[i] = G[i] + (T1[i] + 2*(T2[i] + T3[i]) + T4[i])/6;

             }

             for (i = 0; i < N; i++) Y[i] = G[i];

             X = X + H;

      }

      delete [] VEC;

      delete [] G;

      delete [] T4;

      delete [] T3;

      delete [] T2;

      delete [] T1;

      long oldFlags = cout.flags(ios::skipws | ios::fixed);

      int oldPrecision = cout.precision(2);

      cout << " " << X;

      cout.precision(4);

      for (i = 0; i < N; i++)

             cout << "    " << Y[i];

      cout << endl;

      cout.precision(oldPrecision);

      cout.flags(oldFlags);

      } while (X <= XK);

      cout << "ÂÛÏÎËÍÅÍÈÅ ÏÐÎÃÐÀÌÌÛ ÇÀÂÅÐØÅÍÎ";

      cout << endl;

      delete [] Y;

}

 

I².5. Ïðîãðàìà íà ìîâ³ DELPHI

unit Unit1;

 

interface

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  StdCtrls, ExtCtrls, Menus;

type

  mas1 = array[1..5] of real;

  mas2 = array[0..1000] of real;

  mas3 = array[0..1000,1..5] of real;

  TForm1 = class(TForm)

    Label1: TLabel;

    Edit1: TEdit;

    Edit2: TEdit;

    Edit3: TEdit;

    Label2: TLabel;

    Label3: TLabel;

    Label4: TLabel;

    Label5: TLabel;

    Edit4: TEdit;

    Label6: TLabel;

    Label7: TLabel;

    Edit5: TEdit;

    Label8: TLabel;

    Label9: TLabel;

    Edit6: TEdit;

    Edit7: TEdit;

    Edit8: TEdit;

    Edit9: TEdit;

    Edit10: TEdit;

    Label10: TLabel;

    Label11: TLabel;

    Label12: TLabel;

    Label13: TLabel;

    Label14: TLabel;

    Label15: TLabel;

    Label16: TLabel;

    Edit11: TEdit;

    Edit12: TEdit;

    Label17: TLabel;

    Label18: TLabel;

    MainMenu1: TMainMenu;

    N1: TMenuItem;

    N2: TMenuItem;

    N3: TMenuItem;

    N4: TMenuItem;

    N5: TMenuItem;

    Bevel1: TBevel;

    Memo1: TMemo;

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure EditKeyPress(Sender: TObject; var key: char);

    procedure N5Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

implementation

{$R *.DFM}

procedure func(k1,k11,k2: real; var y,g,vec: mas1);

begin

 vec[1]:=-k1*y[1]*y[2]+k11*y[3]*y[4];

 vec[2]:=-k1*y[1]*y[2]+k11*y[3]*y[4]-k2*y[2]*y[3];

 vec[3]:=k1*y[1]*y[2]-k11*y[3]*y[4]-k2*y[2]*y[3];

 vec[4]:=k1*y[1]*y[2]-k11*y[3]*y[4]+k2*y[2]*y[3];

 vec[5]:=k2*y[2]*y[3];

end;

procedure roonkoot(k1,k11,k2,h:real; n,m:integer; Var x:real; Var y: mas1);

var

 vec,g,t1,t2,t3,t4: mas1;

 i,j: integer;

begin

 for j:=1 to m do

 begin

  for i:=1 to n do g[i]:=y[i];

  func(k1,k11,k2,y,g,vec);

  for i:=1 to n do

  begin

   t1[i]:=h*vec[i];

   y[i]:=g[i]+t1[i]/2;

  end;

  func(k1,k11,k2,y,g,vec);

  for i:=1 to n do

  begin

   t2[i]:=h*vec[i];

   y[i]:=g[i]+t2[i]/2;

  end;

  func(k1,k11,k2,y,g,vec);

  for i:=1 to n do

  begin

   t3[i]:=h*vec[i];

   y[i]:=g[i]+t3[i];

  end;

  func(k1,k11,k2,y,g,vec);

  for i:=1 to n do

  begin

   t4[i]:=h*vec[i];

   g[i]:=g[i]+(t1[i]+2*(t2[i]+t3[i])+t4[i])/6;

  end;

  x:=x+h;

 end;

end;

 

procedure pr_calc(k1,k11,k2,xn,xk,h,q: real; var y: mas1);

const

 n=5;

var

 m,iy: integer;

 x: real;

 s: string;

begin

 s:='x        Y1      Y2      Y3      Y4      Y5';

 Form1.Memo1.Lines.Add(s);

 x:=xn;

 s:=FloatToStrF(x,ffFixed,8,4)+'  ';

 for iy:=1 to 5 do s:=s+FloatToStrF(y[iy],ffFixed,8,4)+'  ';

 Form1.Memo1.Lines.Add(s);

 m:=round(q/h);

 repeat

  roonkoot(k1,k11,k2,h,n,m,x,y);

  s:=FloatToStrF(x,ffFixed,8,4)+'  ';

  for iy:=1 to 5 do s:=s+FloatToStrF(y[iy],ffFixed,8,4)+'  ';

  Form1.Memo1.Lines.Add(s);

 until x > (xk-h)

end;

 

procedure TForm1.EditKeyPress(Sender: TObject; var key: char);

var

 buf: string[20];

 dcm: char;

begin

 dcm:=decimalseparator;

 buf:='';

 if Sender=Edit1 then buf:=Edit1.Text;

 if Sender=Edit2 then buf:=Edit2.Text;

 if Sender=Edit3 then buf:=Edit3.Text;

 if Sender=Edit4 then buf:=Edit4.Text;

 if Sender=Edit5 then buf:=Edit5.Text;

 if Sender=Edit6 then buf:=Edit6.Text;

 if Sender=Edit7 then buf:=Edit7.Text;

 if Sender=Edit8 then buf:=Edit8.Text;

 if Sender=Edit9 then buf:=Edit9.Text;

 if Sender=Edit10 then buf:=Edit10.Text;

 if Sender=Edit11 then buf:=Edit11.Text;

 if Sender=Edit12 then buf:=Edit12.Text;

 case key of

  '0'..'9',chr(8):;

  '-': key:=chr(0);

  ',','.' :    begin

                if (pos(dcm,buf)<>0) then key:=chr(0)

                else

                if key<>dcm then key:=dcm;

               end;

  chr(13): begin

            if Sender=Edit1 then Edit2.SetFocus;

            if Sender=Edit2 then Edit3.SetFocus;

            if Sender=Edit3 then Edit4.SetFocus;

            if Sender=Edit4 then Edit5.SetFocus;

            if Sender=Edit5 then Edit6.SetFocus;

            if Sender=Edit6 then Edit7.SetFocus;

            if Sender=Edit7 then Edit8.SetFocus;

            if Sender=Edit8 then Edit9.SetFocus;

            if Sender=Edit9 then Edit10.SetFocus;

            if Sender=Edit10 then Edit11.SetFocus;

            if Sender=Edit11 then Edit12.SetFocus;

            if Sender=Edit12 then

            begin

             Button1.SetFocus;

             Button1Click(Sender);

            end;

           end;

  else key:=chr(0);

 end;

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

 Edit1.Text:='';

 Edit2.Text:='';

 Edit3.Text:='';

 Edit4.Text:='';

 Edit5.Text:='';

 Edit6.Text:='';

 Edit7.Text:='';

 Edit8.Text:='';

 Edit9.Text:='';

 Edit10.Text:='';

 Edit11.Text:='';

 Edit12.Text:='';

 Memo1.Text:='';

end;

 

procedure TForm1.Button1Click(Sender: TObject);

var

 y: mas1;

 k1,k11,k2,xn,xk,h,q: real;

begin

 Memo1.Text:='';

 if (Edit1.Text='') or (Edit2.Text='') or (Edit3.Text='') or (Edit4.Text='')

 or (Edit5.Text='') or (Edit6.Text='') or (Edit7.Text='') or (Edit8.Text='')

 or (Edit9.Text='') or (Edit10.Text='') or (Edit11.Text='') or (Edit12.Text='')

 then

  begin

   MessageDlg('Èñõîäíûå äàííûå ââåäåíû íå ïîëíîñòüþ!',mtError,[mbCancel],0);

  end

 else

 begin

 k1:=StrToFloat(Edit1.Text);

 k11:=StrToFloat(Edit2.Text);

 k2:=StrToFloat(Edit3.Text);

 xn:=StrToFloat(Edit4.Text);

 xk:=StrToFloat(Edit5.Text);

 h:=StrToFloat(Edit11.Text);

 q:=StrToFloat(Edit12.Text);

 y[1]:=StrToFloat(Edit6.Text);

 y[2]:=StrToFloat(Edit7.Text);

 y[3]:=StrToFloat(Edit8.Text);

 y[4]:=StrToFloat(Edit9.Text);

 y[5]:=StrToFloat(Edit10.Text);

 pr_calc(k1,k11,k2,xn,xk,h,q,y);

 end;

end;

 

procedure TForm1.Button3Click(Sender: TObject);

begin

 Form1.Close;

end;

 

procedure TForm1.N5Click(Sender: TObject);

begin

MessageDlg( 'RoonKoot v1.01'+#13+#13

             + 'Ïðîãðàììà ðàñ÷¸òà èçìåíåíèÿ âî âðåìåíè êîíöåíòðàöèé'+#13

             +'ðåàãåíòîâ ñ ïðèìåíèíèåì ìåòîäà Ðóíãå-Êóòòà'+#13+#13

             +'Àâòîð:'+#13+#13

             +'  Ñòóäåíò Êàôåäðû ÕÏÑÌ ÈÕÔ ÍÒÓÓ "ÊÏÈ"'+#13

             +'  Ïîãîäàåâ Êîíñòàíòèí Ñåðãååâè÷'+#13+#13

             +'  ãðóïïà ËÏ-01' ,

             MtInformation,[mbOK],0);

end;

 

end.


Äîäàòîê ²²I. Ðîçðàõóíîê êàñêàäà ðåàêòîð³â.

Ïðîãðàìà íà ìîâ³ BASIC

 

30 REM  *********************************************************************

40 REM  *                     ÏÐÎÃÐÀÌÌÀ P06  RISKAS                         *

50 REM  *********************************************************************

60 REM  *    ÐÀÑ×ÅÒ ×ÈÑËÀ ÐÅÀÊÒÎÐΠÈÄÅÀËÜÍÎÃÎ ÑÌÅØÅÍÈß Â ÊÀÑÊÀÄÅ,          *

70 REM  *   ÎÁÅÑÏÅ×ÈÂÀÞÙÅÌ ÄÎÑÒÈÆÅÍÈÅ ÇÀÄÀÍÍÎÉ ÑÒÅÏÅÍÈ ÏÐÅÂÐÀÙÅÍÈß ÏÐÈ      *

80 REM  *     ÏÐÎÂÅÄÅÍÈÈ ÐÅÀÊÖÈÈ À ==> R ÏÐÎÈÇÂÎËÜÍÎÃÎ ÏÎÐßÄÊÀ N            *

90 REM  *********************************************************************

100 REM *       Ñ ÈÑÏÎËÜÇÎÂÀÍÈÅÌ ÈÒÅÐÀÖÈÎÍÍÎÃÎ ÌÅÒÎÄÀ ÍÜÞÒÎÍÀ               *

110 REM *********************************************************************

120 REM

130 PRINT "*****************************************************************"

140 PRINT "*                                                               *"

150 PRINT "*                 Ð Å Ø Å Í È Å  Ç À Ä À × È                    *"

160 PRINT "*                                                               *"

170 PRINT "*****************************************************************"

180 PRINT

190 PRINT "********************* ÂÂÎÄ ÈÑÕÎÄÍÛÕ ÄÀÍÍÛÕ **********************"

200 PRINT

210 DIM CA(20), V(20), PV(20), XAK(20), R(J)

220 PRINT "ÂÂÅÄÈÒÅ:": PRINT

230 INPUT "VR - ÎÁÚÅÌ ÎÄÍÎÃÎ ÐÅÀÊÒÎÐÀ, ì^3                              "; VR

240 INPUT "VL - ÎÁÚÅÌÍÛÉ ÐÀÑÕÎÄ ÏÎÒÎÊÀ, ì^3/ìèí                         "; VL

250 INPUT "N - ÏÎÐßÄÎÊ ÐÅÀÊÖÈÈ                                          "; N

260 INPUT "KT - ÊÎÍÑÒ. ÑÊÎÐÎÑÒÈ ÐÅÀÊÖÈÈ, êìîëü^(1-N)/(ë^(1-N)*ìèí)      "; KT

270 INPUT "CA0 - ÊÎÍÖÅÍÒÐÀÖÈß ÐÅÀÃÅÍÒÀ À ÂÎ ÂÕÎÄÍÎÌ ÏÎÒÎÊÅ, êìîëü/ë     "; CA0

275 PRINT "ÇÀÄÀÉÒÅ:": PRINT

280 INPUT "XK - ÊÎÍÅ×ÍÀß ÑÒÅÏÅÍÜ ÏÐÅÂÐÀÙÅÍÈß                            "; XK

290 INPUT "ITMAX - ÌÀÊÑÈÌÀËÜÍÎÅ ×ÈÑËÎ ÈÒÅÐÀÖÈÉ                       "; ITMAX

291 INPUT "EPS - ÒÎ×ÍÎÑÒÜ                                            "; EPS

300 PRINT

310 PRINT "*************** ÐÅÇÓËÜÒÀÒÛ ÐÀÑ×ÅÒÀ ******************"

320 PRINT

330 PRINT "V - ÄÎËß ÍÅÏÐÎÐÅÃÐÈÐÎÂÀÂØÅÃÎ ÐÅÀÃÅÍÒÀ Â ÐÅÀÊÒÎÐÅ"

340 PRINT "CA - ÊÎÍÖÅÍÒÐÀÖÈß ÐÅÀÃÅÍÒÀ ÍÀ ÂÛÕÎÄÅ ÈÇ ÐÅÀÊÒÎÐÀ, êìîëü/ë"

360 PRINT "XAK - ÑÒÅÏÅÍÜ ÏÐÅÂÐÀÙÅÍÈß ÐÅÀÃÅÍÒÀ Â ÊÀÑÊÀÄÅ": PRINT

400 J = 1: CA(0) = CA0: PV(0) = 1

405 TAU = VR / VL

410 V(J) = 1

420 R = KT * TAU * CA(J - 1) ^ (N - 1)

421 REM

422 REM ÏÎÑËÅÄÎÂÀÒÅËÜÍÛÅ ÈÒÅÐÀÖÈÈ

423 REM

430 FOR I = 1 TO ITMAX

440 DF = N * R * V(J) ^ (N - 1) + 1

450 F = R * V(J) ^ N + V(J) - 1

460 S = F / DF

470 IF S <= EPS THEN GOTO 510

480 V(J) = V(J) - S

490 NEXT I

500 PRINT "ÍÅÒ ÑÕÎÄÈÌÎÑÒÈ ÏÐÈ ITMAX="; ITMAX: GOTO 700

510 CA(J) = CA(J - 1) * V(J)

520 PV(J) = PV(J - 1) * V(J)

530 XAK(J) = 1 - PV(J)

540 REM

550 REM ÏÐÎÂÅÐÊÀ ÓÑËÎÂÈß ÎÊÎÍ×ÀÍÈß ÐÀÑ×ÅÒÀ

560 REM

570 IF XAK(J) < XK THEN J = J + 1: GOTO 410

590 PRINT "------------------ V ----------- CA ------------ XAK ---"

600 PRINT

610 FOR I = 1 TO J

620 PRINT I; "ÐÅÀÊÒÎÐ"; : PRINT USING "   +#.####^^^^"; V(I); CA(I); XAK(I)

630 PRINT

640 NEXT I

650 PRINT "-----------------------------------------------------------------"

660 PRINT : PRINT SPC(10); : PRINT "ÍÅÎÁÕÎÄÈÌÎÅ ×ÈÑËÎ ÐÅÀÒÎÐΠ ÊÀÑÊÀÄÅ = "; J

670 PRINT

680 PRINT "-----------------------------------------------------------------"

690 PRINT : PRINT "ÂÛÏÎËÍÅÍÈÅ ÏÐÎÃÐÀÌÌÛ ÇÀÂÅÐØÅÍÎ"

700 END