tipos abstractos de datos en c
martes, 02 de octubre del 2007 a las 22:39
vamos a empezar con un tipo abstracto de datos muy sencillo, vamos a definir un numero fraccionario
1º para ello debemos comenzar con un fichero de extencion .h en el cual pondremos la definicion
del tipo y la declaraciones de las variables y funciones a utilizar, llamemoslo fraccionario.h
y contendrá:
#include <stdio.h>
#ifndef _fraccionario_ /*sentencia del preprocesador de c, sirve para comprobar que no
hay otro tipo fraccionario en cuyo caso no podra ser definido nuestro TAD*/
#define _fraccionario_
typedef struct estructura{
int numerador;
int denominador; /*numero fraccionario tipo-> 1/2,2/4,5/6.....*/
}tipofraccion;
typedef tipofraccion *fraccionario;
fraccionario crear_fraccion(int x,int y);/*crea la fraccion*/
void destruir_fraccion(fraccionario f);/*libera la memoria*/
int numerador(fraccionario f);/*devuelve denominador de f*/
int denominador(fraccionario f); /*devuelve denominador de f*/
void producto(fraccionario f,fraccionario g); /*suma f=f*g*/
#endif
antes de pasar a la siguiente parte deberemos de comprender una question fundamental a la hora
de diseñar un TAD; la ocultación de informacion. Algunos de ustedes que lean esto se
preguntarán por que no he utilizado tipofraccion directamente en vez de utilizar un puntero a
estructura.
Bien esto es debido por que a la hora de implementar el tad si hubiese sido un estructura, a
la hora de tener que modificarla habría tenido que haberse pasado por referencia cargandose
la ocultacion de información. siendo por ejemplo la funcion producto asi: void producto(fraccionario *f,fraccionario g). si no fuese asi se pasaria por valor y fraccion f no se modificaría.
2º Una vez tengamos definido nuestro TAD, deberemos de implentar las funciones en un archivo de extencion .c, llamemoslo fichero.c:
#include "fraccionario.h"
#include <stdio.h>
#include <stdlib.h>
fraccionario crear_fraccion(int x,int y){
fraccionario f;
f=(fraccionario)malloc(sizeof(tipofraccion));
if(f==NULL){
printf("error: no hay memoria\n");
exit(1);
}
f->numerador=x;
f->denominador=y;
return f;
}
void destruir_fraccion(fraccionario f){
free(f);
}
int numerador(fraccionario f){
return f->numerador;
}
int denominador(fraccionario f){
return f->denominador;
}
void producto(fraccionario f,fraccionario g){
f->numerador*=g->numerador;
f->denominador*=g->denominador;
}
debemos de anotar que esto es una version del numero fraccionario simplificada y hecha de
manera introductoria para una persona que nunca ha visto nada de esto y no le resulte muy
pesado.
3ºutilizacion dentro de nuestros programas
#include <stdio.h>
#include <stdlib.h>
#include "fraccionario.h"
int main (void){
fraccionario f,g;
f=crear_fraccion(2,4);
g=crear_fraccion(3,5);
producto(f,g);
printf("el resultado de multiplicar 2/4f con g es: %d,%d\n",numerador(f),denominador(f));
destruir_fraccion(f);
destruir_fraccion(g);
return 0;
}
espero que sirva de ayuda para quien quiera introducirse en la programación con tipos
abstractos de datos.




Comentarios sobre tipos abstractos de datos en c
Y donde se deben guardar los archivos "fraccionario.h" y "fichero.c"... Yo los he guardado en la unidad C:\ y no me funciona!
no! debes de crear un arhivo con extension .h y otro con extension .c
y luego incluir el fraccionario.h en tu main, pro claro necesitaras un makefile ,,etc
Ante cualquier duda COMUNICAMELO POR AQUI Y cuelgo un programa de prueba con todo su codigo fuente
un daludo
Cesar uribe "follon" soy una loca para explicar estructas.
Cuando se coloca en el include comillas (" "), se debe colocar tanto el .h y el .c en el mismo directorio donde esta el fuente en ejecución...
y como lo ejecuto?