310 likes | 465 Views
Capítulo 2 “Subprogramas/Funciones - Arreglos”. Arreglos-Arrays. Arreglos - Arrays. Supongamos que tenemos 10 variables: a; b; c; d; e; f; g; h; i; j Si se desea manipular las variables debemos poner sus nombres cada vez que se requiera
E N D
Capítulo 2“Subprogramas/Funciones - Arreglos” Arreglos-Arrays.
Arreglos - Arrays • Supongamos que tenemos 10 variables: a; b; c; d; e; f; g; h; i; j • Si se desea manipular las variables debemos poner sus nombres cada vez que se requiera • Un enfoque más general es utilizar las variables con el mismo nombre, pero diferenciándolas con un nuúmero • Semejante a como los libros de matemáticas utilizan los vectores y las tuplas a1; a2; a3; a4; a5; a6; a7; a8; a9; a10
Arreglos - Arrays • Ahora sumar las variables, es mucho más fácil:
Arreglos - Arrays • Suponga que se quieren leer 5000 enteros y hacer algún tipo de operación con ellos • Con los contenidos que conocemos(¿?) hasta ahora necesitamos utilizar 5000 variables • Problemas: • De comprensión en la codificación • De utilización de memoria • La solución es utilizar ARREGLOS ó ARRAYS
Arreglos - Arrays • Los arreglos son conjuntos de variables que comparten un mismo nombre, son capaces de almacenar una colección de datos del mismo tipo. • Pueden ser referenciadas de manera individual con ayuda de uno o más índices • Tenemos según su dimensionalidad: • Unidimensionales (Ej. Vector Matemático) • Bidimensionales (Ej. Matriz) • Tridimensional (Ej. Cubo) • Multidimensionales
Ejemplos UNIDIMENSIONAL BIDIMENSIONAL TRIDIMENSIONAL
Ejemplos // Enteros tamaño int[] unidimensional={2,0,0,7}; //Arreglo bidimensional de enteros int[][] bidimensional={ {0,0,0},{1,1,1}};
Arreglos - Arrays • Como las variables, al utilizar un arreglo primero que se debe hacer es declararlo. • Al igualque otras variables, la declaración de un arreglo tiene dos componentes primarios: tipoArreglo[]nombre; • Un tipo de arreglo incluye el tipo de dato de los elementos que va contener el arreglo.
Arreglos - Arrays • Porejemplo, el tipo de dato para un arreglo que sólo va a contener elementos enteros es un arreglo deenteros. int[] arrayDeEnteros;
Arreglos - Arrays int[] arrayDeEnteros; • La parte int de la declaración indica que arrayDeEnteros es un arreglo de enteros. • []: indica que su dimensionalidad es uno • La declaración NOha asignado memoria para contener los elementos del arreglo.
Arreglos - Arrays • Para asignar memoria se utiliza el operador new. • La siguiente sentencia asigna la suficiente memoria para que arrayDeEnteros pueda contener diezenteros. int[] arrayDeEnteros = new int[10];
Arreglos - Arrays • En general, cuando se crea un arreglo, se utiliza el operador new, más el tipo de dato de loselementos del arreglo, más el número de elementos deseados encerrado entre corchetes cuadrados('[' y ']'). TipoElemento[] nombreArray = new TipoElementos[tamano];
Arreglos - Arrays • Ahora que se ha asignado memoria para un arreglo ya se pueden asignar valores a los elementos yrecuperar esos valores. for (int j = 0; j < arrayDeEnteros.length; j++) { arrayDeEnteros[j] = j; StdOut.println("[j] = " + arrayDeEnteros[j]); }
Arreglos - Arrays • Como se puede ver en el ejemplo anterior, para referirse a un elemento del arreglo, se añadecorchetes cuadrados al nombre del array. • Entre los corchetes cuadrados se indica (bien con unavariable o con una expresión) el índice del elemento al que se quiere acceder. • El índice del array empieza en 0 y termina en la longitud del array menos uno.
Accediendo los elementos • Un índice describe la posición de un elemento dentro de un arreglo. Recordar en Java el primer elemento tiene el índice cero!
Arreglos - Arrays • Hay otro elemento interesante en el pequeño ejemplo anterior. • El bucle for itera sobre cadaelemento de arrayDeEnteros asignándole valores e imprimiendo esos valores. • Se usaarrayDeEnteros.length para obtener el tamaño real del arreglo, length es una propiedadproporcionada para todos los arreglos de Java.
Ejemplos 1.- Realizar un programa en el que se ingresen 10 enteros, y luego muestre la suma de ellos y su promedio 2.- Encontrar el máximo de una lista de 10 elementos 3.- Desarrolle un programa que calcule el promedio de las notas de un curso
Ejemplo notas alumno • public class Notas • { • public static void main(String[]args) • { • int Nota[] = new int[7]; • int i; • float suma=0; • for(i=0; i<7; i++) • do • { • StdOut.println("Ingrese la nota "+(i+1)+ " de su quiz"); • Nota[i]=StdIn.readInt(); • } • while(Nota[i]<=0); • for(i=0;i<7;i++) • suma = suma + Nota[i]; • StdOut.println(suma); • StdOut.println("El promedio de sus quices es de "+ (float)(suma/7)); • } • }
Arreglos Bidimensionales • Un arreglo bidimensional es una lista de arreglos unidimensional • Para declarar un arreglo bidimensional de enteros int [][] matriz = new int[3][4];
Ejemplo int fila=3,col=4; for(fila=0;fila<3;fila++) for(col=0;col<4;col++) matriz[fila][col]=fila*col; //más fácil for(fila=0;fila<matriz.length;fila++) for(col=0;col<matriz[0].length;col++) StdOut.print(matriz[fila][col]);
Arreglos Bidimensionales • Por ejemplo: Cada alumno tiene tres notas, una por cada certamen. • Entonces las notas de un alumno pueden contenerse en un arreglo de tamaño tres, • Ahora si queremos mantener las notas de un curso de 52 alumnos. • Podemos mantener las notas en un arreglo de 52 arreglos de tamaño 3
Notas del curso int alumnos=52; int notas=3; int curso[][] = new int[alumnos][notas]; int fila,col; for(fila=0;fila<alumnos;fila++) for(col=0;col<notas;col++) curso[fila][col]=StdIn.readInt(); • Con lo cual curso[10][2] representa la nota del tercer certamen del alumno identificado como 10 (que realmente será el 11 ingresado dado que el arreglo comienza en 0)
Ejemplo • Desarrolle un programa que reciba como entrada las notas de cada pregunta del certamen 1 de programación, para todos los alumnos, y muestre como salida un resumen con las notas finales de todos los alumnos
Ejemplo notas curso • public class Curso • { • public static void main(String[] args) • { • int C[][] = new int[3][4]; • int i, j, suma; • for(i=0; i<3;i++) • for(j=0;j<4;j++) • { • do • { • StdOut.println("Ingrese la nota "+(j+1)+" del curso "+(i+1)); • C[i][j]=StdIn.readInt(); • }while(C[i][j]<=0); • } • for(i=0; i<3;i++) • { • suma=0; • for(j=0;j<4;j++) • suma = suma + C[i][j]; • StdOut.println("El promedio de notas del curso "+(i+1)+ " es de: "+ (suma/4)); • } • } • }
Multidimensionales • No existe un limite lógico definido para la cantidad de dimensiones que puede tener un arreglo, físico sí, la memoria reservada. • Java permite arreglos con mas de dos dimensiones,La forma general de una declaración de arreglo es: tipo[][]…[] nombre_var; nombre_var= new tipo[tamaño1][tamaño2]…[tamañoN]; int a=3,b=4,c=5,i ,j ,k; int[][][] arr= new int[a][b][c]; for(i=0; i<a; i++) for(j=0; j<b; j++) for(k=0; k<c; k++) arr[i][j][k]=i+j+k;
Nota máxima, curso y alumno • public class Nota_Max • { • public static void main(String[] args) • { • int a, b, i, j, max, posi, posj; • do • { • StdOut.println("Ingrese la cantidad de Cursos"); • a = StdIn.readInt(); • } • while(a<=0); • do • { • StdOut.println("Ingrese la cantidad de Alumnos"); • b = StdIn.readInt(); • } • while(a<=0); • int C[][] = new int[a][b]; • for(i=0;i<a;i++) • { • for(j=0;j<b;j++) • { • do • { • StdOut.println("Ingrese la nota "+(j+1)+" del curso "+(i+1)); • C[i][j]=StdIn.readInt(); • }while((C[i][j]<=0)||(C[i][j]>100)); • } • } • max=C[0][0]; • posi=0; • posj=0; • for(i=0;i<a;i++) • for(j=0;j<b;j++) • { • if(max<=C[i][j]) • { • max = C[i][j]; • posi = i; • posj = j; • } • } • StdOut.println("La nota maxima fue de "+ max+" y la saco el alumno "+(posj+1)+" en el curso "+(posi+1)); • } • }
Ordenamiento Burbuja • Existen numerosos algoritmos para ordenar. A continuación se verá Ordenamiento Burbuja (bublesort). • Idea: vamos comparando elementos adyacentes y empujamos los valores más livianos hacia arriba (los más pesados van quedando abajo). • Idea de la burbuja que asciende, por lo liviana que es.
Ordenamiento Burbuja Código for (int i = 0; i < arreglo.length; i++) for (int j = 0; j < arreglo.length - 1; j++) if (arreglo[j] > arreglo[j + 1]) { aux = arreglo[j]; arreglo[j] = arreglo[j + 1]; arreglo[j + 1] = aux; }
Ordenamiento Burbuja Aplicado importjava.util.Random; publicclass Burbuja { publicstaticvoidmain(Stringargs[]) { RandomnumeroAleatorio = new Random(); int arreglo[] = new int[10]; // Generamos numeros for (int i = 0; i < arreglo.length; i++) { arreglo[i] = numeroAleatorio.nextInt(9) + 1; System.out.print(arreglo[i]); } System.out.println(); // Los ordenamos con ordenamiento burbuja intaux; for (int i = 0; i < arreglo.length; i++) { for (int j = 0; j < arreglo.length - 1; j++) { if (arreglo[j] > arreglo[j + 1]) { aux = arreglo[j]; arreglo[j] = arreglo[j + 1]; arreglo[j + 1] = aux; } } } } }
Fin Preparando la revancha …