La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

M.C. Yalu Galicia Hdez. (FCC/BUAP)

Presentaciones similares


Presentación del tema: "M.C. Yalu Galicia Hdez. (FCC/BUAP)"— Transcripción de la presentación:

1 M.C. Yalu Galicia Hdez. (FCC/BUAP)
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 M.C. Yalu Galicia Hdez. (FCC/BUAP)
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 M.C. Yalu Galicia Hdez. (FCC/BUAP)
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.C. Yalu Galicia Hdez. (FCC/BUAP)
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.C. Yalu Galicia Hdez. (FCC/BUAP)
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.C. Yalu Galicia Hdez. (FCC/BUAP)
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. Si a[j-1] > a[j], se permutan 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 M.C. Yalu Galicia Hdez. (FCC/BUAP)

9 M.C. Yalu Galicia Hdez. (FCC/BUAP)
Algoritmo de Burbuja Inicio para i  1 hasta N hacer para j  N hasta i+1 hacer (-1) si A[j] < A[j-1] entonces aux  A[j] A[j]  A[j-1] A[j-1]  aux fin_para Fin M.C. Yalu Galicia Hdez. (FCC/BUAP)

10 M.C. Yalu Galicia Hdez. (FCC/BUAP)
Actividad colaborativa Actividad: 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 M.C. Yalu Galicia Hdez. (FCC/BUAP)

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. Si A[i] < A[i-1], se permutan A1 A2 A3 ... Ai-2 Ai-1 Ai Ai+1 An Ai-1 elementos ordenados Si A[i] < A[i-2], se permutan A1 A2 A3 ... Ai-2 Ai Ai-1 Ai+1 An Si A[i] > A[3] CONDICIÓN DE PARO - elementos ordenados A1 A2 A3 Ai ... Ai-2 Ai-1 Ai+1 An Ai elementos ordenados

13 Algoritmo del método de inserción
Inicio para i 1 hasta N hacer j  i+1 Mientras A[j] < A[j-1] AND j > 1 Hacer aux  A[j] A[j]  A[j-1] A[j-1]  aux j  j - 1 fin mientras fin para Fin M.C. Yalu Galicia Hdez. (FCC/BUAP)

14 M.C. Yalu Galicia Hdez. (FCC/BUAP)
Actividad colaborativa Actividad: 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 M.C. Yalu Galicia Hdez. (FCC/BUAP)

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 Si Aj es el más pequeño, permutarlo a la 1er. posición A1 A2 A3 Aj Ai-2 Ai-1 Ai Ai+1 ... An Si A4 es el i-ésimo más pequeño, entonces permutar a la i-ésima posición Aj Ai+1 A1 A2 Ai A3 A4 Ai-2 ... An i-1 elementos ordenados

17 Algoritmo de Selección directa
Inicio para i  1 hasta N-1 hacer posMenor  i valorMenor  A[i] para j  i+1 hasta N hacer si A[j] < valorMenor entonces posMenor  j valorMenor  A[j] fin_si fin_para A[posMenor]  A[i] A[i]  valorMenor Fin M.C. Yalu Galicia Hdez. (FCC/BUAP)

18 M.C. Yalu Galicia Hdez. (FCC/BUAP)
Actividad colaborativa Actividad: 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 M.C. Yalu Galicia Hdez. (FCC/BUAP)
¿Que aprendimos? M.C. Yalu Galicia Hdez. (FCC/BUAP)

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.

22 M.C. Yalu Galicia Hdez. (FCC/BUAP)
Algoritmo ShellSort Algoritmo ShellSort inicio h  N/2 //hueco inicial Mientras h >= 1 hacer Para i  h hasta N hacer temp = A[i] j  i Mientras j >= h && temp < A[j-h] hacer A[j]  A[j-h]; j  j - h; fin_mientras A[j]  temp; fin_para h  h/2 Fin M.C. Yalu Galicia Hdez. (FCC/BUAP)

23 M.C. Yalu Galicia Hdez. (FCC/BUAP)
Actividad colaborativa Actividad: 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 M.C. Yalu Galicia Hdez. (FCC/BUAP)

24 Actividad grupal (SOLUCION)
Compartiendo la experiencia M.C. Yalu Galicia Hdez. (FCC/BUAP)

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)

26 M.C. Yalu Galicia Hdez. (FCC/BUAP)
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 M.C. Yalu Galicia Hdez. (FCC/BUAP)
QuickSort 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. Después del intercambio 18 11 27 13 9 4 16 4 11 27 13 9 18 16 Izq Der Izq Der pivote pivote 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. M.C. Yalu Galicia Hdez. (FCC/BUAP)

28 M.C. Yalu Galicia Hdez. (FCC/BUAP)
QuickSort Después del intercambio 4 11 9 13 27 18 16 4 11 27 13 9 18 16 Izq Der Izq Der pivote pivote < > Ordenar partición izquierda 4 11 9 13 27 18 16 4 11 9 13 27 18 16 Der Izq Izq Der pivote pivote 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 M.C. Yalu Galicia Hdez. (FCC/BUAP)

29 M.C. Yalu Galicia Hdez. (FCC/BUAP)
Algoritmo QuickSort Inicio establecer x al valor de un elemento arbitrario de la lista mientras división no este terminada hacer recorrer de izq a der para un valor >= x recorrer de der a izq para un valor =< x si valores localizados no ordenados entonces intercambiar los valores fin_si fin_mientras Fin M.C. Yalu Galicia Hdez. (FCC/BUAP)

