Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ************************************
- Corregido hoy martes 11/12 por prof.
- ************************************
- Modelo parcial 4ta fecha del año 2012.
- { ¡Muchas gracias Sebastian Beriay por compartirlo! }
- Esta es una forma de hacerlo, me llevó un día entero y hoy me lo corrigió Juan a la mañana
- que había consultas.
- Enunciado:
- 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.
- 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.
- Además el supermercado dispone de un catálogo de productos a la venta.
- 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.
- Se pide:
- 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.
- 2)Realice un módulo que reciba la estructura generada en 1) y aplique un descuento de un
- 10% sobre el monto total, para aquellos dni entre 4.000.000 y 6.000.000 (que se sabe pertenecen a personas jubiladas).
- Nota: Cada persona/dni hace un único pedido en el día. Los códigos de producto seguro existen
- en el catálogo. Un producto del pedido puede venderse si hay existencia de las unidades que se
- requiere.
- Declare las estructuras utilizadas. Realice el programa principal que invoque a los módulos desarrollados.
- program supermercado
- type
- {Estructuras que se disponen ya cargadas}
- pedidos=^nodo
- nodo=record
- datospedidos:datped; {Registro}
- sig:pedidos;
- end;
- datped=record
- nombrecliente:string;
- dni:integer;
- direccion:string;
- telefono:integer;
- L_productosseleccionados:prodselec; {Lista}
- end;
- prodselec=^nodo_prodselec;
- prodselec=record
- codigoproducto:integer;
- unidades:integer;
- sig:prodselec;
- end;
- calalogo=^nodo_arbol;
- nodoarbol=record
- datos:datcatalogo;
- izq:catalogo;
- der:catalogo;
- end;
- datcatalogo=record
- codigo:integer; {Orden}
- precioporunidad:real;
- stock:integer;
- end;
- {Estructuras nuevas que vamos a crear y llenar con lo que nos piden}
- nuevaestructura=^nodo_nuevo
- nuevo_nuevo=record
- elpedido:elped;
- izq:nuevaestructura;
- der:nuevaestructura;
- end;
- elped=record
- dnicliente:integer; {Orden}
- montototal:real;
- L_codigo_sin_stock:codsinstock;
- end;
- codsinstock=^nodo_stock;
- nodostock=record
- codigodelproducto:integer;
- sig:codsinstock;
- end;
- procedure generarestructura (L:pedidos; A:catalogo; var A2:nuevaestructura);
- begin
- while (L<>nil) do begin
- insertarenarbol (L,A,A2);
- {El profesor me aconsejo que le pasara directamente la lista, en vez de todo el arbol (A2)}
- L:=L^.sig;
- end;
- procedure insertarenarbol (L:pedidos; A:catalogo, var A2:nuevaestructura);
- var
- montototal:real;
- begin
- if (A2 = nil) then begin
- new(A2)
- A2^.izq:=nil;
- A2^.der:=nil;
- A2^.elpedido.dnicliente:=L^.datospedidos.dni;
- calcular(L^.datospedidos.L_productosseleccionados,A,A2,montototal);
- A2^.elpedido.montototal:=montototal;
- end
- else
- if (A2^.elpedido.dnicliente > L^.datospedido.dni) then
- insertarenarbol(L,A,A2^.izq);
- else
- if (A2^.elpedido.dnicliente < L^.datospedido.dni) then
- insertarenarbol(L,A,A2^.der);
- {No hago un else, es decir, no pregunto si el dni es igual porque en el enunciado se cita:}
- {..."Cada persona/dni hace un único pedido /en el día/."...}
- {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.}
- end;
- procedure calcular (L:prodselec; var A:catalogo; var A2:nuevaestructura; var montototal);
- begin
- montototal:=0;
- while (L<>nil) do begin
- buscar_en_arbol (A,L^.codigoproducto,L^.unidades,montototal),A2);
- {El profesor me aconsejo que le pasara directamente la lista, en vez de todo el arbol (A2)}
- L:=L^.sig;
- end;
- end;
- procedure buscar_en_arbol (var A:catalogo; codigoproducto:integer; unidades:integer; var montototal: real; var A2:nuevaestructura);
- var
- aux:=real;
- begin
- if (A<>nil) then
- if (A^.datos.codigo > codigoproducto) then
- buscar_en_arbol (A^.izq, codigoproducto, unidades, A2);
- else
- if (A^.datos.codigo < codigoproducto) then
- buscar_en_arbol (A^.der, codigoproducto, unidades, A2);
- else {es igual}
- if (A^.datos.stock < unidades) then
- insertar_en_lista (A2^.elpedido.L_codigos_sin_stock, codigoproducto);
- else begin
- 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}
- aux:=A^.datos.precio.porunidad * unidades;
- montototal:=montototal + aux;
- end;
- end;
- procedure insertar_en_lista (var L:codsinstock; codigoproducto:integer);
- {código de InsertarAdelante en una lista, es más sencillo que el InsertarConOrden, puesto que no pide que inserte ordenado}
- var
- nue:codsinstock;
- begin
- new (nue);
- nue^.codigodelproducto:=codigodelproducto;
- nue^.sig:=L;
- L:=nue;
- end;
- procedure jubilados (var A2:nuevaestructura);
- begin
- if (A2 <> nil) then
- if (A2^.elpedido.dnicliente > 4.000.000) then {cota inferior}
- if (A2^.elpedido.dnicliente < 6.000.000) then {cota superior}
- A2^.elpedido.montototal:= A2^.elpedido.montototal+90/100;
- jubilados (A2^.izq); {recorro el arbol}
- jubilados (A2^.der); {recorro el arbol}
- else
- 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}
- else
- jubilados (A2^.der); {como es menor que 4.000.000 me voy para la derecha puesto que son siempre valores mayores}
- end;
- var
- L:pedidos;
- A:catalogo;
- A2:nuevaestructura;
- begin
- L:=nil;
- A:=nil;
- A2:=nil;
- cargarlista (L); // Se dispone
- cargararbol (A); // Se dispone
- generarestructura (L,A,A2);
- jubilados (A2);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement