Advertisement
Guest User

Untitled

a guest
Apr 26th, 2015
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.04 KB | None | 0 0
  1. Program ListaC_Cortizas_Couyet;
  2.  
  3. Type
  4.  
  5. Fecha = record
  6. dia : integer;
  7. mes : integer;
  8. ano : integer;
  9. end;
  10.  
  11. Ventas = record
  12. nFact : integer;
  13. cod : integer; {Ordenada por éste criterio}
  14. cant : integer;
  15. FechaVenta : Fecha;
  16. end;
  17.  
  18. ListaV = ^nodoV;
  19. nodoV = record
  20. datos : Ventas;
  21. sig : ListaV;
  22. end;
  23.  
  24. Sucursal = record
  25. nombre : string [60];
  26. codigo : integer;
  27. Listado : ListaV;
  28. end;
  29.  
  30. ListaS = ^nodoS;
  31. nodoS = record
  32. dato:Sucursal;
  33. sig:ListaS;
  34. end;
  35.  
  36. Arbol = ^nodoA;
  37. nodoA = record
  38. indice: integer; {será el codigo, dado que pide estar ordenada por este criterio}
  39. datoA: integer; {Serán las unidades vendidas}
  40. izq: Arbol;
  41. der:Arbol;
  42. end;
  43.  
  44.  
  45.  
  46. Var
  47.  
  48. X:integer;
  49. A : Arbol;
  50. L : ListaS;
  51. NuevaS : Sucursal;
  52. NuevaV: Ventas;
  53.  
  54. Procedure ArmoListado (var Lista : ListaV; NuevaV : Ventas); {Crea Nodo de la venta y lo añade a la lista de ventas de forma ordenada}
  55. Var
  56. nue:ListaV; act, ant : ListaV;
  57. Begin
  58. new (nue);
  59. nue^.datos := NuevaV;
  60. ant := Lista;
  61. act := Lista;
  62. If(Lista = nil) then begin
  63. nue^.sig := nil; {solo para el primer caso entra en este if}
  64. Lista := nue;
  65. end
  66. else begin
  67. While (act <> nil) or (NuevaV.cod > act^.datos.cod) do begin
  68. ant := act;
  69. act:= act^.sig;
  70. end;
  71. ant^.sig := nue;
  72. nue^.sig := act;
  73. end;
  74. end;
  75.  
  76. Procedure AgregoAListaS (L:ListaS; NuevaS: Sucursal);
  77. Var
  78. nue : ListaS;
  79. Begin
  80. new (nue);
  81. nue^.dato := NuevaS;
  82. nue^.sig := L;
  83. L := nue
  84. end;
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92. Procedure CreoLista (var L : ListaS; NuevaS : Sucursal; NuevaV : Ventas); {Lee los valores y los agrega a la lista}
  93. Begin
  94. Writeln ('Ingrese Nombre Sucursal, en caso de contrario ingrese ZZZ');
  95. Readln(NuevaS.nombre);
  96. Writeln (' ');
  97. While ( NuevaS.nombre <> 'ZZZ') do begin
  98. NuevaS.Listado := nil;
  99. Writeln('Ingrese Codigo de sucursal');
  100. Readln( NuevaS.codigo);
  101. Writeln (' ');
  102. Writeln('Ingrese Codigo de Venta, en caso contrario ingrese 0');
  103. Readln(NuevaV.cod);
  104. Writeln (' ');
  105. While (NuevaV.cod <> 0 ) do begin
  106. Writeln('Ingrese Numero de Factura');
  107. Readln(NuevaV.nFact);
  108. Writeln (' ');
  109. Writeln('Ingrese cantidad vendida');
  110. Readln(NuevaV.cant);
  111. Writeln (' ');
  112. Writeln('Ingrese Fecha de Venta');
  113. Writeln('Dia :(1-30)');
  114. Readln(NuevaV.fechaVenta.dia);
  115. Writeln ( ' ' );
  116. While ( NuevaV.fechaVenta.dia < 1) or (NuevaV.fechaVenta.dia > 30) do begin
  117. Writeln( 'Fecha incorrecta, ingrese nuevamente un dia (1 a 30)');
  118. Readln(NuevaV.fechaVenta.dia);
  119. Writeln (' ');
  120. end;
  121. Writeln('Mes:(1-12)');
  122. Readln(NuevaV.fechaVenta.mes);
  123. Writeln (' ');
  124. While (NuevaV.fechaVenta.mes < 1) or (NuevaV.fechaVenta.mes > 12) do begin
  125. Writeln ( ' Fecha incorrecta, ingrese nuevamente un mes (1 a 12)');
  126. Readln ( NuevaV.fechaVenta.mes);
  127. Writeln (' ');
  128. end;
  129. Writeln('Año: (1900-2015)');
  130. Readln(NuevaV.fechaVenta.ano);
  131. Writeln (' ');
  132. While (NuevaV.fechaVenta.ano < 1900) or (NuevaV.fechaVenta.ano > 2015) do begin
  133. Writeln ('Fecha incorrecta, ingrese nuevamente un año (1900 a 2015)');
  134. Readln (NuevaV.fechaVenta.ano);
  135. Writeln (' ');
  136. end;
  137. ArmoListado(NuevaS.Listado, NuevaV);
  138. Writeln('Ingrese Codigo de Venta, en caso contrario ingrese 0');
  139. Readln(NuevaV.cod);
  140. Writeln (' ');
  141. end;
  142. AgregoAListaS (L, NuevaS);
  143. Writeln('Ingrese Nombre Sucursal, en caso contrario ingrese ZZZ');
  144. Readln(NuevaS.nombre);
  145. Writeln (' ');
  146. end;
  147. end;
  148.  
  149. Procedure AgregoArbol (var A:arbol; aux:ListaV);
  150.  
  151. Begin
  152. If (A=nil) then begin
  153. New(A);
  154. A^.indice :=aux^.datos.cod;
  155. A^.datoA := aux^.datos.cant;
  156. A^.izq := nil;
  157. A^.der := nil;
  158. end
  159. else
  160. If ( aux^.datos.cod < A^.indice ) then AgregoArbol (A^.izq, aux)
  161. else
  162. If(aux^.datos.cod > A^.indice ) then AgregoArbol (A^.der, aux)
  163. else
  164. A^.datoA := A^.datoA + aux^.datos.cant; {En el caso de que sea el mismo producto, se suman las cantidades}
  165. end;
  166.  
  167.  
  168. Procedure ArmoArbol (var A:Arbol; L:ListaS);
  169. Var
  170. aux: ListaV;
  171. Begin
  172. While (L <> nil) do begin
  173. aux := L^.dato.Listado;
  174. While (aux <> nil) do begin
  175. AgregoArbol(A, aux);
  176. aux := aux^.sig;
  177. end;
  178. L := L^.sig;
  179. end;
  180.  
  181. end;
  182.  
  183. Procedure LeoArbol (A:Arbol);
  184. Begin
  185. If (A <> nil) then begin
  186. LeoArbol(A^.izq);
  187. Writeln ('codigo : ', A^.indice);
  188. Writeln ('cantidad : ', A^.datoA);
  189. LeoArbol (A^.der);
  190. end;
  191. end;
  192.  
  193.  
  194.  
  195. Begin
  196. L :=nil;
  197. CreoLista(L, NuevaS, NuevaV);
  198. ArmoArbol(A, L);
  199. LeoArbol (A);
  200. Readln(X);
  201. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement