UTNianos

Versión completa: [PEDIDO] Final 28/07/2012
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Bueno eso nomás si alguien lo tiene genial. Saludos!!
Dame dos minutos que lo subo, la profe lo subio al grupo y me re olvide de subirlo aca =P
dale buenisimo!
Aca esta el final, es un scaneo pero se ve.


Saludos
Te agradezco mucho chabon!! un abrazo!!
Gracias y suerte cuando rindas!
Yo me presenté y aprobé (POR SUERTE Y POR FIN!) ese final asique les paso la solución:

La estrategia era muy sencilla y está claramente dada en las restricciones. Debía utilizarse una lista de productos comprados para cada factura, por lo tanto debía realizarse un "corte de control" con los datos ingresados por teclado, en el while grande la condición era codigo de producto <> 0 y en el while chiquito la condición se podía poner como codigo de producto <> 0 AND <> -1 o codigo de producto > 0, "suponiendo" que el código de producto será siempre positivo para todos los productos.

Cada compra que se ingresaba por teclado se buscaba el codigo de producto en la lista, si la encontraba sumaba la cantidad y sino la cargaba en el nodo con el código de producto y la cantidad que compró. (No hacía falta que la lista esté ordenada)

Una vez q se ingresaban todas las compras (es decir que se ingresó por teclado codigo de producto = 0) sale del while y muestra la lista, realizando una busqueda binaria al archivo de productos para obtener la descripcion y el precio, luego si tiene la señal de descuento se le debe aplicar los descuentos correspondientes (todo esto con un acumulador se logra).

Y luego se limpia la lista dejandola en NIL para la siguiente factura y así hasta que se ingrese -1 y directamente sale del while grande y termina el programa (hay q cerrar el archivo obviamente).

Bueno esa es básicamente la estrategia espero que les sirva... lo que noté es que estan siendo mucho mas flexibles, me parece que este final fue mucho mas facil en comparación con otros que rendí... pero bueno

Salu2
la estructura de datos que utilizaste como era? te acordas más o menos?
Perdon,

"Cada compra que se ingresaba por teclado se buscaba el codigo de producto en la lista, si la encontraba sumaba la cantidad y sino la cargaba en el nodo con el código de producto y la cantidad que compró. (No hacía falta que la lista esté ordenada)"

Estoy casi segura que para buscar en listas es necesario que este ordenada.

A mi lo unico que me deja dudas de esto es de donde saco los descuentos y eso, solo tengo una señal de oferta
La lista puede o no estar ordenada.
Podes utilizar un BuscaInserta / BuscaInsertaOrdenado
En pseudocodigo:

Auxiliar := Lista
En un ciclo While Mientras Aux<> Nil y Aux^.Codigo <> Registro.Codigo (Si fuese ordenado utilizas < o > dependiendo el orden de la lista)
anterior:=Auxiliar
Auxiliar := Auxiliar^.siguiente
Fin Ciclo

Despues con un If
Si Auxiliar = Nil (aca en el if preguntarias < o > dependiendo lo de arriba)
Por true No lo encontro si el auxiliar es nil. Entonces lo insertas donde queres. La mas facil Nuevo^.siguiente := Lista y Lista := Nuevo.
Por False tenes el puntero Auxiliar que es el codigo de producto repetido entonces acumulas.

Sobre el tema de los descuentos
No se ve bien en el scaneo. Pero en la imagen dice lo siguiente:
Llevando 1 producto 10% de descuento
LLevando 2 productos 50% de descuento
LLevando 3 productos 1 es gratis.

Los que lo hagan guiensen por el grafico de abajo.
Si uno compra 9 productos.
Entonces tendra 3 productos gratis.
Ya que tiene 3 veces el tercer descuento de 1 gratis.

