33

Programación 1: estructuras de datos

Embed Size (px)

Citation preview

Page 1: Programación 1: estructuras de datos

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

Page 2: Programación 1: estructuras de datos

Estructuras dedatos

AngelVázquez-Patiño

Objetivos

Arreglos

Matrices

Fuentes

Overview

Objetivos

Arreglos

Matrices

Fuentes

2 / 33

Page 3: Programación 1: estructuras de datos

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

Page 4: Programación 1: estructuras de datos

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

Page 5: Programación 1: estructuras de datos

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

Page 6: Programación 1: estructuras de datos

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

Page 7: Programación 1: estructuras de datos

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

Page 8: Programación 1: estructuras de datos

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

Page 9: Programación 1: estructuras de datos

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

Page 10: Programación 1: estructuras de datos

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

Page 11: Programación 1: estructuras de datos

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

Page 12: Programación 1: estructuras de datos

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

Page 13: Programación 1: estructuras de datos

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

Page 14: Programación 1: estructuras de datos

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

Page 15: Programación 1: estructuras de datos

Estructuras dedatos

AngelVázquez-Patiño

Objetivos

Arreglos

Matrices

Fuentes

Declaración de Arreglos de Datos: Java

15 / 33

Page 16: Programación 1: estructuras de datos

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

Page 17: Programación 1: estructuras de datos

Estructuras dedatos

AngelVázquez-Patiño

Objetivos

Arreglos

Matrices

Fuentes

Declaración de Arreglos de Datos: Java

Análisis de código

17 / 33

Page 18: Programación 1: estructuras de datos

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

Page 19: Programación 1: estructuras de datos

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

Page 20: Programación 1: estructuras de datos

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

Page 21: Programación 1: estructuras de datos

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

Page 22: Programación 1: estructuras de datos

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

Page 23: Programación 1: estructuras de datos

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

Page 24: Programación 1: estructuras de datos

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

Page 25: Programación 1: estructuras de datos

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

Page 26: Programación 1: estructuras de datos

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

Page 27: Programación 1: estructuras de datos

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

Page 28: Programación 1: estructuras de datos

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

Page 29: Programación 1: estructuras de datos

Estructuras dedatos

AngelVázquez-Patiño

Objetivos

Arreglos

Matrices

Fuentes

Recorrer Matrices en Java IV

}

29 / 33

Page 30: Programación 1: estructuras de datos

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

Page 31: Programación 1: estructuras de datos

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

Page 32: Programación 1: estructuras de datos

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

Page 33: Programación 1: estructuras de datos

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