Ordenamiento - PowerPoint PPT Presentation

About This Presentation
Title:

Ordenamiento

Description:

Title: Composici n Author: Yalu Galicia Hdez Last modified by: Miguel Created Date: 6/11/2004 2:31:47 AM Document presentation format: Presentaci n en pantalla – PowerPoint PPT presentation

Number of Views:124
Avg rating:3.0/5.0
Slides: 76
Provided by: YaluGali
Category:

less

Transcript and Presenter's Notes

Title: Ordenamiento


1
Ordenamiento
  • Algoritmos

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

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

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)

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

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

7
Métodos logarítmicos
  • Los métodos logarítmicos se pueden clasificar en
  • Ordenamiento por partición
  • QuickSort
  • MergeSort
  • HeapSort

8
Método de la Burbuja
  • Se comparan pares de elementos adyacentes
  • Si Aj-1 es mayor que Aj, 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 aj-1 gt aj, 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 i1
9
Algoritmo de Burbuja
  • Inicio
  • para i ? 1 hasta N hacer
  • para j ? N hasta i1 hacer (-1)
  • si Aj lt Aj-1 entonces
  • aux ? Aj
  • Aj ? Aj-1
  • Aj-1 ? aux
  • fin_para
  • fin_para
  • Fin

10
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




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.

Si Ai lt Ai-1, se permutan
A1 A2 A3 ... Ai-2 Ai-1 Ai Ai1 ... An
Ai-1 elementos ordenados
Si Ai lt Ai-2, se permutan
A1 A2 A3 ... Ai-2 Ai Ai-1 Ai1 ... An
Si Ai gt A3 CONDICIÓN DE PARO - elementos
ordenados
A1 A2 A3 Ai ... Ai-2 Ai-1 Ai1 ... An
Ai elementos ordenados
13
Algoritmo del método de inserción
  • Inicio
  • para i ?1 hasta N hacer
  • j ? i1
  • Mientras Aj lt Aj-1 AND j gt 1 Hacer
  • aux ? Aj
  • Aj ? Aj-1
  • Aj-1 ? aux
  • j ? j - 1
  • fin mientras
  • fin para
  • Fin

14
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
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

Si Aj es el más pequeño, permutarlo a la 1er.
posición
A1 A2 A3 Aj Ai-2 Ai-1 Ai Ai1 ... An
Si A4 es el i-ésimo más pequeño, entonces
permutar a la i-ésima posición
Aj Ai1 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 ? Ai
  • para j ? i1 hasta N hacer
  • si Aj lt valorMenor entonces
  • posMenor ? j
  • valorMenor ? Aj
  • fin_si
  • fin_para
  • AposMenor ? Ai
  • Ai ? valorMenor
  • fin_para
  • Fin

18
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
19
Actividad grupal (SOLUCION)
  • Compartiendo la experiencia

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 ht1 .
  • 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
Algoritmo ShellSort
  • Algoritmo ShellSort
  • inicio
  • h ? N/2 //hueco inicial
  • Mientras h gt 1 hacer
  • Para i ? h hasta N hacer
  • temp Ai
  • j ? i
  • Mientras j gt h temp lt Aj-h hacer
  • Aj ? Aj-h
  • j ? j - h
  • fin_mientras
  • Aj ? temp
  • fin_para
  • h ? h/2
  • fin_mientras
  • Fin

23
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 0
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)

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

27
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
Der
Izq
Der
Izq
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.

28
QuickSort
Después del intercambio
4 11 9 13 27 18 16
4 11 27 13 9 18 16
Der
Izq
pivote
Der
Izq
pivote
lt
gt
Ordenar partición izquierda
4 11 9 13 27 18 16
4 11 9 13 27 18 16
Izq
Der
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

29
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 gt x
  • recorrer de der a izq para un valor lt x
  • si valores localizados no ordenados entonces
  • intercambiar los valores
  • fin_si
  • fin_mientras
  • Fin

30
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
31
Actividad grupal (SOLUCION)
  • Compartiendo la experiencia

32
Búsqueda
  • Métodos

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.

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.

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)

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.

