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
Enunciado Final 16/12/2017
Autor Mensaje
vim Sin conexión
Empleado del buffet
nil
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1
Agradecimientos dados: 3
Agradecimientos: 0 en 0 posts
Registro en: Dec 2017
Mensaje: #1
Enunciado Final 16/12/2017 Finales Paradigmas de Programación
Dejo el final del Sábado pasado.
Saludos!

.zip  pdep.zip (Tamaño: 14,57 MB / Descargas: 99)
17-12-2017 13:01
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Phiiliip077 Sin conexión
Secretario de la SAE
1 a la vez
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 549
Agradecimientos dados: 54
Agradecimientos: 373 en 221 posts
Registro en: Oct 2016
Facebook Twitter
Mensaje: #2
RE: Enunciado Final 16/12/2017
Buenas, dejo una resolución al final por si alguno lo hizo y quiere comparar:

Funcional:

1)a)

((pdep ["polimorfismo","inversibilidad"]).(compliqueti101 5)) jonSnow



1)b) Debido a que Haskell no tiene efecto, LUEGO de la consulta: dedicación jonSnow devuelve 800

2) Verdadero. Se puede utilizar aplicación parcial y hacer lo siguiente:


type Materia = Alumno -> Alumno


Entonces una Cursada seria una lista de materias del estilo:


cursada = [(pdep ["inversibilidad","polimorfismo"]),compliqueti101 8, compliqueti101 25]


Se les aplica parcialmente el valor requerido para que todas sean del tipo Materia y puedan ser utilizadas en una lista.

3)a) Para que termine de evaluarse, debe encontrar al menos un elemento que sea "nothing" en la lista entonces se puede hacer que la lista sea:


"nothing" ++ listaInfinita


Al hallar como primer valor "nothing" (porque utiliza evaluación diferida) corta la búsqueda y ya retorna el valor.

3) b)

De forma análoga, si coloco el valor al final de la lista:


listaInfinite ++ "nothing"


esta nunca terminará de ejecutar ya que siempre va a continuar buscando el valor.


Lógico:

1)
Individual: deudaTotal(george,150) -> False
Existencial: deudaTotal(george,Deuda) -> 32.

2) Falso, si bien la solución resuelve todos los precios EXISTENTES HASTA EL MOMENTO, no está tomando a los libros de forma polimorfica, ya que esta creando una lista por cada tipo de libro.

3)


deudaTotalParte2(Usuario,Deuda):-
esComprador(Usuario),
findall(Precio,(compro(Usuario,Titulo),(precioLibro(Titulo,Precio))),DeudasTotales),
sum_list(DeudasTotales,Deuda).


precioLibro(Titulo,Precio):-
libro(Titulo,digital(_,KB)),
Precio is (KB/1024) *10.


precioLibro(Titulo,Precio):-
libro(Titulo,papel(Paginas,_)),
Precio is Paginas *0.05.


esComprador(Usuario):-
compro(Usuario,_).




Objetos:

1) a) delegación: cuando calcula las notas de cada materia, se debería delegar ese calculo en una función materiaAprobada() que implemente según el criterio decidido si está aprobada o no.

Polimorfismo: Hay un mal uso del polimorfismo, ya que se está consultando por la clase de la materia para devolver un resultado, en vez de pedirle a cada materia que realice una acción particular.

1)b) Mal manejo de errores, ya que se requiere devolver un booleano para el método "seRecibio()" del alumno. Que no haya aprobado es uno de los valores contemplados dentro de la solución, no debe cortar el flujo de ejecución.

1)c) Poco declarativa ya que hay mucho detalle algorítmico presente en la solución, por ejemplo, en el uso de acumuladores.

2)


Class Alumno{
const cursadas = []

method seRecibio() = cursadas.all({ cursada => cursada.fueAprobada()}=
}


Class Cursada{

var materia;
var dedicacion;
const notas = []

method fueAprobada(){
return materia.estaAprobado(dedicacion,notas);
}
}


Abstract Class Materia{

method estaAprobado(dedicacion,notas);

method aproboParciales(notas){
return notas.all({ nota -> nota >= 6});
}
}


Class IntroduccionALaComplejidad implements Materia{

method estaAprobado(dedicacion,notas){
return aproboParciales(notas) && dedicacion >= 100;
}
}


Class Compliqueti101 implements Materia{

method estaAprobado(dedicacion,notas){
return aproboParciales(notas) && notas.any({ nota -> nota == 10 });
}
}

Class ZarazaTotal implements Materia{

method estaAprobado(dedicacion,notas){
return notas.any({ nota -> nota >= 6});
}
}



3)

* El alumno permanece idéntico en la solución..
* La cursada trata a la materia de forma indistinta, ya que todas implementan el método estaAprobado(dedicación,notas) por lo que, a futuro, se pueden agregar mas materias sin necesidad de cambiar el código.
* Cada materia implementa su criterio de aprobación de forma indistinta con los parámetros que obtiene (nivel de dedicación y notas de la cursada)
* Se suprimió el uso indebido de excepciones ,ya que desaprobar una materia es un valor esperado.
* Se mejoró la declaratividad, ya que el detalle algorítmico es propio de cada materia y se enfoca mas en el QUE hay que hacer y no en el COMO (preguntar que materia es para obtener un resultado).



Saludos!
20-12-2019 22:51
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)