Pascal/Turbo Pascal - Algoritmo del Banquero codigo en monitor

   
Vista:

Algoritmo del Banquero codigo en monitor

Publicado por xio (3 intervenciones) el 31/07/2013 06:56:05
xfaaa ayudenme necesito el codigo del algortimo del banquero en monitor
esto es lo tngo nose como pasarlo a monitor

PROGRAM banco;
CONST NCTAS=100;
VAR Cuenta : array[1..NCTAS] of integer; (* Almacena los saldos *)
i: Integer;
PROCESS Auditor;
VAR ci, Total:INTEGER;
BEGIN
REPEAT
sleep(1);
Total:=0;
FOR ci:=1 TO NCTAS DO
Total:= Total + Cuenta[ci];
Writeln('Total : ', Total);
FOREVER
END;
PROCESS banquero;
VAR c1, c2, cant: Integer;
BEGIN
REPEAT
c1 := RANDOM(NCTAS-1)+1; (* Origen *)
c2 := RANDOM(NCTAS-1)+1; (* Destino *)
cant:=0;
IF (Cuenta[c1]>10) THEN cant := RANDOM(10);
Cuenta[c1] := Cuenta[c1] - cant ;
Cuenta[c2] := Cuenta[c2] + cant ;
FOREVER
END;
BEGIN (* Principal *)
For i:= 1 TO NCTAS DO cuenta[i]:=100;
COBEGIN
Banquero;
Auditor
COEND
END.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Algoritmo del Banquero codigo en monitor

Publicado por ramon (2072 intervenciones) el 08/08/2013 12:49:28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
{A ver si esto te ayuda algo}
 
PROGRAM elMonitor;
MONITOR Buffer;
EXPORT Poner, Coger;
CONST
  MAX = 4;
VAR
Almacen : ARRAY[0..MAX] OF integer;
cont : INTEGER;
NoLleno, NoVacio : CONDITION;
sigent, sigsal: INTEGER;
 
PROCEDURE Poner(n : integer);
BEGIN
IF cont > MAX THEN
  delay(NoLleno);
  Almacen[sigent] := n;
  cont := cont + 1;
  sigent := (sigent + 1) mod (MAX + 1);
  resume(NoVacio)
END;
 
PROCEDURE Coger(var n : integer);
BEGIN
   IF cont = 0 THEN
   delay(NoVacio);
   n := Almacen[sigsal];
   cont := cont - 1;
   sigsal := (sigsal + 1) mod (MAX + 1);
   resume(NoLleno)
 END;
 
BEGIN
  cont := 0;
  sigent := 0;
  sigsal := 0
END;
 
 
PROCESS Productor;
VAR
  dato1 : integer;
BEGIN
   FOR dato1 := 1 TO 10 DO
   Buffer.Poner(dato1);
END;
 
PROCESS Consumidor;
VAR
  dato2 : integer;
BEGIN
    REPEAT
    Buffer.Coger(dato2);
    write(dato2:3)
   UNTIL dato2 = 10;
   writeln
END;
 
BEGIN
   COBEGIN
     PRODUCTOR;
     CONSUMIDOR
   COEND
END.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar