You are on page 1of 13

Lenguaje C Estructuras y Variables definidas por el Usuario.

Omar Andrs Zapata Mesa Grupo de Fenomenologa de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Qu es una Estructura?
En

la creacin de soluciones para algunos problemas surge la necesidad de agrupar datos de diferente tipo o de manejar datos que seran muy difcil de describir en los tipos de datos primitivos, esta es la situacin en la que debemos aprovecharnos de las caractersticas que hacen al lenguaje C especial, o sea el uso de estructuras uniones y punteros.

Cmo se declaran las estructuras?


Una

estructura contiene varios datos. La forma de definir una estructura es haciendo uso de la palabra clave struct.
struct mystruct { int int_member; double double_member; char string_member[25]; } variable;

"Variable"

es una instancia de "mystruct" y no es necesario ponerla aqu. Se podra omitir de la declaracin de "mystruct" y ms tarde declararla usando: struct mystruct variable;

Ejemplo
#include<stdio.h> #include<string.h> struct Planeta{ char Nombre[20]; double Posicion[3]; double Masa; }; void Print(struct Planeta *p){ printf("Planeta:\n"); printf("Nombre:%s\n",p->Nombre); printf("Posicion: (%.2lf, %.2lf, %.2lf)\n",p->Posicion[0],p->Posicion[1],p->Posicion[2]); printf("Masa: %.2lf \n",p->Masa); } int main(int argc,char *argv[]){ struct Planeta Tierra; strcpy(Tierra.Nombre,"Tierra"); Tierra.Posicion[0]=10e3; Tierra.Posicion[1]=1.2e2; Tierra.Posicion[2]=1.8e4; Tierra.Masa=312e11; Print(&Tierra); }

Punteros a estructuras
Al

igual que la mayora de los tipos de datos en C, las estructuras pueden contener punteros y a su vez ser un puntero. Cuando se accede a un dato de tipo struct que no es punto se accede a travs del opreador punto (Planeta.Nombre), pero cuendo la variable es puntero se accede con el operador (-> Planeta->Nombre ). Ver ejemplo anterior.

Estructuras Anidadas y Arrays de estructuras.


Una

estructura anidada es una estructura que a su vez contiene otra estructura como variable, esto es posible ya que la estructura creada por nosotros para a ser un tipo de datos mas en el sistema. Al igual que podemos trabajar con punteros de estructuras, podemos trabajar con arrays de estructuras, esto nos permite tener en una sola variable un conjunto de estructuras.

Tipos enum y redefinicin de tipos con typedef


Una enumeracion (enum) es un tipo definido con constante de tipo entero. En la declaracion de un tipo enum creamos una lista de tipo de datos que se asocian con las constantes enteras. Su funcin es asignar un nombre alternativo a tipos existentes, a menudo cuando su declaracin normal es aparatosa, potencialmente confusa o probablemente variable de una implementacin a otra. Ver Ejemplo completo a acontinuacin.

Ejemplo
#include<stdio.h> #include<string.h> #include<malloc.h> //en mac stdlib.h para funciones de alocacion de memoria enum ParticulaTipo {Electron=1,Proton=2,Neutron}; struct Particula{ int Tipo; int NivelOrbital; }; typedef struct Particula Particula; struct Atomo{ char Nombre[20]; Particula *Particulas; int nroParticulas; }; typedef struct Atomo Atomo; int main(int argc,char *argv[]){ Atomo helio; strcpy(helio.Nombre,"Helio"); Particula electron; Particula neutron; Particula proton; electron.Tipo = Electron; electron.NivelOrbital = 1; neutron.Tipo = Neutron; neutron.NivelOrbital = -1;//no aplica proton.Tipo = Proton; proton.NivelOrbital = -1; helio.Particulas=malloc(sizeof(Particula)*5); helio.Particulas[0]=electron; helio.Particulas[1]=neutron; helio.Particulas[2]=neutron; helio.Particulas[3]=proton; helio.Particulas[4]=proton; helio.nroParticulas = 5; }

Ejercicio
Basados

en el cdigo anterior, y tomando como ayuda el primer ejemplo, hacer una funcin que imprima cualquier tomo en los trminos en los que los definimos.

Estructuras con Funciones Internas.


Como

ya hemos visto en sesiones anteriores las funciones se pueden representar a travs de sus prototipos como punteros, valindonos de esta propiedad, podramos declarar variables de este tipo dentro de una estructura y luego asignarlas para que algunas de las variables internas de los objetos a estructura sean funciones. Veamos el siguiente ejemplo:

Ejemplo
#include<math.h> #include<stdio.h> typedef double (*fun)(double); struct funciones_trigonometricas{ double (*seno)(double); double (*coseno)(double); double (*tangente)(double); }ft = {sin,cos,tan}; //metodo dos struct funciones_trigonometricas_inversas{ fun funciones[3]; }fti = {{asin,acos,atan}}; int main(int argc,char *argv[]){ printf("seno de seno(pi) %lf\n",ft.seno(M_PI)); printf("seno de seno inverso de 0.5 %lf\n",fti.funciones[0](1)); }

Ejercicios
Hacer

una estructura que contenga la informacin del sistema solar incluyendo las lunas de los planetas. Note que la jerarqua sera estructura tipo estrella que contiene planetas y planetas que contienen lunas, eso sera una triple anidacin de estructuras.

Referencias

http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Estructu

You might also like