Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Los arreglos son tipos de datos complejos (en el sentido de que no son atmicos). o Agrupan varios (1 o ms) datos de un mismo tipo, llamado el a tipo base del arreglo. La idea es que tenemos espacio para almacenar varios valores sin tener que denir una variable distinta para cada valor a almacenar. El tipo base de un arreglo puede ser cualquiera de los tipos primitivos de JAVA (int, double, oat etc), e incluso otros tipos complejos (por ejemplo otros arreglos, lo veremos ms a adelante).
Jorge Prez e
75 / 103
Arreglos
Al igual que las variables debemos hacer una declaracin de o arreglo y asociarlo a un identicador. Por ejemplo, para declarar un arreglo de enteros identicado por arr, hacemos:
int[] arr;
Esto no es suciente para comenzar a usar el arreglo, adems a debemos especicar la cantidad de elementos que queremos almacenar (construir el arreglo)
arr = new int[20];
Con la anterior instruccion estoy especicando que el arreglo tendr espacio para almacenar 20 enteros. a De la misma forma podemos hacer arreglos de otros tipos de datos.
Jorge Prez e Programacin Estructurada en JAVA o 76 / 103
Arreglos
La sintaxis del lenguaje permite referirse a cada uno de los elementos que constituyen el arreglo empleando ndices. Los elementos del arreglo estn numerados en forma a jerrquica y consecutiva, empezando en 0. a Si A es un arreglo de entero de tamao 3, A[0] se reere al n primer espacio del arreglo, A[1] al segundo espacio, y A[2] al ultimo espacio. La idea es que cada espacio puede ser tratado como una variable para hacer asignaciones, construir expresiones, etc.
Jorge Prez e
77 / 103
Arreglos
Jorge Prez e
78 / 103
La primera instruccin declara y crea un arreglo de 20 enteros, o la segunda un arreglo de 10 reales. Tambin se pueden construir asignndoles inmediatamente e a valores.
int[] A = { 2, 3, 5, 7, 9, 11 }; double[] D = { 0.5, 1.0, 1.5, 2.0 };
La primera instruccin crea un arreglo de tamao 6 con los o n seis primeros nmeros primos, la segunda crea un arreglo de 4 u reales.
Jorge Prez e Programacin Estructurada en JAVA o 79 / 103
Arreglos: ndices
Como dijimos la idea de un arreglo es que cada posicin o pueda ser usado como una variable independiente. Para esto se usan los ndices que indican la posicin del o espacio al que se hace referencia Un ndice puede ser una expresin cualquiera que se evale o u como un entero positivo. Por ejemplo, luego se ejecutar el siguiente cdigo o
int[] A = { 1, 2, 3, 2, 1 }; int i, x, y; i = 3; x = A[2 * i - 4]; y = A[A[i]] + 3;
Arreglos: ndices
De la misma forma se pueden usar expresiones en los ndices para asignaciones. Por ejemplo, luego se ejecutar el siguiente cdigo o
int[] A = new int[4]; int i = 1; A[i - 1] = 1; A[A[0]] = 2; A[i + A[0]] = A[1]; A[A[A[2 - i]] + i] = 3;
Jorge Prez e
81 / 103
Arreglos: ndices
El poder poner expresiones en los ndices nos permiten asignar valores a un arreglo ingresados por el usuario
{ double[] A = new double[10]; int i; for(i = 0; i < 10; i++) { System.out.println("Ingrese un nmero"); u A[i] = In.readDouble(); } System.out.print("Los datos ingresados son: "); for(i = 0; i < 10; i++) { System.out.print(A[i] + " "); } }
Jorge Prez e
82 / 103
Arreglos: Ejercicios
1. Pedir 10 nmeros enteros y luego un entero x y mostrar el u nmero de los ingresados que est ms cercano a x. u a a 2. Pedir 20 nmeros enteros x1 , x2 , . . . , x20 y luego imprimirlos u en el orden x1 , x20 , x2 , x19 , . . . , x10 . 3. Pedir 20 nmeros enteros y luego un entero x y mostrar u cuntas veces aparece x entre los nmeros ingresados. a u 4. Pedir 20 nmeros enteros y luego mostrar cada nmero u u distinto ingresado, por ejemplo si se ingresan 1, 2, 1, 2, . . . , 1, 2 se debiera mostrar slo 1 y 2. o 5. Pedir 20 nmeros enteros y luego mostrar cada nmero u u distinto ingresado y la cantidad de veces que ese nmero u aparece. Por ejemplo si se ingresan 1, 2, 1, 2, . . . , 1, 2 se debiera mostrar 1 : 10 y 2 : 10.
Jorge Prez e Programacin Estructurada en JAVA o 83 / 103
Arreglos
Los arreglos son tipos no atmicos de datos (objetos), por lo o tanto cuando declaramos un arreglo
int[] peso;
Estamos creando la variable peso la cual es una referencia a un lugar de la memoria donde posteriormente el arreglo de enteros se almacenar f a sicamente. Sin embargo, hasta este momento no hemos creado un arreglo de enteros. Cuando construimos el arreglo se asigna la memoria correspondiente
peso = new int[10];
Jorge Prez e
84 / 103
Arreglos y referencias
Veamos paso a paso que pasa cuando ejecutamos este cdigo: o
double[] A = new double[10]; double[] B; B = A; A[4] = 4.5; System.out.println(B[4]); double[] C = {1.0,2.0,3.0}; B=C; int i; for(i = 0; i < 3; i++) { System.out.println(B[i]); }
Jorge Prez e Programacin Estructurada en JAVA o 85 / 103
Arreglos y referencias
Creamos una variable A que es una referencia a un arreglo (que tambin creamos) de 10 elementos de tipo double. e
double[] B;
Creamos una variable B que es una referencia a un arreglo de elementos de tipo double pero an no creamos ningn arreglo al u u que apunte B.
B = A;
Jorge Prez e
86 / 103
Arreglos y referencias
A[4] = 4.5;
Qu se imprime en pantalla? e
4.5 double[] C = {1.0,2.0,3.0};
Jorge Prez e
87 / 103
Arreglos y referencias
B = C;
A B se le asigna lo referenciado por C (asignacin de referencias). B o deja de hacer referencia al mismo arreglo que A y ahora hace referencia a un arreglo de 3 elementos.
int i; for(i = 0; i < 3; i++) { System.out.println(B[i]); }
Qu imprime esto? e
1.0 2.0 3.0
Jorge Prez e
88 / 103
Si tenemos:
double[] B; int[] C = {1,2,3}; B = C;
Qu pasa en este caso? e Producir un error pues B puede hacer referencia slo a un a o arreglo de elemtos de tipo doubles.
Jorge Prez e
89 / 103
Strings
Los Strings Son tipos de datos similares a los arreglos, pero en este caso se usan para almacenar texto (cadenas de caracteres). Verstiles para hacer programas que manipulen texto. a Declaracin de un string: o
String s;
Strings y referencias
Al igual que con los arreglos una variable de tipo String es una referencia a una posicin de memoria donde se encuetra o el texto f sicamente almacenado. Qu muestra este trozo de cdigo? e o
String s1 = "Blanco"; String s2 = "Azul"; s1 = s2; s2 = "Rojo"; System.out.println(s1 + " " + s2);
Jorge Prez e
91 / 103
Strings, comparaciones
Tomando en cuenta que las variables de tipo String son referencias, debemos entender a que nos referimos si preguntamos si:
s1 == s2
En este caso el valor de la expresin va a ser verdadero si o ambas variables apuntan (o hacen referencia) al mismo lugar de la memoria, y falso en caso contrario. Qu muestra el siguiente cdigo? e o
String s1 = "Rojo"; String s2 = "Rojo"; if (s1 == s2) { System.out.println("Misma referencia!");}
Jorge Prez e
92 / 103
El resultadp de la instruccin es un valor de verdad, verdadero o si los strings tiene el mismo contenido, falso en otro caso. Qu muestra el siguiente cdigo? e o
String s1 = "Rojo"; String s2 = "Rojo"; if (s1.equals(s2)) { System.out.println("Mismo texto!");}
Jorge Prez e
93 / 103
Strings y arreglos
Dados que los strings son tipos de datos podemos hacer arreglos de strings, se la misma forma que lo haciamos con los otros tipos de datos:
String[] nombres; nombres = new String[4]; nombres[0] = "Juan"; nombres[1] = "Pepe"; nombres[2] = "Pedro"; nombres[3] = "Maria";
O equivalentemente
String[] nombres = {"Juan","Pepe","Pedro","Maria"};
Jorge Prez e
94 / 103
Arreglos bidimensionales:
Dos ndices en lugar de uno. Dimensin: n m o Fila, Columna: [x][y] Si A es un arreglo bidimensional A[2][4] es un valor espec co en el arreglo. Se pueden ver como matrices.
Ejemplo: Notas de alumnos tabuladas, una la para cada alumno (en cierto orden) una columna para cada nota de pruebas.
Jorge Prez e
95 / 103
Construccin o
tablero = new int[8][8];
Inicializacin en la declaracin (2 3) o o
int[][] numero = {{1,3,5}, {3,6,7}};
Jorge Prez e
96 / 103
Estamos creando 20 30 elementos (que podemos ver como variables) de una sola vez. Por lo tanto podemos tratar a cada elemento igual como tratamos a una variable.
double a,b; a = A[1][2] + A[0][0] + 3; b = A[1][2]*A[0][0]; A[a+3][b-1] = 6;
Jorge Prez e
97 / 103
De forma similar podemos mostrar los elementos de una matriz, solo cambie el contenido del for anidado por System.out.println(A[i][j]).
Jorge Prez e Programacin Estructurada en JAVA o 98 / 103
Operaciones de matrices
Dadas dos matrices (usuales) A de n m y B de n m podemos sumarlas para crear una matriz C de n m tal que Cij = Aij + Bij Ejercicio: construya un programa que dados dos matrices JAVA A y B construya una tercera correspondiente a la suma. Dada una matriz (usual) A de n m la matriz traspuesta At es una matriz de m n tal que At = Aji ij Una matriz A es simtrica si A = At . e Ejercicio: haga un programa en JAVA que dada una matriz construya la matriz traspuesta. Ejercicio: haga un programa que determine si una matriz es simtrica. e
Jorge Prez e Programacin Estructurada en JAVA o 99 / 103
int[][] A ={{1,2,3,4}, {5,6,7,8}}; int[][] B ={{1,4,5,6}, {4,8,9,7}}; int n = 2, m = 4; // dimensiones de las matrices
int[][] C = new int[n][m]; int i,j; for(i = 0; i < n ; i++) { for(j = 0; j < m ; j++) { C[i][j] = A[i][j] + B[i][j]; } } //Ahora imprimos cada fila de C for(i = 0; i < n ; i++) { for(j = 0; j < m ; j++) { System.out.print(C[i][j] + " "); } System.out.println(); }
Jorge Prez e Programacin Estructurada en JAVA o 100 / 103
Operaciones de matrices
Dadas dos matrice (usuales) A de n m y B de m l podemos multiplicarls para creando una matrix C de n l tal que
m
Cij =
k=1
Aik Bki
Ejercicio: construya un programa que dados dos matrices JAVA A y B construya una tercera correspondiente a la multiplicacin (ojo que en la denicin matemtica se o o a suponen los ndices partiendo desde 1).
Jorge Prez e
101 / 103
int[][] A = {{2,3,8},{9,5,4},{7,8,3},{4,6,8}}; // 4 x 3 int[][] B = {{1,4,7},{2,5,8}}; // 3 x 2 int n = 4, m = 3, l = 2; int[][] C = new int[n][l]; int i,j,k,suma; for(i = 0; i < n; i++) { for(j = 0; j< l; j++) { for(k = 0, suma = 0; k < m; k++) { suma = suma + A[i][k] * B[k][j]; } C[i][j]= suma; } } for(i = 0; i < n; i++) { for(j = 0; j < l; j++) { System.out.print(C[i][j]+ " "); }
Programacin Estructurada en JAVA o
Jorge Prez e
102 / 103
Arreglos multidimensionales
Hasta ahora hemos visto arreglos unidimensionales y bidimensionales. Sin embargo, podemos tener arreglos con las dimensiones que uno desee. Por ejemplo, podemos tener arreglos de 3, 4 o 5 dimensiones. Por ejemplo: char[][][] A = new char[2][3][6]; Aqu hemos creado 2 3 6 elementos de tipo char. int[][][][] B = new int[2][2][2][2]; Aqu hemos creado 2 2 2 2 elementos de tipo int.
Jorge Prez e
103 / 103