Professional Documents
Culture Documents
Tema 7
Definicin
Estructuras de Datos
Contienen varios elementos relacionados del
mismo tipo
Estticos
Su tamao se define en el momento de su
creacin y no puede cambiar en tiempo de
ejecucin.
Representacin grfica
m
12
10
7
5
8
3
ndices
m[0] m[1] m[2] m[3] m[4] m[5] m[6] m[7] m[8] m[9]
Declaracin:
int[] m;
Creacin:
m=new int[10];
Nombre:
Elementos:
Tamao:
10
ndices:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Teminologa
Elemento: cada una de las variables que forman
el array. Todos los elementos tienen que ser del
mismo tipo de datos.
ndice: nmero entero que identifica la posicin
de cada elemento dentro del array. El ndice del
primer elemento es cero y la del ltimo el
tamao del array menos 1
Tamao: nmero de elementos del array.
Vectores: arrays de una dimensin.
Matrices: arrays de dos dimensiones.
Arrays=Arreglos
4
Propiedades
Un array es un objeto.
Todos los elementos del array son del mismo
tipo.
El tamao del array se establece cuando se
crea (con el operador new igual que cualquier
otro objeto).
Para acceder a un elemento del array se
especifica la posicin que ocupa dentro del
conjunto de elementos.
Se utilizan como contenedores para guardar
datos relacionados.
6
Declaracin
Para declarar un array se ponen los corchetes
para indicar que se trata de un array y no de
una simple variable del tipo especificado.
Hay dos formas de declarar un array:
tipo[] nombre; // esta es la que utilizaremos
tipo nombre[];
tipo: puede ser primitivo o referenciado
nombre: identificador del array
Creacin
m=new int[10];
Crea un objeto de tipo array
Reserva memoria para contener el array
Asigna una referencia a la variable de tipo array
(previamente declarada)
Inicializa el array
Inicializacin
Al crear el objeto array el constructor inicializa
todos sus elementos.
Byte0
short 0
int 0
long 0
float 0.0
double 0.0
char /u0000
boolean false
Object (Cualquier tipo de Objeto) null
9
ndice
Se llama ndice la posicin que ocupa
cada elemento en el array.
El ndice del primer elemento es 0 y la del
ltimo ser tamao-1.
Para acceder a un elemento necesitas
saber su ndice.
Si el ndice est fuera del rango permitido,
se produce una excepcin del tipo
ArrayIndexOutOfBoundsException.
10
Programa: Array01
Los elementos del array son inicializados
cuando se crean (no ocurre lo mismo con
las variables)
Para utilizar un elemento del array se
pone el nombre del array seguido de su
posicin entre corchetes.
Los elementos del array pueden ser
utilizados igual que las variables del
mismo tipo.
11
length
Cada array tiene un atributo de instancia
llamada length (constante),
Para conocer cuantos elementos tiene un
array escribiremos su nombre seguido de
.length. Por ejemplo: m.length
El uso ms frecuente de .length es en la
condicin de un bucle for. Por ejemplo:
for(int i=0;i<m.length;i++)
12
Errores frecuentes
Error en tiempo de ejecucin: Olvidar que
los ndices empiezan en cero y por tanto
el ndice de la ltima posicin es length-1
Error de compilacin: escribir m.length()
en lugar de m.length. El mtodo length()
es utilizado en String no en arrays.
Error de compilacin: Declarar un array
con un tamao. Por ejemplo int[100] m, en
lugar de int[] m= new int[100].
13
Programa: Array02
Hacer un programa que sin utilizar arrays:
pida 10 nmeros por teclado,
calcule y muestre la media y
muestre los nmeros mayores que la media.
14
Programa: Array02_v2
Hacer un programa que utilizando arrays:
pida 10 nmeros por teclado,
calcule y muestre la media y
muestre los nmeros mayores que la media.
15
Programa: Array02_v3
Hacer un programa que utilizando arrays:
los 10 nmeros se asignan en la creacin del
array,
calcule y muestre la media y
muestre los nmeros mayores que la media.
16
17
20
Programa: Array03
Programa en el que tras introducir 10
nmeros enteros por teclado, los muestre
en el orden en que se han introducido y en
orden creciente de sus valores.
21
Programa: Array04
Programa que tras introducir 10 nmeros
enteros los muestre en el orden en que se
han introducido y en el orden inverso al
que han sido introducidos.
22
Programa: Array05
Escribir un programa que pregunte 8
nmeros reales y presente a dos
columnas: los nmeros (en el orden en
que se dieron) y sus races cuadradas (si
de algn nmero no se puede hallar la
raz cuadrada se visualizar NO EXISTE).
23
Programa: Array06
Cargar por teclado las notas enteras de 7 alumnos:
Visualizar: Nota media y n de alumnos aprobados
Consultas: Nota del alumno que te indique el usuario y si est
por encima o debajo de la media. Validar los datos tecleados por
el usuario.
TECLEAR NOTAS
Alumno 1. Nota? 5
Alumno 2. Nota? 6
Alumno 7. Nota? 8
ESTADSTICAS
Nota media = 5.5
N de alumnos aprobados = 4
CONSULTAS
Teclee el n del alumno (0 para finalizar):2
Alumno 2. Su nota es 6. Est por encima de la media.
Teclee el n del alumno (0 para finalizar):_
24
Utilizar redondeo
Utiliza el mtodo redondeo, de la clase
MisMetodos, en el ejercicio Array06 para
que la media se calcule y visualice con slo
2 decimales.
26
Programa: Array06_v2
Modificar el programa anterior para que permita introducir
las notas enteras de n alumnos, siendo n un nmero
introducido por el usuario al principio del programa.
Cuntos alumnos hay? 10
Alumno 1. Nota? 5
Alumno 2. Nota? 6
Programa: Array07
Cargar por teclado el nombre y apellidos de un alumno y
sus cuatro notas.
Visualizar:
Programa: Array08
Cargar por teclado nmeros entre 1 y 15 hasta que el usuario teclee un 0.
Deseamos calcular y visualizar la siguiente informacin:
15
0
El usuario ha tecleado 16 nmeros
Los nmeros ms tecleados lo han sido 4 veces y son los nmeros:
3
9
29
Programa: Array09
Disear un programa que nos permita tirar un dado y visualizar la estadstica
(en porcentaje) de cuantas veces ha salido cada valor.
El nmero de tiradas lo pone el usuario.
Nmero de tiradas (0 para fin): 8
Numero 3
Numero 3
Numero 5
Numero 4
Numero 1
Numero 2
Numero 1
NUMERO PORCENTAJE
1
25.0%
2
12.5%
3
25.0%
4
12.5%
5
0.0%
6
0.0%
Nmero de tiradas (0 para fin): _
30
Arrays y mtodos
Los mtodos tambin pueden devolver arrays.
static int[] cargaArray(int n){
int[] a = new int[n];
for (int i=0;i<a.length;i++)
a[i] = (int) (Math.random() * 20);
return a;
}
31
Programa: Array09_v2
Modificar el programa Array09 para que
incluya estos dos mtodos:
int[] lanzamientos(int nLanz)
32
Ejemplo
public static void main(String[] args){
int[] m;
m=lanzamientos(n);
verPorcentajes(m);
..
}//Fin main
33
(1)
null
(5)
frecuencias
(4)
nLanz
10
(4)
(5)
Programa: Array10
Hacer un programa que tras introducir los
nombres de los 10 primeros clasificados en
el ranking de la ATP y sus puntos. Permita
posteriormente consultar esos datos.
35
Utilizar:
Un mtodo para introducir los nombres y los puntos en los arrays
36
Array10 (Consultar)
Una vez introducidos los datos, el programa mostrar un men como el siguiente:
ATP. Ranking. Consulta
-------------------------------1. Nmero, 2. Nombre, 3. Listado, 4. Fin
Teclee n de opcin:
1.
2.
3.
Pide el n y muestra el nombre y puntos del tenista que ocupa ese puesto
Pide el nombre y muestra la posicin que ocupa y sus puntos.
Listado completo de los tenistas almacenados
En los 3 casos una vez mostrado los datos vuelve al men principal
Validaciones:
Utilizar:
37
Programa: Array11
Una empresa posee 5 sucursales en diferentes
provincias de Castilla y Len. Escribe un programa
que pregunte para cada sucursal:
la provincia,
el nmero de ventas efectuadas y
el importe de cada una de las ventas.
Array12 (men)
2. Visualizar el siguiente men:
1. Visualizar Datos
2. Nombre alumno de mayor edad
3. Nombre de alumnos con ms de 2 hermanos
4. Salir
Introducir un numero (1-4):
41
Array12 (opciones)
1. Visualizar Datos: Nos informa sobre todos los datos metidos
Alumno pepe:
23 aos y 1 hermano(s)
Alumno juan:
39 aos y 1 hermano(s)
Alumno ana:
54 aos y 3 hermano(s)
42
Array12_v2
Modificar el ejercicio anterior declarando las
variables:
nombres
edades
hermanos
numAl
43
Array13
Un examen tipo test tiene 15 preguntas, con 4
posibles respuestas: a, b, c y d.
Slo hay una respuesta correcta en cada
pregunta
Se desea realizar un programa que corrija el
examen dando el usuario las respuestas de
cada pregunta.
Las respuestas correctas son: 1=a, 2=d, 3=a,
4=a, 5=b, 6=c, 7=a, 8=c, 9=c, 10=c, 11=d, 12=b,
13=b, 14=a, 15=c
44
45
char[] respuestas=adaabcacccdbdac.toCharArray();
respuestas[0], respuestas[1],
46
Array14: Qu hace?
class Array14
{
public static void main(String[] args)
{
int[] m1={1,2,3,4,5,6};
int[] m2;
m2=m1;
m2[0]=10;
System.out.println("m1\tm2");
for(int i=0;i<m1.length;i++)
{
System.out.println(m1[i]+"\t"+m2[i]);
}
}//Fin main
}//Fin class
47
m2
1
10
int[] m1={1,2,3,4,5,6};
int[] m2;
m2=m1;
m2[0]=10;
48
49
class Array15
{
public static int[] copiarArray(int[] arrayOrigen)
{
int[] arrayDestino=new int[arrayOrigen.length];
for(int i=0;i<arrayOrigen.length;i++)
arrayDestino[i]=arrayOrigen[i];
return arrayDestino;
}
public static void main(String[] args)
{
int[] m1={1,2,3,4,5};
int[] m2=copiarArray(m1);
m2[0]=10;
System.out.println("m1\tm2");
for(int i=0;i<m1.length;i++)
{
System.out.println(m1[i]+"\t"+m2[i]);
}
}//Fin main
}//Fin class
50
m1
arrayOrigen
arrayDestino
10
10
20
30
40
50
60
int[] m2=copiarArray(m1);
m2[0]=10;
m2
{
int[] arrayDestino=new int[arrayOrigen.length];
for(int i=0;i<arrayOrigen.length;i++)
arrayDestino[i]=arrayOrigen[i];
return arrayDestino;
}
51
Arrays de 2 dimensiones
int [][] m;
m= new int[2][3];
System.out.println(m.length);
System.out.println(m[0].length);
System.out.println(m[1].length);
m
Filas
0
Columnas
0
1
2
F
Columnas
0
1
2
Columnas
0
1
2
a
s
Inicializar un array de 2
dimensiones
La primera forma es en la propia declaracin del array.
la utilizaremos cuando sepamos de antemano el contenido del array.
int numeros[][] ={{1,2,3,4},{5,6,7,8}};
numeros[1][3]=8;
numeros[1][3]=cs1.Keyboard.readInt();
53
Array201
Hacer un programa que cargue por teclado los
elementos de una tabla de enteros de 3 filas y
cuatro columnas.
Al final muestra la tabla completa y la suma de
los valores de sus elementos.
m
10 -12 93
12
22
19
40
-8
99
34 110
54
Ejemplo de ejecucin
Cargar tabla
---------------Fila 0:
m[0][0]: 10
m[0][1]: -12
m[0][2]: 93
m[0][3]: 12
Fila 1:
m[1][0]: 22
m[1][1]: 19
m[1][2]: 40
m[1][3]: -8
Fila 2:
m[2][0]: 99
m[2][1]: 3
m[2][2]: 34
m[2][3]: 110
Tabla
------------------------10 -12 93 12
22 19 40 -8
99
3 34 110
Suma 512
10 -12 93
12
22
19
40
-8
99
34 110
55
Array201_v2
Modificar el programa anterior para que muestre
tambin la suma de las filas y de las columnas.
Tabla
------------------------10 -12 93 12
22 19 40 -8
99
3 34 110
Sumas filas:
fila 0=103
fila 1= 73
fila 2=246
Suma columnas:
columna 0=131
columna 1= 10
columna 2=167
columna 3=114
Suma TOTAL = 512
56
Array202
Hacer un programa que inicialice los
elementos de un array de dos dimensiones
de 2 filas y 4 columnas con los valores 1, 2,
3, 4, 5, 6, 7, 8. Los valores 1, 2, 3 y 4 se
asignarn a los elementos de la primera fila
y los restantes en la segunda.
57
Array203
Cargar por teclado los valores de una matriz cuadrada (de 4x4). Visualizar la matriz, la
suma de cada fila y la suma de la diagonal.
Fila 0:
Dato[0][0]? :1
Dato[0][1]? :2
Dato[0][2]? :3
Dato[0][3]? :4
.
.
Fila 3:
Dato[3][0]? :4
Dato[3][1]? :5
Dato[3][2]? :6
Dato[3][3]? :7
Array
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
La suma de la diagonal es: 16
->10
->26
->15
->22
58
Array204
59
Array204
int[][] fechas = new int[12][31];
"\t"
60
61
62
Array204_v2
Modificar el ejercicio anterior aadiendo una
columna con los nombres de nmeros de
los meses (columna 0) y una fila con los
nmeros de los das (fila 0) tal y como se
muestra en la diapositiva siguiente.
63
Array204_v2
int[][] fechas = new int[13][32];
64
Array204_v3
Modificar el programa Array204 para que
muestre los nombres de los meses.
65
Array205
En un Congreso se han inscrito 16 participantes. Escribe
una aplicacin que permita controlar su asistencia durante
los 4 das que dura el congreso.
66
67
68
Array206
Todos los aos se celebra en Longs (Zaragoza) una
competicin micolgica, en la que se recogen setas de 4
tipos distintos.
Los participantes deben recoger todas las setas que
puedan e irlas entregando al jurado. Un mismo
concursante puede realizar varias entregas.
La competicin termina cuando el nmero total de setas
entregadas (entre todos los participantes) supera el
centenar. Al ltimo participante en entregar se le
contabilizan todas las setas recogidas aunque ya se
hayan superado las 100.
La comisin que organiza el concurso te encarga
realizar una aplicacin que permita controlar el
desarrollo de la competicin.
69
Array206: Inscripcin
70
Array206: Entregas
Cada vez que llegue
un participante a la
mesa del jurado, la
aplicacin pedir el
nmero del
participante as como
la cantidad de cada
tipo de setas que
entrega.
71
Array206: Ganadores
Terminada la competicin, la
aplicacin dar los nombres de los
4 ganadores (uno para cada tipo
de seta).
Se considerar ganador a aquel
que haya recogido la mayor
cantidad de setas de un tipo
determinado (en caso de empate,
el ganador se elegir por sorteo
entre ellos).
No hay ganador de un tipo de
seta si ningn concursante ha
cogido setas de ese tipo.
72
Array207
Un array bidimensional m de n filas y n
columnas es simtrico si para todos los
elementos se cumple m[x][y]==m[y][x].
Hacer un mtodo que devuelva true
cuando un array es simtrico y false
cuando no lo sea.
Hacer un programa Array207 para probar
el mtodo anterior.
73
Array208
Hacer un programa que reparta aleatoriamente
las 40 cartas de una baraja espaola a 4
jugadores (10 cartas a cada jugador) y lo
muestre en pantalla.
Baraja espaola:
4 palos: oros, copas, espadas y bastos
10 cartas en cada palo: 1, 2, 3, 4, 5, 6, 7, Sota,
Caballo y Rey
Arrays
Ejercicios de repaso
75
Histograma
76
Histograma (programa)
Escribir un programa Histograma que, tras
leer las notas de los alumnos en una
asignatura, genere y visualice el
histograma de las notas redondeadas a
valores enteros: 0, 1, 2,...10
Las notas ledas desde el teclado son
valores de tipo real y el nmero de
alumnos no es fijo aunque siempre es
menor de 100.
77
78
Primitiva
El juego consiste en que el apostante elige al
comprar su boleto entre los nmeros 1 al 49, un
determinado nmero de ellos, para acertar la
Combinacin Ganadora en el sorteo
correspondiente.
El sorteo consistir en la extraccin de 6 bolas
de las 49 que se extraen del bombo y una
sptima bola que ser el complementario.
El boleto obtendr premio cuando acierte 3, 4,
5, 5+complemetario 6 nmeros de la
combinacin ganadora.
79
Nmeros
Apuestas
Precio
28
28
84
84
10
210
210
11
462
462
80
Primitiva_v2
Modificar el programa anterior para que una vez
vendidos los boletos realice el sorteo y muestre
los boletos premiados, el n de aciertos y el
premio. El nmero de boletos vendidos nunca va a
ser mayor de 200.
N de aciertos
Premio
1.281.755,30
5+Complem.
17.147,23
2.048,76
60,75
8,00
81
Arrays
2 Trimestre
82
Argum01: Cdigo
Visualizar los argumentos pasados a un programa.
class Argum01
{
public static void main(String [] args)
{
for (int i=0 ; i<args.length ; i++)
System.out.println("Argumento n "+(i+1)+":"+args[i] );
}
}
84
Argum01: Ejecucin
85
Argum02
Hacer un programa que reciba exactamente
tres argumentos
El primero una palabra
El segundo un nmero
El tercero el carcter i o el d
Argum03
Escribir un programa, al que se le pasa como
argumentos en la linea de ordenes, dos nmeros
enteros entre (-100 y 200). El programa debe:
Argum04
Se desea realizar un histograma con los pesos de los alumnos de un
determinado curso.
Peso Numero de alumnos
___________________________________________
27
*
55
****
El nmero de asteriscos se corresponde con el nmero de alumnos del
peso especificado. En el histograma slo aparecern los pesos que se
corresponden con 1 o ms alumnos.
Suponer que los pesos estn comprendidos entre los valores 10 y
PESO MAXIMO Kg.
Al programa se le pasan como parmetros el PESO MAXIMO (mnimo
80 y mximo 100) y el nmero de alumnos del curso (mnimo 1 y
mximo 20).
Realizar un programa que lea los pesos e imprima el histograma
correspondiente.
88
Ordenacin de Arrays
El metodo sort de la clase Arrays del paquete
java.util permite ordenar arrays siempre y
cuando contenga datos primitivos.
Arrays.sort (arrayParaOrdenar)
89
Ordenar01_v1
Hacer un programa que pregunte los
nombre de 5 personas y los muestre
ordenados alfabticamente.
90
Mtodo de la burbuja
Comparamos el primer elemento con el segundo, el segundo con el
tercero, el tercero con el cuarto, etc. Cuando el resultado de una
comparacin sea "mayor que", se intercambian los valores de los
elementos comparados. Con esto conseguimos llevar el valor mayor
a la posicin n.
Repetimos el punto 1, ahora para los n-1 primeros elementos de la
lista. Con esto conseguimos llevar el valor mayor de stos a la
posicin n-1.
Repetimos el punto 1, ahora para los n-2 primeros elementos de la
lista y as sucesivamente.
La ordenacin estar cuando al repetir el isimo proceso de
comparacin no haya habido ningn intercambio o, en el peor de
los casos, despus de repetir el proceso de comparacin descrito n1 veces.
91
for(i=0;i<4;i++)
{
if(m[i]>m[i+1];
intercambia(i, i+1);
}
for(i=0;i<3;i++)
{
if(m[i]>m[i+1];
intercambia(i, i+1);
}
for(i=0;i<2;i++)
{ }
for(i=0;i<1;i++)
{}
92
N fijo de pasadas
public static void bubbleSort1(int[] x)
{
int n = x.length;
for (int pass=1; pass < n; pass++)
{
for (int i=0; i < n-pass; i++)
{
if (x[i] > x[i+1])
{ // intercambiar los elementos
int temp = x[i];
x[i] = x[i+1];
x[i+1] = temp;
}
}
}
}
93
94
Ordenar01_v2
Hacer un programa que pregunte los
nombre de 5 personas y los muestre
ordenados alfabticamente utilizando el
mtodo de la burbuja.
95
Ordenar02_v1
Hacer un programa que pregunte los
nombres y sueldos de 5 personas y los
muestre ordenados por el nombres. (Utilizar
el mtodo de la burbuja)
96
Ordenar02_v2
Hacer un programa que pregunte los
nombres y sueldos de 5 personas y los
muestre ordenados por el sueldo en orden
descendente.
97