Sie sind auf Seite 1von 8

UNTREF

Algoritmos y programacin 3
Trabajo prctico 0: Variant
2er cuatrimestre, 2014
(TrabajoIndividual)
Alumno: Walter Mariano Dvalos Andino
Fecha de entrega final:20/09/2014
Nota Final:

Introduccin
-Objetivo del trabajo
Consigna general
Entregables
Forma de entrega
Fechas de entrega
Informe
Supuestos
Descripcin de archivos
Descripcin de implementacin
Checklist de correccin
Carpeta
Cdigo

Introduccin

Objetivo del trabajo


Aplicar los conceptos enseados en la materia a la resolucin de un problema,
trabajando en forma individual y utilizando un lenguaje de tipado esttico C

Consigna general
Desarrollar un TDA capaz de almacenar los siguientes datos (uno por vez):

Nmeros: Enteros, punto flotante


Cadena de caracteres
Arrays de cualquier tipo
Estructuras no creadas an

Estos datos se podrn:


Duplicar
Asignar
Modificar
Una vez creado este TDA, crear un conjunto de este e imprimir su contenido en la salida standard.

Entregables

Cdigo fuente de la aplicacin completa. En ambiente Code Block

Forma de entrega

A coordinar con el docente asignado.

Fechas de entrega
Se deber validar semanalmente con el docente asignado el avance del trabajo.
El docente podr solicitar tems especficos a entregar en cada revisin semanal.
La entrega final deber ser en la semana del 20 de septiembre, en la fecha del
curso en que se est inscripto.

Informe
Introduccin
El trabajo consiste en poder manipular las distintas estructuras aprendidas para crear un
programa capaz de manejar nmeros, arreglos u estructuras no creadas mediante un tda
q de nuestra propia autora.

Supuestos
Dado que dentro de la consigna de trabajo se espera poder manipular estructuras no
creadas, doy por sentado que el mtodo de impresin para el mismo debe ser
proporcionado por el dueo de la estructura. Adems de que es necesario pedir que el
usuario proporcione ciertos datos vitales para la utilizacin de ciertas funciones.

Descripcin de Archivos
Los archivos para la creacin del trabajo son dos:
Variant.h
main.c
Dentro de Variant.h fueron declarados los mtodos q serviran para la
implementacin del cdigo y se cre la estructura Variant que es la tda q se
utiliza en todo el cdigo. Dado que no pude resolver un problema con el
compilador la implementacin del cdigo se encuentra en el main.c junto con las
pruebas del mismo.

Descripcin de la Implementacin

Dentro del Variant.h podemos ver el struct de variant que contiene un puntero a void "pdato" que nos
servir para almacenar cualquier tipo de dato. Adems contiene un enum de tipoDeDato para
guardarnos el tipo de dato que se almacena en pDato y un unsigned int para guardarnos la cantidad
de elementos del dato. Si es un array o una cadena de caracteres se guarda la cantidad de
elementos o caracteres del array, si es un numero solo se guarda un 1.

El enum permite identificar qu tipo de datos voy a estar recibiendo, siendo INT datos int, DOUBLE
para double, FLOAT para float, CHAR para char y DESCONOCIDO q he reservado para q se pueda
usar cualquier estructura no creada.

Adems encontraremos la declaracin de los mtodos que se utilizaran para la realizacin del
trabajo prctico.

Eso es todo lo q se encuentra dentro del variant.h, un cdigo simple en donde solo declare lo que
utilizare para armar el diseo del cdigo.
La implementacin, como se menciono en el apartado de implementacin de archivos, se encuentra
dentro del main.c y se centra en 5 funciones.
El primero de ello es Inicializar:

Recibe la estructura como parmetro y se encarga de inicializar el dato q contenga en NULL.


Adems imprime por consola un mensaje de que fue inicializado.
Es la nica funcin q tiene, asegurar q el dato de variant sea null.
El segundo mtodo es Asignar:

Esta funcin se encarga de manipular el puntero void de la estructura para q los datos sean
asignados de manera correcta. Para esto aprovecho la utilidad del enum q haba creado antes y as
dependiendo del tipo de dato que recibamos podemos hacer el casteo correspondiente para cada
tipo de dato as como tambin la reserva de memoria. La copia de datos la realizo con la funcin
memcpy. Adems asignamos al Variant dest el tipo de datos que corresponde y la cantidad de

elementos.

La tercera funcin es modificar:

Aqu vemos q tenemos una estructura de control if q evala si hay datos dentro del puntero variant y
de haberlos liberara esa porcin de memoria y le asignara el nuevo dato q se desea. Esto es para
evitar q los datos se pisen y resolver la asignacin de manera simple.
El camino de reasignacin se realiza dentro de la estructura switch para manejar el casteo
dependiendo el tipo de dato y luego la asignacin del dato mediante la funcin memcpy.
La siguiente funcin es duplicar:

Duplicar tambin tiene una implementacin muy simple. Recibe una estructura de variant, que es la
tda utilizada. Luego cre un puntero hacia una nueva variant a la que llamo duplicado. El duplicado
se inicializa y luego con la funcin asignar se copian los datos. Finalmente se devuelve el puntero de
duplicado.

La ltima funcin del programa es Imprimir:

Esta funcin solo se encarga de la impresin por consola de datos que se encuentren dentro de la
estructura que se pase como parmetro. Mediante un switch maneja la impresin para cada tipo de
dato que se pueda encontrar dentro de la estructura.

Checklist de correccin
Esta seccin es para uso exclusivo de los docentes, por favor no modificar.

Carpeta
Generalidades

Son correctos los supuestos?

Es prolija la presentacin? (hojas del mismo tamao, numeradas y con tipografa


uniforme)
Modelo

Est completo?Contempla la totalidad del problema?


Respeta encapsulamiento?
Utilizacin de memoria dinmica

Cdigo
Generalidades

Respeta estndares de codificacin?


Est correctamente documentado?