Ejercicio 4Ejercicio 4
Se tiene el nombre y edad de 40 alumnos Se tiene el nombre y edad de 40 alumnos de una sección. Calcularde una sección. Calcular
a.- Cantidad de alumnos menores de edad a.- Cantidad de alumnos menores de edad
b.- Promedio de edad de la sección.b.- Promedio de edad de la sección.
Análisis del problema Análisis del problema
ListaLista ClasificaciónClasificaciónEdad------------------------------------------Edad------------------------------------------ Atributo/Alumno Atributo/Alumno
Nombre--------------------------------------Nombre-------------------------------------- Atributo/Alumno Atributo/Alumno
Alumno--------------------------------------Alumno-------------------------------------- Clase Clase
Sección-------------------------------------------Sección------------------------------------------- Clase Clase
Calcule cantidad de alumnos menores--Calcule cantidad de alumnos menores-- Método/Sección Método/Sección
Calcular el Promedio de edad -------------Calcular el Promedio de edad ------------- Método/Sección Método/Sección
Análisis del problema Análisis del problema
f.u. 1) Inicializar( ContMenores, AcumEdad) f.u. 1) Inicializar( ContMenores, AcumEdad)
f.m. 2)Leer(Nombre, Edad) f.m. 2)Leer(Nombre, Edad) f.m. 3)Contar_Menores:f.m. 3)Contar_Menores: si (Edad<18)si (Edad<18) ContMenoresContMenoresContMenores+1ContMenores+1f.m. 4)Acumular edad: f.m. 4)Acumular edad: AcumEdadAcumEdad←AcumEdad+Edad←AcumEdad+Edadf.u 5) Escribir (ContMenores) f.u 5) Escribir (ContMenores) f.u. 6) Calcular e imprimir Promedio de edad:f.u. 6) Calcular e imprimir Promedio de edad: PromedioEdadPromedioEdad←AcumEdad/40←AcumEdad/40
DiagramaDiagrama
11
22
33
44
55
66
345
Repetir para(entero Cont 0, Cont<40, Cont Cont+1)
Clase alumnoClase alumno
AlumnoAlumno
alfanumerico Nombrealfanumerico Nombreentero Edadentero EdadAsignarNombre(Nom)AsignarNombre(Nom)AsignarEdad(Ed)AsignarEdad(Ed)alfanumericoSacarNombre()alfanumericoSacarNombre()entero SacarEdad()entero SacarEdad()
Clase SecciónClase Sección
entero ContMenoresentero ContMenoresentero AcumEdadentero AcumEdadInicializar()Inicializar()entero SacarContMenores()entero SacarContMenores()enteroSacarAcumEdad()enteroSacarAcumEdad()ContarMenores(ContarMenores(Alumno↓ AlumAlumno↓ Alum))AcumularEdad(AcumularEdad(Alumno↓ AlumAlumno↓ Alum))real CalcularProm()real CalcularProm()
Nota: Los métodos ContarMenores y Nota: Los métodos ContarMenores y AcumularEdad utilizan el atributo Edad, AcumularEdad utilizan el atributo Edad, Edad no es un atributo de la clase Edad no es un atributo de la clase Sección por tanto el objeto Alum es un Sección por tanto el objeto Alum es un parámetro de estos métodos.parámetro de estos métodos.
// Definición de la estructura de la clase Alumno// Definición de la estructura de la clase Alumnoclase Alumnoclase Alumno inicioinicio privado:privado: alfanumérico Nombrealfanumérico Nombre entero Edad entero Edad público:público: //Métodos para asignar o meter datos//Métodos para asignar o meter datos AsignarNombre (alfanumerico ↓Nom )AsignarNombre (alfanumerico ↓Nom ) AsignarEdad(entero ↓ Ed)AsignarEdad(entero ↓ Ed) //Métodos para sacar datos//Métodos para sacar datos alfanumerico SacarNombre()alfanumerico SacarNombre() entero SacarEdad()entero SacarEdad() fin // Alumnofin // Alumno
//Desarrollo de los métodos de la clase Alumno//Desarrollo de los métodos de la clase AlumnoAlumno AsignarNombre(alfanumerico ↓ Nom) Alumno AsignarNombre(alfanumerico ↓ Nom)
inicioinicio Nombre ← NomNombre ← NomfinfinAlumno AsignarEdad(entero ↓ Ed) Alumno AsignarEdad(entero ↓ Ed) inicioinicio Edad ← EdEdad ← Edfinfinalfanumerico Alumno SacarNombre() alfanumerico Alumno SacarNombre() inicioinicio retornar Nombre retornar Nombre finfinentero Alumno SacarEdad() entero Alumno SacarEdad() inicioinicio retornar Edadretornar Edadfinfin
// Definición de la estructura de la clase Sección// Definición de la estructura de la clase Secciónclase Secciónclase Sección inicioinicio privado:privado: entero ContMenores, AcumEdad entero ContMenores, AcumEdad público:público: //Métodos para inicializar datos//Métodos para inicializar datos Inicializar()Inicializar() //Métodos para sacar datos//Métodos para sacar datos entero SacarContMenores()entero SacarContMenores() entero SacarAcumEdad()entero SacarAcumEdad() // Otros métodos propios del objeto// Otros métodos propios del objeto ContarMenores(ContarMenores(Alumno↓ AlumAlumno↓ Alum)) AcumularEdad(AcumularEdad(Alumno↓ AlumAlumno↓ Alum)) real CalcularProm()real CalcularProm() fin // Secciónfin // Sección
//Desarrollo de los métodos de la clase Sección //Desarrollo de los métodos de la clase Sección
Sección InicContMenores ()Sección InicContMenores () inicioinicio ContMenores ← 0ContMenores ← 0 AcumEdad← 0AcumEdad← 0 finfinentero Sección SacarContMenores()entero Sección SacarContMenores() inicioinicio retornar ContMenoresretornar ContMenores finfinentero Seccion SacarAcumEdad()entero Seccion SacarAcumEdad() inicioinicio retornar AcumEdadretornar AcumEdad finfin
Sección ContarMenores(Sección ContarMenores(Alumno ↓ AlumAlumno ↓ Alum)) inicioinicio si (si (Alum.SacarEdad()<Alum.SacarEdad()<18)18) entonces entonces ContMenores ← ContMenores + 1ContMenores ← ContMenores + 1 finfinSeccion AcumularEdad(Seccion AcumularEdad(Alumno ↓ AlumAlumno ↓ Alum)) inicioinicio AcumEdad ← AcumEdad + AcumEdad ← AcumEdad + Alum.SacarEdad()Alum.SacarEdad() finfinreal Seccion CalcularProm()real Seccion CalcularProm() inicioinicio retornar AcumEdad/40retornar AcumEdad/40 finfin
// Programa de aplicación// Programa de aplicación principal( )principal( ) inicioinicio Alumno AlumAlumno Alum Seccion SeccSeccion Secc entero Edentero Ed alfanumerico Nomalfanumerico Nom//Inicializar contadores y acumuladores //Inicializar contadores y acumuladores Secc.Inicializar()Secc.Inicializar()// ciclo repetitivo // ciclo repetitivo repita para (entero Cont←0 , Cont<40 , Cont←Cont+1)repita para (entero Cont←0 , Cont<40 , Cont←Cont+1) inicioinicio escribir “Indique el nombre del alumno”escribir “Indique el nombre del alumno” leer Nomleer Nom Alum.AsignarNombre(Nom)Alum.AsignarNombre(Nom) escribir “Indique la edad del alumno”escribir “Indique la edad del alumno” leer Edleer Ed Alum.AsignarEdad(Ed)Alum.AsignarEdad(Ed) Secc.ContMenores(Alum)Secc.ContMenores(Alum) Secc.AcumEdad(Alum)Secc.AcumEdad(Alum) finfin// Impresión de resultados // Impresión de resultados escribir “ Cantidad de alumnos menores de edad “ Secc.SacarContMenores() escribir “ Cantidad de alumnos menores de edad “ Secc.SacarContMenores() escribir “ El promedio de edad de la sección es “ Secc.CalcularProm()escribir “ El promedio de edad de la sección es “ Secc.CalcularProm() finfin
Ejercicio 5Ejercicio 5
Se tiene el nombre y edad de Se tiene el nombre y edad de un grupoun grupo de alumnos de una sección. Calcularde alumnos de una sección. Calcular
a.- Cantidad de alumnos menores de edad a.- Cantidad de alumnos menores de edad b.- Promedio de edad de la sección. b.- Promedio de edad de la sección.
Observe que este ejercicio procesa una cantidad desconocida de alumnos.Observe que este ejercicio procesa una cantidad desconocida de alumnos. Si se conoce que Si se conoce que la la
cantidad de datos a procesar es relativamente pequeñacantidad de datos a procesar es relativamente pequeña,, sse puede resolver usando la e puede resolver usando la
instrucción: instrucción: repetir mientras-Interacción con el usuariorepetir mientras-Interacción con el usuario. Así la solución es semejante al . Así la solución es semejante al ejercicio anterior, solo cambia el ciclo repetitivo a usar.ejercicio anterior, solo cambia el ciclo repetitivo a usar.
Ejercicio 5Ejercicio 5
Además para calcular el promedio seria Además para calcular el promedio seria AcumEdad entre un contador de alumnos. AcumEdad entre un contador de alumnos. Observe que ya no es 40. Se tendría que Observe que ya no es 40. Se tendría que declarar un nuevo atributo en la clase declarar un nuevo atributo en la clase SecciónSección entero ContAlumnosentero ContAlumnos, anexar , anexar otra inicializacion otra inicializacion CContAlumnoontAlumno y otro y otro método para método para ContarAlumnoContarAlumno..
Ejercicio 5Ejercicio 5
Por otra parte el método CalcularProm() Por otra parte el método CalcularProm() quedaría: quedaría:
real Sección CalcularProm()real Sección CalcularProm()
inicioinicio
retornar AcumEdad/retornar AcumEdad/ContAlumnoContAlumno finfin
// Programa de aplicación// Programa de aplicación principal( )principal( ) inicioinicio Alumno AlumAlumno Alum Seccion SeccSeccion Secc entero Edentero Ed alfanumerico Nomalfanumerico Nom//Inicializar contadores y acumuladores//Inicializar contadores y acumuladores Secc.Inicializar()Secc.Inicializar()// ciclo repetitivo// ciclo repetitivo alfanumérico Respuesta ← “Si” alfanumérico Respuesta ← “Si” repita mientras (Respuesta = “Si”) repita mientras (Respuesta = “Si”) inicioinicio escribir “Indique el nombre del alumno” escribir “Indique el nombre del alumno” leer Nomleer Nom Alum.AsignarNombre(Nom)Alum.AsignarNombre(Nom) escribir “Indique la edad del alumno”escribir “Indique la edad del alumno” leer Edleer Ed Alum.AsignarEdad(Ed)Alum.AsignarEdad(Ed) Secc.ContMenores(Alum)Secc.ContMenores(Alum) Secc.AcumEdad(Alum)Secc.AcumEdad(Alum) Secc.ContarAlumno()Secc.ContarAlumno() escribir “Indique si hay mas datos (Si o No)”escribir “Indique si hay mas datos (Si o No)” leer Respuestaleer Respuesta finfin// Impresión de resultados // Impresión de resultados escribir ”Cantidad de alumnos procesados “, Secc.SacarContAlumnos()escribir ”Cantidad de alumnos procesados “, Secc.SacarContAlumnos() escribir “ Cantidad de alumnos menores de edad “ Secc.SacarContMenores() escribir “ Cantidad de alumnos menores de edad “ Secc.SacarContMenores() escribir “ El promedio de edad de la sección es “ Secc.CalcularProm()escribir “ El promedio de edad de la sección es “ Secc.CalcularProm() finfin