Está en la página 1de 5

Laboratorio #1 L1

Diego Alejandro Machado Tovar ID:160005017


Jesús Gregorio Delgado ID: 160005010
22 de febrero del 2024

En este laboratorio se hará uso de las plantillas o templates para realizar funciones con el
fin de que estas puedan recibir cualquier tipo de dato. En este caso se hará uso de las plantillas para
realizar distintas operaciones con arrays con distintos tipos de datos.

Ejercicio #1

Escriba una función template para encontrar el índice del elemento más pequeño de un
array de cualquier tipo. Pruebe la función con tres arrays de tipo int, double y char. Entonces
imprima el valor del elemento más pequeño.

template <typename T, int n>


int smaller_of(T (&array)[n], int inicio){

int indMenor = inicio;


for (int i = inicio; i < n - 1; i++){
if( (array[i] < array[i + 1]) && (array[i] < array[indMenor]) ){
indMenor = i;
}
else if (array[i + 1] < array[indMenor]){
indMenor = i + 1;
}
}
return indMenor;
}

Para este ejercicio primero se crea una plantilla para la función “smaller” con el fin que la
función reciba arreglos que almacenen distintos tipos de datos. Dentro de la función se realiza una
variable local para darle un valor temporal a la posición donde se almacena el dato de menor valor
del arreglo, posteriormente un ciclo para recorrer cada uno de las posiciones del arreglo, luego
dentro del ciclo se valida si el valor dentro del arreglo en una posición inicial es menor al valor de
la siguiente posición y además es menor al valor de la posición de la variable “indMenor”, en caso
que esta condición se cumpla la posición del arreglo donde se encuentra el valor mas pequeño se
almacenara en la variable “indMenor”. En cuyo caso esta condición no se cumpla se realiza otra
condición para validar que el arreglo en la posición de la variable “indMenor” sea menor al arreglo
en la posición “i+1”. Finalmente se retorna la posición del arreglo que tiene el índice de menor
valor, el cual se almacena en la variable “indMenor”.

Ejercicio #2

Si encontramos el elemento más pequeño en un array, podemos ordenar un array usando el


algoritmo selection sort. En este algoritmo, encontramos el elemento más pequeño en el array y lo
intercambiamos con el primer elemento. Después encontramos el elemento más pequeño de los
elementos restantes y lo intercambiamos con el segundo elemento. Continuamos hasta que el array
esté completamente ordenado. Escriba un programa que ordene tres arrays de tipo int, double y char.

template<typename T, int n>


void sort(T(&array)[n]){
T temp;
int indMenor = 0;
for(int i = 0; i < n; i++){
temp = array[i];
indMenor = smaller(array, i);
array[i] = array[indMenor];
array[indMenor] = temp;
}
}
Para este ejercicio se realiza la plantilla para la función “sort” la cual no retornará nada,
pero recibirá por referencia el arreglo que se desea ordenar. Dentro de la función se crean dos
variables locales, una variable de tipo “T” llamada “temp” la cual será para almacenar cualquier
tipo de dato y una int llamada “indMenor”. Luego se hará un bucle para recorrer todo el arreglo en
el cual se almacenará en la variable temp el valor del arreglo en la posición “i”, posteriormente para
la variable donde se almacenará la posición del valor menor del arreglo la cual es “indMenor” se
hará uso de la función del ejercicio anterior. Luego de hacer este proceso se almacenará en la
posición “i” del arreglo se el valor del arreglo del arreglo con el índice menor, y luego el valor de la
variable “T” se almacena en la posición “indMenor” del arreglo.

Ejercicio 3

Escriba una función template para encontrar un valor en un array. Pruebe la función con
dos arrays de tipo int y char.
template <typename T, int N>
bool find(T(&array)[N], T valor){

for(T elemento: array){


if(valor == elemento)
return true;
}
return false;
}
Para este ejercicio se creará una plantilla para la función “find” la cual retornará un valor
booleano. En esta función se realiza un “foreach” para recorrer cada elemento del arreglo y
posteriormente validar si el valor que se desea buscar existe en el arreglo, si es así retorna un valor
verdadero, en caso de que no se cumpla la función se retornas un valor falso.

Ejercicio #4

Defina una función para revertir el orden de los elementos de un array de cualquier tipo.
Pruebe el programa con un array de int, double, char y string. Use una función auxiliar para
intercambiar dos elementos cualesquiera. Use una función auxiliar para imprimir el contenido de
un arreglo antes y después del intercambio.

template <typename T, int n>


void reverse(T(&array)[n]){
//si el tamaño es par necesito intercambiar n / 2 veces
T temp;
int n1 = n - 1;
if(n % 2 == 0){
for(int i = 0; i < n/2; i++)
{ temp = array[i];
array[i] = array[n1 -
i]; array[n1-i] = temp;
}
}
//si el tamaño es impar necesito intercambiar n - 1 / 2 veces
else{
for(int i = 0; i < (n-1)/2; i++){
temp = array[i];
array[i] = array[n1-i];
array[n1-i] = temp;
}
}
}
Para este ejercicio se crea una plantilla para la función “reverse” la cual no retornara nada,
pero organizara nuevamente el arreglo dentro de esta. Dentro de la función primero una variable de
tipo “T” llamada temp para almacenar cualquier tipo de dato. Luego se crea una variable de tipo
entero llamada “n1” para almacenar el número de elementos del arreglo restándole 1. Luego se
valida si el tamaño del arreglo es par o impar. En ambos casos se hará un ciclo for para recorrer los
elementos del arreglo, si es par este recorrerá el numero de elementos del arreglo dividido en 2,
dentro del for se usa la variable temp para almacenar el valor del array en la posición “i” luego en la
posicion “i” del arreglo se almacena el valor del arreglo “n1-1”, luego el valor de temp se
almacenará en la posición “n1-1” del arreglo. Si el numero de elementos del arreglo es impar el
bucle hará lo mismo que el anterior, con la modificación que este solo recorrerá en el arreglo hasta
“(n1-1)/2”.

template<typename T, int N>


void print(T(&array)[N]){
for(int i=0; i < N; i++){
cout << array[i] << " ";
}
cout << endl;
}
Finalmente se crea una plantilla para la función print, la cual imprimirá los arreglos.

También podría gustarte