arreglos. un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian...
TRANSCRIPT
Metodología de la Programación
Arreglos
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
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
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
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
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
Los arreglos pueden contener un mínimo de cero elementos hasta un máximo de n elementos.
Representación
7
1 n
n elementos
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
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
Metodología de la Programación
Arreglos unidimensionales
Otoño 2013
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
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
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
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
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
Metodología de la Programación
Cadenas
Otoño 2013
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
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
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
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
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
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
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
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
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
Metodología de la Programación
Ordenamiento
Otoño 2013
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
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
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
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
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
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
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
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
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
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
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
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
Metodología de la Programación
Búsqueda
Otoño 2013
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
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
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
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
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