Modificación de registros

Bitácora de la clase del jueves 26/05/2016

Posted by Alf on May 26, 2016

Enunciados que guiaron la clase

  1. 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 tengo revolucionDeMayo := Fecha(dia <- 25, mes <- 5, anio <- 1810) otraFecha := Fecha(dia <- 31, mes <- 1, anio <- 2016) Cuando yo pregunto esDiaMasAntiguo(otraFecha,revolucionDeMayo) denota True.
  2. cuantosAniosPasaron(fecha1, fecha2). Contemplar la posibilidad de que todavía no haya llegado la fecha. Precondición: fecha2 está después que fecha1. ¡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).
  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!.
  4. yaPasoMiCumple() denota True si ya pasó mi cumpleaños de este año, y hace uso de la función diaDeHoy(). Pista: hacer una función que diga cuál es mi cumpleaños y también usarla.
  5. Siguiendo con estudiantes: Hacer la función yo(), que retorne un estudiante, que lo represente a uds.
  6. nuevoIngresante(dni,fechaNac,sexo) recibe los datos de un estudiante y denota un estudiante completo, con 0 materias aprobadas.
  7. 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.
  8. 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.
  9. 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.
  10. corregirAnioNacimiento(unEstudiante, nuevoAnio) que denota el mismo estudiante pero con el anio en el que nació corregido con el nuevoAnio.
  11. 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.

nuevoIng2.jpg

function nuevoIngresante(dni, fechaNac, sexo){
  return Estudiante(dni <- dni, fechaNacimiento <- fechaNac, esMujer <- sexo, nroMateriasAprobadas <- 0)
}

nuevoIng.jpg

  • Punto 7:

ingGemelo.jpg

  • Punto 10:

corregir.jpg

Acá es importante notar que no se puede escribir dia(unEstudiante) ¡Porque el estudiante no tiene dias! Su fechaNacimiento tiene dia.

diaAlf.jpg

  • Punto 11:

pasoCumple.jpg

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
}
  1. Hacer las funciones colorARM(), colorIntel(), colorAMD() que denoten los colores correspondientes.
  2. 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. grosa.jpg
  3. 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. tranca.jpg
  4. 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.
  5. 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.
  6. Hacer la función duplicarTamanio(unaMemoria) que reciba una memoria y cambie el tamanio de la memoria al doble. (debe denotarse la memoria entera).
  7. 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).
  8. 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).
  9. Hacer la función overclockear(unaCompu) que reciba una compu y aumente la velocidad de su procesador en 300 MHz. (debe denotarse la compu).
  10. 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!