Seguimos buscando a Arshak. Ayudanos compartiendo!
Encuesta no oficial de docentes
Resultados de la encuesta no oficial de docentes
Probaste el SIGA Helper?

Donar $100 Donar $200 Donar $500 Donar mensualmente


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Ayuda Funcional - Guia 5 - Ventas de PCs
Autor Mensaje
Shiny Shoes Sin conexión
Secretario de la SAE
Volviendo del más allá
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 502
Agradecimientos dados: 38
Agradecimientos: 115 en 9 posts
Registro en: Aug 2011
Mensaje: #1
Ayuda Funcional - Guia 5 - Ventas de PCs Ejercicios Paradigmas de Programación
Estoy haciendo este ejer pero no puedo con el punto 1.3

1.3. vendedorDelMes/1, se le pasa un par que representa (mes,año) y devuelve el nombre del
vendedor que más vendió en plata en el mes. O sea no cantidad de ventas, sino importe total de
las ventas. El importe de una venta es el que indica la función precioMaquina. P.ej.
Main> vendedorDelMes (2,2006)
--> "Martin" (vendio por $670, una máquina de $320 y otra de $350)



vendedores = ["Martin", "Diego", "Claudio", "José"]

ventas = [((1, 2, 2006), "Martin", ["Monitor GPRS 3000", "Motherboard ASUS 1500"]),
((1, 2, 2006), "Diego", ["Monitor ASC 543", "Motherboard Pindorcho"]),
((10, 2, 2006), "Martin", ["Monitor ASC 543", "Motherboard ASUS 1200"]),
((12, 2, 2006), "Diego", ["Monitor GPRS 3000", "Motherboard ASUS 1200"]),
((4, 3, 2006), "Diego", ["Monitor GPRS 3000", "Motherboard ASUS 1500"])]

precios = [("Monitor GPRS 3000", 200), ("Motherboard ASUS 1500", 120),
("Monitor ASC 543", 250), ("Motherboard ASUS 1200", 100),
("Motherboard Pindorcho", 30)]

precioMaquina listaDeComponentes = (sum.map precioComponente) listaDeComponentes
precioComponente componente = head [precio | (nombre,precio) <- precios,nombre == componente]


vendedorDelMes (mes, año) = (fst.maximum) (vendedoresDelMes (mes, año))
vendedoresDelMes (mes, año) = map (\(_, vendedor, componentes) -> (vendedor, precioMaquina componentes)) (ventasDelMes (mes, año))
ventasDelMes (mes,año) = filter (\((_, mesVenta, añoVenta), _, _) -> (año==añoVenta && mes==mesVenta)) ventas

main = print (vendedoresDelMes (2,2006))



llegue hasta ahí, pero en realidad no es lo que se pide!
Ahora estoy intentando algo así


mayorSegun funcion valor1 valor2 = (funcion valor1) > (funcion valor2)

quickSort (mayorSegun ()) vendedores(dia,mes)



Pero algo estoy haciendo mal.
(Este mensaje fue modificado por última vez en: 02-08-2013 23:55 por Shiny Shoes.)
02-08-2013 13:38
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
CarooLina Sin conexión
Colaborador

********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 3.743
Agradecimientos dados: 1.496
Agradecimientos: 1.683 en 547 posts
Registro en: Sep 2010
Mensaje: #2
RE: Ayuda Funcional - Guia 5 - Ventas de PCs
Yo creo que si tenes que usar tanto map y filter, como que hay un concepto que falta. Yo usaria una lista por comprension.. te recomiendo el apunte de lucas espigarol, yo no las entendia lei eso y me quedo re claro yyyy es muuuuy pavote =)

Vos tenes una lista de ventas, con ternas, bueno la cosa es asi

Mi idea es: armar una lista con al gente que vendio en esa fecha, armando tuplas de quien y cuanto vendio, ordenarla de mayor a menor y sacar el primero . Seguramente habra mejores...

vendedorDelMes (mes, año) = [ (quien, precioMaquina(cosasQueVendio)) | (fecha,quien,cosasQueVendio)<-ventas, esLaFechaQueBusco(fecha,mes,año) ]

Con esto te va a armar una lista : (Martin,350),(lulu,380)...

esLaFechaQueBusco(fecha,mes,año) , lo que podrias hacer.. asi la llamas pero cuadno la "definis" pones

esLaFechaQueBusco(mes,año,mesQueBusco,añoQueBusco) = mesQueBusco==mes & añoQueBusco==año

Y listo, fijate si te sirve