37
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
    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
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 seleccionad_at_ aleatoriamente
    para exponer su programa. Su calificación será la
    del equipo.

39
Actividad grupal (SOLUCION)
  • Compartiendo la experiencia

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.

41
Búsqueda binaria
  • La búsqueda binaria se puede implementar de modo
    iterativo y de modo recursivo.

8 lt 10, Búsqueda en subvector izquierdo
8
4 6 8 10 12 14 16
Elemento a buscar
Derecho
izquierdo
Central
8 gt 6, Búsqueda en sub-subvector Derecho
Elemento buscado central, fin de la búsqueda
4 6 8
8
Central
42
Algoritmo iterativo
  • Algoritmo Busqueda Binaria (clave)
  • Inicio
  • izq ? 1
  • der ? N
  • central ? (izqder)/2
  • mientras (izq lt der) y (Acentral ltgt clave)
    hacer
  • si clave lt Acentral entonces
  • der ? central 1 // mover a subvector izq.
  • sino
  • izq ? central 1 // mover a subvector der.
  • fin_si
  • central ? (izqder)/2
  • fin_mientras
  • si clave Acentral entonces
  • escribir Valor encontrado en , central
  • sino
  • escribri Valor no encontrado
  • fin_si
  • Fin

43
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
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 seleccionad_at_ aleatoriamente
    para exponer su programa. Su calificación será la
    del equipo.

45
Actividad grupal (SOLUCION)
  • Compartiendo la experiencia

46
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
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 seleccionad_at_ aleatoriamente
    para exponer su programa. Su calificación será la
    del equipo.

48
Actividad grupal (SOLUCION)
  • Compartiendo la experiencia

49
Templates
C
  • Plantillas de funciones
  • y clases

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.

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.

52
Plantillas de función
  • La definición de plantillas de función es de la
    siguiente forma
  • Template ltclass Tgt
  • T maximo (T valor1, T valor2, T valor3)
  • T max valor1
  • if ( valor2 gt max)
  • max valor2
  • if (valor3 gt 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
(ltgt) precedidos por la palabra clave class
Template indica que es una platilla
Cuerpo de la definición de la función
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.

54
Ejemplo completo de maximo
  • //Uso de plantillas de funcion (templates)
  • include ltiostream.hgt
  • template ltclass Tgt
  • T maximo (T valor1, T valor2, T valor3)
  • T max valor1
  • if(valor2 gt max)
  • max valor2
  • if(valor3 gt max)
  • max valor3
  • return max
  • int main()
  • int int1, int2, int3
  • cout ltlt "Introduzca 3 valores de tipo entero "
  • cin gtgt int1 gtgt int2 gtgt int3

55
Ejemplo completo de maximo
  • cout ltlt "El valor maximo de los tres es "
  • ltlt maximo(int1, int2, int3) ltlt endl
    //version con enteros
  • //versión reales
  • double db1, db2, db3
  • cout ltlt "Introduzca 3 valores de tipo real "
  • cin gtgt db1 gtgt db2 gtgt db3
  • cout ltlt "El valor maximo de los tres es "
  • ltlt maximo(db1, db2, db3) ltlt endl
    //version con doubles
  • //versión caracteres
  • char c1, c2, c3
  • cout ltlt "Introduzca 3 valores de tipo caracter
    "
  • cin gtgt c1 gtgt c2 gtgt c3
  • cout ltlt "El valor maximo de los tres es "
  • ltlt maximo(c1, c2, c3) ltlt endl //version
    con caractes
  • return 0

56
Salida con tres tipos diferentes
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.

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.

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 , , lt, , 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.

60
Actividad colaborativa
  • ActividadHacer 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.

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 seleccionad_at_ aleatoriamente
    para exponer su programa. Su calificación será la
    del equipo.

62
Actividad grupal (SOLUCION)
  • Compartiendo la experiencia

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.

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.

65
Ejemplo de plantillas de clase
  • //ejemplo de plantillas de clase
  • include ltiostreamgt
  • include ltstringgt
  • using namespace std
  • //definimos una clase Alumno para crear después
    vectores de alumnos
  • class Alumno
  • friend ostream operatorltlt(ostream , const
    Alumno )
  • friend istream operatorgtgt(istream , Alumno )
  • public
  • //constructores
  • Alumno ()
  • matricula 0
  • nombre "vacio"
  • promedio 0
  • //accesores
  • string getNombre() return nombre

66
Ejemplo de plantillas de clase
  • //sobrecarga de operadores para comparacion
  • int operator(Alumno b)
  • return ((nombre b.getNombre()) ? 1 0)
  • int operatorlt(Alumno b)
  • return ((nombre lt b.getNombre()) ? 1 0)
  • int operatorgt(Alumno b)
  • return ((nombre gt b.getNombre()) ? 1 0)
  • int operatorlt(Alumno b)
  • return ((nombre lt b.getNombre()) ? 1 0)
  • int operatorgt(Alumno b)
  • return ((nombre gt b.getNombre()) ? 1 0)
  • private
  • long matricula
  • string nombre //campo clave o llave
  • double promedio

67
Ejemplo de plantillas de clase
  • //sobrecarga del operador de salida para la clase
    Alumno
  • ostream operatorltlt(ostream output, const Alumno
    a)
  • output ltlt a.matricula ltlt "\t"ltlta.nombre ltlt
    "\t"ltlta.promedio
  • return output
  • //sobrecarga del operador de entrada para la
    clase Alumno
  • istream operatorgtgt(istream input, Alumno a)
  • cout ltlt "Ingrese matricula, nombre del alumno y
    promedio\n"
  • input gtgt a.matricula gtgta.nombre gtgta.promedio
  • return input

68
Ejemplo de plantillas de clase
  • //PLANTILLA VECTOR
  • template ltclass T gt
  • 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)

