Advertisement
juanesperanza

Modelo Parcial ADP 4ta Fecha 2012 UNLP La Plata.

Dec 11th, 2012
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 6.37 KB | None | 0 0
  1.                          ************************************
  2.                          Corregido hoy martes 11/12 por prof.
  3.                          ************************************
  4.  
  5. Modelo parcial 4ta fecha del año 2012.
  6. { ¡Muchas gracias Sebastian Beriay por compartirlo! }
  7.  
  8. Esta es una forma de hacerlo, me llevó un día entero y hoy me lo corrigió Juan a la mañana
  9. que había consultas.
  10.  
  11. Enunciado:
  12.  
  13. Un supermercado dispone de una lista que contiene información de los pedidos que recibió a través de su portal de internet en un día.
  14. De cada pedido se conoce: nombre del cliente, dni, dirección, teléfono y una lista con los productos seleccionados en un catalogo on-line. De cada producto se conoce: código de producto y unidades.
  15.  
  16. Además el supermercado dispone de un catálogo de productos a la venta.
  17. De cada producto a la venta se conoce: código de producto, precio por unidad y stock actual. Esta estructura se encuentra ordenada por código y debe ser eficiente para la búsqueda por dicho criterio.
  18.  
  19. Se pide:
  20.  
  21. 1) Realizar un módulo que reciba la lista de pedidos y el catálogo de productos. El módulo debe retornar una nueva estructura donde figure para cada pedido el dni del cliente, el monto total a pagar, y una lista con el código de aquellos productos que no podrán venderse por falta de stock. La nueva estructura debe ser ordenada por dni y debe ser eficiente para la búsqueda por este criterio.
  22.  
  23. 2)Realice un módulo que reciba la estructura generada en 1) y aplique un descuento de un
  24. 10% sobre el monto total, para aquellos dni entre 4.000.000 y 6.000.000 (que se sabe pertenecen a personas jubiladas).
  25.  
  26. Nota: Cada persona/dni hace un único pedido en el día. Los códigos de producto seguro existen
  27. en el catálogo. Un producto del pedido puede venderse si hay existencia de las unidades que se
  28. requiere.
  29. Declare las estructuras utilizadas. Realice el programa principal que invoque a los módulos desarrollados.
  30.  
  31.  
  32. program supermercado
  33. type
  34.  
  35. {Estructuras que se disponen ya cargadas}  
  36.  
  37.     pedidos=^nodo
  38.     nodo=record
  39.     datospedidos:datped; {Registro}
  40.              sig:pedidos;
  41.     end;
  42.  
  43.     datped=record
  44.     nombrecliente:string;
  45.     dni:integer;
  46.     direccion:string;
  47.     telefono:integer;
  48.     L_productosseleccionados:prodselec; {Lista}
  49.     end;
  50.  
  51.     prodselec=^nodo_prodselec;
  52.     prodselec=record
  53.     codigoproducto:integer;
  54.     unidades:integer;
  55.     sig:prodselec;
  56.     end;
  57.  
  58.     calalogo=^nodo_arbol;
  59.     nodoarbol=record
  60.     datos:datcatalogo;
  61.     izq:catalogo;
  62.     der:catalogo;
  63.     end;
  64.  
  65.     datcatalogo=record
  66.     codigo:integer; {Orden}
  67.     precioporunidad:real;
  68.     stock:integer;
  69.     end;
  70.  
  71. {Estructuras nuevas que vamos a crear y llenar con lo que nos piden}
  72.  
  73. nuevaestructura=^nodo_nuevo
  74. nuevo_nuevo=record
  75. elpedido:elped;
  76. izq:nuevaestructura;
  77. der:nuevaestructura;
  78. end;
  79.  
  80. elped=record
  81. dnicliente:integer; {Orden}
  82. montototal:real;
  83. L_codigo_sin_stock:codsinstock;
  84. end;
  85.  
  86. codsinstock=^nodo_stock;
  87. nodostock=record
  88. codigodelproducto:integer;
  89. sig:codsinstock;
  90. end;
  91.  
  92.  
  93. procedure generarestructura (L:pedidos; A:catalogo; var A2:nuevaestructura);
  94.  
  95. begin
  96.     while (L<>nil) do begin
  97.         insertarenarbol (L,A,A2);
  98. {El profesor me aconsejo que le pasara directamente la lista, en vez de todo el arbol (A2)}
  99.         L:=L^.sig;
  100.     end;
  101.  
  102.  
  103. procedure insertarenarbol (L:pedidos; A:catalogo, var A2:nuevaestructura);
  104. var
  105.     montototal:real;
  106.  
  107. begin
  108.     if (A2 = nil) then begin
  109.         new(A2)
  110.         A2^.izq:=nil;
  111.         A2^.der:=nil;
  112.         A2^.elpedido.dnicliente:=L^.datospedidos.dni;
  113.         calcular(L^.datospedidos.L_productosseleccionados,A,A2,montototal);
  114.         A2^.elpedido.montototal:=montototal;
  115.     end
  116.     else
  117.     if (A2^.elpedido.dnicliente > L^.datospedido.dni) then
  118.         insertarenarbol(L,A,A2^.izq);
  119.     else
  120.         if (A2^.elpedido.dnicliente < L^.datospedido.dni) then
  121.             insertarenarbol(L,A,A2^.der);
  122. {No hago un else, es decir, no pregunto si el dni es igual porque en el enunciado se cita:}
  123. {..."Cada persona/dni hace un único pedido /en el día/."...}
  124. {Y como "se dispone de una lista que continene la información de los pedidos que recibió a} {través de su portal de intenet /en un día/", nunca van a ser igual los dni.}
  125. end;
  126.  
  127. procedure calcular (L:prodselec; var A:catalogo; var A2:nuevaestructura; var montototal);
  128.  
  129. begin
  130.     montototal:=0;
  131.     while (L<>nil) do begin
  132.         buscar_en_arbol (A,L^.codigoproducto,L^.unidades,montototal),A2);
  133.         {El profesor me aconsejo que le pasara directamente la lista, en vez de todo el arbol (A2)}
  134.         L:=L^.sig;
  135.     end;
  136. end;
  137.  
  138. procedure buscar_en_arbol (var A:catalogo; codigoproducto:integer; unidades:integer; var montototal: real; var A2:nuevaestructura);
  139.  
  140. var
  141.     aux:=real;
  142.  
  143. begin
  144.     if (A<>nil) then
  145.         if (A^.datos.codigo > codigoproducto) then
  146.             buscar_en_arbol (A^.izq, codigoproducto, unidades, A2);
  147.         else
  148.             if (A^.datos.codigo < codigoproducto) then
  149.                 buscar_en_arbol (A^.der, codigoproducto, unidades, A2);
  150.             else {es igual}
  151.                 if (A^.datos.stock < unidades) then
  152.                     insertar_en_lista (A2^.elpedido.L_codigos_sin_stock, codigoproducto);
  153.                 else begin
  154.                     A^.datos.stock := A^.datos.stock - unidades; {actualizo stock, en el enunciado no lo pide pero HAY que hacerlo, es un error si no se actualiza}
  155.                     aux:=A^.datos.precio.porunidad * unidades;
  156.                     montototal:=montototal + aux;
  157.                 end;
  158. end;
  159.  
  160. procedure insertar_en_lista (var L:codsinstock; codigoproducto:integer);
  161. {código de InsertarAdelante en una lista, es más sencillo que el InsertarConOrden, puesto que no pide que inserte ordenado}
  162. var
  163.  nue:codsinstock;
  164.  
  165. begin
  166.     new (nue);
  167.     nue^.codigodelproducto:=codigodelproducto;
  168.     nue^.sig:=L;
  169.     L:=nue;
  170. end;
  171.  
  172. procedure jubilados (var A2:nuevaestructura);
  173.  
  174. begin
  175.     if (A2 <> nil) then
  176.         if (A2^.elpedido.dnicliente > 4.000.000) then {cota inferior}
  177.             if (A2^.elpedido.dnicliente < 6.000.000) then {cota superior}
  178.                 A2^.elpedido.montototal:= A2^.elpedido.montototal+90/100;
  179.                 jubilados (A2^.izq); {recorro el arbol}
  180.                 jubilados (A2^.der); {recorro el arbol}
  181.             else
  182.                 jubilados (A2^.izq); {como es mayor a 6.000.000, me voy para la izquierda puesto que son siempre valores menores en un arbol binario de búsqueda}
  183.         else
  184.             jubilados (A2^.der); {como es menor que 4.000.000 me voy para la derecha puesto que son siempre valores mayores}
  185. end;
  186.  
  187. var
  188.     L:pedidos;
  189.     A:catalogo;
  190.     A2:nuevaestructura;
  191.  
  192. begin
  193.     L:=nil;
  194.     A:=nil;
  195.     A2:=nil;
  196.     cargarlista (L); // Se dispone
  197.     cargararbol (A); // Se dispone
  198.     generarestructura (L,A,A2);
  199.     jubilados (A2);
  200. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement