43
Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales ING1310 – Introducci´on a la Computaci´on Arreglos Arreglos Multidimensionales Carlos Reveco [email protected] [email protected] Facultad de Ingenier´ ıa/Universidad de los Andes/Chile Rev : 213 C.Reveco Facultad de Ingenier´ ıa/Universidad de los Andes/Chile ING1310– Clase 12 1 / 43

ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

ING1310 – Introduccion a la Computacion

ArreglosArreglos Multidimensionales

Carlos [email protected]

[email protected]

Facultad de Ingenierıa/Universidad de los Andes/Chile

Rev : 213

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 1 / 43

Page 2: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

En esta clase

1 Resumen Clase Anterior

2 Arreglos UnidimensionalesDefinicion

3 EjemplosSumarMayor

4 EjercicioEnunciadoSolucion

5 Arreglos MultidimensionalesMotivacionEjemplos

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 2 / 43

Page 3: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 3 / 43

Page 4: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase 11

• El comando this nos sirve para referirnos inequıvocamente a unelemento propio del objeto.

• De esta forma podemos evitar problemas con identificadores igualespara variables dentro de metodos y atributos.

• Existen tipos por valor y referencia que se comportan distintorespecto a su contenido.

• Un tipo por valor contiene el dato.• Un tipo por referencia contiene una referencia al dato, no el dato

mismo.• Esto tiene implicancias al momento de realizar copias de las variables

segun sea su tipo.

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 4 / 43

Page 5: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase 11

• Los arreglos permiten manejar una lista de objetos desde solamenteun objeto.

• Todos los arreglos son tipos por referencia → hay que crearlos• Al crearlos se les debe asignar un largo fijo para toda su vida.• Cuando se crean no se crean sus elementos.

• Para acceder a los elementos del arreglo lo hacemos a traves de unındice

• El primer elemento es el 0• El ultimo elemento es el length− 1

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 5 / 43

Page 6: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Arreglos Unidimensionales

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 6 / 43

Page 7: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Arreglos Unidimensionales

Definicion

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 7 / 43

Page 8: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Definicion

• Los arreglos son objetos que permiten agrupar una coleccion deobjetos de un mismo tipo.

• Por un lado es un objeto,• pero por otro lado es una coleccion de otros objetos.

Sintaxis Java: Arreglos

Tipo[] identificador;

• Como toda variable, en su declaracion necesita de un tipo y unidentificador.

• El tipo va seguido de parentesis de corchete, lo que indica que se tratade un arreglo de objetos de ese tipo.

Ejemplo: Declaracion de arreglos

int[] listaNumeros;

...

Auto[] listaDeAutos;

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 8 / 43

Page 9: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Creacion

• Todos los arreglos son tipos por referencia ∴ deben ser creados• utilizando el comando new.

• La creacion consiste en darles una dimension,• cantidad maxima de elementos que puede contener.

Ejemplo: Creacion de arreglos

int[] numeros = new int [10];

Auto[] listaDeAutos = new Auto [25];

• Despues de crear el arreglo, se debe crear cada elemento:• si el tipo del arreglo es por referencia, todos los elementos son null

antes de ser creados,• si es por valor, puede que los elementos sean 0 antes de ser creados

(esto no lo considere como una verdad absoluta).

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 9 / 43

Page 10: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Creacion con asignacion

• Es posible crear un arreglo asignandole directamente los elementosque va a contener.

• En este caso no es necesario proporcionar el largo, ya que este secalcula en funcion de la cantidad de elementos asignados.

Ejemplo: Creacion con asignacion

// Arreglo de enteros con 5 elementos

int[] numeros = {0, 1, 2, 3, 4};

// Arreglo de Auto con 3 elementos

Auto[] listaDeAutos = {new Auto (...), new Auto (...), new Auto (...)};

• Este tipo de asignacion solamente puede ser realizada al momento dela declaracion del arreglo.

Ejemplo: Creacion con asignacion no valida

int[] numeros;

