Title: Ordenamiento
1Ordenamiento
2Algoritmos 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
3Ordenamiento
- 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
4Mé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)
5Ordenació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
6Mé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
7Métodos logarÃtmicos
- Los métodos logarÃtmicos se pueden clasificar en
- Ordenamiento por partición
- QuickSort
- MergeSort
- HeapSort
8Mé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
9Algoritmo 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
10Actividad 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
11Actividad grupal (SOLUCION)
- Compartiendo la experiencia
12Mé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
13Algoritmo 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
14Actividad 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
15Actividad grupal (SOLUCION)
- Compartiendo la experiencia
16Mé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
17Algoritmo 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
18Actividad 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
19Actividad grupal (SOLUCION)
- Compartiendo la experiencia
20Que aprendimos?
21Shell 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.
22Algoritmo 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
23Actividad 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
24Actividad grupal (SOLUCION)
- Compartiendo la experiencia
25Mé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)
26Mé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
27QuickSort
- 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.
28QuickSort
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
29Algoritmo 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
30Actividad 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
31Actividad grupal (SOLUCION)
- Compartiendo la experiencia
32Búsqueda
33Bú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.
34Bú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.
35Bú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)
36Bú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.
37Actividad 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
38Actividad 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.
39Actividad grupal (SOLUCION)
- Compartiendo la experiencia
40Bú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.
41Bú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
42Algoritmo 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
43Actividad 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
44Actividad 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.
45Actividad grupal (SOLUCION)
- Compartiendo la experiencia
46Actividad 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
47Actividad 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.
48Actividad grupal (SOLUCION)
- Compartiendo la experiencia
49Templates
C
- Plantillas de funciones
- y clases
50Plantillas
- 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.
51Plantillas 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.
52Plantillas 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
53Plantillas 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.
54Ejemplo 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
55Ejemplo 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
56Salida con tres tipos diferentes
57Plantillas 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.
58Sobrecarga 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.
59Sobrecarga 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.
60Actividad 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.
61Actividad 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.
62Actividad grupal (SOLUCION)
- Compartiendo la experiencia
63Plantillas 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.
64Plantillas 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.
65Ejemplo 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
66Ejemplo 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
-
67Ejemplo 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
-
68Ejemplo 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)
69Ejemplo 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"
-
70Ejemplo 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
-
71Ejemplo 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()
-
72Ejemplo 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
73Salida ejemplo
74Salida ejemplo
75Que aprendimos?