30 M.C. Yalu Galicia Hdez. (FCC/BUAP)
Actividad colaborativa Actividad: 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 M.C. Yalu Galicia Hdez. (FCC/BUAP)
Búsqueda Métodos M.C. Yalu Galicia Hdez. (FCC/BUAP)

33 M.C. Yalu Galicia Hdez. (FCC/BUAP)
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 M.C. Yalu Galicia Hdez. (FCC/BUAP)
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 M.C. Yalu Galicia Hdez. (FCC/BUAP)
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 M.C. Yalu Galicia Hdez. (FCC/BUAP)
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 M.C. Yalu Galicia Hdez. (FCC/BUAP)
Actividad colaborativa Actividad: 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 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 colaborativa
Si 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 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 M.C. Yalu Galicia Hdez. (FCC/BUAP)
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 M.C. Yalu Galicia Hdez. (FCC/BUAP)
Búsqueda binaria La búsqueda binaria se puede implementar de modo iterativo y de modo recursivo. 8 < 10, Búsqueda en subvector izquierdo 8 4 6 8 10 12 14 16 Elemento a buscar izquierdo Derecho Central 8 > 6, Búsqueda en sub-subvector Derecho Elemento buscado = central, fin de la búsqueda 4 6 8 8 Central M.C. Yalu Galicia Hdez. (FCC/BUAP)

42 M.C. Yalu Galicia Hdez. (FCC/BUAP)
Algoritmo iterativo Algoritmo Busqueda Binaria (clave) Inicio izq  1 der  N central  (izq+der)/2 mientras (izq <= der) y (A[central] <> clave) hacer si clave < A[central] entonces der  central –1 // mover a subvector izq. sino izq  central +1 // mover a subvector der. fin_si fin_mientras si clave = A[central] entonces escribir “Valor encontrado en: “, central escribri “Valor no encontrado” Fin M.C. Yalu Galicia Hdez. (FCC/BUAP)

43 M.C. Yalu Galicia Hdez. (FCC/BUAP)
Actividad colaborativa Actividad: 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 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 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 M.C. Yalu Galicia Hdez. (FCC/BUAP)
Actividad colaborativa Actividad: 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 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 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 Plantillas de funciones y clases
Templates Plantillas de funciones y clases M.C. Yalu Galicia Hdez. (FCC/BUAP)

50 M.C. Yalu Galicia Hdez. (FCC/BUAP)
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. Lista de parámetros formales de tipo (<>) precedidos por la palabra clave class Template indica que es una platilla Cuerpo de la definición de la función M.C. Yalu Galicia Hdez. (FCC/BUAP)

53 M.C. Yalu Galicia Hdez. (FCC/BUAP)
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 maximo
cout << "El valor maximo de los tres es: " << maximo(int1, int2, int3) << endl; //version con enteros //versión reales double db1, db2, db3; cout << "Introduzca 3 valores de tipo real: "; cin >> db1 >> db2 >> db3; << 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; << maximo(c1, c2, c3) << endl; //version con caractes return 0; } M.C. Yalu Galicia Hdez. (FCC/BUAP)

56 Salida con tres tipos diferentes
M.C. Yalu Galicia Hdez. (FCC/BUAP)

57 M.C. Yalu Galicia Hdez. (FCC/BUAP)
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 M.C. Yalu Galicia Hdez. (FCC/BUAP)
Actividad colaborativa Actividad: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 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 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 M.C. Yalu Galicia Hdez. (FCC/BUAP)
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 M.C. Yalu Galicia Hdez. (FCC/BUAP)
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
#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: //constructores Alumno () { matricula = 0; nombre = "vacio" promedio = 0; } //accesores string 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 llave double promedio; }; M.C. Yalu Galicia Hdez. (FCC/BUAP)

67 Ejemplo de plantillas de clase
//sobrecarga del operador de salida para la clase Alumno ostream &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 Alumno istream &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 VECTOR template <class T > class Vector { public: //constructores Vector(int t); //tamaño predefinido del vector 10 ~Vector() { delete [] apVec; } //Metodos de ordenamiento void 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 } 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 clase
template < 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 clase
template < 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 alumnos Vector<int> Numeros(5); //crea un vector de enteros cin >> a; Alumnos.Agrega(a); cin >> a; Alumnos.Agrega(a); Alumnos.Mostrar(); M.C. Yalu Galicia Hdez. (FCC/BUAP)

72 Ejemplo de plantillas de clase
cout << “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(); return 0; } M.C. Yalu Galicia Hdez. (FCC/BUAP)

73 M.C. Yalu Galicia Hdez. (FCC/BUAP)
Salida ejemplo M.C. Yalu Galicia Hdez. (FCC/BUAP)

74 M.C. Yalu Galicia Hdez. (FCC/BUAP)
Salida ejemplo M.C. Yalu Galicia Hdez. (FCC/BUAP)

75 M.C. Yalu Galicia Hdez. (FCC/BUAP)
¿Que aprendimos? M.C. Yalu Galicia Hdez. (FCC/BUAP)


Descargar ppt "M.C. Yalu Galicia Hdez. (FCC/BUAP)"

Presentaciones similares


Anuncios Google