Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Final Paradigmas 10/08/13
Autor Mensaje
takuma1985 Sin conexión
Militante
.
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 54
Agradecimientos dados: 91
Agradecimientos: 71 en 16 posts
Registro en: Oct 2011
Mensaje: #1
Final Paradigmas 10/08/13 Finales Paradigmas de Programación
Hola!

Les subo el final de Paradigmas que tomaron hoy. A mi me fue mal, pero me quedé en la corrección, así que pongo las respuestas que nos dieron. Estaría bueno si alguien quiere ampliar algunas un poco más (o si se quedó en la corrección y también anotó algo, por si le pifié en algún nombre...). Gracias!!

1)a). Si, funciona. Polimorfismo sin herencia.
b).
#EMPLEADO >> sueldo
^ categoria importePorHora * self horasTrabajadas
#CONTRATADO >> sueldo
^ horasPorDia * cantDias
#DEPLANTA >> sueldo
^ 200 * horasExtras

c) (Ver adjunto punto1c)

2)a) Vender tiene efecto y se usa para consultar
#CLIENTE
>> vender: producto
deuda := deuda + (producto importe + (1 - self descuento))
>> deuda
^ deuda
>> mayorDeudorLuegoDeVenderle: producto
^ (clientes asSortedCollection: [:a :b | a deuda > b deuda]) first
b) En funcional no se puede porque no hay efecto.

3)1)a) Si no están los paréntesis, no se puede componer.
1)b) minimoQueCumple::Ord a --> (b --> a) --> (b --> Bool) --> [b] --> b
2)a)
- minimoQueCumple (\(_,_,n2) -> n2) (\(_,n1,_) -> esNotaAprobada n1) listaDePrueba
- minimoQueCumple (\(_,n1,n2) -> promedio n1 n2) (\(_,n1,n2) -> esNotaAprobada n1 && esNotaAprobada n2) listaDePrueba

2)b) Es menos declarativa y menos abstracta.
3) Estas habría que mirarlas, porque las discutimos medio rápido, no quiero confundirlos. Así que cualquier comentario es bienvenido =)
Un comentario es que en el final pidieron que se tome el resultado de (N1+N2)/2 como un entero.
1. ?- mejorPromedio(andres,5).
True (porque en el findall busco el promedio de andres).
?- mejorPromedio(andres,Promedio).
Error (porque Promedio no va a estar ligado al momento de hacer P2 > Promedio).
?- mejorPromedio(Alumno,5).
Alumno = andres (como en la base sólo hay un Alumno que tiene Promedio 5, muestra ese resultado).
?- mejorPromedio(Alumno,Promedio).
Alumno = julia
Promedio = 6
3)2). Se puede hacer con un forall, todavía no lo armé, pero cuando lo tenga lo subo.


Archivo(s) adjuntos Imagen(es)
   

.pdf  finalParadigmas100813.pdf (Tamaño: 1,29 MB / Descargas: 397)
Otros adjuntos en este tema Imagen(es)
   

.jpg  pdep-diagrama_de_clases 001.jpg ( 191,42 KB / 1052) por reLlene
.jpg  solucion_punto1_final_pdep 001.jpg ( 155,53 KB / 1062) por reLlene
10-08-2013 21:59
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] takuma1985 recibio 9 Gracias por este post
franciscodiez (10-08-2013), matiutn (13-08-2013), aleixen (02-09-2013), NaiaraAcosta (15-12-2013), Mariana Pazo (24-02-2014), reLlene (25-02-2014), lucascla (27-02-2014), Nickgunner (30-07-2014), OnlyAmazing (12-02-2016)
Julian20 Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 6
Agradecimientos dados: 2
Agradecimientos: 6 en 2 posts
Registro en: May 2011
Mensaje: #2
RE: Final Paradigmas 10/08/13
Buenas, alguien me puede explicar como serian los metodos del codigo 1)c)?

