Universidad Los Angeles de Chimbote Sistema de Educacin Virtual
Curso : Estructuras de datos Docente: Ing. Hctor Fiestas Bancayn 1
ARREGLOS BIDIMENSIONALES
Ejemplo de aplicacin: La clase CNotas
En el programa CNotas que te presento a continuacin se utiliza un arreglo bidimensional para guardar las notas de N alumnos en M cursos, donde N y M son valores ingresados mediante el teclado. En este ejemplo adems se utilizan tanto arreglos unidimensionales para guardar los nombres de los alumnos, los nombres de los cursos y los promedios por alumno y por curso.
Declaracin y creacin de arreglos bidimensionales Para declarar el arreglo bidimensional Notas empleamos la siguiente instruccin:
static double[][] Notas;
Y para crearlo podemos emplear la siguiente sintaxis:
Notas=new double[n][m];
En este programa, al arreglo Notas lo manejamos como una propiedad de la clase, para que el arreglo Notas sea conocido en todos los mtodos.
Ingreso de valores en el arreglo bidimensional El mtodo LeerNotas() es un ejemplo de cmo se ingresan valores en arreglos bidimensionales. Para ingresar valores en este tipo de arreglos se deben utilizar dos bucles anidados. En este ejemplo utilizamos dos for; pero podemos utilizar tambin while o do while.
public static void LeerNotas() { System.out.println("\n******Ingreso de las Notas de los alumnos : "); for(int i=0;i<n;i++) { System.out.println("\nAlumno: "+Nombres[i]); for(int j=0;j<m;j++) { System.out.print("Nota en el curso "+Cursos[j]+" : "); Notas[i][j]=Lector.nextDouble(); } } } Observa que en el primer for se utiliza el ndice i (que representa las filas), de manera que el arreglo bidimensional se va a recorrer por filas. Y por cada fila (cada alumno) se va a ir leyendo su nota correspondiente. El segundo for (que
Universidad Los Angeles de Chimbote Sistema de Educacin Virtual
Curso : Estructuras de datos Docente: Ing. Hctor Fiestas Bancayn 2 controla las columnas j) tiene como finalidad leer todas y cada una de las notas del alumno seleccionado. La instruccin que nos permite ingresar notas a los elementos del arreglo es:
Notas[i][j]= Lector.nextDouble();
Donde i representa la fila y j la columna. La primera vez que se ingresa al primer for i vale 0 y la primera vez que se ingresa al segundo for, j vale 0; por lo tanto, el primer elemento que se lee es el elemento Notas[0,0] , el segundo es el elemento Notas[0,1], Notas[0,2] y as sucesivamente hasta M cursos. Una vez que se termina de leer las notas del primer alumno (que corresponden a la fila 0), se contina con las notas del segundo alumno (que corresponden a la fila 1). Es decir, se lee el elemento Notas[1,0] , Notas[1,1], Notas[1,2] y as sucesivamente hasta M cursos. Y de esa manera se continan leyendo las notas de todos los N alumnos.
Lectura de nombres de los cursos y alumnos Para almacenar los nombres de los cursos y de los alumnos utilizamos arreglos unidimensionales
public static void LeerNombres() { System.out.println("\n*****Ingreso de los Nombre de los alumnos: "); for(int i=0;i<n;i++) { System.out.print("Alumno :"+i); Nombres[i]= Lector.next(); //*** El mtodo next() permite leer una cadena de //*** caracteres } System.out.println("\n******Ingreso de los Nombres de los cursos: "); for(int j=0;j<m;j++) { System.out.print("Curso :"+j); Cursos[j]= Lector.next(); } }
Observa que para leer una cadena de caracteres utilizamos el mtodo next() del objeto Lector de la clase Scanner.
Acceder a los valores almacenados en el arreglo bidimensional
En el mtodo CalcularPromAlumno() vemos un ejemplo de cmo se accede a los valores almacenados en un arreglo bidimensional.
Universidad Los Angeles de Chimbote Sistema de Educacin Virtual
Curso : Estructuras de datos Docente: Ing. Hctor Fiestas Bancayn 3 Para acceder a TODOS los valores almacenados en este tipo de arreglos se deben utilizar dos bucles anidados. En este ejemplo utilizamos dos for; pero podemos utilizar tambin while o do while. Y, para calcular el promedio por alumno, el arreglo se debe recorrer necesariamente por fila.
public static void CalcularPromAlumno() { double suma,promedio; for(int i=0;i<n;i++) { suma=0; for(int j=0;j<m;j++) { suma=suma+Notas[i][j]; } promedio=suma/m; PromedioAl[i]=promedio; System.out.println("el promedio del alumno "+Nombres[i]+ " es: "+PromedioAl[i]); } } En este caso, suma y promedio viene a ser variables del mtodo. Y solamente sern conocidas en este mtodo. Una vez que salimos del mtodo, ya no existen las variables. Observa que la variable suma se inicializa en 0 :
suma=0;
antes de entrar al segundo for. Esto es necesario, porque debemos sumar las notas de cada alumno y antes de sumar sus notas, debemos poner esta variable en cero. Si no lo hacemos( por ejemplo si ponemos la instruccin antes del primer for), se acumularan las notas de todos los alumnos.
Observa tambin que la instruccin:
promedio=suma/m;
Se encuentra despus de que ha acabado el segundo for, es decir se calcula el promedio, slo despus de haber sumado todas las notas del alumno.
Luego, en la instruccin:
PromedioAl[i]=promedio;
Se le asigna al elemento correspondiente del arreglo PromedioAl[i], el valor que hemos calculado, y como este arreglo se ha declarado como una propiedad de la
Universidad Los Angeles de Chimbote Sistema de Educacin Virtual
Curso : Estructuras de datos Docente: Ing. Hctor Fiestas Bancayn 4 clase, los promedios de los alumnos se conocern en todos y cada uno de los mtodos de la clase. En el mtodo CalcularPromCurso(), que se utiliza para calcular el promedio por curso, se recorre el arreglo por columna. Observa que en este caso, se invierte el orden de los for.
El programa CNotas completo es el siguiente:
class CNotas { static double[][] Notas; static double[] PromedioAl,PromedioCur; static String[]Nombres,Cursos; static int m,n;
public static void LeerNotas() { System.out.println("\n******Ingreso de las Notas de los alumnos : "); for(int i=0;i<n;i++) { System.out.println("\nAlumno: "+Nombres[i]); for(int j=0;j<m;j++) { System.out.print("Nota en el curso "+Cursos[j]+" : "); Notas[i][j]=Leer.datoDouble(); }
} } public static void LeerNombres() { System.out.println("\n*****Ingreso de los Nombre de los alumnos: "); for(int i=0;i<n;i++) { System.out.print("Alumno :"+i); Nombres[i]= Leer.dato(); } System.out.println("\n******Ingreso de los Nombres de los cursos: "); for(int j=0;j<m;j++) { System.out.print("Curso :"+j); Cursos[j]=Leer.dato(); } }
public static void CrearMatrices()
Universidad Los Angeles de Chimbote Sistema de Educacin Virtual
Curso : Estructuras de datos Docente: Ing. Hctor Fiestas Bancayn 5 { Nombres=new String[n]; Cursos=new String[m]; Notas=new double[n][m]; PromedioAl=new double[n]; PromedioCur=new double[m]; } public static void LeerNM() { System.out.print("Ingrese la cantidad de alumnos: "); n=Leer.datoInt(); System.out.print("Ingrese la cantidad de cursos: "); m=Leer.datoInt(); } public static void CalcularPromAlumno() { double suma,promedio; for(int i=0;i<n;i++) { suma=0; for(int j=0;j<m;j++) { suma=suma+Notas[i][j]; } promedio=suma/m; PromedioAl[i]=promedio; System.out.println("el promedio del alumno "+Nombres[i]+" es: "+PromedioAl[i]); } } public static void CalcularPromCurso() { double suma,promedio; for(int j=0;j<m;j++) { suma=0; for(int i=0;i<n;i++) { suma=suma+Notas[i][j]; } promedio=suma/n; PromedioCur[j]=promedio; System.out.println("el promedio del curso de "+Cursos[j]+" es: "+PromedioCur[j]); } } public static void main (String[]args) { CNotas miObjeto=new CNotas(); System.out.println("**** Programa de ejemplo de arreglos ****");
Universidad Los Angeles de Chimbote Sistema de Educacin Virtual
Curso : Estructuras de datos Docente: Ing. Hctor Fiestas Bancayn 6 System.out.println("\nNotas de N alumnos en M cursos\n"); miObjeto.LeerNM(); miObjeto.CrearMatrices(); miObjeto.LeerNombres(); miObjeto.LeerNotas(); miObjeto.CalcularPromAlumno(); miObjeto.CalcularPromCurso(); } }
Tenga en cuenta que necesita la clase Leer para que pueda funcionar este programa. Por tanto, debes cargar esta clase que te entrego junto con este programa a la misma carpeta donde tienes la clase CNotas.
Universidad Los Angeles de Chimbote Sistema de Educacin Virtual
Curso : Estructuras de datos Docente: Ing. Hctor Fiestas Bancayn 7
EJERCICIO PROPUESTO 1
En un concurso de belleza participan N seoritas candidatas y el jurado calificador ha establecido 4 criterios de evaluacin: Belleza, Inteligencia, cuerpo y desenvolvimiento donde cada criterio tiene un puntaje de 1 a 10. Elabore una aplicacin en Java llamada ConcursoDeBelleza que permita leer la cantidad de candidatas (N), los nombres de las candidatas y los criterios de evaluacin y luego los puntajes obtenidos por cada una de las candidatas en cada uno de los criterios. Luego debe calcular el puntaje total obtenido por cada candidata, como se muestra en el siguiente ejemplo:
Los mtodos que debe incluir la aplicacin son los siguientes: a) (1 pto.) El mtodo LeerN () que permitir ingresar la cantidad de candidatas que participan. b) (3 ptos.) El mtodo IngresarNombresYCriterios() debe permitir ingresar los nombres de las candidatas y la descripcin de los criterios a considerar. c) (3 ptos.) El mtodo IngresarPuntajes () debe permitir ingresar los puntajes de todas y cada una de las candidatas en todos y cada uno de los criterios de evaluacin. d) (4 ptos.) El mtodo CalcularPuntajeTotal () debe calcular el puntaje total obtenido por todas y cada una de las candidatas. e) (3 ptos.) El mtodo CalcularCandidataGanadora() debe mostrar el nombre de la candidata ganadora (la que tiene el mximo puntaje obtenido) y su puntaje ( el mximo). f) (2 ptos.) Todas las instrucciones adicionales necesarias para que la aplicacin funcione (Crear matrices, objetos, invocar mtodos, etc).
Universidad Los Angeles de Chimbote Sistema de Educacin Virtual
Curso : Estructuras de datos Docente: Ing. Hctor Fiestas Bancayn 8 EJERCICIO PROPUESTO 2
Elabore una aplicacin en Java llamada EstadisticasTemperatura que permita leer los nombres de N ciudades y sus temperaturas (a una determinada hora y da) en M meses y mostrar los resultados y estadsticas, como se muestra en el siguiente ejemplo:
Mes Temperatura Ciudad Enero Febrero Marzo Abril Promedio/ciudad Piura 12.5 13.8 14.2 11.3 12.95 Sullana 11.8 12.5 13.2 8.5 11.50 Talara 17.0 16.0 15.5 14.0 15.63 Paita 17.5 16.5 15.5 14.5 16.00 ---------------- ---------------- ------------------ ----------------- ------------ --------------- Temperatura 14.7 14.7 14.6 12.1 promedio por mes
a) (1 pto.) El mtodo ObtenerNM() permite obtener un nmero entero N que indica la cantidad de ciudades (N) a considerar y un nmero M que indica la cantidad de meses a considerar. b) (3 ptos.) El mtodo IngresarNombres() debe permitir ingresar el nombre de las ciudades y los nombres de los meses. c) (3 ptos.) El mtodo IngresarTremperaturas() debe permitir ingresar las temperaturas mnimas de todas y cada una de las ciudades en todos y cada uno de los N meses. d) (2 ptos.) El mtodo CalcularTPromCiudad() debe calcular el promedio de temperatura por ciudad. e) (2 ptos.) El mtodo CalcularPromMes() debe calcular la temperatura promedio en todos y cada uno de los meses. f) (3 ptos.) El mtodo CalcularPromedioTemp() debe calcular la temperatura promedio general (todas las ciudades y todos los meses). g) (4 ptos.) El mtodo Resultados() debe mostrar los datos y resultados tal y como se muestran en el ejemplo. Tenga en cuenta que el nmero de ciudades y de meses no es fijo, y que pueden aparecer ms o menos ciudades, dependiendo del valor de N. h) (2 ptos.) Todas las instrucciones adicionales necesarias para que la aplicacin funcione (Crear matrices, objetos, invocar mtodos, etc
Universidad Los Angeles de Chimbote Sistema de Educacin Virtual
Curso : Estructuras de datos Docente: Ing. Hctor Fiestas Bancayn 9 Eso es todo. Gracias por tu atencin.