69
Ejemplo de plantillas de clase
  • //constructor
  • template lt class Tgt
  • VectorltTgtVector(int s)
  • tamano sgt0 ? s 10
  • posicion 0
  • apVec new Ttamano //asigna espacio
    para los elementos
  • template lt class Tgt
  • void VectorltTgt Agrega(const T dato)
  • if (!estaLleno())
  • apVecposicion dato
  • else
  • cout ltlt "Vector lleno \n"

70
Ejemplo de plantillas de clase
  • template lt class Tgt
  • void VectorltTgtSeleccion()
  • T AUX
  • int ind
  • for (int i 0 iltposicion i)
  • AUX apVeci
  • ind i
  • for (int j i1 jltposicion j)
  • if (apVecj lt AUX)
  • AUX apVecj
  • ind j
  • apVecindapVeci
  • apVeciAUX

71
Ejemplo de plantillas de clase
  • template lt class Tgt
  • void VectorltTgtMostrar()
  • cout ltlt "Los datos son\n"
  • for(int i0 iltposicion i)
  • cout ltlt apVeci ltlt endl
  • int main()
  • Alumno a
  • int v1, v2, v3, v4, v5
  • VectorltAlumnogt Alumnos(3) //crea un vector de
    alumnos
  • Vectorltintgt Numeros(5) //crea un vector de
    enteros
  • cin gtgt a Alumnos.Agrega(a)
  • cin gtgt a Alumnos.Agrega(a)
  • cin gtgt a Alumnos.Agrega(a)
  • Alumnos.Mostrar()

72
Ejemplo de plantillas de clase
  • cout ltlt Ordenando Alumnos .. \n
  • Alumnos.SelectionSort()
  • Alumnos.Mostrar()
  • cout ltlt "Ingresa 5 numeros \n"
  • cin gtgt v1 gtgt v2 gtgt v3 gtgt v4 gtgt v5
  • Numeros.Agrega(v1)
  • Numeros.Agrega(v2)
  • Numeros.Agrega(v3)
  • Numeros.Agrega(v4)
  • Numeros.Agrega(v5)
  • Numeros.Mostrar()
  • cout ltlt Ordenando numeros ... \n
  • Numeros.SelectionSort()
  • Numeros.Mostrar()
  • return 0

73
Salida ejemplo
74
Salida ejemplo
75
Que aprendimos?
Write a Comment
User Comments (0)
About PowerShow.com