M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos.
-
Upload
gonzalo-de-la-garza -
Category
Documents
-
view
295 -
download
0
Transcript of M.C. Yalu Galicia Hdez. (FCC/BUAP)1 Ordenamiento Algoritmos.
M.C. Yalu Galicia Hdez. (FCC/BUAP)
1
Ordenamiento
Algoritmos
M.C. Yalu Galicia Hdez. (FCC/BUAP)
2
Algoritmos de Ordenamiento Ordenar: Reagrupar o reorganizar un
conjunto de datos u objetos en una secuencia específica
Formalmente: Se define la ordenación de la siguiente forma: Sea A una lista de N elementos A1, A2, ... An.
Ordenar significa permutar estos elementos de tal forma que los mismos queden de acuerdo a un orden predeterminado
Ascendente: A1 A2 A3 ... An Descendente: A1 A2 A3 ... An
M.C. Yalu Galicia Hdez. (FCC/BUAP)
3
Ordenamiento Para realizar un ordenamiento se
pueden tener 3 casos: Peor caso: Que la información este
ordenada en sentido inverso Mejor caso: Que la información este
ordenada Caso promedio: Que la información
este desordenada aleatoriamente
M.C. Yalu Galicia Hdez. (FCC/BUAP)
4
Métodos de ordenamiento A los métodos de ordenamiento se les
clasifica en categorías Ordenación interna u ordenamiento en
memoria: Son aquellos en los que los valores a ordenar están en memoria principal.
Métodos directos Métodos logarítmicos
Ordenación externa u ordenamiento en archivos: Son aquellos en los que los valores a ordenar están en memoria secundaria (disco, cinta, cilindro magnético, etc)
M.C. Yalu Galicia Hdez. (FCC/BUAP)
5
Ordenación interna Métodos directos
Tienen la característica de que sus programas son cortos, de fácil elaboración y comprensión, aunque son ineficientes cuando el número de elementos es grande.
Métodos logarítmicos Son más complejos que los métodos directos.
Cierto es que requieren de menos comparaciones y movimientos para ordenar sus valores, pero su elaboración y comprensión resulta mas sofisticada y abstracta
M.C. Yalu Galicia Hdez. (FCC/BUAP)
6
Métodos directos Los métodos directos se pueden clasificar
en las siguientes categorías: Ordenamiento por intercambio
El más conocido es el método de la burbuja o BubbleSort
Método de intercambio por vibración (ShakeSort) Ordenamiento por inserción
Método de inserción directa Método de inserción por decremento decreciente
( ShellSort) Ordenamiento por selección
Método por selección directa
M.C. Yalu Galicia Hdez. (FCC/BUAP)
7
Métodos logarítmicos Los métodos logarítmicos se
pueden clasificar en: Ordenamiento por partición
QuickSort MergeSort HeapSort
M.C. Yalu Galicia Hdez. (FCC/BUAP)
8
Método de la Burbuja Se comparan pares de elementos adyacentes Si A[j-1] es mayor que A[j], se permutan Se continúa hasta que todos se encuentren ordenados En cada pasada se transporta el elemento más
pequeño hacia la izquierda del vector.
i j-1 j
Elementos ya ordenados
Se busca el i-ésimo elemento más pequeño, j varía desde N hasta i+1
Si a[j-1] > a[j], se permutan
M.C. Yalu Galicia Hdez. (FCC/BUAP)
9
Algoritmo de BurbujaInicio
para i 1 hasta N hacerpara j N hasta i+1 hacer (-1)
si A[j] < A[j-1] entoncesaux A[j]A[j] A[j-1]A[j-1] aux
fin_parafin_para
Fin
M.C. Yalu Galicia Hdez. (FCC/BUAP)
10
Actividad colaborativaActividad colaborativaActividad: trabajar en binas y utilizando el método de la burbuja ordenar el siguiente arreglo.
Deberán mostrar todas las pasada requeridas para ordenar el arreglo original.
16 67 8 15 44 27 17 35
M.C. Yalu Galicia Hdez. (FCC/BUAP)
11
Actividad grupal (SOLUCION) Compartiendo la experiencia
12
Método de inserción directa Reubicar en el lugar correcto, cada uno de los elementos a
ordenar. En el i-ésimo recorrido se inserta el i-ésimo elemento en el
lugar correcto. Es decir, entre A1, A2, ...Ai-1 los cuales fueron ordenados previamente.
A1 A2 A3 ... Ai-2 Ai-1 Ai Ai+1
... An
Si A[i] < A[i-1], se permutan
A1 A2 A3 ... Ai-2 Ai Ai-1 Ai+1
... An
Si A[i] < A[i-2], se permutanAi-1 elementos ordenados
A1 A2 A3 Ai ... Ai-2 Ai-1 Ai+1
... An
Si A[i] > A[3] CONDICIÓN DE PARO - elementos ordenados
Ai elementos ordenados
M.C. Yalu Galicia Hdez. (FCC/BUAP)
13
Algoritmo del método de inserciónInicio
para i 1 hasta N hacer j i+1Mientras A[j] < A[j-1] AND j > 1 Hacer
aux A[j]A[j] A[j-1]A[j-1] auxj j - 1
fin mientrasfin para
Fin
M.C. Yalu Galicia Hdez. (FCC/BUAP)
14
Actividad colaborativaActividad colaborativaActividad: tienen 15 minutos para trabajar en binas y utilizando el método de la inserción directa ordenar el siguiente arreglo.
Deberán mostrar todas las pasada requeridas para ordenar el arreglo original.
12 8 10 14 6 3 9 11
M.C. Yalu Galicia Hdez. (FCC/BUAP)
15
Actividad grupal (SOLUCION) Compartiendo la experiencia
16
Método de selección directa Encontrar el menor de todos los elementos del arreglo e
intercambiarlo con el que esta en la posición 1 Luego el segundo más pequeño e intercambiarlo con el que esta
en la posición 2 Así sucesivamente hasta ordenar todo el arreglo
A1 A2 A3 Aj Ai-2 Ai-1 Ai Ai+1
... An
Si Aj es el más pequeño, permutarlo a la 1er. posición
Aj Ai+1
A1 A2 Ai A3 A4 Ai-2 ... An
Si A4 es el i-ésimo más pequeño, entonces permutar a la i-ésima posición
i-1 elementos ordenados
M.C. Yalu Galicia Hdez. (FCC/BUAP)
17
Algoritmo de Selección directaInicio
para i 1 hasta N-1 hacerposMenor ivalorMenor A[i]para j i+1 hasta N hacer
si A[j] < valorMenor entoncesposMenor jvalorMenor A[j]
fin_sifin_paraA[posMenor] A[i]A[i] valorMenor
fin_paraFin
M.C. Yalu Galicia Hdez. (FCC/BUAP)
18
Actividad colaborativaActividad colaborativaActividad: tienen 10 minutos para trabajar en binas y utilizando el método de la selección directa ordenar el siguiente arreglo.
Deberán mostrar todas las pasada requeridas para ordenar el arreglo original.
78 10 35 7 1 56 12 2
M.C. Yalu Galicia Hdez. (FCC/BUAP)
19
Actividad grupal (SOLUCION) Compartiendo la experiencia
M.C. Yalu Galicia Hdez. (FCC/BUAP)
20
¿Que aprendimos?
21
Shell Sort También llamado Inserción por incremento decreciente Ordena el arreglo de manera similar al del método de
inserción directa, esto es, comparando con los elementos contiguos de su izquierda uno tras otro.
Este método se basa en la ordenación por inserción de los elementos que difieren h1-posiciones, después de los que difieren h2-posiciones, y así sucesivamente según un conjunto de incrementos decrecientes hi, hasta ordenar los que difieren en ht=1 .
El método se basa en fijar el tamaño de los huecos constantes, pero de más de una posición. Por ejemplo:
h1 se toma inicialmente de N/2 Y luego se va reduciendo a la mitad en cada
repetición hasta que el hueco sea 1.
M.C. Yalu Galicia Hdez. (FCC/BUAP)
22
Algoritmo ShellSortAlgoritmo ShellSort inicio
h N/2 //hueco inicialMientras h >= 1 hacer
Para i h hasta N hacertemp = A[i]j iMientras j >= h && temp < A[j-h]
hacerA[j] A[j-h];j j - h;
fin_mientras A[j] temp;
fin_parah h/2
fin_mientras Fin
M.C. Yalu Galicia Hdez. (FCC/BUAP)
23
Actividad colaborativaActividad colaborativaActividad: tienen 10 minutos para trabajar en binas y utilizando el método ShellSort deducir las secuencias parciales de clasificación para ordenar en ascendente el vector
6 1 5 2 3 4 0
M.C. Yalu Galicia Hdez. (FCC/BUAP)
24
Actividad grupal (SOLUCION) Compartiendo la experiencia
25
Método QuickSort Se basa en el hecho que es más fácil ordenar dos
listas pequeñas que una grande. Se basa en la estrategia “divide y venceras”
Los elementos a ordenar se dividen en dos grupos: Uno con todos los valores menores o iguales a cierto valor específico y otra con todos los valores mayores a ese valor.
El valor elegido puede ser cualquier valor arbitrario del vector. Este valor se le llama comúnmente pivote.
Básicamente quickSort trabaja así: Se elige el pivote (usualmente el elemento a
la mitad de la lista)
M.C. Yalu Galicia Hdez. (FCC/BUAP)
26
Método QuickSort Se divide la lista en dos partes. Para esto
se establecen dos indices (izquierdo y derecho) que se mueven hasta encontrarse. Se trata que todos los elementos a la izquierda del pivote sean menores que este y los elementos a la derecha sean mayores.
Si bien se tiene ahora dos listas con valores menores y mayores al pivote, estas pueden no estar ordenadas,entonces se vuleve a aplicar el método a cada uno de los subconjuntos
M.C. Yalu Galicia Hdez. (FCC/BUAP)
27
QuickSort
18 11 27 13 9 4 16
pivote DerIzq
Se recorre la lista desde el extremo izquierdo y se busca un elemento mayor que 13 (se encuentra el 18). Se busca entonces, desde el extremo derecho un valor menor que 13 ( se encuentra el 4). Se intercambian estos valores.
4 11 27 13 9 18
16
pivote Der
Izq
Se sigue recorriendo el vector por la izquierda y por la derecha e intercambiando los valores incorrectos hasta que los índices Izq y Der se crucen. En este punto se tendrá que todos los valores a la derecha son mayores y que todos los valores a la izq, son menores que el pivote.
Después del intercambio
M.C. Yalu Galicia Hdez. (FCC/BUAP)
28
QuickSort
Ninguna de ambas listas está ordenada; sin embargo, basados en los resultados de la primera partición, se pueden ordenar las dos particiones independientemente y al final la lista completa estará ordenada
4 11 27 13 9 18
16
DerIzq pivote
4 11 9 13 27
18
16
DerIzq pivote
4 11 9 13 27
18
16
IzqDer pivote
< >4 11 9 13 2
718
16
Izq Der
pivote
Ordenar partición izquierda
Después del intercambio
M.C. Yalu Galicia Hdez. (FCC/BUAP)
29
Algoritmo QuickSortInicio
establecer x al valor de un elemento arbitrario de la listamientras división no este terminada hacer
recorrer de izq a der para un valor >= xrecorrer de der a izq para un valor =< xsi valores localizados no ordenados
entoncesintercambiar los valores
fin_sifin_mientras
Fin
M.C. Yalu Galicia Hdez. (FCC/BUAP)
30
Actividad colaborativaActividad colaborativaActividad: tienen 30 minutos para trabajar en binas y obtener el algoritmos del QuickSort, después utilizando este ordenar el siguiente arreglo.
Deberán mostrar todas las pasada requeridas para ordenar el arreglo original.
50 30 20 80 90 70 95 85 10 15 75 25
M.C. Yalu Galicia Hdez. (FCC/BUAP)
31
Actividad grupal (SOLUCION) Compartiendo la experiencia
M.C. Yalu Galicia Hdez. (FCC/BUAP)
32
Búsqueda
Métodos
M.C. Yalu Galicia Hdez. (FCC/BUAP)
33
Búsqueda La búsqueda de información está
relacionada con las tablas para consultas Estas tablas contienen una cantidad de
información que se almacena en forma de listas de parejas de datos. Por ejemplo: Un diccionario con una lista de palabras y
definiciones Un catálogo con una lista de libros de computación Una lista de estudiantes y sus calificaciones Un índice con títulos y contenidos de los artículos en
una determinada revista Etc.
En todos estos casos es necesario con frecuencia buscar un elemento en una lista.
M.C. Yalu Galicia Hdez. (FCC/BUAP)
34
Búsqueda En el caso de un vector de datos numéricos
la búsqueda se reduce a buscar si el vector contiene o no un número dado T
Si se desea búscar información en un archivo, debe realizarse la búsqueda a partir de un determinado campo de información denominado campo clave o llave. En el caso de los archivos de empleados de
una empresa, el campo clave puede ser su número de empleado o los apellidos.
M.C. Yalu Galicia Hdez. (FCC/BUAP)
35
Búsqueda Existen diferentes algorítmos de búsqueda.
El algoritmo elegido dependerá de la forma en que se encuentren organizados los datos
La operación de búsqueda de un elemento N en un conjunto consiste en: Determinar si N pertenece al conjunto y, en
ese caso, indicar su posición en él. Determinar si N no pertenece al conjunto
Los métodos más usuales de búsqueda son: Búsqueda secuencial o lineal Búsqueda binaria Búsqueda por transformación de claves(hash)
M.C. Yalu Galicia Hdez. (FCC/BUAP)
36
Búsqueda secuencial Se recorre el vector o la lista desde el
principio, comparando cada elemento con el elemento buscado. Si se llega al final del vector sin encontrarlo, se supone que el elemento buscado no pertenece al vector.
No es necesario que el vector o la lista estén ordenados
Si el vector esta ordenado, la búsqueda puede detenerse en cuanto se llega a un elemento posterior al elemento buscado.
M.C. Yalu Galicia Hdez. (FCC/BUAP)
37
Actividad colaborativaActividad colaborativaActividad: tienen 30 minutos para trabajar en binas y practicar el método de búsqueda secuencial.
Hacer un programa que capture la información de un arreglo de alumnos, c/u con la sig. información
La FCC desea saber si el alumno con la matrícula 200400010 está presente en el conjunto.
Si el alumno se encuentra, mostrar el mensaje “Alumno encontrado en la posición =“ y mostrar toda su información
Matrícula
Nombre
promedio
M.C. Yalu Galicia Hdez. (FCC/BUAP)
38
Actividad colaborativaActividad colaborativaSi no se encuentra mostrar el mensaje “Alumno no encontrado”
Implementar como método de la clase FCC el algoritmo de búsqueda secuencial
Colaborativamente: Trabajen en equipo, asegurándose de que comprenden el algoritmo de búsqueda y como se aplica.
Criterios para el éxito: Cada integrante del equipo deberá ser capaz de pasar al frente y explicar al grupo el algoritmo de ordenamiento con una prueba de escritorio
Responsabilidad Individual: Cualquier integrante del equipo podrá ser seleccionad@ aleatoriamente para exponer su programa. Su calificación será la del equipo.
M.C. Yalu Galicia Hdez. (FCC/BUAP)
39
Actividad grupal (SOLUCION) Compartiendo la experiencia
M.C. Yalu Galicia Hdez. (FCC/BUAP)
40
Búsqueda Binaria La búsqueda binaria utiliza el método “divide y
vencerás” para localizar el valor deseado. Con este método se examina primero el
elemento central de la lista: Si este es el elemento búscado, entonces la búsqueda
ha terminado. En caso contrario se determina si el elemento
buscado esta en la primera o segunda mitad de la lista y a continuación, se repite el proceso utilizando el elemento central de esa sublista.
Para utilizar este algoritmo es necesario que la colección esté ordenada, no funciona con arreglos desordenados.
M.C. Yalu Galicia Hdez. (FCC/BUAP)
41
Búsqueda binaria La búsqueda binaria se puede implementar
de modo iterativo y de modo recursivo.
4 6 8 10 12
14
16
Derecho izquierdo
Central
8
Elemento a buscar
8 < 10, Búsqueda en subvector izquierdo
4 6 8
Central
8 > 6, Búsqueda en sub-subvector Derecho
8
Elemento buscado = central, fin de la búsqueda
M.C. Yalu Galicia Hdez. (FCC/BUAP)
42
Algoritmo iterativoAlgoritmo Busqueda Binaria (clave) Inicio
izq 1der Ncentral (izq+der)/2mientras (izq <= der) y (A[central] <> clave) hacer
si clave < A[central] entoncesder central –1 // mover a subvector izq.
sinoizq central +1 // mover a subvector
der.fin_sicentral (izq+der)/2
fin_mientrassi clave = A[central] entonces
escribir “Valor encontrado en: “, centralsino
escribri “Valor no encontrado”fin_si
Fin
M.C. Yalu Galicia Hdez. (FCC/BUAP)
43
Actividad colaborativaActividad colaborativaActividad: tienen 15 minutos para trabajar en binas y utilizando el método de búsqueda binaria iterativa búscar la palabra examen en el siguiente conjunto
Mostrar paso a paso la búsqueda efectuada.
Alumno
Casa Diez Examen
Foco Grupo Inicio Sierra Tubo
M.C. Yalu Galicia Hdez. (FCC/BUAP)
44
Actividad colaborativaActividad colaborativa Colaborativamente: Trabajen en equipo,
asegurándose de que comprenden el algoritmo de búsqueda binaria y como se aplica.
Criterios para el éxito: Cada integrante del equipo deberá ser capaz de pasar al frente y explicar al grupo el algoritmo con una prueba de escritorio
Responsabilidad Individual: Cualquier integrante del equipo podrá ser seleccionad@ aleatoriamente para exponer su programa. Su calificación será la del equipo.
M.C. Yalu Galicia Hdez. (FCC/BUAP)
45
Actividad grupal (SOLUCION) Compartiendo la experiencia
M.C. Yalu Galicia Hdez. (FCC/BUAP)
46
Actividad colaborativaActividad colaborativaActividad: tienen 15 minutos para trabajar en binas y obtener el método de búsqueda binaria recursiva. Después, prueba tu método al buscar la palabra Grupo en el siguiente conjunto
Mostrar paso a paso la búsqueda efectuada.
Alumno
Casa Diez Examen
Foco Grupo Inicio Sierra Tubo
M.C. Yalu Galicia Hdez. (FCC/BUAP)
47
Actividad colaborativaActividad colaborativa Colaborativamente: Trabajen en equipo,
asegurándose de que comprenden el algoritmo de búsqueda binaria y como se aplica.
Criterios para el éxito: Cada integrante del equipo deberá ser capaz de pasar al frente y explicar al grupo el algoritmo con una prueba de escritorio
Responsabilidad Individual: Cualquier integrante del equipo podrá ser seleccionad@ aleatoriamente para exponer su programa. Su calificación será la del equipo.
M.C. Yalu Galicia Hdez. (FCC/BUAP)
48
Actividad grupal (SOLUCION) Compartiendo la experiencia
M.C. Yalu Galicia Hdez. (FCC/BUAP)
49
Templates
Plantillas de funciones
y clases
M.C. Yalu Galicia Hdez. (FCC/BUAP)
50
Plantillas Una de las características más poderosas de C++ son las
plantillas. Las plantillas nos permiten especificar, con un solo segmento
de código, un rango completo de funciones relacionadas (sobrecargadas), llamadas funciones de plantilla, o un rango completo de clases relacionadas llamadas clases de plantilla.
Podríamos escribir una sola plantilla de función para una función de ordenamiento de arreglos y luego hacer que C++ generara automáticamente funciones de plantilla separadas que ordenaran arreglos de enteros, de reales, de cadenas, etc.
M.C. Yalu Galicia Hdez. (FCC/BUAP)
51
Plantillas de funcion v.s. funciones de plantilla Es importante observar la diferencia entre las
plantillas de función y las funciones de plantilla. Las plantillas de función y las plantillas de clase son
como plantillas (moldes) con los cuales trazamos formas.
Las funciones de plantilla y las clases de plantilla son como los trazos separados, que tiene la misma forma pero pueden trazarse, por ejemplo, en colores diferentes.
M.C. Yalu Galicia Hdez. (FCC/BUAP)
52
Plantillas de función La definición de plantillas de función es de la
siguiente forma:
Template <class T> T maximo (T valor1, T valor2, T valor3) {
T max = valor1;
if ( valor2 > max) max = valor2;
if (valor3 > max)max = valor3;
return max; }
Los parámetros formales de tipo son tipos primitivos o definidos por el usuario que se utilizan para especificar los tipos de argumento de la función, el tipo de devolución de la función y para declarar variables dentro del cuerpo de la definición de la función.
Template indica que es una
platilla
Lista de parámetros formales de tipo (<>)precedidos por la palabra clave class
Cuerpo de la definición de la
función
M.C. Yalu Galicia Hdez. (FCC/BUAP)
53
Plantillas de función La plantilla de función anterior declara un solo
parametro formal de tipo T como el tipo de datos que la función maximo probará.
Cuando el compilador detecte una llamada a maximo en el código del programa fuente, el tipo de datos pasados a maximo se sustituye por T en toda la definición de la platilla y C++ crea una función completa que determina el máximo de tres valores del tipo de datos especificado.
Después se compila la nueva función. Las plantillas, son por tanto, medios para generar
código.
M.C. Yalu Galicia Hdez. (FCC/BUAP)
54
Ejemplo completo de maximo//Uso de plantillas de funcion (templates)#include <iostream.h>
template <class T>T maximo (T valor1, T valor2, T valor3) {
T max = valor1;if(valor2 > max)
max = valor2;if(valor3 > max)
max = valor3; return max;}
int main() {int int1, int2, int3;cout << "Introduzca 3 valores de tipo entero: ";cin >> int1 >> int2 >> int3;
M.C. Yalu Galicia Hdez. (FCC/BUAP)
55
Ejemplo completo de maximocout << "El valor maximo de los tres es: " << maximo(int1, int2, int3) << endl; //version con enteros
//versión realesdouble db1, db2, db3;cout << "Introduzca 3 valores de tipo real: ";cin >> db1 >> db2 >> db3;cout << "El valor maximo de los tres es: " << maximo(db1, db2, db3) << endl; //version con doubles
//versión caracteres char c1, c2, c3;
cout << "Introduzca 3 valores de tipo caracter: ";cin >> c1 >> c2 >> c3;cout << "El valor maximo de los tres es: " << maximo(c1, c2, c3) << endl; //version con caractesreturn 0;
}
M.C. Yalu Galicia Hdez. (FCC/BUAP)
56
Salida con tres tipos diferentes
M.C. Yalu Galicia Hdez. (FCC/BUAP)
57
Plantillas de función El uso de plantillas es un mecanismo
que evita que el programador tenga que escribir tres funciones sobrecargadas separadas con los siguientes prototipos: int maximo (int, int, int); double maximo (double, double, double); char maximo (char, char, char);
Las plantillas porporcionan los beneficios de la reutilización del software.
M.C. Yalu Galicia Hdez. (FCC/BUAP)
58
Sobrecarga de funciones de plantilla
Las funciones de plantilla y la sobrecarga están intimamente relacionadas.
Las funciones relacionadas que se generan a partir de una plantilla de función tienen el mismo nombre, por lo que el compilador utiliza la resolución de sobrecarga para llamar a la función adecuada.
La plantilla de función misma puede sobrecargarse de varias formas Podemos proporcionar otras plantillas de función
que especifiquen el mismo nombre de la función, pero diferentes parámetros de función.
M.C. Yalu Galicia Hdez. (FCC/BUAP)
59
Sobrecarga de funciones de plantilla Si se llama a una plantilla con un tipo de
clase definida por el usuario (por ejemplo, la clase fracción, complejo o pex) y si dicha plantilla utiliza operadores como ==, +, <=, *, etc., con objetos de ese tipo de clase, estos operadores deben ser sobrecargados.
El olvido de sobrecargar tales operadores causa errores debido a que el compilador genera llamadas hacia las funciones de operador sobrecargadas adecuadas, a pesar de que esas funciones no estén presentes.
M.C. Yalu Galicia Hdez. (FCC/BUAP)
60
Actividad colaborativaActividad colaborativaActividad:Hacer un programa que realice lo siguiente:
Permita al usuario introducir un conjunto de datos, que puede ser de tipo char, int o double.
Permita al usuario seleccionar el método de ordenamiento a utilizar: método de burbuja, inserción o selección, para ordenar su arreglo.
Imprima en pantalla el arreglo sin ordenar y el arreglo ordenado.
Crear plantillas de función para cada uno de los métodos de ordenamiento.
Cada método debe tener como parámetros el arreglo a ordenar y el número de elementos en el arreglo.
Probar con diferentes tipos de datos los métodos de ordenamiento.
M.C. Yalu Galicia Hdez. (FCC/BUAP)
61
Actividad colaborativaActividad colaborativa Colaborativamente: Trabajen en equipo,
asegurándose de que comprenden todos los algoritmos de ordenamiento y comousar templates.
Criterios para el éxito: Cada integrante del equipo deberá ser capaz de pasar al frente y explicar al grupo los métodos de ordenamiento y templates
Responsabilidad Individual: Cualquier integrante del equipo podrá ser seleccionad@ aleatoriamente para exponer su programa. Su calificación será la del equipo.
M.C. Yalu Galicia Hdez. (FCC/BUAP)
62
Actividad grupal (SOLUCION) Compartiendo la experiencia
M.C. Yalu Galicia Hdez. (FCC/BUAP)
63
Plantillas de Clase Las plantillas de clase favorecen la
reutilización del software, permitiendo que se instancien versiones específicas para un tipo a partir de clases genéricas.
A la plantillas de clase se les llama tipos con parámetros, debido a que requieren se especifiquen uno o mas parámetros de tipo para especificar la manera de personalizar una plantilla de “clase genérica” a fin de formar una clase de plantilla específica.
M.C. Yalu Galicia Hdez. (FCC/BUAP)
64
Plantillas de clase El programador que desea producir una
variedad de clases de plantilla escribe simplemente una definición de plantilla de clase. Cada vez que el programador necesita una
nueva instanciación específica de un tipo, utiliza una notación concisa y simple, y el compilador escribe el código fuente para la clase de plantilla que el programa requiere.
Por ejemplo, una plantilla de clase vector podría convertirse en la base para la creación de muchas clases vector (tales como vector de enteros, de empleados, de alumnos, etc.) que se utilicen en un programa.
M.C. Yalu Galicia Hdez. (FCC/BUAP)
65
Ejemplo de plantillas de clase//ejemplo de plantillas de clase#include <iostream>#include <string>using namespace std;
//definimos una clase Alumno para crear después vectores de alumnos
class Alumno {friend ostream & operator<<(ostream &, const Alumno &);friend istream & operator>>(istream &, Alumno &); public:
//constructoresAlumno () {
matricula = 0; nombre = "vacio"promedio = 0;
}//accesoresstring getNombre() { return nombre; }
M.C. Yalu Galicia Hdez. (FCC/BUAP)
66
Ejemplo de plantillas de clase//sobrecarga de operadores para comparacion
int operator==(Alumno b) { return ((nombre == b.getNombre()) ? 1 : 0); }
int operator<(Alumno b) {return ((nombre < b.getNombre()) ? 1 : 0); }
int operator>(Alumno b) { return ((nombre > b.getNombre()) ? 1 : 0); }
int operator<=(Alumno b) { return ((nombre <= b.getNombre()) ? 1 : 0); }
int operator>=(Alumno b) { return ((nombre >= b.getNombre()) ? 1 : 0); }
private:long matricula; string nombre; //campo clave o llavedouble promedio;
};
M.C. Yalu Galicia Hdez. (FCC/BUAP)
67
Ejemplo de plantillas de clase//sobrecarga del operador de salida para la clase Alumnoostream &operator<<(ostream &output, const Alumno &a) {
output << a.matricula << "\t"<<a.nombre << "\t"<<a.promedio;return output;
}
//sobrecarga del operador de entrada para la clase Alumnoistream &operator>>(istream &input, Alumno &a) {
cout << "Ingrese matricula, nombre del alumno y promedio\n";input >> a.matricula >>a.nombre >>a.promedio;return input;
}
M.C. Yalu Galicia Hdez. (FCC/BUAP)
68
Ejemplo de plantillas de clase//PLANTILLA VECTORtemplate <class T >class Vector {public:
//constructoresVector(int t); //tamaño predefinido del vector 10~Vector() { delete [] apVec; }//Metodos de ordenamientovoid Seleccion();void Mostrar();
void Agrega(T x);private: int posicion;
int tamano;T *apVec; //apuntador al primer elemento del vector;int estaLleno() { return (posicion == tamano);}
};
M.C. Yalu Galicia Hdez. (FCC/BUAP)
69
Ejemplo de plantillas de clase //constructor template < class T> Vector<T>::Vector(int s) { tamano = s>0 ? s : 10;
posicion = 0; apVec = new T[tamano]; //asigna espacio para los
elementos }
template < class T>void Vector<T>:: Agrega(const T dato) {
if (!estaLleno())apVec[posicion++]= dato;
else cout << "Vector lleno \n";}
M.C. Yalu Galicia Hdez. (FCC/BUAP)
70
Ejemplo de plantillas de clasetemplate < class T>void Vector<T>::Seleccion() {
T AUX;int ind;for (int i= 0; i<posicion; i++) {
AUX = apVec[i];ind = i;for (int j= i+1; j<posicion; j++) {
if (apVec[j] < AUX) {AUX = apVec[j];ind = j;
}}apVec[ind]=apVec[i];
apVec[i]=AUX;}
}
M.C. Yalu Galicia Hdez. (FCC/BUAP)
71
Ejemplo de plantillas de clasetemplate < class T>void Vector<T>::Mostrar() {
cout << "Los datos son:\n";for(int i=0; i<posicion; i++)
cout << apVec[i] << endl;}
int main() { Alumno a;
int v1, v2, v3, v4, v5;Vector<Alumno> Alumnos(3); //crea un vector de alumnosVector<int> Numeros(5); //crea un vector de enteros
cin >> a; Alumnos.Agrega(a);cin >> a; Alumnos.Agrega(a);cin >> a; Alumnos.Agrega(a);Alumnos.Mostrar();
M.C. Yalu Galicia Hdez. (FCC/BUAP)
72
Ejemplo de plantillas de clasecout << “Ordenando Alumnos .. \n”;Alumnos.SelectionSort();Alumnos.Mostrar();
cout << "Ingresa 5 numeros: \n";cin >> v1 >> v2 >> v3 >> v4 >> v5;Numeros.Agrega(v1);Numeros.Agrega(v2);Numeros.Agrega(v3);Numeros.Agrega(v4);Numeros.Agrega(v5);Numeros.Mostrar();cout << “Ordenando numeros ... \n”;Numeros.SelectionSort();Numeros.Mostrar();return 0;
}
M.C. Yalu Galicia Hdez. (FCC/BUAP)
73
Salida ejemplo
M.C. Yalu Galicia Hdez. (FCC/BUAP)
74
Salida ejemplo
M.C. Yalu Galicia Hdez. (FCC/BUAP)
75
¿Que aprendimos?