arreglos. un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian...

44
Metodología de la Programación Arreglos

Upload: roman-bailon

Post on 23-Jan-2016

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Metodología de la Programación

Arreglos

Page 2: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad indexado significa que el elemento primero, segundo, hasta el n-ésimo de un arreglo pueden ser identificados por su posición ordinal.

Un arreglo es una colección finita, homogénea y ordenada de elementos del mismo tipo.

Definición

2

Page 3: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

De manera formal se define un arreglo de tamaño n de los elementos de tipo A, es un elemento del espacio n-dimensional del conjunto A, es decir, X es arreglo de tamaño n del tipo A si y solo si XAn.

Definición

3

Page 4: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Ambas definiciones reconocen los siguientes conceptos:◦ Finita: Todo arreglo tiene un límite, es decir,

debe determinarse cual será el número máximo de elementos que podrán formar parte del arreglo.

◦ Homogénea: Todos los elementos de un arreglo son del mismo tipo o naturaleza (todos enteros, todos booleanos, etc,), pero nunca una combinación de distintos tipos.

◦ Ordenada: Se debe determinar cuál es el primer elemento, el segundo, el tercero..... y el n-ésimo elemento.

4

Definición

Page 5: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Tienen un único nombre de variable, que representa todos los elementos.

Contienen un índice, los cuales diferencian a cada elemento del arreglo.

Se pueden realizar ciertas operaciones como son: recorridos, ordenaciones y búsquedas de elementos.

El número total de elementos del arreglo (NTE) es igual al límite superior (LS), menos límite inferior NTE = LS - LI + 1.

Características

5

Page 6: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

El tipo de índice puede ser cualquier tipo ordinal.

El tipo de los componentes puede ser cualquiera.

Se utilizan [ ] para indicar el índice de un arreglo. Entre los [ ] se debe escribir un valor ordinal (puede ser una variable, una constante o una expresión que dé como resultado un valor ordinal).

Si un arreglo tiene n componentes, la última localidad está dada por n.

Características

6

Page 7: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Los arreglos pueden contener un mínimo de cero elementos hasta un máximo de n elementos.

Representación

7

1 n

n elementos

Page 8: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

A continuación se muestra un arreglo llamado EDADES, que contiene las edades de la clase de natación en la BUAP.

Ejemplo

8

16 17 18 19 20 21 22 23 24 25

EDADES[2]

EDADES[1] EDADES[3]

EDADES[4]

EDADES[5]EDADES[6] EDADES[8]

EDADES[7] EDADES[9]

EDADES[10]

EDADESLímite inferiorLímite superior

Page 9: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Los arreglos se clasifican en:

◦ Unidimensionales (Vectores): un sólo índice

◦ Bidimensionales (Tablas o Matrices): dos índices

◦ Multidimensionales: más de dos índices

Clasificación

9

Page 10: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Metodología de la Programación

Arreglos unidimensionales

Otoño 2013

Page 11: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Los arreglos unidimensionales deben cumplir lo siguiente: ◦ Compuesto por un número de elementos finito.◦ Tamaño fijo: el tamaño del arreglo debe ser

conocido en tiempo de compilación. ◦ Homogéneo: todos los elementos son del mismo

tipo.◦ Son almacenados en posiciones contiguas de

memoria, cada uno de los cuales se les puede acceder directamente.

◦ Cada elemento se puede procesar como si fuese una variable simple ocupando una posición de memoria.

Características

11

Page 12: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Dado un arreglo unidimensional denominado PRECIO cada uno de sus elementos se designará por ese mismo nombre diferenciándose únicamente por su correspondiente subíndice.

Ejemplo

12

15.4

12.5

14.8

9.7

6.5

4.5

PRECIO[1]

PRECIO[2]

PRECIO[3]

PRECIO[4]

PRECIO[5]

PRECIO[6]

Longitud = 6

PRECIO Nombre del arreglo

Índices

Page 13: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Asignación◦ En general no es posible asignar directa un valor a

todo el arreglo, sino que se debe asignar el valor deseado a cada elemento.

◦ La manera de asignar (insertar) un valor en cada elemento del arreglo unidimensional es mediante el subíndice que indica la posición, se puede utilizar la siguiente forma:

<NombreVector>[subíndice] <Valor> Ejemplo:

◦ A[1] 10◦ PAIS[2] ‘Francia’◦ PRECIO[3] PRECIO[2]+10.5

Operaciones

13

Page 14: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Lectura◦ Este proceso de lectura de un arreglo consiste en leer

un valor de cada elemento del arreglo y asignarlo a una variable. La lectura se realiza de la siguiente manera:

Para i 1 hasta N hacer leer(ARREGLO[i])Fin_Para

Escritura◦ Consiste en asignarle un valor a cada elemento del

arreglo.Para i 1 hasta N hacer  escribir(ARREGLO[i])Fin_Para

Operaciones

14

Page 15: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Leer un arreglo de N precios y obtener el promedio:1. Inicio2. Leer(n)3. prom 04. Para i1 hasta n hacer

leer(precio[i])promprom+precio[i]

5. Fin_para6. promprom/n7. Escribir(«El promedio es:»,prom)8. Fin

Ejemplo

15

Page 16: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Metodología de la Programación

Cadenas

Otoño 2013

Page 17: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Conceptos Básicos Una cadena es un conjunto de caracteres

incluido el espacio en blanco. Por ejemplo:

◦ “Hola”◦ “123vb”◦ “v bg%.”

Generalmente una cadena va encerrada entre comillas.

17

Page 18: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Conceptos Básicos La longitud de una cadena es el número

de caracteres que contiene. La cadena vacía es la que no tiene ningún

carácter y se representa como “”. Una constante de tipo cadena es un

conjunto de caracteres válidos encerrados entre comillas, por ejemplo:◦ “numero1”◦ “&/ #$%”

18

Page 19: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Una variable de cadena es aquella cuyo contenido es una cadena de caracteres, por ejemplo:◦ cadena=”una cadena”◦ str=”-23.56”.

El último carácter de la cadena marca el fin de la cadena, en este caso utilizaremos el carácter ‘\0’ para denotar fin de cadena.

Conceptos Básicos

19

Page 20: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Operaciones Básicas

• Asignación.– Apellido”Juarez”

• Entrada/ Salida– Leer (nombre, estado_civil)– Escribir (nombre, apellido)

• Para el cálculo de la longitud de una cadena se da el número de caracteres que hay en una.

• Para la comparación de cadenas se comparan caracteres o para ver si son iguales o no.

20

Page 21: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

La concatenación se define como la unión de varias cadenas de caracteres en una sola, conservando el orden.

La extracción de subcadenas es una subcadena que es una porción de la cadena original.

La búsqueda de información, consiste en buscar una subcadena o cadena dentro de otra mayor. Devuelve el número de la posición donde inicia la subcadena buscada, o -1 si no la encuentra.

Operaciones Básicas

21

Page 22: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Encontrar el punto medio, este nos devuelve la mitad de la posición de la cadena.

Truncar cadenas, se pretende quedarse con los primeros n caracteres de la cadena.

Convertir cadenas a números o viceversa, si los caracteres son dígitos.

Insertar una cadena dentro de otra. Borrar cadenas. Sustituir una cadena por otra. Invertir el orden de una cadena.

Operaciones Básicas

22

Page 23: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Problema El siguiente algoritmo sustituye las ‘e’ por

‘*’.

