home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / COPASC.ZIP / COPASCAL.LIS < prev    next >
Encoding:
File List  |  1987-09-07  |  7.2 KB  |  350 lines

  1.  
  2. Listing     program ADD1( Input, Output );
  3.  # 1a
  4.      var X : integer;
  5.  
  6.      procedure p1;
  7.      var k : integer;
  8.      begin
  9.        for k := 1 to 50 do X := X + 1;
  10.      end;
  11.  
  12.      procedure p2;
  13.      var k : integer;
  14.      begin
  15.        for k := 1 to 50 do X := X + 1;
  16.      end;
  17.  
  18.      begin    { main }
  19.        X := 0;
  20.        cobegin
  21.          p1; p2
  22.        coend;
  23.        writeln( X );
  24.      end.
  25.  
  26.  
  27.      OUTPUT for 10 runs:   62  57  73  60  65  59  57  69  79  80
  28.  
  29.  
  30.  
  31. Listing     program ADD1( Input, Output );
  32.  # 1b
  33.      var X : integer;
  34.  
  35.      procedure p1;
  36.      var k : integer;
  37.      begin
  38.        for k := 1 to 50 do begin
  39.          write(' before: ', X:4 );
  40.          X := X + 1;
  41.          writeln(' After: ', X:4 );
  42.        end;
  43.      end;
  44.  
  45.      procedure p2;
  46.      var k : integer;
  47.      begin
  48.        for k := 1 to 50 do begin
  49.          write(' before: ', X:4 );
  50.          X := X + 1;
  51.          writeln(' After: ', X:4 );
  52.        end;
  53.      end;
  54.  
  55.      begin    { main }
  56.        X := 0;
  57.        cobegin
  58.          p1; p2
  59.        coend;
  60.        writeln( X );
  61.      end.
  62.  
  63.  
  64.      OUTPUT for 10 runs:   86  81  87  87  81  84  87  85  81  78
  65.  
  66.      TEXT OUTPUT for 1 run:
  67.  
  68.      before:  before:    0 after:     1
  69.      before:    1    0 after:    2
  70.      before:  after:    2    2 after:    3
  71.      before:    3
  72.      after:       4
  73.      before:    4 before:     4 after:    5
  74.      before:  after:    5
  75.      before:    5    5 after:    6
  76.      before:  after:    6
  77.        6 before:    6 after:    7 after:    7
  78.  
  79.      before:  before:    7 after:     8
  80.        7 before:  after:    9
  81.      before:    9    9 after:   10
  82.      after:      10
  83.      before:  before:   10 after:    10 after:   12
  84.      before:   11
  85.       12 after:   13
  86.      before:   13 after:   14
  87.      before:  before:   14 after:    15  15
  88.      before:   15 after:   16
  89.      before:   16 after:   17
  90.      before:   17 after:   18
  91.      after:      18 before:   18 after:
  92.      before:   19
  93.      before:   19  19 after:   20
  94.      after:     before:   21
  95.      before:   21 after:   22
  96.       21 after:   23
  97.      before:  before:   23 after:    24
  98.      before:   23 after:   25
  99.       24 after:  before:   26
  100.      before:   26 after:   27
  101.      before:   26 after:   28
  102.      before:   27  28 after:   29
  103.      before:  after:   29
  104.      before:   29  29 after:  after:   30
  105.      before:   30  30
  106.      after:      31
  107.      before:   31 before:    32 after:   32
  108.      after:      33
  109.      before:   33 before:  after:    33  34
  110.      before:  after:   35
  111.      before:   35  34 after:   36
  112.      before:   36 after:  after:   37
  113.      before:   37 after:   38
  114.      before:   38 after:   39
  115.      after:      39
  116.      before:  before:   39    39 after:  after:   40
  117.       40
  118.      before:   40 after:  before:    41 after:   41
  119.      before:   42
  120.       42 after:   43
  121.      before:   43 after:  before:    44 after:   45
  122.      before:   44
  123.      before:   45 after:   46
  124.      before:   46 after:   47
  125.       45 before:   48 after:   48
  126.      before:   48 after:   49
  127.      before:  after:   50  50
  128.      before:   50 after:   51
  129.      before:   51 after:   51
  130.      after:     before:   52  52
  131.      before:  after:   53  52
  132.      after:      54
  133.      before:  before:   54 after:    55
  134.      before:   55  54 after:  after:   56  56
  135.      before:
  136.      before:   56 after:   57
  137.       56 after:   58
  138.      before:  before:   58    58 after:  after:   60
  139.       60 before:   60
  140.      before:   60 after:   61
  141.      before:  after:   61
  142.      before:   62  62
  143.      after:     before:   63
  144.      before:   63  63 after:  after:   64
  145.      before:   64 after:   65  64
  146.      before:   65 after:   66
  147.      before:
  148.       66 before:   66 after:   67
  149.      after:      67
  150.      before:   67 before:    68 after:  after:   69
  151.       69
  152.      before:   69 after:   70 before:   70
  153.      before:   70 after:   71
  154.      before:  after:   71
  155.       71 after:   72
  156.      before:   72 after:  before:    73  73
  157.      before:   73 after:  after:   75
  158.      before:   74
  159.      before:   75  75 after:   76
  160.      before:  after:   76
  161.       76 after:   77
  162.      before:   77 after:   78
  163.      before:   78 after:   79
  164.      before:   79 after:   80
  165.      before:   80 after:   81
  166.  
  167.      final value := 81
  168.  
  169.  
  170.  
  171. Listing     program ADD2( Input, Output );
  172.  # 1c
  173.      type semaphore = integer;
  174.  
  175.      var X : integer;
  176.          s : semaphore;
  177.  
  178.      procedure p1;
  179.      var k : integer;
  180.      begin
  181.        for k := 1 to 50 do begin
  182.          WAIT(s);
  183.          X := X + 1;
  184.          SIGNAL(s);
  185.        end;
  186.      end;
  187.  
  188.      procedure p2;
  189.      var k : integer;
  190.      begin
  191.        for k := 1 to 50 do begin
  192.          WAIT(s);
  193.          X := X + 1;
  194.          SIGNAL(s);
  195.        end;
  196.      end;
  197.  
  198.      begin    { main }
  199.        X := 0;
  200.        s := 1;
  201.        cobegin
  202.          p1; p2
  203.        coend;
  204.        writeln( X );
  205.      end.
  206.  
  207.  
  208.      OUTPUT:  100
  209.  
  210.  
  211.  
  212. Listing     program SUM_SQ1( Input, Output );
  213.  # 2
  214.      var a,b, f : integer;
  215.  
  216.      procedure SUM( var v:integer ; lo,hi : integer );
  217.      var k : integer;
  218.      begin
  219.        v := 0;
  220.        for k := lo to hi do     v := k*k + v;
  221.      end;
  222.  
  223.      begin    { main }
  224.        cobegin
  225.          SUM( a,  1,  50 );
  226.          SUM( b, 51, 100 );
  227.        coend;
  228.        f := a + b;
  229.        writeln( 'sum of the squares : ', f:1 );
  230.      end.
  231.  
  232.  
  233.      OUTPUT:  sum of the squares : 10670
  234.  
  235.  
  236.  
  237. Listing     program SUM_SQ2( Input, Output );
  238.  # 3
  239.      const n = 9;
  240.  
  241.      type semaphore = integer;
  242.  
  243.      var  aTOb : array [1..10] of semaphore;
  244.           sum  : array [1.. 9]   of integer;
  245.           s       : semaphore;
  246.           i       : integer;
  247.  
  248.      procedure SQ( x : integer );
  249.      begin
  250.        sum[x] := X*X;
  251.        SIGNAL(s);
  252.        WAIT( aTOb[x] );
  253.        if x <> 1 then write( '+');
  254.        write( sum[x]:4 );
  255.        SIGNAL( aTOb[x+1] );
  256.      end;
  257.  
  258.      procedure TOTAL;
  259.      var T,i : integer;
  260.      begin
  261.        WAIT(s);
  262.        SIGNAL( aTOb[1] );
  263.        T := 0;
  264.        for i := 1 to n do T := T + sum[i];
  265.        WAIT( aTOb[n+1] );
  266.        writeln( ' = ', T:1 );
  267.      end;
  268.  
  269.      begin    { main }
  270.        s := 1-n;
  271.        for i := 1 to n+1 do aTOb[i] := 0;
  272.        cobegin
  273.          SQ(1);SQ(2);SQ(3);SQ(4);SQ(5);SQ(6);SQ(7);SQ(8);SQ(9);
  274.          TOTAL
  275.        coend;
  276.      end.
  277.  
  278.  
  279.      OUTPUT:   1+    4+   9+     16+  25+  36+    49+  64+  81 = 285
  280.  
  281.  
  282.  
  283. Listing     program CigSmok( Input, Output );
  284.  # 4     const NumCig     =    10;  {    # of cigarettes for each smoker }
  285.            paper     =     1;  {        .                }
  286.            match     =     3;  {        .    Resources        }
  287.            tobacco     =     5;  {        .                }
  288.  
  289.      type  semaphore = integer;
  290.            resource     = integer;
  291.  
  292.      var   S     : array[ 1..8 ] of semaphore;
  293.            alive : array[ 1..8 ] of boolean;
  294.            a     : semaphore;
  295.            k     : integer;
  296.  
  297.      function VALID( a,b : resource ): boolean;
  298.      begin
  299.        VALID := FALSE;
  300.        if ( ODD(a) AND ODD(b) AND ( a <> b ) ) then
  301.          if alive[ a+b ] then VALID := TRUE;
  302.      end;
  303.  
  304.      procedure agent;
  305.      var r1,r2 : resource;
  306.          j       : integer;
  307.      begin
  308.        for j := 1 to 3*NumCig do begin
  309.          WAIT(a);
  310.          repeat
  311.            r1 := 1 + RANDOM( 4 );
  312.            r2 := 1 + RANDOM( 4 );
  313.          until VALID( r1, r2 );
  314.          SIGNAL( S[ r1+r2 ] );
  315.        end;
  316.      end;
  317.  
  318.      procedure smoker( r3 : resource );
  319.      var i : resource;
  320.          j : integer;
  321.      begin
  322.        i := ( paper + match + tobacco ) - r3;
  323.        for j := 1 to NumCig do begin
  324.          WAIT( S[ i ] );
  325.          writeln( r3:3 );
  326.          if ( j = NumCig ) then alive[i] := FALSE;
  327.          SIGNAL(a);
  328.        end;
  329.      end;
  330.  
  331.      begin
  332.        a := 1;
  333.        for k := 1 to 8 do S[k] := 0;  { Zero Semaphore array }
  334.        for k := 1 to 8 do alive[k] := TRUE;
  335.        cobegin
  336.          agent;
  337.          smoker( paper );  smoker( match );     smoker( tobacco )
  338.        coend;
  339.      end.
  340.  
  341.  
  342.      OUTPUT:   1    4    4      4    4    4     1    1       4    1
  343.            1    1    4      4    2    2     2    1       2    4
  344.            4    2    1      2    2    1     1    2       2    2
  345.  
  346.  
  347.      OUTPUT:   4    4    2      4    1    1     4    4       4    2
  348.            1    2    2      1    2    4     4    4       2    1
  349.            4    2    1      2    2    1     1    2       1    1
  350.