Post on 07-Aug-2018
ARREGLOS (ESTÁTICOS) Corina Flores Villarroel
Corin
a F
lore
s V. - U
MS
S
1
CONTENIDO
Introducción
¿Qué es un arreglo?
Definición
Declaración de arreglos
Definir el tamaño de arreglos
Operaciones con arreglos
Inicialización/Asignación de arreglos
Lectura/escritura de un arreglo
Recorrido de un arreglo
Actualización(insertar,. Modificar, borrar)
Ordenar un arreglo
Buscar un elemento en un arreglo
Corin
a F
lore
s V. - U
MS
S
2
INTRODUCCIÓN
Hasta ahora hemos empleado una computadora
por ejemplo para sacar promedios de 3 notas,
pero además puede servir muy bién
Para 10.000 notas!
Entonces, … será que es preciso ¿Definir 10.000
variables?
¿Escribir métodos con 10.000 parámetros?
Corin
a F
lore
s V. - U
MS
S
3
INTRODUCCIÓN
class Estudiante{
int nota1, nota2, nota3,……nota10000;
}
double promedio(int n1, int n2,
…,n10000);
Corin
a F
lore
s V. - U
MS
S
4
INTRODUCCIÓN
¿Cómo decirle a la computadora que nota1 ... nota10000 son todas notas?
¿Cómo acceder a todas con un ciclo for?
Se hace necesario especificar “grupos” de variables
Todas del mismo tipo.
Todas con un nombre parecido.
Definidas con una secuencia específica.
Corin
a F
lore
s V. - U
MS
S
5
VEAMOS UN EJEMPLO CONCRETO
Se tienen los sueldos de un grupo de 70 empleados de una empresa y necesitamos saber ¿Cuántos de estos empleados tienen un sueldo superior al promedio del grupo?.
Corin
a F
lore
s V. - U
MS
S
¿Cómo resolveríamos el problema?
6
UN ASOLUCIÓN SERÍA …
1. Declarar 70 variables para representar los sueldos de 70 empleados
2. Calcular el promedio de los sueldos
3. Comparar cada una de las variables de los sueldos de cada empleado
3.1 Si es mayor al promedio, contar en una
variable contador
3.2 Si No, volver a 3
4. Imprimir contador
Corin
a F
lore
s V. - U
MS
S
7
UN ASOLUCIÓN SERÍA …
Analicemos …. 1. ¿Cuántas variables tendríamos que
declarar? , y ¿que pasaría si no fueran 70 empleados sino 1345?
2. ¿Cuántas comparaciones tendríamos que hacer?
3. ¿Cómo se imaginan que sería el programa? 4. ¿Cuántas líneas de código tendríamos? 5. ¿Qué crees que se podría simplificar?
Corin
a F
lore
s V. - U
MS
S
8
¿QUÉ ES UN ARREGLO?
Un arreglo en Java es un grupo de posiciones de
memoria contiguas, todas las cuales tienen el
mismo nombre y el mismo tipo.
Un arreglo es:
Una variable o identificador que define un “grupo” de
variables.
Define un nombre
Define un tipo
Define el tamaño del “grupo”.
Las variables dentro del “grupo” se conocen como
elementos y estan ordenados en posiciones
Corin
a F
lore
s V. - U
MS
S
9
DEFINICIÓN
Corin
a F
lore
s V. - U
MS
S
Un arreglo es una colección de elementos del mismo tipo que se
reconocen por un solo identificador.
Para acceder a los elementos individuales de un arreglo se utiliza un
subíndice que debe ser un número entero.
56 56
91 0
-3224
100
62
12
a[0]
a[1]
a[2]
a[3] a[4]
a[5]
a[6]
a[7]
Arreglo con nombre a
Número de la posición de cada elemento
10
DEFINICIÓN
Los arreglos pueden ser: de una dimensión (vectores) o de 2 o más
dimensiones (matrices)
una dimensión(fila) Multidimensión(fila, columna) 11
Corin
a F
lore
s V. - U
MS
S
DECLARACIÓN DE ARREGLOS
Se sigue la siguiente sintaxis:
Paso 1:
Corin
a F
lore
s V. - U
MS
S
<tipoDato> <nombre> [];
Cualquier
tipo de dato
válido
Cualquier
nombre válido
Corchetes
obligatorios
Ejemplo: int [] numeros;
<tipoDato> [] <nombre>;
12
CREACIÓN DE ARREGLOS
Los arreglos ocupan espacio en memoria. En java
se usa el operador new para asignar espacio de
almacenamiento al número de elementos
requerido por cada arreglo.
Corin
a F
lore
s V. - U
MS
S
13
CREACIÓN DE ARREGLOS
Se sigue la siguiente sintaxis:
Paso 2:
Corin
a F
lore
s V. - U
MS
S
<nombre> = new <tipoDato> [<tamaño>];
Operador Constante que
especifica el
tamaño
Ejemplo: numeros = new int [50];
14
INICIALIZACIÓN DEL ARREGLO
El arreglo en java empieza en la posición 0, es decir, el
primer elemento del arreglo ocupa la posición de 0, de ahí
que el for comienza en 0.
Corin
a F
lore
s V. - U
MS
S
Una vez creado el arreglo, se puede proceder a llenar con elementos dispuestos en cada posición. Ejemplo:
for(int j =0; j<50; j++) { numeros[j] = j++; }
15
INICIALIZACIÓN DEL ARREGLO
numero[0]
Corin
a F
lore
s V. - U
MS
S
El resultado será: numeros[0] = 1, numeros[1] = 2, numeros[2] = 3, …. numeros[49] = 50
1 2 3 … … 50
numeros
numero[1] numero[2] numero[49]
16
INICIALIZACIÓN DEL ARREGLO
Corin
a F
lore
s V. - U
MS
S
Los arreglos se pueden definir como objetos en los que podemos guardar mas de una variable, es decir, al tener un único arreglo, este puede guardar múltiples variables de acuerdo a su tamaño o capacidad.
17
INICIALIZACIÓN DEL ARREGLO
Es importante recordar que las variables guardadas deben ser del mismo tipo.
Corin
a F
lore
s V. - U
MS
S
Por ejemplo: Si tenemos un arreglo de tipo Numérico que puede
almacenar 50 variables, solo podrá almacenar 50 números diferentes, no otras variables como caracteres o Strings, etc.
18
INICIALIZACIÓN DEL ARREGLO
Corin
a F
lore
s V. - U
MS
S
Por tanto, si un arreglo tiene n elementos, la
última localidad está dada por n-1.
0 n-1
n elementos
19
INICIALIZACIÓN DEL ARREGLO
Corin
a F
lore
s V. - U
MS
S
Java también permite crear e inicializar un arreglo de manera directa, por ej.:
char [] lista = {‘r’, ‘a’, ‘e’,’r’,’w’}; DONDE … el arreglo de nombre lista contendrá en su
posición 0 (cero) a la letra r, en la posición 1 la letra a y así sucesivamente.
20
INICIALIZACIÓN DEL ARREGLO
Corin
a F
lore
s V. - U
MS
S
De manera similar se puede inicializar un arreglo de String, por ej.:
String [] colores= {“rojo”, “amarillo”, “verde”};
En este caso las cadenas van en comilla doble.
21
ACCESO A UN ARREGLO
Corin
a F
lore
s V. - U
MS
S
Para acceder a los elementos de un arreglo
debemos referirnos a una posición o elemento en
particular del arreglo, especificando el nombre
del arreglo y el número de posición de ese
elemento en el arreglo.
Ejemplo
a[i] = 0;
numeros[3] = 9;
22
ACCESO A UN ARREGLO
Corin
a F
lore
s V. - U
MS
S
1. Los arreglos definen “grupos” de elementos.
2. Cada “elemento” se representa por un indice
secuencial.
3. El indice varia entre 0 y (tamaño-1).
4. Cada elemento es una variable común y
silvestre.
5. Para acceder a una de estas variables (sea
para lectura y escritura) se utiliza la
notación “[<indice>]”
23
ACCESO A ARREGLOS
Corin
a F
lore
s V. - U
MS
S
<arreglo>[<indice>] = <sentencia>;
<variable> = <arreglo>[<indice>];
Modificando el elemento correspondiente al indice
Recuperando el elemento correspondiente al indice 24
EJEMPLO 1
Corin
a F
lore
s V. - U
MS
S
class Ejemplo{
int [] numeros = new int[10];
int i;
numeros[0]=0;
for(i=1;i<10;i++)
numeros[i]= numeros[i-1]+1;
for(i=0;i<10;i++)
System.out.println(”elemento ” + i+,numeros[i]);
}
Asignando un primer elemento al arreglo
“numeros”
Recupera el valor del elemento i
Modificando el valor del elemento i por el
elemento i-1 25
NÚMERO DE ELEMENTOS DE UN ARREGLO
Todos los arreglos tienen una propiedad que retorna su
longitud, es decir el tamaño con el cuál han sido creados,
para ello utilizan el método length que proporciona el
tamaño de un arreglo. De la siguiente forma:
Corin
a F
lore
s V. - U
MS
S
26
nombreArreglo.length
DOS FORMAS DE ACCEDER A UN ARREGLO
1. Utilizando el método length que proporciona el
tamaño de un arreglo.
Corin
a F
lore
s V. - U
MS
S
27
int arreglo[ ] = new int[20]; System.out.println("Longitud arreglo : " + arreglo.length); int i; /* Se asignaran los valores : 0, 10 , 20, 30 ,..., 180, 190. */ for(i = 0; i < arreglo.length; i++) arreglo[i] = i * 10; System.out.println("Datos del arrreglo : "); System.out.println(); for(i =0; i < arreglo.length; i++) System.out.println(arreglo[i]);
DOS FORMAS DE ACCEDER A UN ARREGLO
2. Indexación: Accede a los elementos de un arreglo a
través de su índice. El índice siempre tiene un rango
entre 0 y N-1, siendo N el tamaño del areglo
Corin
a F
lore
s V. - U
MS
S
28
for(i=1;i<10;i++)
numeros[i]= numeros[i-1]+1;
VEAMOS ALGUNOS EJEMPLOS
Resolver los siguientes ejercicios para entregar el
día jueves 20/11/2014 Guardar en un arreglo 50 números generados
aleatoriamente entre 0 y 100, mostrar el arreglo y eliminar
del arreglo los números repetidos y mostrar sin repetidos.
Crear un arreglo de dos dimensiones (fila, columna) para
representar los 7 días de la semana y sus respectivas
temperaturas. Luego hacer un método para mostrar el
arreglo y otro método de averiguar cuál ha sido el día con
mayores temperaturas de la semana. Las temperaturas
asuman como valores enteros.
Corin
a F
lore
s V. - U
MS
S
29
OPERACIONES CON ARREGLOS
Hasta aquí ya sabemos
Asignar
Acceder
Recuperar
Hacer recorridos sobre arreglos
Nos falta conocer …
¿Cómo realizar las búsquedas y el ordenamiento de
elementos en un arreglo?
Corin
a F
lore
s V. - U
MS
S
30
OPERACIONES CON ARREGLOS
Hasta aquí ya sabemos
Asignar
Acceder
Recuperar
Hacer recorridos sobre arreglos
Nos falta conocer …
¿Cómo realizar las búsquedas y el ordenamiento de elementos en un arreglo?
… para ello deben bajar el archivo Ordenamiento-Busqueda.pdf del sitio www.cs.umss.edu.bo
Corin
a F
lore
s V. - U
MS
S
31
ARREGLOS DE DOS DIMENSIONES
Corin
a F
lore
s V. - U
MS
S
Se conocen también como matrices. Por ejemplo, en matemáticas una matriz es una tabla bidimensional de números tal como se muestra
Filas
Columnas
32
ARREGLOS DE DOS DIMENSIONES
Corin
a F
lore
s V. - U
MS
S
En Java una matriz se declara siguiendo la sintaxis:
tipoDato variable[filas][columnas];
Luego se reserva memoria con new definiendo el tamaño de las filas y columnas. Así:
variable = new tipoDato [n][m];
Donde: n, es el tamaño de filas m, es el tamaño de columnas
33
OPERACIONES CON ARREGLOS DE DOS
DIMENSIONES
Corin
a F
lore
s V. - U
MS
S
Al igual que con los arreglos de una dimensión visto en la clase anterior, con los arreglos de dos dimensiones se puede:
1. Crear 2. Llenar 3. Acceder 4. Buscar 5. Ordenar
Además, las matrices pueden … 6. Sumarse 7. Multiplicarse
34
OPERACIONES CON ARREGLOS DE DOS
DIMENSIONES
Corin
a F
lore
s V. - U
MS
S
1. Creación de una matriz
int matriz[][] = new int[3][3];
Se puede crear una matriz de diferentes formas, veamos:
Otra manera de crear y llenar o instanciar una matriz …
int matriz[5][4] = {{2,3,4,2} , {2,0,6,1} , {3,5,5,0} , {2,2,1,1} , {3,2,5,6}};
35
OPERACIONES CON ARREGLOS DE DOS
DIMENSIONES
Corin
a F
lore
s V. - U
MS
S
1. Creación y llenado de una matriz
Otra forma …
int matriz[5][4] = {{2,3} , {1} , {3,5,5,0} , {2} , {3}};
36
OPERACIONES CON ARREGLOS DE DOS
DIMENSIONES
Corin
a F
lore
s V. - U
MS
S
2. Llenado de una matriz
matriz[0][0] = 2;
matriz[0][1] = 4;
matriz[0][2] = 4;
matriz[1][0] = 6;
matriz[1][1] = 6;
matriz[1][2] = 9;
matriz[2][0] = 8;
matriz[2][1] = 10;
matriz[2][2] = 12;
Otra forma …
37
OPERACIONES CON ARREGLOS DE DOS
DIMENSIONES
Corin
a F
lore
s V. - U
MS
S
2. Llenado de una matriz desde teclado
for (int x=0; x < matriz.length; x++)
{
for (int y=0; y < matriz[x].length; y++)
{
System.out.println("Introduzca el elemento [" + x + "," + y +
"]");
matriz[x][y] = pantalla.nextInt();
}
}
Para llenar desde teclado vamos a utilizar la siguiente técnica
empleando dos ciclos anidados que iteraran según el número de
elementos que tenga la matriz en cada índice. El tamaño de la
matriz que nos sirve para definir el ciclo lo conseguimos mediante
la propiedad .length. Algo así:
38
OPERACIONES CON ARREGLOS DE DOS
DIMENSIONES
Corin
a F
lore
s V. - U
MS
S
2. Llenado de una matriz desde teclado
Para proceder la lectura desde teclado utilizamos la clase Scanner,
desde el principio del programa
import java.util.Scanner;
…
// Creamos una matriz de 3x3
int matriz[][] = new int[3][3];
Scanner pantalla = new Scanner(System.in) ;
39
OPERACIONES CON ARREGLOS DE DOS
DIMENSIONES
Corin
a F
lore
s V. - U
MS
S
3. Accediendo a elementos de una matriz
for (int x=0; x < matriz.length; x++)
{
for (int y=0; y < matriz[x].length; y++)
{
System.out.println (matriz[x][y]);
}
}
Podemos acceder al contenido de la matriz para imprimir
sus elementos. Así:
40
OPERACIONES CON ARREGLOS DE DOS
DIMENSIONES
Corin
a F
lore
s V. - U
MS
S
3. Accediendo a elementos de una matriz
for (int x=0; x < matriz.length; x++)
{
for (int y=0; y < matriz[x].length; y++)
{
System.out.println (matriz[x][y]);
}
}
Podemos acceder al contenido de la matriz para imprimir
sus elementos. Así:
41
OPERACIONES CON ARREGLOS DE DOS
DIMENSIONES
Corin
a F
lore
s V. - U
MS
S
4. Buscar un elemento en una matriz
Se aplican los mismos algoritmos de búsqueda que
para una matriz unidimensional
42
OPERACIONES CON ARREGLOS DE DOS
DIMENSIONES
Corin
a F
lore
s V. - U
MS
S
5. Ordenar elementos de una matriz
Se aplican los mismos algoritmos de
ordenamiento que para una matriz
unidimensional
43
OPERACIONES CON ARREGLOS DE DOS
DIMENSIONES
Corin
a F
lore
s V. - U
MS
S
6. Suma de matrices
void sumaMatrices(double a[3][3],double
b[3][3],double c[3][3])
{
for(int i = 0; i< 3 ; i++)
for(int j = 0; j< 3 ; j++)
c[i][j] = a[i][j] + b[i][j];
}
44
OPERACIONES CON ARREGLOS DE DOS
DIMENSIONES
Corin
a F
lore
s V. - U
MS
S
6. Suma de matrices
void multiplicaMatrices(double a[3][3],double
b[3][3],double c[3][3])
{
for(int i = 0; i< 3 ; i++)
for(int j = 0; j< 3 ; j++){
c[i][j] = 0;
for(int k = 0; k< 3 ; k++)
c[i][j] += a[i][k]*b[k][j];
}
}
45
OPERACIONES CON ARREGLOS DE DOS
DIMENSIONES
Corin
a F
lore
s V. - U
MS
S
7. Multiplicación de matrices
Tarea que deben resolver para entregar el jueves!!
46