Arreglos Programación I MC Beatriz Beltrán Martínez.

34
Arreglos Programación I MC Beatriz Beltrán Martínez

Transcript of Arreglos Programación I MC Beatriz Beltrán Martínez.

Page 1: Arreglos Programación I MC Beatriz Beltrán Martínez.

Arreglos

Programación I

MC Beatriz Beltrán Martínez

Page 2: Arreglos Programación I MC Beatriz Beltrán Martínez.

Definición

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.

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 2

Page 3: Arreglos Programación I MC Beatriz Beltrán Martínez.

Definición

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.

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 3

Page 4: Arreglos Programación I MC Beatriz Beltrán Martínez.

Representación

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

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 4

0 n-1

n elementos

Page 5: Arreglos Programación I MC Beatriz Beltrán Martínez.

Clasificación

Los arreglos se clasifican en:

Unidimensionales (Vectores): un sólo índice

Bidimensionales (Tablas o Matrices): dos

índices

Multidimensionales: más de dos índices

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 5

Page 6: Arreglos Programación I MC Beatriz Beltrán Martínez.

Arreglos Unidimensionales

Programación I

MC Beatriz Beltrán Martínez

Page 7: Arreglos Programación I MC Beatriz Beltrán Martínez.

Características

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.

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 7

Page 8: Arreglos Programación I MC Beatriz Beltrán Martínez.

Definición

Para definir en lenguaje C un arreglo. Se tiene:Tipo nom_var[TAM];

El arreglo que se define inicia en 0, y termina en TAM-1, con un total de TAM elementos del tipo definido

Ejemplo:int A[100];float X[N];

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 8

Page 9: Arreglos Programación I MC Beatriz Beltrán Martínez.

Operaciones

AsignaciónLa 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] = 2.56;precio[3] = precio[2]+10.5;

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 9

Page 10: Arreglos Programación I MC Beatriz Beltrán Martínez.

Operaciones

LecturaLa lectura se realiza de la siguiente manera:

for (i=0; i<n; i++)

scanf(“%d ”, &A[i]);

EscrituraConsiste en asignarle un valor a cada elemento del

arreglo:

for (i=0; i<n; i++)

printf (“\n %d ”, A[i]);

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 10

Page 11: Arreglos Programación I MC Beatriz Beltrán Martínez.

Cadenas

Programación I

MC Beatriz Beltrán Martínez

Page 12: Arreglos Programación I MC Beatriz Beltrán Martínez.

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.

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 12

Page 13: Arreglos Programación I MC Beatriz Beltrán Martínez.

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 “”.

El último carácter de la cadena marca el fin de la cadena, que corresponde al carácter ‘\0’.

Este carácter ocupa un espacio en el arreglo.

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 13

Page 14: Arreglos Programación I MC Beatriz Beltrán Martínez.

Instrucciones

Se hace uso de la biblioteca <string.h>.strcpy (cadena1, cadena2): Copia el contenido

de la cadena2 en la cadena1, si las dos cadenas se superponen, el resultado es impredecible. La copia se realiza aún cuando las cadenas no sean de la misma longitud.

strcat (cadena1, cadena2): Anexa la cadena2 al final de la cadena1. El terminador nulo de cadena1 se reemplaza por el primer carácter de cadena2.

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 14

Page 15: Arreglos Programación I MC Beatriz Beltrán Martínez.

Instrucciones

compara strcmp (cadena1, cadena2): Compara la cadena1 con la cadena2, y devuelve:

0 si cadena1=cadena2entero mayor a cero si cadena1>cadena2entero menor a cero si cadena1<cadena2

tamaño strlen (cadena): Devuelve la longitud de la cadena sin contar el terminador nulo.

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 15

Page 16: Arreglos Programación I MC Beatriz Beltrán Martínez.

Ordenamiento

Programación I

MC Beatriz Beltrán Martínez

Page 17: Arreglos Programación I MC Beatriz Beltrán Martínez.

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.

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 17

Page 18: Arreglos Programación I MC Beatriz Beltrán Martínez.

Clasificación por intercambio directo

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

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 18

Page 19: Arreglos Programación I MC Beatriz Beltrán Martínez.

Clasificación por intercambio directo

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.

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 19

Page 20: Arreglos Programación I MC Beatriz Beltrán Martínez.

Clasificación por intercambio directo

Procedimiento shakeSortInicio

l2 r n k n

Repetir

Para jr a l decrementos 1 hacer

Si A[j-1] > A[j] entonces

temp A[j]

A[j] A[j-1]

A[j-1] temp

k j

Fin_si

Fin_para

l k+1

Para j l a r hacer

Si A[j-1] > A[j] entonces

temp A[j]

A[j] A[j-1]

A[j-1] temp

k j

Fin_si

Fin_para

r k-1

Hasta l > r

Fin

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 20

Page 21: Arreglos Programación I MC Beatriz Beltrán Martínez.

Clasificación por inserción

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.

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 21

Page 22: Arreglos Programación I MC Beatriz Beltrán Martínez.

Clasificación por inserción

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

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 22

Page 23: Arreglos Programación I MC Beatriz Beltrán Martínez.

Clasificación por inserción

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.

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 23

Page 24: Arreglos Programación I MC Beatriz Beltrán Martínez.

Clasificación por inserción

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 m+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

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 24

Page 25: Arreglos Programación I MC Beatriz Beltrán Martínez.

Clasificación por selección directa

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).

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 25

Page 26: Arreglos Programación I MC Beatriz Beltrán Martínez.

Clasificación por selección directa

Procedimiento seleccionDirectaInicio

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

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 26

Page 27: Arreglos Programación I MC Beatriz Beltrán Martínez.

Métodos de clasificación avanzados

Inserción por decremento decreciente

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

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 27

Page 28: Arreglos Programación I MC Beatriz Beltrán Martínez.

Métodos de clasificación avanzados

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] s-kPara i k+1 a n hacer

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

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

fin_parafin_para

Fin

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 28

Page 29: Arreglos Programación I MC Beatriz Beltrán Martínez.

Búsqueda

Programación I

MC Beatriz Beltrán Martínez

Page 30: Arreglos Programación I MC Beatriz Beltrán Martínez.

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.

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 30

Page 31: Arreglos Programación I MC Beatriz Beltrán Martínez.

Búsqueda Lineal

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.

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 31

Page 32: Arreglos Programación I MC Beatriz Beltrán Martínez.

Búsqueda Lineal

Procedimiento busquedaLineal (elemento)Inicio

i0Mientras (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.

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 32

Page 33: Arreglos Programación I MC Beatriz Beltrán Martínez.

Búsqueda Binaria

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.

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 33

Page 34: Arreglos Programación I MC Beatriz Beltrán Martínez.

Búsqueda Binaria

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

MC Beatriz Beltrán Martínez FCC - BUAP Verano 2013 34