Otra forma de hacerlo en vez de usar busqueda binaria.
Los codigos de productos siempre son positivos, un codigo negativo es un error, al igual que un codigo 0.
Los archivos comienzan en 0 pero los Codigos de Productos comienzan en 1.
Aprovechando esto, se puede utilizar un
Seek ( Archivo, CodigoProducto -1)
y ahi tenemos el registro que queremos.
(30-07-2012 15:48)CarooLina escribió: [ -> ]Perdon,

"Cada compra que se ingresaba por teclado se buscaba el codigo de producto en la lista, si la encontraba sumaba la cantidad y sino la cargaba en el nodo con el código de producto y la cantidad que compró. (No hacía falta que la lista esté ordenada)"

Estoy casi segura que para buscar en listas es necesario que este ordenada.

A mi lo unico que me deja dudas de esto es de donde saco los descuentos y eso, solo tengo una señal de oferta

No, la única búsqueda que se puede hacer sobre una lista es SECUENCIAL... es imposible realizar una búsqueda binaria en listas por lo que al ser la unica forma de buscar SECUENCIAL, tener la lista ordenada es indistinto.

Y con respecto a lo de los descuentos, fijate los cartelotes q aparecen arriba de todo con los descuentos 10% llevando 1, 50% a la 2da unidad llevando 2, 100% a la 3ra unidad llevando 3... al momento de mostrar el listado, te fijas si ese producto tiene señal de oferta y luego le aplicas el descuento que corresponda =)

Cita:Los que lo hagan guiensen por el grafico de abajo.
Si uno compra 9 productos.
Entonces tendra 3 productos gratis.
Ya que tiene 3 veces el tercer descuento de 1 gratis.

En el final yo le plantié a un profesor que eso es absurdo... en qué supermercado te hacen ese tipo de descuentos??? en ninguno, es decir si me llevo 1500 unidades me corresponderian 300 GRATIS?????. entonces le dije que yo lo iba a hacer como que si se llevaba 3 o mas, le correspondia solamente el descuento del 100% a la 3er unidad, creo que eso es lo mas lógico y me dijo que estaba bien que lo hiciera asi.

Cita:Otra forma de hacerlo en vez de usar busqueda binaria.
Los codigos de productos siempre son positivos, un codigo negativo es un error, al igual que un codigo 0.
Los archivos comienzan en 0 pero los Codigos de Productos comienzan en 1.
Aprovechando esto, se puede utilizar un
Seek ( Archivo, CodigoProducto -1)
y ahi tenemos el registro que queremos.

Dónde dice que los codigos de producto empiezan en 1??? no se puede asumir eso, estaría mal ademas vos no podés tener tampoco la seguridad de que por cada registro el codigo se incremente en una sola unidad por lo que esa solución es imposible
Yo pensaba que los carteles eran de decoracion, bueno muchas gracias por la explicacion =)
A mi me costo mas pensar la parte de los descuentos y demas que el final en si jajaja. Pero estoy feliz que me la saque de encima

Listas
yo realice un InsertaNodo1ro (Muy similar a una pila) y luego un BuscarNodo. Si es <>NIL Inserto el nodo, sino actualizo los campos es decir prt^.info.clave. Véase el unidades acumuladas

Descuentos
Se nos presentan 3 casos.
Segun la logica que explicaron, si compramos 10 sprites... 3 no las pagamos y a la 4ta le aplicamos un 10% de descuento.

Aclaro esto por si acaso, yo lo solucione haciendo
While(Cantidad<>0)
If(Cantidad=1)-> Cálculos descuento y resto 1
If(Cantidad=2) -> Cálculos descuento y resto 2
If(Cantidad>=3)... Cálculos descuento y resto 3

Y recordemos que debemos ir acumulando el total y el total con descuento para luego informarlo.
Genial que gran aporte! gracias!
En este final, se hace todo de un solo paso ? (es decir, cargar los archivos en la lista y emitir el listado)


Hice asi la priemra parte pero no se como seguir wall

gracias

[attachment=6482]
URLs de referencia