Enunciados que guiaron la clase
esDiaMasAntiguo(fechaA,fechaB)
denota verdadero cuando la fecha A es más antigua que la fecha B, pero sin mirar el año, sólo mirando el mes y el día. Ejemplo: Si tengorevolucionDeMayo := Fecha(dia <- 25, mes <- 5, anio <- 1810)
otraFecha := Fecha(dia <- 31, mes <- 1, anio <- 2016)
Cuando yo preguntoesDiaMasAntiguo(otraFecha,revolucionDeMayo)
denotaTrue
.cuantosAniosPasaron(fecha1, fecha2)
. Contemplar la posibilidad de que todavía no haya llegado la fecha. Precondición:fecha2
está después quefecha1
. ¡Es el punto 9 del martes pasado! Pero ahora es obligatorio contemplar no haber llegado a la fecha. Por ejemplo, entre el 25/05/2013 y el 01/05/2016 pasaron 2 años (el 25/05 van a haber pasado 3).ultimoDiaInvierno(anio)
que tome un año y devuelva el último día de invierno de ese año. ¡Es el punto 11 del martes pasado!.yaPasoMiCumple()
denotaTrue
si ya pasó mi cumpleaños de este año, y hace uso de la funcióndiaDeHoy()
. Pista: hacer una función que diga cuál es mi cumpleaños y también usarla.- Siguiendo con estudiantes: Hacer la función
yo()
, que retorne un estudiante, que lo represente a uds. nuevoIngresante(dni,fechaNac,sexo)
recibe los datos de un estudiante y denota un estudiante completo, con 0 materias aprobadas.ingresanteGemelo(unEstudiante)
recibe un estudiante y denota otro estudiante, su gemelo. El estudiante que devuelve tiene el DNI siguiente, la misma fecha de nacimiento, 0 materias aprobadas, y el mismo sexo.aprobarMateria(unEstudiante)
recibe un estudiante y lo modifica, agregándole una materia aprobada. O sea, devuelve un estudiante nuevo que es igual al original, salvo que tiene una materia aprobada más.cambioDeSexo(unEstudiante)
recibe un estudiante y lo hace más feliz: el estudiante descubrió que en realidad es del sexo opuesto y quiere cambiárselo, así que la función devuelve el estudiante con el sexo cambiado.corregirAnioNacimiento(unEstudiante, nuevoAnio)
que denota el mismo estudiante pero con el anio en el que nació corregido con elnuevoAnio
.yaPasoElCumpleDe(unEstudiante)
denota verdadero si ya pasó el cumple de este año del estudiante en cuestión.
Soluciones propuestas puntos 1 al 5
- Punto 1:
function esDiaMasAntiguo(fechaA,fechaB){
return(mes(fechaA) < mes(fechaB) || (mismoMes(fechaA,fechaB) && dia(fechaA) <= dia(fechaB)))
}
- Punto 2:
function cuantosAniosPasaron(fecha1, fecha2){
cuantosAnios := anio(fecha2) - anio(fecha1)
if(esDiaMasAntiguo(fecha2,fecha1)){
cuantosAnios := cuantosAnios - 1
}
return (cuantosAnios)
}
- Punto 3:
function ultimoDiaInvierno(elAnio){
return (Fecha(dia <- 20, mes <- 09, anio <- elAnio))
}
Acá es interesante detenerse y notar que estoy armando y devolviendo una fecha, como si fuera un número.
Teniendo en cuenta que ésto:
cuenta := 5 + 3
return (cuenta)
es lo mismo que esto:
return (5+3)
entonces decir:
laFechaADevolver := Fecha(dia <- 20, mes <- 09, anio <- elAnio)
return (laFechaADevolver)
es lo mismo que:
return (Fecha(dia <- 20, mes <- 09, anio <- elAnio))
- Punto 4:
function yaPasoMiCumple(){
return (esDiaMasAntiguo(miCumple(),diaDeHoy()))
}
function diaDeHoy(){
return (Fecha (dia <- 26, mes <- 5, anio <- 2016))
}
function miCumple(){
return (Fecha (dia <- 13, mes <- 11, anio <- 1986))
}
- Punto 5
(lo hace cada uno, pero puede tener esta forma:)
function yo(){
return (Estudiante(fechaNacimiento <- miCumple(), dni <- 33333333, nroMateriasAprobadas <- 43, esMujer <- False))
}
- Punto 6:
Acá es importante entender que recibo por parámetro partecitas de un estudiante, y debo devolver un estudiante entero.
function nuevoIngresante(dni, fechaNac, sexo){
return Estudiante(dni <- dni, fechaNacimiento <- fechaNac, esMujer <- sexo, nroMateriasAprobadas <- 0)
}
- Punto 7:
- Punto 10:
Acá es importante notar que no se puede escribir dia(unEstudiante)
¡Porque el estudiante no tiene dias! Su fechaNacimiento tiene dia.
- Punto 11:
Acá es importante mirar esta parte:
function nuevoIngresante(dni, fechaNac, sexo){
return Estudiante(dni <- dni, ….
¿Cuál es la diferencia entre esos dos dni? Fácil: recordemos que la sintaxis es:
nombreDelCampo <- valor
Entonces, el que está a la izquierda es el nombre del campo donde estoy queriendo poner el valor, y el que está a la derecha es el nuevo valor que me viene por parámetro.
Bonus
Una nueva versión de esDiaMasAntiguo
, usando la siguiente estrategia: Para saber si el dia es más antiguo que el otro, puedo cambiar los años de las fechas para que sean iguales, y luego usar la función esMasAntigua
, que recibe dos fechas y me dice cuál es la más antigua. Ella es la encargada de revisar el día y el mes. ¡Ya lo habíamos hecho la clase pasada!
/* Versión 2, reeee fumeta BONUS considerando temas que vienen después: */
function esDiaMasAntiguo(fechaA,fechaB){
return esMasAntigua(Fecha( dia <- dia(fechaA), mes <- mes(fechaA) , anio <- anio(fechaB)) , fechaB),
}
Cambiando el dominio: Compus
type Computadora is record {
field memoria // es una Memoria
field tamanioDisco // es un número
field procesador // es un Procesador
field esNotebook // es un booleano
}
type Procesador is record {
field velocidadNucleo // es un número
field cantNucleos // es un número
field marca // es un color (Rojo: AMD, Azul: Intel, Verde: ARM)
}
type Memoria is record {
field velocidad // es un número
field tamanio // es un número
}
- Hacer las funciones
colorARM()
,colorIntel()
,colorAMD()
que denoten los colores correspondientes. - Hacer la función
notebookGrosa()
que denote una computadora que es una notebook con una RAM de 8Gb y 1200 MHz de velocidad, un disco de 500 Gb y un procesador AMD de 4 núcleos con 2300 MHz de velocidad. - Hacer la función
pcTranca()
que denote una computadora de escritorio con una RAM de 4Gb y 800 MHz de velocidad, un disco de 500 Gb y un procesador Intel de 2 núcleos con 1600 MHz de velocidad. - Hacer la función
estaBienArmada(unaCompu)
que reciba una computadora y diga si está bien armada. Esto sucede cuando la velocidad del procesador es la misma que la velocidad de la memoria. Ojo, las notebooks están siempre bien armadas, sin importar las velocidades. - Hacer la función
velocidadReal(unaCompu)
que reciba una compu y diga la velocidad real, que es el mínimo entre las velocidades de la RAM y el procesador. - Hacer la función
duplicarTamanio(unaMemoria)
que reciba una memoria y cambie el tamanio de la memoria al doble. (debe denotarse la memoria entera). - Hacer la función
cambiarProcesador(unaCompu,unProcesador)
que reciba una compu y un procesador y cambie el procesador por el indicado. (debe denotarse la compu). - Hacer la función
cambiarMemoria(unaCompu,unaMemoria)
que reciba una compu y una Memoria y cambie la memoria entera por la indicada. (debe denotarse la compu). - Hacer la función
overclockear(unaCompu)
que reciba una compu y aumente la velocidad de su procesador en 300 MHz. (debe denotarse la compu). - Hacer la función
quemarMemoria(unaCompu)
que reciba una compu y disminuya a la mitad el tamanio de la memoria (debe denotarse la compu)
Tarea
¡Volvió la tarea en forma de fichas! Deben hacer hasta el punto 7 inclusive de lo de las compus, se entrega todo por mail. Si quieren pueden entregar más.
¡Si se traban manden un mail! ¡Ó se ayudan! ¡O Whatsapp a Alf! ¡Ni lo duden!