programación 1: estructuras de datos
TRANSCRIPT
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Programación 1
Estructuras de datos
Docentes de Programación
Editado por Angel Vázquez-Patiñ[email protected]
Departamento de Ciencias de la Computación
Universidad de Cuenca
19 de diciembre de 2016
1 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Overview
Objetivos
Arreglos
Matrices
Fuentes
2 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Objetivos
I Entender el uso de arreglos
I Entender el uso de matrices
I Estudiar operaciones de acceso de elementos
I Utilizar arreglos y matrices como parámetros defunciones
I Escribir funciones que devuelvan arreglos y matrices
I Desarrollar ejercicios prácticos
3 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Arreglos de Datos
De�nition (Arreglo o array)Un espacio de memoria que permite almacenar una colecciónde elementos, todos del mismo tipo.
Imagine un arreglo como una secuencia contigua de espaciosde memoria, en cada una de las cuales se puede guardar unelemento de una colección (todos del mismo tipo)
4 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Arreglos de Datos
I Arreglo de 8 elementos, cada uno puede almacenar undato
I La dimensión es el número de elementos en el arreglo
I El índice es un número que identi�ca de manera única acada elemento con un número
I En c, c++ o Java el índice comienza en cero
5 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Arreglos de Datos
I Los lenguajes de programación permiten que elprogramador declare los arreglos de cualquier tipo yprácticamente de cualquier tamaño
I En Java, un arreglo se declara con tipo[] nombre =new tipo[n];
I Se debe poner un nombre nemotécnico
I Ejemplo String[] palabras = new String[15];
6 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Arreglos de Datos: índices
Índices
I Permite referirse de forma especí�ca a cualquierelemento del arreglo, tanto para guardar como paraobtener el dato
I Para referirse a un elemento particular se usanombre[indice]
I E.g., para guardar un dato se usa nombre[0] = 10;
7 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Arreglos de Datos: problemas
Problemas
I Cree un arreglo de 5 elementos, asígnele valoresnuméricos manualmente y muéstrelos en pantalla
I Cree un arreglo de 10 elementos, inserte los valoresnuméricos que desee de la manera que quiera y muestreen pantalla la media de todos los valores
I Cree un arreglo donde usted indique la dimensión porteclado y cree una función que rellene el arreglo con losmúltiplos de un número pedido por teclado. E.g., side�nió un arreglo de 5 elementos y eligió un 3 en lafunción, el arreglo contendrá 3, 6, 9, 12, 15. Finalmente,muéstrelos en pantalla usando otra función distinta
8 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Arreglos de Datos: problemas
Problemas
I Cree dos arreglos que tengan el mismo tamaño (lopedirá por teclado), en uno de ellos almacenará nombresde personas como cadenas, en el otro almacenará lalongitud de los nombres. Para esto puede usar la funcióncadena.length(). Muestre por pantalla el nombre y lalongitud que tiene. Puede usar funciones
9 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Arreglos de Datos: problemas
Problemas
I Un histograma para una colección de datos es unasecuencia de parejas de la forma (d, f), donde d es undato y f es su frecuencia en la colección. Por ejemplo,suponga que se le pide a 20 personas cali�car con lasletras a b c d y e el desempeño del gobierno actual, yque se obtienen las siguientes respuestas: c b c a b c d ee a b b d c a c c b d a. Considere el problema deimplementar una función que haga un histograma parauna lista de hasta 100 valores, donde cada valor es unnúmero entero comprendido en el intervalo 1 al 5
10 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Arreglos de Datos: problemas
ProblemasImplemente una función que cali�que un examen de selecciónmúltiple. En cada una de las preguntas del examen, se debióelegir una de cinco opciones: A, B, C, D y E. Los parámetros:
I Cada una de las respuestas dadas por el estudiante
I Las respuestas correctas
La salida esperada es la nota obtenida. Esta notacorresponde al número de aciertos que tuvo el estudiante
11 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Arreglos de Datos: problemas
ProblemasEscriba un algoritmo que lea un arreglo de números enteros,y un número x, y escriba en la pantalla las posiciones delarreglo donde está x. Por ejemplo, si el arreglo tiene losnúmeros 1, 2, 3, 100, 23, 2, 2 y 1 y x es 2, el programa debeescribir: 1, 5 y 6
12 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Arreglos de Datos: problemas
ProblemasUn palíndromo es una palabra o frase que se puede leer igualde izquierda a derecha y de derecha a izquierda, obviandosignos de puntuación y espacios. Son palíndromos lassiguientes frases y palabras:
I Anilina
I Amor a Roma
I Dábale arroz a la zorra el abad
I Reconocer
I Anita lava la tina
Implemente una función que determine si una palabra (frase)es palíndromo o no (devuelve true o false)
13 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Declaración de Arreglos de Datos: Java
En Java: dos formas de declarar un arreglo
I Para declarar un arreglo de tipo entero: int [] valores;
I Pára indicar de cuántos enteros va a estar compuesto elarreglo: valores = new int[10];
I También se puede directamente asignar valores a unarreglo sin especi�car el número de elementos: int[ ]edad = {45, 23, 11, 9};
14 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Declaración de Arreglos de Datos: Java
15 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Declaración de Arreglos de Datos: Java
Valores por defecto
I Números: 0
I Cadenas y letras: vacío
I Booleanos: false
Ejemplos de asignación directa de valores:
I int[ ] edad = {45, 23, 11, 9};
I double[ ] estatura = {1.73, 1.67, 1.56};
I String[ ] nombre = {"María", "Gerson"};
I char[ ] sexo = {'m', 'f'};
I boolean[ ] = {true, false};
16 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Declaración de Arreglos de Datos: Java
Análisis de código
17 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Declaración de Arreglos de Datos: Java
I Los arreglos poseen el atributo length que devuelve lacantidad de los elementos
I Para recorrer los elementos de un arreglo:for (int i=0; i<arreglo.length; i++)
I Si en el arreglo se accede a un elemento no de�nido, seproduce una excepción IndexOutOfBoundsException
18 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Matrices
Matriz o arreglo bidimensionalConjunto de �las y columnas que contienen elementos de unmismo tipo de datos.
19 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Matrices
Matriz M de 3 �las y 5 columnas
Muy importanteUna matriz en java es un arreglo de arreglos
20 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Matrices
I La longitud del array M (M.length) es 3
I La longitud de cada �la del array (M[i].length) es 5
I Para acceder a cada elemento de la matriz se utilizan dosíndices. El primero indica la �la y el segundo la columna
21 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Crear Matrices en Java
I Matriz de datos de tipo int llamada ventas de 4 �las y 6columnas: int [][] ventas = new int[4][6];
I Matriz de datos double llamada temperaturas de 3 �lasy 4 columnas: double [][] temperaturas = newdouble[3][4];
Importantísimo
I En Java se pueden crear matrices irregulares donde elnúmero de elementos de cada �la puede ser distinto.Solo es obligatorio indicar el número de �las: int [][] m= new int[3][];.
I A cada �la se le puede asignar un número distinto decolumnas: m[0] = new int[3]; m[1] = new int[5];m[2] = new int[2];
22 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Crear Matrices en JAVA
Grá�camente se puede representar la disposición real enmemoria de la matriz anterior así:
23 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Inicializar Matrices en Java
I Los valores iniciales se escriben entre llaves separadospor comas
I Los valores que se le asignen a cada �la aparecerán a suvez entre llaves separados por comas.
I int [][] numeros = {{6,7,5}, {3, 8, 4}, {1,0,2},{9,5,2}}; crea la matriz numeros de tipo int, de 4 �lasy 3 columnas, y se le asignan esos valores iniciales
I Se pueden crear también matrices irregulares asignandovalores iniciales: int [][] a = {{6,7,5,0,4}, {3, 8, 4},{1,0,2,7}, {9,5}}. Matriz irregular de 4 �las. Laprimera �la de 5 columnas, la segunda de 3, la tercerade 4 y la cuarta de 2
24 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Recorrer Matrices en Java
I Para recorrer una matriz se anidan dos bucles
I En general para recorrer un arreglo multidimensional seanidan tantos bucles como dimensiones tenga el arreglo
I http://goo.gl/dVinpr
25 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Recorrer Matrices en Java I
import java.util.*;
public class Bidimensional2 {
public static void main(String[] args) {
final int FILAS = 5, COLUMNAS = 4;
Scanner sc = new Scanner(System.in);
int i, j, mayor, menor;
int filaMayor, filaMenor, colMayor, colMenor;
int[][] A = new int[FILAS][COLUMNAS];
System.out.println("Lectura de matriz: ");
for (i = 0; i < FILAS; i++) {
for (j = 0; j < COLUMNAS; j++) {
System.out.print("A[" + i + "][" + j + "]= ");
A[i][j] = sc.nextInt();
}
26 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Recorrer Matrices en Java II
}
System.out.println("valores introducidos:");
for (i = 0; i < A.length; i++) {
for (j = 0; j < A[i].length; j++) {
System.out.print(A[i][j] + " ");
}
System.out.println();
}
//se toma el primero como mayor y menor
mayor = menor = A[0][0];
filaMayor = filaMenor = colMayor = colMenor = 0;
for (i = 0; i < A.length; i++) { //
for (j = 0; j < A[i].length; j++) {
if (A[i][j] > mayor) {
mayor = A[i][j];
27 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Recorrer Matrices en Java III
filaMayor = i;
colMayor = j;
} else if (A[i][j] < menor) {
menor = A[i][j];
filaMenor = i;
colMenor = j;
}
}
}
System.out.print("Elemento mayor: " + mayor);
System.out.print("Fila: "+ filaMayor);
System.out.println(" Columna: " + colMayor);
System.out.print("Elemento menor: " + menor);
System.out.print(" Fila: "+ filaMenor);
System.out.println(" Columna: " + colMenor);
}
28 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Recorrer Matrices en Java IV
}
29 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Recorrer Matrices irregulares en Java
Para recorrer matrices irregulares como el siguiente:int [][] a = {{6,7,5,0,4}, {3, 8, 4}, {1,0,2,7}, {9,5}};Se usa siempre length para obtener el número de columnasque tiene cada �la:
for (i = 0; i < a.length; i++) { //número de filas
// número de columnas de cada fila
for (j = 0; j < a[i].length; j++) {
System.out.print(a[i][j] + " ");
}
System.out.println();
}
30 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Matrices: ejemplos
Dada una matriz de dimensiones n �las, m columnas,entoncontrar:
I Los elementos de la diagonal principal
I Multiplicar los elementos de la diagonal principal por unescalar
I Indicar si la matriz es nula (todos los elementos sonceros)
I Indicar si una matriz es triangular superior (si todos loselementos por debajo de la diagonal principal son nulos)o inferior (si son nulos todos los elementos situados porencima de dicha diagonal)
I Indicar si es una matriz diagonal (si una matriz es a lavez triangular superior e inferior, sólo tienen elementosen la diagonal principal)
31 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Ejercicios resueltos
Fernando Ureña Gómez, Ejercicios propuestos y resueltosarreglos o arrays en pseudocódigo http://goo.gl/8Jlck0.
32 / 33
Estructuras dedatos
AngelVázquez-Patiño
Objetivos
Arreglos
Matrices
Fuentes
Fuentes
Libros
? Deitel, P.J., Deitel, H.M., 2012. Java: How to Program,9th ed. Prentice Hall, Upper Saddle River, N.J.(Disponible en la biblioteca)
33 / 33