1. Inicio2. Escribir (“Escriba una palabra")3. Leer (str)4. Para i=1 hasta len(str) hacer

4.1 Si str[i] = `e´ entoncesstr[i] `*´

4.2 Fin_si5. Fin_para6. Escribir (str)7. Fin

23

Page 24: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

El siguiente algoritmo imprime una cadena de manera invertida: 1. Inicio2. Escribir (“Escriba una palabra")3. Leer (str)4. Para i=len(str) hasta 1, con decrementos hacer

4.1 Escribir (str[i])5. Fin_para6. Fin

Problema

24

Page 25: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

El siguiente algoritmo realiza lo siguiente, dada una cadena en minúsculas, la convierte en mayúsculas1. Inicio2. Escribir ("Escriba una palabra")3. Leer (str)4. Para i=1 hasta len(str) hacer

4.1 Si ‘a’>=str[i]<=’z’ entoncesValor(str[i]) Valor(str[i])-32

4.2 Fin_si5. Fin_para6. Escribir ("La cadena es:",str)7. Fin

Problema

25

Page 26: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Metodología de la Programación

Ordenamiento

Otoño 2013

Page 27: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Clasificación por intercambio directo

Uno de los métodos de clasificación más simples que puede haber es el llamado “clasificación de burbuja” (bubblesort).

La idea básica de este algoritmo es imaginar que los elementos están como burbujas en un tanque de agua con pesos correspondientes a sus claves, cada pase sobre el arreglo produce el ascenso de una burbuja hasta su nivel adecuado de peso.

27

Page 28: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Procedimiento burbujaInicio

Para i 1 a n-1 hacerPara j n a i+1 con decrementos de 1 hacer

Si A[j] < A[j-1] entoncestemp A[j]A[j] A[j-1]A[j-1] temp

Fin_siFin_para

Fin_paraFin

28

Clasificación por intercambio directo

Page 29: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Este algoritmo admite un poco de mejoramiento.

El algoritmo por vibración es una variante del algoritmo burbuja pero mejorado.

Este algoritmo consiste en “recordar” cuál fue el último intercambio realizado y en qué momento.

29

Clasificación por intercambio directo

Page 30: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

30

Clasificación por intercambio directoProcedimiento shakeSort

Iniciol2 r n k nRepetir

Para jr a l decrementos 1 hacerSi A[j-1] > A[j] entoncestemp A[j]A[j] A[j-1]A[j-1] tempk j

Fin_siFin_paral k+1

Para j l a r hacerSi A[j-1] > A[j] entoncestemp A[j]A[j] A[j-1]A[j-1] tempk j

Fin_siFin_parar k-1

Hasta l > rFin

Page 31: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Este método consiste en reubicar en el lugar correcto cada uno de los elementos a ordenar, es decir, en el i-ésimo recorrido se “inserta” el i-ésimo elemento A[i] en el lugar correcto, entre A[1], A[2], ..., A[i-1], los cuales fueron ordenados previamente.

Existen dos condiciones distintas que podrían dar terminado el proceso de clasificación:1. Se encuentra un elemento A[j] que tiene una llave

menor que la de A[i].2. El extremo izquierdo de la secuencia destino es

alcanzado.

31

Clasificación por inserción

Page 32: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Procedimiento insercionDirectaInicio

Para i 2 a n hacerA[0]A[i] j iMientras A[j] < A[j-1] hacer

temp A[j]A[j] A[j-1]A[j-1] tempj j-1

Fin_mientrasFin_para

Fin

32

Clasificación por inserción

Page 33: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Si notamos que la secuencia destino A[2]...A[i-1] donde se debe insertar el elemento, ya está ordenada.

Este algoritmo puede ser mejorado determinando rápidamente el punto de inserción.

La elección es una búsqueda binaria que prueba la secuencia destino en la mitad y continúa buscando hasta encontrar el punto de inserción.

33

Clasificación por inserción

Page 34: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Procedimiento insercionBinariaInicio

Para i 2 a n hacerx A[i] L1 RiMientras L < R hacer

m (L+R) div 2Si A[m] <= x entonces

L L+1Sino R mFin_si

Fin_mientrasPara ji a R+1 (decremento en 1) hacer

A[j] A[j-1]Fin_paraA[R] x

Fin_paraFin

34

Clasificación por inserción

Page 35: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Este método se basa en los siguientes principios:

1. Seleccionar el elemento que tenga la llave menor.

2. Intercambiarlo con el primer elemento 1.3. Repetir después estas operaciones con los n-1

elementos restantes, luego con n-2 elementos hasta que no quede más que un elemento (el más grande).

35

Clasificación por selección directa

Page 36: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Procedimiento selecciónDirectaInicio

Para i1 a n-1 hacerk i xA[i]Para j i+1 a n hacer

Si A[j] < x entonces k j x A[k]

fin_sifin_paraA[k] A[i] A[i] x

fin_paraFin

36

Clasificación por selección directa

Page 37: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Inserción por decremento decreciente

◦ Un refinamiento de la inserción directa fue propuesto por D.L. Shell en 1959.

37

Métodos de clasificación avanzados

Page 38: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Procedimiento shellSortInicio

h[1]9 h[2]5 h[3] 3 h[4] 1Para m 1 a t hacer // t es el tamaño del arreglo h

k h[m] skPara i k+1 a n hacer

xA[i] ji-kSi s=0 entonces skfin_siss+1 A[s]xMientras x<A[j] hacer

A[j+k]A[j] jj-kfin_mientrasA[j+k]x

fin_parafin_para

Fin

38

Métodos de clasificación avanzados

Page 39: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Metodología de la Programación

Búsqueda

Otoño 2013

Page 40: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Búsqueda Lineal

La tarea de búsqueda es una de las más frecuentes en programación.

Para los siguientes algoritmos vamos a suponer que la colección de los datos en donde vamos a buscar, es fija, y que es de tamaño n.

La tarea consiste en hallar un elemento cuya clave sea igual al argumento de búsqueda.

40

Page 41: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Cuando los elementos no llevan un orden y no existe información sobre ellos se utiliza la búsqueda lineal, es decir, comparar uno a uno los elementos hasta encontrar el deseado.

Existen dos condiciones que ponen fin a la búsqueda. ◦ Se encuentra el elemento.◦ Se ha rastreado toda la colección y no se

encuentra el elemento.

41

Búsqueda Lineal

Page 42: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Procedimiento busquedaLineal (elemento)Inicio

i1Mientras (i <= N) y (A[i] <> elemento) hacer

ii+1Fin_mientras

Fin Si i al final es N entonces el elemento no fue

encontrado, pero sino entonces quiere decir que el elemento esta en la posición i-ésima del arreglo.

42

Búsqueda Lineal

Page 43: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Para utilizar este algoritmo es necesario que la colección este ordenada.

La idea clave consiste en inspeccionar el elemento medio y compararlo con el elemento de búsqueda x.◦ Si es igual a x, la búsqueda termina; si es menor que

x, inferimos que todos los elementos con índices menores que o iguales a m pueden ser eliminados, y nuestra búsqueda ahora se centra en los demás elementos.

◦ Esto se repite mientras el índice inicial sea menor o igual que el final y el elemento no sea encontrado.

43

Búsqueda Binaria

Page 44: Arreglos.  Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un identificador común (nombre). La propiedad

Procedimiento busquedaBinaria(x)Inicio

L 0RN found falseMientras L< R y not (found) hacer

m(L+R) div 2Si A[m]=x entonces foundtrueSino

Si A[m] < x entonces L m+1Sino R mfin_si

fin_sifin_mientras

Fin

44

Búsqueda Binaria