Estructura de Datos y Algoritmos
2019
Práctico 1
- TIPOS DE DATOS -
NOTA: Resuelva el práctico como una unidad, esto es, utilizar los tipos de datos creados en donde
sea necesario. Debe entregar el código completo del práctico en un único proyecto C++, siguiendo
los criterios aconsejados por la cátedra.
EJERCICIO 1
Defina un nuevo tipo de dato (typedef) para representar una cadena de texto denominado str.
Incluirlo en una librería (edya.h) donde se agrupen funciones que permitan el manejo de este nuevo
tipo de dato1 y sean requeridas durante la resolución del práctico:
● strlen(...): obtener la longitud de una cadena.
● strcat(...): concatenar cadenas.
● strcpy(...): copiar una cadena en otra.
● substr(...): obtener una subcadena indicando principio y longitud.
● itoa(...): convertir un entero decimal en una cadena.
Para la resolución es necesario hacer uso de la función malloc y no deben utilizarse las librería
provista por el lenguaje <string.h>, <cstring>, <stdlib.h> y <cstdlib>.
Por último compare las diferentes alternativas de implementación (punteros y arreglos primitivos)
realizando una análisis de ventajas/desventajas, facilidad de programación, etc.
EJERCICIO 2
Defina dentro de la librería edya.h un tipo de dato enumerado mes que contenga identificadores para
todos los meses del año (1 Enero, 2 Febrero, … , 12 Diciembre). Incluya también funciones que
ayuden a la manipulación de este tipo de dato:
● retornar el siguiente mes de un mes dado,
● retornar el número del mes correspondiente al mes dado y
● retornar un str con el nombre del mes.
EJERCICIO 3
Defina dentro de la librería edya.h una estructura de datos (date) que permita almacenar una fecha
con los campos day, month y year. Codifique allí también las funciones asociadas a este nuevo tipo
de dato:
1. cargar una fecha a partir de una cadena de caracteres de formato dd/mm/yyyy2,
2. verificar que es una fecha correcta,
3. verificar si es año bisiesto,
4. convertir una fecha en una cadena (con el formato dd/mm/yyyy) y
1
Las funciones y tipos de datos se pueden agrupar usando un namespace.
2
Se respeta el formato, en caso de que la fecha no sea correcta poner por defecto 01/01/1970.
1
Estructura de Datos y Algoritmos
2019
5. comparar dos fechas retornando la cantidad de días entre ellas.
EJERCICIO 4
Una palabra en una computadora es una cadena finita de bits (0|1) que son manejados en forma
conjunta. Defina dentro de la librería word.h una estructura de datos word de 32 bits (4 bytes).
● Estudie los tipos de datos primitivos3 y sus modificadores4 para encontrar el más adecuado
para la implementación.
● Utilizando uniones y estructuras defina el tipo de dato word de forma que permita hacer
operaciones sobre toda la palabra o sobre un byte en particular.
Código de ejemplo para el uso del TDA word:
word w = {0xA0B1C2D3};
cout << endl << "word: "<< hex << w.data;
w.b0 = 0xD3;
w.b1 = 0xC2;
w.b2 = 0xB1;
w.b3 = 0xA1;
cout << endl << "b0: "<< hex << int(w.b0);
cout << endl << "b1: "<< hex << int(w.b1);
cout << endl << "b2: "<< hex << int(w.b2);
cout << endl << "b3: "<< hex << int(w.b3);
Salida por consola:
word: a0b1c2d3
b0: d3
b1: c2
b2: b1
b3: a1
EJERCICIO 5
Utilizando el entorno de depuración de Code::Blocks (Watches y Memory Dump) se pide:
● Explorar el uso del inspector de variables y volcado de memoria.
● Analizar el contenido de la memoria ram donde se aloja la variable w del tipo word (Ejercicio
4).
● Explique qué relación existe entre las direcciones de memoria de los campos data, b0, b1, b2
y b3.
EJERCICIO 6
Utilizando el tipo de dato date desarrolle una función que ordene un arreglo de tamaño N en forma
ascendente o descendente.
● Use reserva de memoria dinámica para definir a partir de N el tamaño del arreglo en tiempo
de ejecución.
● ¿Comó se pueden hacer distintos ordenamientos sin modificar el arreglo original y sin crear
una copia completa de la estructura?
3
https://en.cppreference.com/w/cpp/language/types
4
https://en.cppreference.com/w/cpp/language/types#modifiers
2
Estructura de Datos y Algoritmos
2019
EJERCICIO 7
Codifique un programa de prueba para testear el funcionamiento correcto de las funciones anteriores.
Una función de testeo por cada ejercicio, por ejemplo void test_ejercicio_01(){...}