Temas de clase
- Seguimos trabajando sobre registros con listas y listas con registros.
- Hicimos varios tipos de búsquedas.
Cambio de dominio:
type Producto is record {
field id // número
field precio // número
field ingredientes // lista de ingredientes
}
type Ingrediente is record {
field tipo // color. Rojo es grasa, Azul es azúcar, Verde es harina.
field gramos // número
field caloriasPorGramo // número
}
program {
producto1 := Producto(id<-1, precio<-15, ingredientes<-[
Ingrediente(tipo<-Azul,gramos<-100,caloriasPorGramo<-2)
])
producto2 := Producto(id<-2, precio<-25, ingredientes<-[
Ingrediente(tipo<-Verde,gramos<-50,caloriasPorGramo<-2),
Ingrediente(tipo<-Rojo,gramos<-50,caloriasPorGramo<-5)
])
producto3 := Producto(id<-3, precio<-10, ingredientes<-[
Ingrediente(tipo<-Verde,gramos<-36,caloriasPorGramo<-1),
Ingrediente(tipo<-Azul,gramos<-24,caloriasPorGramo<-5),
Ingrediente(tipo<-Verde,gramos<-36,caloriasPorGramo<-3)
])
producto4 := Producto(id<-4, precio<-55, ingredientes<-[
Ingrediente(tipo<-Rojo,gramos<-34,caloriasPorGramo<-3),
Ingrediente(tipo<-Rojo,gramos<-34,caloriasPorGramo<-6)
])
losProdus := [producto1, producto2, producto3, producto4]
}
- Hacer la función
costoTotal(productos)
, que recibe una lista de productos y denota la suma de todos los precios. - Hacer la función
encontrarProducto(productos, id)
que recibe una lista de productos y un id de producto y denota el producto (registro entero) que tiene ese id. Precondición: Hay un y sólo un producto con ese id en la lista - Hacer la función
ingredienteCalorico(ingredientes)
que recibe una lista de ingredientes y denota el primer ingrediente (registro entero) que tiene más de 100 calorías totales. - Hacer la función
productoDeMasDe(productos,valor)
que recibe la lista de productos y un valor y denota el primer producto cuyo precio es mayor alvalor
. - Hacer la función
cantIngredientesDelProducto(productos, id)
que recibe una lista de productos y un id de producto y denota la cantidad de ingredientes que tiene. - Hacer la función
ingredienteConGrasa(producto)
que recibe un producto y denota el primer ingrediente que tiene grasa. Precondición: El producto tiene varios ingredientes, uno de los cuales tiene grasa
Hicimos todas las funciones menos la 4 y la 6.
Algunas soluciones:
Punto 1:
Aprovechamos para hacer una comparación entre resolverlo con foreach y resolverlo con while. Algo importante que cambia entre ambas soluciones es lo que está remarcado en verde: El elemento actual. El elemento actual al recorrer con while, es la cabeza de la lista recorrido. En cambio, con el foreach ese elemento es la variable que usemos en el foreach.
Importante: Dijimos que se les va a evaluar que usen foreach y while cuando corresponda.
El truco es:
- Si necesito recorrer por completo la lista, entonces va foreach.
- Si no hace falta recorrer toda la lista, y debo cortar el recorrido, entonces va while.
Recorrido completo | Recorrido con corte |
---|---|
Con foreach | Con while |
Recolección, filtro, recolección con filtro, Totalización (contar, acumular) | Búsquedas, Alguno cumple, todos cumplen |
En la sección de Material están los esquemas de recorrido explicados. ¡A leer!
Punto 2:
Es el primer ejemplo de búsqueda en listas que vemos:
Punto 4:
Vimos que podemos hacerlo de forma muy parecida al punto 2:
¡Pero no hay que repetir código!
Así que se puede reusar el punto 2:
Tarea - Más sobre Universidad
- Hacer la función del punto 6 de arriba.
- Hacer la función
estudianteConDni(estudiantes,dni)
, que dada una lista de estudiantes y un dni, obtiene el registro entero que representa al estudiante que tiene ese dni. Precondición: en la lista está el estudiante con ese dni. - Hacer la función
cantAplazosDe(estudiantes,dni)
, que, dada una lista de estudiantes y un dni, obtiene la cantidad de aplazos del estudiante indicado. Precondición: en la lista está el estudiante con ese dni. - Hacer la función
dniDelGroso(estudiantes)
, que dada una lista de estudiantes, denota el dni del primer estudiante groso. Un estudiante es groso cuando no tiene aplazos y tiene más de 9 de promedio. Precondición: en la lista hay al menos un estudiante groso