Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. UNIT uConjunto;
  2.  
  3.  
  4.  
  5. INTERFACE
  6. USES uElem;
  7.     TYPE
  8.         TConjunto = ^TNodo;
  9.  
  10.         TNodo = RECORD
  11.             info:TElem;
  12.             sig:TConjunto;
  13.         END;
  14.  
  15.     PROCEDURE CrearConjuntoVacio (VAR conj:TConjunto);
  16.  
  17.     PROCEDURE Poner (VAR conj:TConjunto; elem:TElem);
  18.  
  19.     PROCEDURE Eliminar (VAR conj:TConjunto);
  20.  
  21.     PROCEDURE Quitar (VAR conj:TConjunto; elem:TElem);
  22.  
  23.     FUNCTION Pertenece (conj:TConjunto; elem:TElem):boolean;
  24.  
  25.     PROCEDURE Union (conj1,conj2:TConjunto; VAR conjUnido:TConjunto);
  26.  
  27.     FUNCTION EsSubconjunto (conj1,conj2:TConjunto):boolean;
  28.  
  29.     PROCEDURE Interseccion (conj1,conj2:TConjunto; VAR conjInter:TConjunto);
  30.  
  31.     PROCEDURE Diferencia (conj1,conj2:TConjunto; VAR conjDifer:TConjunto);
  32.  
  33.     FUNCTION EsConjuntoVacio (conj:TConjunto):boolean;
  34.  
  35.     PROCEDURE EliminarConjunto (VAR conj:TConjunto);
  36.  
  37. IMPLEMENTATION
  38.  
  39.     PROCEDURE CrearConjuntoVacio (VAR conj:TConjunto);
  40.         BEGIN
  41.             conj := NIL;
  42.         END;{CrearListaVacia}
  43.  
  44.     PROCEDURE Poner (VAR conj:TConjunto; elem:TElem);
  45.         VAR
  46.             aux:TConjunto;
  47.         BEGIN
  48.             IF NOT(Pertenece(conj,elem)) THEN
  49.                 BEGIN
  50.                     new(aux);
  51.                     Asignar(aux^.info,elem);
  52.                     aux^.sig := conj;
  53.                     conj := aux;
  54.  
  55.                 END;{IF}
  56.         END;{Poner}
  57.  
  58.     PROCEDURE Eliminar (VAR conj:TConjunto);
  59.         VAR
  60.             aux:TConjunto;
  61.         BEGIN
  62.             IF NOT(EsConjuntoVacio(conj)) THEN
  63.                 BEGIN
  64.                     aux := conj;
  65.                     conj := conj^.sig;
  66.                     dispose(aux);
  67.  
  68.                 END;{IF}
  69.         END;{Eliminar}
  70.  
  71.     PROCEDURE Quitar (VAR conj:TConjunto; elem:TElem);
  72.         VAR
  73.             ant,act:TConjunto;
  74.         BEGIN
  75.             ant := NIL;
  76.             act := conj;
  77.  
  78.             WHILE NOT(EsConjuntoVacio(act)) AND NOT(Iguales(act^.info , elem)) DO
  79.                 BEGIN
  80.                     ant := act;
  81.                     act := act^.sig;
  82.                 END;{WHILE}
  83.  
  84.             IF act<>NIL THEN
  85.                 IF ant = NIL THEN
  86.                     Eliminar(conj)
  87.                 ELSE
  88.                     IF (act<>NIL) AND (ant<>NIL) THEN
  89.                         BEGIN
  90.                             ant^.sig := act^.sig;
  91.                             dispose(act);
  92.                         END;{IF}
  93.         END;{Quitar}
  94.  
  95.     FUNCTION Pertenece (conj:TConjunto; elem:TElem):boolean;
  96.         VAR
  97.             check:boolean;
  98.         BEGIN
  99.             check := FALSE;
  100.  
  101.             IF NOT(EsConjuntoVacio(conj)) THEN
  102.                 BEGIN
  103.  
  104.                     WHILE NOT(EsConjuntoVacio(conj)) AND (check=FALSE) DO
  105.                         BEGIN
  106.                             check := Iguales(conj^.info , elem);
  107.                             conj := conj^.sig;
  108.                         END;{WHILE}
  109.                 END;{IF}
  110.  
  111.             Pertenece := check;
  112.         END;{Pertenece}
  113.  
  114.  
  115.     PROCEDURE Union (conj1,conj2:TConjunto; VAR conjUnido:TConjunto);
  116.         VAR
  117.             puntAuxi,aux:TConjunto;
  118.         BEGIN
  119.             CrearConjuntoVacio(conjUnido);
  120.             puntAuxi := conj1;
  121.             WHILE NOT(EsConjuntoVacio(conj1)) DO
  122.                 BEGIN
  123.                     new(aux);
  124.                     Asignar(aux^.info , conj1^.info);
  125.                     aux^.sig := NIL;
  126.  
  127.                     IF EsConjuntoVacio(conjUnido) THEN
  128.                         BEGIN
  129.                             conjUnido := aux;
  130.                             puntAuxi := aux;
  131.                         END{IF}
  132.                     ELSE
  133.                         BEGIN
  134.                             puntAuxi^.sig := aux;
  135.                             puntAuxi := aux;
  136.                         END;{ELSE}
  137.  
  138.                     conj1 := conj1^.sig;
  139.                 END;{WHILE}
  140.  
  141.             puntAuxi^.sig := conj2;
  142.  
  143.             WHILE NOT(EsConjuntoVacio(conj2)) DO
  144.                 BEGIN
  145.                     IF NOT Pertenece(conjUnido , conj2^.info) THEN
  146.                         new(aux);
  147.                         Asignar(aux^.info , conj2^.info);
  148.                         aux^.sig := NIL;
  149.  
  150.                         IF EsConjuntoVacio(conjUnido) THEN
  151.                             BEGIN
  152.                                 conjUnido := aux;
  153.                                 puntAuxi := aux;
  154.                             END{IF}
  155.                         ELSE
  156.                             BEGIN
  157.                                 puntAuxi^.sig := aux;
  158.                                 puntAuxi := aux;
  159.                             END;{ELSE}
  160.  
  161.                     conj2 := conj2^.sig;
  162.                 END;{WHILE}
  163.  
  164.         END;{Union}
  165.  
  166.     FUNCTION EsSubconjunto (conj1,conj2:TConjunto):boolean;
  167.         VAR
  168.             check:boolean;
  169.         BEGIN
  170.             check := TRUE;
  171.             WHILE NOT(EsConjuntoVacio(conj1)) AND (check = TRUE) DO
  172.                 BEGIN
  173.                     check := Pertenece(conj2 , conj1^.info);
  174.                     conj1 := conj1^.sig;
  175.                 END;{WHILE}
  176.  
  177.             EsSubconjunto := check;
  178.         END;{EsSubconjunto}
  179.  
  180.     PROCEDURE Interseccion (conj1,conj2:TConjunto; VAR conjInter:TConjunto);
  181.         BEGIN
  182.             CrearConjuntoVacio(conjInter);
  183.  
  184.             WHILE NOT(EsConjuntoVacio(conj1)) DO
  185.                 BEGIN
  186.                     IF Pertenece(conj2 , conj1^.info) THEN
  187.                         Poner(conjInter,conj1^.info);
  188.  
  189.                     conj1 := conj1^.sig;
  190.                 END;{WHILE}
  191.         END;{Interseccion}
  192.  
  193.     PROCEDURE Diferencia (conj1,conj2:TConjunto; VAR conjDifer:TConjunto);
  194.         BEGIN
  195.             CrearConjuntoVacio(conjDifer);
  196.  
  197.             WHILE NOT(EsConjuntoVacio(conj1)) DO
  198.                 BEGIN
  199.                     IF NOT( Pertenece(conj2 , conj1^.info) )  THEN
  200.                         Poner(conjDifer,conj1^.info);
  201.  
  202.                     conj1 := conj1^.sig;
  203.                 END;{WHILE}
  204.  
  205.             WHILE NOT(EsConjuntoVacio(conj2)) DO
  206.                 BEGIN
  207.                     IF NOT( Pertenece(conj1 , conj2^.info) )  THEN
  208.                         Poner(conjDifer,conj2^.info);
  209.  
  210.                     conj2 := conj2^.sig;
  211.                 END;{WHILE}
  212.         END;{Diferencia}
  213.  
  214.     FUNCTION EsConjuntoVacio (conj:TConjunto):boolean;
  215.         BEGIN
  216.             EsConjuntoVacio := (conj = NIL);
  217.         END;{EsConjuntoVacio}
  218.  
  219.  
  220.     PROCEDURE EliminarConjunto (VAR conj:TConjunto);
  221.         VAR
  222.             aux : TConjunto;
  223.         BEGIN
  224.             WHILE conj = NIL DO
  225.                 BEGIN
  226.                     aux := conj;
  227.                     conj := conj^.sig;
  228.                     dispose(aux);
  229.  
  230.                 END;
  231.  
  232.         END;
  233.  
  234.  
  235. END.