love
02-08-2013 16:34
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] CarooLina recibio 1 Gracias por este post
franciscodiez (21-08-2013)
Shiny Shoes Sin conexión
Secretario de la SAE
Volviendo del más allá
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 502
Agradecimientos dados: 38
Agradecimientos: 115 en 9 posts
Registro en: Aug 2011
Mensaje: #3
RE: Ayuda Funcional - Guia 5 - Ventas de PCs
gracias! Esta bueno armar la lista por compresión, en el ejemplo creo que eso lo estoy haciendo bien. El problema lo tengo en ordenar la lista por el valor total de la venta.
02-08-2013 20:29
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Baron Bomadil Sin conexión
Militante
We are out of coffee
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 94
Agradecimientos dados: 16
Agradecimientos: 9 en 9 posts
Registro en: Jul 2013
Mensaje: #4
RE: Ayuda Funcional - Guia 5 - Ventas de PCs
Si tenés problemas con el quicksort te dejo uno de orden superior que usé yo para el tp de funcional que nos dieron en mi curso:


quickSort :: (Ord b) => [a]->(a->b)->[a]
quickSort [] _ = []
quickSort (cab:cola) fCriterio = (quickSort [ x | x<-cola, fCriterio x >= fCriterio cab ] fCriterio) ++ [cab] ++ (quickSort [ x | x<-cola, fCriterio x < fCriterio cab ] fCriterio)



Igual me parece innecesario con maximum y algunos map te tendria que alcanzar
02-08-2013 22:43
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Baron Bomadil recibio 1 Gracias por este post
franciscodiez (21-08-2013)
Shiny Shoes Sin conexión
Secretario de la SAE
Volviendo del más allá
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 502
Agradecimientos dados: 38
Agradecimientos: 115 en 9 posts
Registro en: Aug 2011
Mensaje: #5
RE: Ayuda Funcional - Guia 5 - Ventas de PCs
con el quicksort creo que no tengo dramas, probé con uno dándole solamente la lista y con ese que también se le puede dar un criterio.

El problema lo tengo en sumar las ventas de cada vendedor por mes, ya que el vendedoresDelMes me los da repetidos, y después ordenar una lista [(nombre,total)] por el 2do valor sin perder el nombre.
02-08-2013 23:12
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
CarooLina Sin conexión
Colaborador

********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 3.743
Agradecimientos dados: 1.496
Agradecimientos: 1.683 en 547 posts
Registro en: Sep 2010
Mensaje: #6
RE: Ayuda Funcional - Guia 5 - Ventas de PCs
y si probas con mi forma? por que entre lo tuyo que no anda y lo mio que por ahi si, no se digo..

