Import inicial despuƩs del "/var incident". :(
[z.facultad/75.41/parcial.git] / t_colord_b1.pas
1 { algoritmos y programacion II - Catedra Carolo - PRACTICA }\r\r
2 { PARCIAL 1 1ra Op CUAT 1 2000 }\r\r
3 \r\r
4 unit T_COLORD_B1;\r\r
5 \r\r
6 {\r\r
7         IMPLEMENTACION : cola ordenada (cola de prioridades)\r\r
8         ALMACENAMIENTO : LISTAS\r\r
9         CARACTERISTICAS: poner ordenado\r\r
10         \r\r
11 }\r\r
12 \r\r
13 { ACLARACIONES : implementamos tambien aca los cursores porque son para estos nodos en particular }\r\r
14 interface\r\r
15 \r\r
16 { usa las funciones generales de TDAs }\r\r
17 uses tda_gral, T_LDC;\r\r
18 \r\r
19 TYPE\r\r
20 \r\r
21    COLAORD_Cola = RECORD\r\r
22                 almac : LDC_Lista;\r\r
23         END;\r\r
24 \r\r
25 \r\r
26 { ========= }\r\r
27 { INTERFASE }\r\r
28 \r\r
29 \r\r
30 PROCEDURE COLAORD_Inicializar ( VAR l: COLAORD_Cola );\r\r
31 FUNCTION  COLAORD_vacia( l: COLAORD_Cola): BOOLEAN;\r\r
32 FUNCTION  COLAORD_llena( l: COLAORD_Cola): BOOLEAN;\r\r
33 \r\r
34 PROCEDURE COLAORD_poner ( VAR l: COLAORD_Cola; e: Tipo_Elem; VAR error: boolean);\r\r
35 PROCEDURE COLAORD_sacar ( VAR l: COLAORD_Cola; VAR e: Tipo_Elem);\r\r
36 PROCEDURE COLAORD_vaciar ( VAR l: COLAORD_Cola );\r\r
37 PROCEDURE COLAORD_copiar ( a: COLAORD_Cola; VAR b: COLAORD_Cola );\r\r
38 \r\r
39 implementation\r\r
40 \r\r
41 { Estas son los dos procedimientos principales de la aplicaciĆ³n }\r\r
42 \r\r
43 PROCEDURE COLAORD_Inicializar ( VAR l: COLAORD_Cola );\r\r
44 BEGIN\r\r
45    LDC_Inicializar( l.almac );\r\r
46 END;\r\r
47 \r\r
48 FUNCTION COLAORD_vacia( l: COLAORD_Cola): BOOLEAN;\r\r
49 BEGIN\r\r
50         COLAORD_vacia := ( LDC_Vacia( l.almac ));\r\r
51 END;\r\r
52 \r\r
53 FUNCTION COLAORD_llena( l: COLAORD_Cola): BOOLEAN;\r\r
54 BEGIN\r\r
55         COLAORD_llena := LDC_llena( l.almac );\r\r
56 END;\r\r
57 \r\r
58 PROCEDURE COLAORD_poner ( VAR l: COLAORD_Cola; e: Tipo_Elem;  VAR error: boolean);\r\r
59 VAR\r\r
60         error_mov : boolean;\r\r
61         found : boolean;\r\r
62         rep: Tipo_elem;\r\r
63         cte: Tipo_elem;\r\r
64         ant: Tipo_elem;\r\r
65 BEGIN\r\r
66         error := false;\r\r
67         IF LDC_Vacia( l.almac ) THEN\r\r
68                 LDC_insertar( l.almac, LDC_primero, e )\r\r
69         ELSE BEGIN\r\r
70                 { recorro para ver si esta duplicado y buscar donde insertarlo }\r\r
71                 LDC_mover_cte( l.almac, LDC_primero, error_mov );\r\r
72                 LDC_elem_cte( l.almac, cte );\r\r
73                 IF devolver_clave_elem( cte ) > devolver_clave_elem( e )\r\r
74                 THEN LDC_insertar( l.almac, LDC_primero, e )\r\r
75                 ELSE IF devolver_clave_elem( cte ) = devolver_clave_elem( e )\r\r
76                 THEN error := true\r\r
77                 ELSE BEGIN\r\r
78                         ant := cte;\r\r
79                         LDC_mover_cte( l.almac, LDC_siguiente, error_mov );\r\r
80                         WHILE ( not error ) AND ( not error_mov ) DO BEGIN\r\r
81                                 LDC_elem_cte( l.almac, cte );\r\r
82                                 IF devolver_clave_elem( cte ) > devolver_clave_elem( e )\r\r
83                                 THEN error_mov := true\r\r
84                                 ELSE IF devolver_clave_elem( cte ) = devolver_clave_elem( e )\r\r
85                                 THEN error := true\r\r
86                                 ELSE BEGIN\r\r
87                                         LDC_mover_cte( l.almac, LDC_siguiente, error_mov );\r\r
88                                         ant := cte;\r\r
89                                         END;\r\r
90                                 END;\r\r
91 \r\r
92                         IF not error\r\r
93                         THEN BEGIN\r\r
94                                 LDC_mover_cte( l.almac, LDC_primero, error_mov );\r\r
95                                 WHILE not error_mov DO BEGIN\r\r
96                                         LDC_elem_cte( l.almac, cte );\r\r
97                                         IF devolver_clave_elem( cte ) = devolver_clave_elem( ant )\r\r
98                                         THEN BEGIN\r\r
99                                                 LDC_insertar( l.almac, LDC_siguiente, e );\r\r
100                                                 error_mov := true;\r\r
101                                                 END\r\r
102                                         ELSE\r\r
103                                                 LDC_mover_cte( l.almac, LDC_siguiente, error_mov );\r\r
104                                 END;\r\r
105                         END;\r\r
106                 END;\r\r
107         END\r\r
108 \r\r
109 \r\r
110 END;\r\r
111 \r\r
112 { pre: no esta vacia }\r\r
113 PROCEDURE COLAORD_sacar ( VAR l: COLAORD_Cola; VAR e: Tipo_Elem);\r\r
114 VAR\r\r
115         error : boolean;\r\r
116 BEGIN\r\r
117         LDC_mover_cte( l.almac, LDC_primero, error );\r\r
118         LDC_elem_cte( l.almac, e );\r\r
119         LDC_borrar_cte( l.almac );\r\r
120 END;\r\r
121 \r\r
122 PROCEDURE COLAORD_vaciar ( VAR l: COLAORD_Cola );\r\r
123 BEGIN\r\r
124         LDC_Vaciar( l.almac );\r\r
125 END;\r\r
126 \r\r
127 { pre: 'a' y 'b' estan creadas y 'b' esta vacia }\r\r
128 { POST: 'b' tiene una copia de los elementos de 'a' y el corriente esta en el primero }\r\r
129 PROCEDURE COLAORD_copiar ( a : COLAORD_Cola; VAR b : COLAORD_Cola );\r\r
130 BEGIN\r\r
131         LDC_Copiar( a.almac, b.almac );\r\r
132 END;\r\r
133 \r\r
134 end.\r\r
135 \r\r