diegoguerrero

ED - TAD Conjuntos - Bolsa v. 1

Apr 18th, 2019
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.78 KB | None | 0 0
  1. UNIT uBolsa;
  2. INTERFACE
  3.     USES uElementoInteger; {Debe introducir Incrementar como parámetro genérico de TElemento}
  4.  
  5.     TYPE
  6.         TBolsa = ARRAY[INI..FIN] OF integer; {INI y FIN son parámetros genéricos que dependen de TElemento}
  7.  
  8.     {Constructoras generadoras}
  9.         PROCEDURE CrearBolsaVacia(VAR b : TBolsa);
  10.         PROCEDURE Poner(VAR b : TBolsa; e : TElemento);
  11.     {Constructoras no generadoras}
  12.         PROCEDURE Quitar(VAR b : TBolsa; e : TElemento);
  13.         PROCEDURE Union(VAR b1 : TBolsa; b2 : TBolsa);
  14.         PROCEDURE Interseccion(VAR b1 : TBolsa; b2 : TBolsa);
  15.         PROCEDURE Diferencia(VAR b1 : TBolsa; b2 : TBolsa);
  16.     {Observadoras selectoras}
  17.         {PROCEDURE Elegir(b : TBolsa; VAR e : TElemento);}
  18.     {Observadoras no selectoras}
  19.         FUNCTION EsBolsaVacia(b : TBolsa):boolean;
  20.         FUNCTION Pertenece(b : TBolsa; e : TElemento):boolean;
  21.         FUNCTION Cardinal(b : TBolsa):integer;
  22. IMPLEMENTATION
  23. {Constructoras generadoras}
  24.     PROCEDURE CrearBolsaVacia(VAR b : TBolsa);
  25.         VAR
  26.             i : TElemento;
  27.         BEGIN
  28.             i := INI;
  29.             WHILE (i <= FIN) DO BEGIN
  30.                 b[i] := 0;
  31.                 Incrementar(i);
  32.             END;
  33.         END;
  34.     PROCEDURE Poner(VAR b : TBolsa; e : TElemento);
  35.         BEGIN
  36.             b[e] := b[e] + 1;
  37.         END;
  38. {Constructoras no generadoras}
  39.     PROCEDURE Quitar(VAR b : TBolsa; e : TElemento);
  40.         BEGIN
  41.             IF (b[e] > 0) THEN
  42.                 b[e] := b[e] - 1;
  43.         END;
  44.     PROCEDURE Union(VAR b1 : TBolsa; b2 : TBolsa);
  45.         VAR
  46.             i : TElemento;
  47.         BEGIN
  48.             i := INI;
  49.             WHILE (i <= FIN) DO BEGIN
  50.                 b1[i] := b1[i] + b2[i];
  51.                 Incrementar(i);
  52.             END;
  53.         END;
  54.     PROCEDURE Interseccion(VAR b1 : TBolsa; b2 : TBolsa);
  55.         VAR
  56.             i : TElemento;
  57.         BEGIN
  58.             i := INI;
  59.             WHILE (i <= FIN) DO BEGIN
  60.                 IF ((b1[i] > 0) AND (b2[i] > 0)) THEN
  61.                     IF (b1[i] > b2[i]) THEN BEGIN
  62.                         b1[i] := b2[i];
  63.                     END
  64.                 ELSE
  65.                     b1[i] := 0;
  66.                 Incrementar(i);
  67.             END;
  68.         END;
  69.     PROCEDURE Diferencia(VAR b1 : TBolsa; b2 : TBolsa);
  70.         VAR
  71.             i : TElemento;
  72.         BEGIN
  73.             i := INI;
  74.             WHILE (i <= FIN) DO BEGIN
  75.                 IF ((b1[i] > 0) AND (b2[i] > 0)) THEN
  76.                     b1[i] := 0;
  77.                 Incrementar(i);
  78.             END;
  79.         END;
  80. {Observadoras selectoras}
  81.     {PROCEDURE Elegir(b : TBolsa; VAR e : TElemento);}
  82. {Observadoras no selectoras}
  83.     FUNCTION EsBolsaVacia(b : TBolsa):boolean;
  84.         VAR
  85.             i : TElemento;
  86.             tieneAlgo : boolean;
  87.         BEGIN
  88.             i := INI;
  89.             tieneAlgo := FALSE;
  90.             WHILE ((i <= FIN) AND (NOT tieneAlgo)) DO BEGIN
  91.                 tieneAlgo := (b[i] > 0);
  92.             END;
  93.             EsBolsaVacia := tieneAlgo;
  94.         END;
  95.     FUNCTION Pertenece(b : TBolsa; e : TElemento):boolean;
  96.         BEGIN
  97.             Pertenece := (b[e] > 0);
  98.         END;
  99.     FUNCTION Cardinal(b : TBolsa):integer;
  100.         VAR
  101.             n : integer;
  102.             i : TElemento;
  103.         BEGIN
  104.             n := 0;
  105.             i := INI;
  106.             IF (EsBolsaVacia(b)) THEN
  107.                 n := 0
  108.             ELSE BEGIN
  109.                 n := 0;
  110.                 WHILE (i <= FIN) DO BEGIN
  111.                     n := n + b[i];
  112.                     Incrementar(i);
  113.                 END;
  114.             END;
  115.         END;
  116. END.
Add Comment
Please, Sign In to add comment