Muchas gracias!
23-09-2013 19:38
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Cloud Sin conexión
Empleado de Fotocopiadora
A punto de estallar.
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 41
Agradecimientos dados: 7
Agradecimientos: 6 en 5 posts
Registro en: May 2011
Mensaje: #3
RE: Final Paradigmas 10/08/13
Son lo mismo los métodos, no importan en realidad. El diagrama es la respuesta, hay una relacion de composición de "tipo de empleado" que Forma parte de Empleado.
Creo que "Tipo de Empleado" sería abstracto. Te queda algo asi como un strategy donde el contexto es el #EMPLEADO
(Este mensaje fue modificado por última vez en: 26-09-2013 13:47 por Cloud.)
26-09-2013 13:28
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
mariano0 Sin conexión
Empleado de Fotocopiadora
Sin Estado :(
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 40
Agradecimientos dados: 7
Agradecimientos: 33 en 9 posts
Registro en: Dec 2012
Mensaje: #4
RE: Final Paradigmas 10/08/13
Se que es un thread viejo, pero astoy estudiando para darla mañana. Para mi el 2.b se haria asi



segundo (_,a,_) = a
tercero (_,_,a) = a

nuevaFuncion (x:xs) |(esNotaAprobada.segundo) x = min (tercero x) (nuevaFuncion xs)
|otherwise = nuevaFuncion xs




No se si hace falta ponerle un



nuevaFuncion [] = 10



suponiendo que la nota maxima es 10
(Este mensaje fue modificado por última vez en: 06-12-2013 16:31 por mariano0.)
06-12-2013 16:28
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
facundoaita Sin conexión
Militante
Sin estado :(
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 71
Agradecimientos dados: 75
Agradecimientos: 55 en 19 posts
Registro en: Sep 2011
Facebook Google+ LinkedIn Twitter YouTube
Mensaje: #5
RE: Final Paradigmas 10/08/13
En el 2)b) yo diria que se puede saber quien es el mayor deudor luego de una venta, pero no podria acumular las deudas de los clientes por no existir efecto de lado. esta OK?
12-12-2013 15:24
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
fede333lago Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 37
Agradecimientos dados: 8
Agradecimientos: 31 en 11 posts
Registro en: Dec 2013
Mensaje: #6
RE: Final Paradigmas 10/08/13
Puede ser que este mal la definicion de minimoQueCumple en el punto 3? la funcion le hace filter al xs de la lista, pero no filtra el primer x, deberia ser = (foldl (menorsegun f) x . filter criterio) (x:xs)...
20-12-2013 17:19
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Cloud Sin conexión
Empleado de Fotocopiadora
A punto de estallar.
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 41
Agradecimientos dados: 7
Agradecimientos: 6 en 5 posts
Registro en: May 2011
Mensaje: #7
RE: Final Paradigmas 10/08/13
(20-12-2013 17:19)fede333lago escribió:  Puede ser que este mal la definicion de minimoQueCumple en el punto 3? la funcion le hace filter al xs de la lista, pero no filtra el primer x, deberia ser = (foldl (menorsegun f) x . filter criterio) (x:xs)...

A mi tmb me hace ruido... Pero creo que es que no entiendo como está escrito.
Está usando el minimoQuecumple para resolverlo, pero no cacho como...
20-12-2013 18:40
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
fede333lago Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 37
Agradecimientos dados: 8
Agradecimientos: 31 en 11 posts
Registro en: Dec 2013
Mensaje: #8
RE: Final Paradigmas 10/08/13
Funciona asi por lo que veo: vos tenes la lista (x:xs), primero filtra xs por la funcion criterio (booleana), ahi devuelve una lista filtrada, eso lo compone con el foldl (el foldl siempre necesita una funcion, una semilla, y una lista, y le aplica esa funcion a la semilla y a cada elemento de la lista en cada paso, acumuladno el resultado en la semilla). El foldl entonces tiene de funcion a menor segun un criterio, y a esa funcion le pasa a x (la semilla) y a la lista filtrada, el tema es que ahi esta lo que yo digo, x no esta filtrado, solo lo demas. Espero que te haya servido la explicacion jajaja saludos!