love
02-08-2013 23:29
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Shiny Shoes Sin conexión
Secretario de la SAE
Volviendo del más allá
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 502
Agradecimientos dados: 38
Agradecimientos: 115 en 9 posts
Registro en: Aug 2011
Mensaje: #7
RE: Ayuda Funcional - Guia 5 - Ventas de PCs
fue lo primero que hice!
pero tengo los mismos problemas, los vendedores los tengo repetidos y sigo sin saber como poder ordenar la lista por el 2do elemento =(

edit: ahí se puede ver lo que digo, compilando el código del 1er post.
(Este mensaje fue modificado por última vez en: 02-08-2013 23:56 por Shiny Shoes.)
02-08-2013 23:43
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Baron Bomadil Sin conexión
Militante
We are out of coffee
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 94
Agradecimientos dados: 16
Agradecimientos: 9 en 9 posts
Registro en: Jul 2013
Mensaje: #8
RE: Ayuda Funcional - Guia 5 - Ventas de PCs
Una solución que se me ocurre ( y no probé porque me da fiaca, asi que fijate que onda) es, asumiendo que la lista ventasDelMes es de la forma [(vendedor,PrecioComponentesVendidos)] como desarrollaste vos:


listaTotalVendidos ventasDelMes = map (totalVendidos ventasDelMes) ventasDelMes

totalVendidos ventasDelMes venta = (fst venta, (sum.map) snd (filter ((== fst venta).fst) ventasDelMes))


Después, de la lista que te devuelve la función usás (fst.maximum) y listo
(Este mensaje fue modificado por última vez en: 03-08-2013 01:59 por Baron Bomadil.)
03-08-2013 01:36
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Shiny Shoes Sin conexión
Secretario de la SAE
Volviendo del más allá
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 502
Agradecimientos dados: 38
Agradecimientos: 115 en 9 posts
Registro en: Aug 2011
Mensaje: #9
RE: Ayuda Funcional - Guia 5 - Ventas de PCs
Ese maximum es el problema. Lo hace mágicamente de la 2da parte de la tupla? Porque la lista seria algo así [(vendedor,ventaTotalDelMes)]
08-08-2013 23:54
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Baron Bomadil Sin conexión
Militante
We are out of coffee
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 94
Agradecimientos dados: 16
Agradecimientos: 9 en 9 posts
Registro en: Jul 2013
Mensaje: #10
RE: Ayuda Funcional - Guia 5 - Ventas de PCs
Ah nop, en tuplas el maximum toma el primero como criterio de búsqueda, en el mapeo de los totales vendidos cambiá el orden de la tupla, pone primero el monto y despues el nombre del vendedor, y mandale un (snd.maximum)
09-08-2013 00:15
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Shiny Shoes Sin conexión
Secretario de la SAE
Volviendo del más allá
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 502
Agradecimientos dados: 38
Agradecimientos: 115 en 9 posts
Registro en: Aug 2011
Mensaje: #11
RE: Ayuda Funcional - Guia 5 - Ventas de PCs
Ahh listo, ahí como decís puede ser entonces. No lo probé porque creo que me salio con lo que había puesto antes.

quickSort (mayorSegun snd) [(vendedor,ventaTotal)]


y de paso aclaro que la función que me da la lista me parece que no esta del todo bien, tuve que arreglar un par de cosas.
(Este mensaje fue modificado por última vez en: 09-08-2013 11:05 por Shiny Shoes.)
09-08-2013 11:03
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
juanm_ Sin conexión
Militante
Sin estado :(
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 58
Agradecimientos dados: 80
Agradecimientos: 17 en 7 posts
Registro en: Jul 2011
Mensaje: #12
RE: Ayuda Funcional - Guia 5 - Ventas de PCs
Yo me trabe con el 1.4.1:

1.4. ventasCriterio/1, que devuelva el importe total de las ventas según el criterio que se le pasa
como parámetro. Ejemplos de uso:
esDeLaFecha fecha (fechaVenta, _, _) = fecha == fechaVenta
Main> ventasCriterio (esDeLaFecha (1, 2, 2006))
--> 600 (una máquina de $320 y otra de $280)

Usando esa función definir las funciones que permitan:
1.4.1. Obtener las ventas de un mes, de forma que:
Main> ventasMes (2,2006)
--> 1250

los hice así:


ventasCriterio criterio= sum [precioMaquina(componentes) | (fechaVenta,vendedor,componentes)<-ventas, criterio (fechaVenta,vendedor,componentes) ]

ventasMes (mes,anio) = ventasCriterio ( ((mes==).snd3.fst3) && ((anio==).trd3.fst3) )



pero no funciona!!, y el error esta en la ultima linea, si saco lo q esta después del '&&' y dejo solo:
ventasCriterio ( ((mes==).snd3.fst3) anda bien!!, debe ser una boludez pero no puedo darme cuenta q es, alguna idea???
14-08-2013 20:21
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
santipisa Sin conexión
Militante
Sin estado :(
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 57
Agradecimientos dados: 43
Agradecimientos: 34 en 8 posts
Registro en: Oct 2011
Twitter
Mensaje: #13
RE: Ayuda Funcional - Guia 5 - Ventas de PCs
espero que te sirva




-- 1.4
filtraCriterio criterio [] = []
filtraCriterio criterio (x:xs)
| criterio x = precioMaquina (trd3 x) : filtraCriterio criterio xs
| otherwise = filtraCriterio criterio xs

ventasCriterio criterio = sum (filtraCriterio criterio ventas)
-- PRB
esDeLaFecha fecha (fechaVenta, _, _) = fecha == fechaVenta

--1.4.1
esDeLaFechaT fechat (fechaVenta,_,_) = fechat == aTupla (fechaVenta)

ventasMes fechat = ventasCriterio (esDeLaFechaT fechat)

--1.4.2
esDelVendedor vendedor (_,vendedores,_) = vendedor == vendedores

ventasVendedor vendedor = ventasCriterio (esDelVendedor vendedor)

--1.4.3
--CORREGIDO POST DEVOLUCION
huboVentas fechat = (ventasMes fechat > 0)


SANTIPISA-FCO
06-09-2013 17:23
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] santipisa recibio 1 Gracias por este post
juanm_ (07-09-2013)
Baron Bomadil Sin conexión
Militante
We are out of coffee
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 94
Agradecimientos dados: 16
Agradecimientos: 9 en 9 posts
Registro en: Jul 2013
Mensaje: #14
RE: Ayuda Funcional - Guia 5 - Ventas de PCs
el filtraCriterio te combiene hacerlo con un filter, la idea de la cátedra es enseñarte a programar de manera declarativa en funcional, quieren que te abstraigas del cómo y uses las herramientas del lenguaje xD
06-09-2013 18:29
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)