Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- UNIT uBolsa;
- INTERFACE
- USES uElementoInteger; {Debe introducir Incrementar como parámetro genérico de TElemento}
- TYPE
- TBolsa = ARRAY[INI..FIN] OF integer; {INI y FIN son parámetros genéricos que dependen de TElemento}
- {Constructoras generadoras}
- PROCEDURE CrearBolsaVacia(VAR b : TBolsa);
- PROCEDURE Poner(VAR b : TBolsa; e : TElemento);
- {Constructoras no generadoras}
- PROCEDURE Quitar(VAR b : TBolsa; e : TElemento);
- PROCEDURE Union(VAR b1 : TBolsa; b2 : TBolsa);
- PROCEDURE Interseccion(VAR b1 : TBolsa; b2 : TBolsa);
- PROCEDURE Diferencia(VAR b1 : TBolsa; b2 : TBolsa);
- {Observadoras selectoras}
- {PROCEDURE Elegir(b : TBolsa; VAR e : TElemento);}
- {Observadoras no selectoras}
- FUNCTION EsBolsaVacia(b : TBolsa):boolean;
- FUNCTION Pertenece(b : TBolsa; e : TElemento):boolean;
- FUNCTION Cardinal(b : TBolsa):integer;
- IMPLEMENTATION
- {Constructoras generadoras}
- PROCEDURE CrearBolsaVacia(VAR b : TBolsa);
- VAR
- i : TElemento;
- BEGIN
- i := INI;
- WHILE (i <= FIN) DO BEGIN
- b[i] := 0;
- Incrementar(i);
- END;
- END;
- PROCEDURE Poner(VAR b : TBolsa; e : TElemento);
- BEGIN
- b[e] := b[e] + 1;
- END;
- {Constructoras no generadoras}
- PROCEDURE Quitar(VAR b : TBolsa; e : TElemento);
- BEGIN
- IF (b[e] > 0) THEN
- b[e] := b[e] - 1;
- END;
- PROCEDURE Union(VAR b1 : TBolsa; b2 : TBolsa);
- VAR
- i : TElemento;
- BEGIN
- i := INI;
- WHILE (i <= FIN) DO BEGIN
- b1[i] := b1[i] + b2[i];
- Incrementar(i);
- END;
- END;
- PROCEDURE Interseccion(VAR b1 : TBolsa; b2 : TBolsa);
- VAR
- i : TElemento;
- BEGIN
- i := INI;
- WHILE (i <= FIN) DO BEGIN
- IF ((b1[i] > 0) AND (b2[i] > 0)) THEN
- IF (b1[i] > b2[i]) THEN BEGIN
- b1[i] := b2[i];
- END
- ELSE
- b1[i] := 0;
- Incrementar(i);
- END;
- END;
- PROCEDURE Diferencia(VAR b1 : TBolsa; b2 : TBolsa);
- VAR
- i : TElemento;
- BEGIN
- i := INI;
- WHILE (i <= FIN) DO BEGIN
- IF ((b1[i] > 0) AND (b2[i] > 0)) THEN
- b1[i] := 0;
- Incrementar(i);
- END;
- END;
- {Observadoras selectoras}
- {PROCEDURE Elegir(b : TBolsa; VAR e : TElemento);}
- {Observadoras no selectoras}
- FUNCTION EsBolsaVacia(b : TBolsa):boolean;
- VAR
- i : TElemento;
- tieneAlgo : boolean;
- BEGIN
- i := INI;
- tieneAlgo := FALSE;
- WHILE ((i <= FIN) AND (NOT tieneAlgo)) DO BEGIN
- tieneAlgo := (b[i] > 0);
- END;
- EsBolsaVacia := tieneAlgo;
- END;
- FUNCTION Pertenece(b : TBolsa; e : TElemento):boolean;
- BEGIN
- Pertenece := (b[e] > 0);
- END;
- FUNCTION Cardinal(b : TBolsa):integer;
- VAR
- n : integer;
- i : TElemento;
- BEGIN
- n := 0;
- i := INI;
- IF (EsBolsaVacia(b)) THEN
- n := 0
- ELSE BEGIN
- n := 0;
- WHILE (i <= FIN) DO BEGIN
- n := n + b[i];
- Incrementar(i);
- END;
- END;
- END;
- END.
Add Comment
Please, Sign In to add comment