Y la definicion con tipos tampoco me cierra, faltan tipos ahi...
(Este mensaje fue modificado por última vez en: 20-12-2013 20:37 por fede333lago.)
20-12-2013 20:14
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
reLlene Sin conexión
Profesor del Modulo A
...
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 287
Agradecimientos dados: 301
Agradecimientos: 54 en 31 posts
Registro en: Aug 2012
Mensaje: #9
RE: Final Paradigmas 10/08/13
(12-12-2013 15:24)facundoaita escribió:  En el 2)b) yo diria que se puede saber quien es el mayor deudor luego de una venta, pero no podria acumular las deudas de los clientes por no existir efecto de lado. esta OK?

No, de hecho el efecto de lado sólo existe en el Paradigma de objetos y en ese caso, fijate que acumula las deudas porque las tiene en cuenta antes de re-asignarla al objeto(variable) deuda.

Ahora, respecto del punto 1 me pregunto si yo propongo la siguiente solución, sigue siendo válida? Porque la que según puso takuma1985 no funcionaria (o al menos no me cuadran los metodos sueldo de las clases Contratado y DePlanta) huh


Archivo(s) adjuntos Imagen(es)
       
26-02-2014 23:10
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Ichiluk Sin conexión
Campeon del cubo Rubik
Metametaprogramando.
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 134
Agradecimientos dados: 5
Agradecimientos: 21 en 18 posts
Registro en: Apr 2008
Mensaje: #10
RE: Final Paradigmas 10/08/13
(26-02-2014 23:10)reLlene escribió:  
(12-12-2013 15:24)facundoaita escribió:  En el 2)b) yo diria que se puede saber quien es el mayor deudor luego de una venta, pero no podria acumular las deudas de los clientes por no existir efecto de lado. esta OK?

No, de hecho el efecto de lado sólo existe en el Paradigma de objetos y en ese caso, fijate que acumula las deudas porque las tiene en cuenta antes de re-asignarla al objeto(variable) deuda.

Ahora, respecto del punto 1 me pregunto si yo propongo la siguiente solución, sigue siendo válida? Porque la que según puso takuma1985 no funcionaria (o al menos no me cuadran los metodos sueldo de las clases Contratado y DePlanta) huh

Ojo con la solución que estás proponiendo... estás queriendo asignar un objeto a otro objeto y no a una variable.


self tipoDeEmpleado := DePlanta new


la asignación va sólo a las variables:

tipoDeEmpleado := DePlanta new

o bien seteás el valor por accessor:


self tipoDeEmpleado: DePlanta new


Este es un error típico en los parciales, me acuerdo que a mí me lo corrigieron 1923891283 veces =D

Por el resto, está bien.
(Este mensaje fue modificado por última vez en: 26-02-2014 23:49 por Ichiluk.)
26-02-2014 23:49
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Ichiluk recibio 2 Gracias por este post
reLlene (27-02-2014), Nickgunner (30-07-2014)
reLlene Sin conexión
Profesor del Modulo A
...
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 287
Agradecimientos dados: 301
Agradecimientos: 54 en 31 posts
Registro en: Aug 2012
Mensaje: #11
RE: Final Paradigmas 10/08/13
bárbaro!! i get it thumbup3 gracias Ichiluk
27-02-2014 14:08
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
verito Sin conexión
Empleado del buffet
Bien :)
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 24
Agradecimientos dados: 6
Agradecimientos: 3 en 1 posts
Registro en: Mar 2012
Mensaje: #12
RE: Final Paradigmas 10/08/13
Buenas, perdon que me sume a este final pero tengo una duda existencial y el final que busco no esta, en un final se tomo este ejercicio:

En un programa Prolog se escribió el siguiente predicado:
esMenor(X,Y):-X<Y.
a. ¿Qué hace?
b. Este predicado permite que dado un número como segundo argumento, se obtengan
todos los números naturales menores que él. (V o F Justificar)
c. Si la afirmación anterior es verdadera, mostrar un ejemplo de consulta con 10 posibles
respuestas. En caso contrario, modificar el predicado para que la afirmarción del punto
anterior sea correcta.

Entiendo que seria falso dado que no tengo forma de ligar la variable X a ningun valor.

Ahora, como modifico esa expresion en logico para demostrar que sea correcta?

Gracias!!!
27-02-2014 18:25
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
fede333lago Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 37
Agradecimientos dados: 8
Agradecimientos: 31 en 11 posts
Registro en: Dec 2013
Mensaje: #13
RE: Final Paradigmas 10/08/13
verito: tambien rindo mañana, fijate si te sirve esto.
Basicamente el problema es que X llega sin unificar con nada, tenes que generar posibles valores enteros para X. Buscando como joraca hacer esto (por no vi ninguna funcion isIntenger(X) o algo por el estilo llegue a esta pagina: http://stackoverflow.com/questions/19979...f-integer.
Ahi te dicen que podes usar la funcion between. Agregandola para generar valores de X hasta 10 quedo esto, funciona:
esMenor(X,Y):- between(1,10,X), X<Y.

Suerte
28-02-2014 03:20
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] fede333lago recibio 1 Gracias por este post
verito (28-02-2014)
Cloud Sin conexión
Empleado de Fotocopiadora
A punto de estallar.
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 41
Agradecimientos dados: 7
Agradecimientos: 6 en 5 posts
Registro en: May 2011
Mensaje: #14
RE: Final Paradigmas 10/08/13
(28-02-2014 03:20)fede333lago escribió:  verito: tambien rindo mañana, fijate si te sirve esto.
Basicamente el problema es que X llega sin unificar con nada, tenes que generar posibles valores enteros para X. Buscando como joraca hacer esto (por no vi ninguna funcion isIntenger(X) o algo por el estilo llegue a esta pagina: http://stackoverflow.com/questions/19979...f-integer.
Ahi te dicen que podes usar la funcion between. Agregandola para generar valores de X hasta 10 quedo esto, funciona:
esMenor(X,Y):- between(1,10,X), X<Y.

Suerte

Me parece que con un predicado recursivo no demasiado complicado pordrías relacionar un numero N con una lista de los numeros enteros de 0 hasta N. no les parece? yo te diria que el between no lo tires en el final.
28-02-2014 20:06
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Cloud Sin conexión
Empleado de Fotocopiadora
A punto de estallar.
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 41
Agradecimientos dados: 7
Agradecimientos: 6 en 5 posts
Registro en: May 2011
Mensaje: #15
RE: Final Paradigmas 10/08/13
Yo tiré esto para probar y "andó".



enterosHasta(1,[1]).
enterosHasta(N,[N|T]):-
N > 1,
X is N-1,
enterosHasta(X, T).

esMenor(X,Y):-
enterosHasta(Y,L),
member(X, L).




Obviamente no puede ser NUNCA totalmente inversible.

En stackoverflow en lugar de hacer una lista lo manejan con todos numeros menores como diferentes resultados.
Link a la fuente.


range(Low, Low, High).
range(Out,Low,High) :- NewLow is Low+1, NewLow =< High, range(Out, NewLow, High).


Pero el compilador chilla con unos warnings de "Singleton Value: High"... no es como lo haría yo igual.
(Este mensaje fue modificado por última vez en: 28-02-2014 21:27 por Cloud.)
28-02-2014 21:15
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Cloud recibio 1 Gracias por este post
verito (28-02-2014)
Buscar en el tema
Enviar respuesta 




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



    This forum uses Lukasz Tkacz MyBB addons.