Vous êtes sur la page 1sur 9

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:

Criterio Puntaje
Candidata Belleza Inteligencia Cuerpo Desenvolvimiento Total
Melisa 7.5 8.4 9.7 9.3 34.9
Leidi 8.2 5.7 8.2 8.5 30.6
Carolina 7.8 7.4 8.5 8.0 30.7
Isabel 7.5 6.8 9.5 9.5 33.3

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.

Vous aimerez peut-être aussi