numeros = {0, 1, 2, 3, 4}; // Error

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 10 / 43

Page 11: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Acceso a elementos

• A los elementos de un arreglo se accede a traves de su ındice.• Los ındices validos estan en el rango [0, largo[.• Si se usa un ındice fuera de este rango el programa se caera.

Ejemplo: Acceso a elementos por ındice

int[] numeros = {2, 4, 6, 8, 10};

System.out.println(numeros [2]); // Muestra un 6

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 11 / 43

Page 12: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Cantidad de elementos de un arreglo

• ¿Como podemos saber el largo de un arreglo que no hemos creadonosotros?

• Todos los arreglos tienen la propiedad length la cual retorna el largo.

Ejemplo: Largo de un arreglo

int[] numeros = {2, 4, 6, 8, 10};

System.out.println(numeros.length ); // Muestra un 5

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 12 / 43

Page 13: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Recorrer un arreglo

• Es posible recorrer con un ciclo todos los elementos de un arreglo.

• Simplemente declaramos una variable para el ındice, la cualaumentamos en cada iteracion.

• El ciclo termina cuando el ındice es igual al largo del arreglo.

Ejemplo: Recorrer y mostrar un arreglo

String [] palabras = {"Hola", "Chao", "Bienvenido"};

for(int i = 0; i < palabras.length; i++)

System.out.println(palabras[i]);

• ¿Que pasa si ahora hago que el arreglo tenga 10997 elementos?• El ciclo no cambia.

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 13 / 43

Page 14: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Tipos por referencia

• Los arreglos siempre funcionan como tipos por referencia.• Aunque el tipo de los elementos del arreglo sea un tipo por valor.

• Esto quiere decir que si uno asigna un arreglo a otro ambas variablesquedan referenciando al mismo elemento.

Ejemplo: Asignacion

int[] arreglo = {0, 1, 2};

int[] aux = arreglo;

aux [1] = 4; // Tambien cambia el valor de arreglo [1]

System.out.println(arreglo [1]);

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 14 / 43

Page 15: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Copia de arreglos

• Para copiar dos arreglos se debe copiar cada uno de los elementos.

Ejemplo: Copia

int[] arreglo = {0, 1, 2};

int[] copia = new int[arreglo.length ];

for(int i = 0; i < copia.length; i++)

copia[i] = arreglo[i];

• Esto solo es valido para los arreglos cuyos elementos sean de tipo porvalor.

• En caso de que los elementos sean tipo por referencia, en la asignaciondentro del ciclo harıamos una copia de referencias, y no una copia devalores.

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 15 / 43

Page 16: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Largo constante

• El largo de un arreglo es fijo desde el momento que es creado.

• No es posible cambiar el largo sin borrar los elementos que estan en elarreglo.

Ejemplo: Largo mal cambiado

int[] arreglo = {0, 1, 2};

arreglo = new int [5]; // Se borran los 3 elementos

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 16 / 43

Page 17: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Largo constante

• Si se necesitara cambiar el largo de un arreglo, ¿como lo hacemos?• Podemos crear una variable auxiliar que apunte a nuestro arreglo.• Luego creamos nuevamente el arreglo con el nuevo tamano.• Copiamos los elementos del arreglo auxiliar a nuestro arreglo.

Ejemplo: Largo bien cambiado

int[] arreglo = {0, 1, 2};

int[] aux = arreglo;

arreglo = new int [5];

for(int i = 0; i < aux.length; i++)

arreglo[i] = aux[i];

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 17 / 43

Page 18: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Ejemplos

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 18 / 43

Page 19: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Ejemplos

Sumar

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 19 / 43

Page 20: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Ejercicio Arreglos: Sumar

Escriba un metodo public int sumar(int[] numeros) que recibe unarreglo de numeros y retorna la suma de ellos.

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 20 / 43

Page 21: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Metodo sumar

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 21 / 43

Page 22: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Ejemplo: Metodo sumar

public int sumar(int[] numeros) {

int suma = 0;

for(int i = 0; i < numeros.length; i++)

suma = suma + numeros[i];

return suma;

}

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 22 / 43

Page 23: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Ejemplos

Mayor

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 23 / 43

Page 24: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Ejercicio Arreglos: Mayor

Escriba un metodo public int buscarMayor(double[] numeros) querecibe un arreglo de numeros y retorna el ındice del numero mayor en elarreglo.

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 24 / 43

Page 25: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Metodo buscarMayor

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 25 / 43

Page 26: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Ejemplo: Metodo buscarMayor

public int buscarMayor(double [] numeros) {

int index = 0;

for(int i = 1; i < numeros.length; i++) {

if(numeros[index] < numeros[i])

index = i;

}

return index;

}

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 26 / 43

Page 27: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Ejercicio

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 27 / 43

Page 28: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Ejercicio

Enunciado

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 28 / 43

Page 29: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Ejercicio Arreglos: Contar apariciones

Escriba el siguiente metodo:

int contarApariciones(int[] original, int[] secuencia)

el cual retorna la cantidad de apariciones de secuencia en original.Debe considerar que cada elemento en original puede ser considerado unasola vez dentro de secuencia.

original={2,3,4,2,3,3,2,1,2,3} y secuencia={2,3} → 3original={2,5,5,6,5,6,5,6,6,5,6,5,2} y secuencia={5,6,5}→ 2

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 29 / 43

Page 30: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Ejercicio

Solucion

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 30 / 43

Page 31: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Solucion

public int contarApariciones(int [] original , int [] secuencia) {

int contador = 0;

for(int i = 0; i < original.length - secuencia.length; i++) {

boolean encontrada = true;

for(int j = 0; j < secuencia.length && encontrada; j++) {

if(original [i + j] != secuencia [j])

encontrada = false;

}

if(encontrada) {

contador ++;

i += secuencia.length - 1;

}

}

return contador;

}

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 31 / 43

Page 32: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Arreglos Multidimensionales

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 32 / 43

Page 33: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Arreglos Multidimensionales

Motivacion

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 33 / 43

Page 34: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Motivacion

• Claramente los arreglos nos ayudan a manejar listas de elementos loque hace mas potente nuestras aplicaciones.

• Ahora bien, ¿que pasa si quiero manejar un plano cartesiano?• Por ejemplo quiero manejar la distribucion de los alumnos dentro de la

sala.• Con un arreglo simple solo puedo manejarme en una dimension.• ¿Que hacemos?

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 34 / 43

Page 35: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Definicion

• Los arreglos son un conjunto de objetos.

• Los arreglos tambien son objetos.

∴ es posible tener arreglos cuyos elementos sean otros arreglos.

Ejemplo: Declaracion de arreglos multidimensionales

Auto [][] estacionamientos;

int [][][] mapasNumericos;

• En el primer caso tenemos un arreglo, donde cada elemento es unarreglo de Auto.

• En el segundo caso tenemos un arreglo, donde cada elemento es otroarreglo, en el cual cada elemento es un arreglo de enteros.

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 35 / 43

Page 36: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Creacion

Para la creacion hay dos alternativas:

1 Definir en la creacion el tamano de todas las dimensiones.

Ejemplo: Definir todas las dimensiones

Auto [][] estacionamientos = new Auto [3][4];

int [][][] mapasNumericos = new int [10][2][4];

2 No definir todas las dimensiones, sino que dejar que los elementospuedan tener distintos tamanos.

Ejemplo: Diferentes dimensiones

Auto [][] estacionamientos = new Auto [3][];

for(int i = 0; i < estacionamientos.length; i++)

estacionamientos[i] = new Auto[i+1];

• Sin importar como se haga la declaracion, siempre debe estar asignadoel tamano de todas las dimensiones, antes de asignar los elementos.

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 36 / 43

Page 37: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Acceso

• Para acceder a uno de los elementos se debe asignar un ındice paracada una de las dimensiones del arreglo.

• En caso de faltar al menos una dimension, se estara accediendo alsubarreglo correspondiente.

Ejemplo: Acceso

int [][][] mapasNumericos = new int [10][2][4];

...

int a = mapasNumericos [2][0][3];

int[] ar = mapasNumericos [8][1];

int [][] arr = mapasNumericos [5];

• Por supuesto que por ser arreglos todas las dimensiones estan en elrango [0, largo dimension[.

• Con el comando length se accede al largo de la primera dimension.• ¿Como accedo al largo de las otras dimensiones?

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 37 / 43

Page 38: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Arreglos Multidimensionales

Ejemplos

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 38 / 43

Page 39: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Ejemplo: Multiplicacion de matrices

Hagamos un metodo que multiplique dos matrices.

• El metodo debe recibir dos matrices de enteros y retornar el resultado.

• El metodo debe verificar que se puedan multiplicar ambas matrices.• Las columnas de la primera deben ser igual a las filas de la segunda.

• Amn ∗Bnp = Cmp

• cij =∑n−1

k=0 aikbkj

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 39 / 43

Page 40: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Solucion

Ejemplo: Multiplicacion de matrices

public int [][] multiplicar(int [][] m1, int [][] m2) {

if(m1[0]. length != m2.length)

return null;

else {

int [][] res = new int[m1.length ][m2[0]. length ];

for(int i = 0; i < res.length; i++) {

for(int j = 0; j < res[i]. length; j++) {

res[i][j] = 0;

for(int k = 0; k < m2.length; k++)

res[i][j] += m1[i][k]*m2[k][j];

}

}

return res;

}

}

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 40 / 43

Page 41: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

Ejemplo: Busqueda secuencia

Implemente el metodo public int contarApariciones(int[][]

tablero, int[] secuencia).Este metodo cuenta la cantidad de apariciones de la secuencia en eltablero.

• Las apariciones pueden ser tanto verticales como horizontales.

Un ejemplo

0 2 0 1 1

2 0 1 3 0

0 3 0 1 1

1 2 1 1 0

3 2 3 2 1

• Si la secuencia ingresada es {2, 0, 1}, el metodo debe retornar 3.• Hay 2 horizontales y una vertical.

C.Reveco Facultad de Ingenierıa/Universidad de los Andes/Chile ING1310– Clase 12 41 / 43

Page 42: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

public int contarApariciones(int [][] tablero , int[] secuencia) {

int apariciones = 0;

for(int i = 0; i < tablero.length; i++) {

for(int j = 0; j <= tablero[i]. length - secuencia.length; j++) {

boolean isSec = true;

for(int k = 0; k < secuencia.length; k++) {

if(secuencia[k] != tablero[i][j + k])

isSec = false;

}

if(isSec)

apariciones ++;

}

}

for(int i = 0; i <= tablero.length - secuencia.length; i++) {

for(int j = 0; j < tablero[i]. length; j++) {

boolean isSec = true;

for(int k = 0; k < secuencia.length; k++) {

if(secuencia[k] != tablero[i + k][j])

isSec = false;

}

if(isSec)

apariciones ++;

}

}

return apariciones;

}

Page 43: ING1310 { Introducci on a la Computaci on Arregloscreveco/progra/Arreglos... · 2012. 1. 9. · Resumen Clase Anterior Arreglos Unidimensionales Ejemplos Ejercicio Arreglos Multidimensionales

public int contarApariciones2(int [][] tablero , int[] secuencia) {

int apariciones = 0;

for (int i = 0; i < tablero.length; i++) {

for (int j = 0; j < tablero[i]. length; j++) {

int secHorizontal = 0;

int secVertical = 0;

for (int k = 0; k < secuencia.length; k++) {

if (j + k < tablero[i]. length

&& secuencia[k] == tablero[i][j + k])

secHorizontal ++;

if (i + k < tablero.length

&& secuencia[k] == tablero[i + k][j])

secVertical ++;

}

if (secHorizontal == secuencia.length)

apariciones ++;

if (secVertical == secuencia.length)

apariciones ++;

}

}

return apariciones;

}