]> git.llucax.com Git - z.facultad/75.41/abo.git/blob - abo_util.pas
Import inicial después del "/var incident". :(
[z.facultad/75.41/abo.git] / abo_util.pas
1 unit ABO_UTIL;\r
2 \r
3 interface\r
4 \r
5  uses\r
6    GRAL, PILA_C, ABO_AB;\r
7 \r
8  PROCEDURE ABO_UTIL_buscar_por_rango( var a: ABO_ARBOL; desde, hasta: T_CLAVE; var p: T_PILAC );\r
9 \r
10 implementation\r
11 \r
12  {----------------------------------------------------------------------------}\r
13  {- Procedimiento: busca un rango de claves y las inserta en una pila,\r
14  {-                quedando la mayor clave 'arriba' de la pila.\r
15  {----------------------------------------------------------------------------}\r
16 \r
17  PROCEDURE ABO_UTIL_buscar_por_rango( var a: ABO_ARBOL; desde, hasta: T_CLAVE; var p: T_PILAC );\r
18    PROCEDURE buscar_rango_inorder_insertando( var a: ABO_ARBOL; desde, hasta: T_CLAVE; var p: T_PILAC );\r
19     var\r
20       er: boolean;\r
21       c:  T_CLAVE;\r
22       r:  T_REGISTRO;\r
23 \r
24     begin\r
25       ABO_elem_cte( a, r );\r
26       c := T_GRAL_Devolver_Clave_Elem( r );\r
27       { Proceso el subarbol izquierdo si la clave del elemento actual }\r
28       {   es mayor o igual que la clave 'desde' }\r
29       if ( desde <= c ) then begin\r
30          ABO_mover_cte( a, ABO_izquierda, er );\r
31          if ( not er ) then begin\r
32             buscar_rango_inorder_insertando( a, desde, hasta, p );\r
33             ABO_mover_cte( a, ABO_padre, er );\r
34          end;\r
35          { Inserto en la pila el elemento corriente si la clave del elemento }\r
36          {   actual también es menor o igual que la clave 'hasta' }\r
37          if ( hasta >= c ) then\r
38             PILAC_poner( p, r );\r
39       end;\r
40       { Proceso el subarbol derecho si la clave del elemento actual }\r
41       {   es menor o igual que la clave 'hasta' }\r
42       if ( hasta >= c ) then begin\r
43          ABO_mover_cte( a, ABO_derecha, er );\r
44          if ( not er ) then begin\r
45             buscar_rango_inorder_insertando( a, desde, hasta, p );\r
46             ABO_mover_cte( a, ABO_padre, er );\r
47          end;\r
48       end;\r
49     end;\r
50 \r
51   var\r
52    er: boolean;\r
53 \r
54   begin\r
55    PILAC_vaciar( p );                                        { Vacia la pila }\r
56    ABO_mover_cte( a, ABO_raiz, er );                         { Mueve el corriente a la raiz }\r
57    if ( not er ) then\r
58       buscar_rango_inorder_insertando( a, desde, hasta, p ); { Comienza a buscar }\r
59   end;\r
60 \r
61 end.