¿Qué es una estructura?

 

Una estructura es un tipo de dato definido por el usuario, al utilizar una estructura Usted tiene la habilidad para definir un nuevo tipo de dato considerablemente más complejo que los tipos que hemos utilizado hasta ahora. Una estructura es una combinación de varios tipos de datos previamente definidos, incluyendo otras estructuras que hayamos definido previamente. Una definición simple es, "una estructura es un grupo de datos relacionados en una forma conveniente al programador y/o al usuario del programa". Como es costumbre, un ejemplo nos clarifica los conceptos:

 

#include

#include

 

struct

{

    char inicial;       /* Letra inicial del apellido */

    int  edad;          /* Edad */

    int  calificacion;  /* Aprovechamiento */

}

jose, miguel;

 

int main()

{

    jose.inicial = 'J';

    jose.edad = 15;

    jose.calificacion = 15;

    miguel.edad = jose.edad - 1; /* Miguel es un año menor que jose */

    miguel.calificacion = 16;

    miguel.inicial = 'M';

 

    printf("%c tiene %d anos y su calificacion es de %d\n",

      miguel.inicial, miguel.edad, miguel.calificacion);

    printf("%c tiene %d anos y su calificacion es de %d\n",

      jose.inicial, jose.edad, jose.calificacion);

 

    getch();

}

 

M tiene 14 anos y su calificacion es de 16

J tiene 15 anos y su calificacion es de 15

 

El programa empieza definiendo una estructura utilizando la palabra clave struct seguida de tres variables sencillas encerradas entre llaves, las cuales son los componentes de la estructura, después de la llave de cierre tenemos enlistadas dos variables llamadas jose y miguel. De acuerdo a la definición de una estructura, jose es una variable compuesta de tres elementos, inicial, edad y, calificacion. Cada uno de los tres campos están asociados a jose y cada uno almacena una variable de su respectivo tipo, lo mismo se puede decir para miguel pero sus variables son diferentes por lo tanto tenemos 6 variables agrupadas en dos, de tipo struct.

 

Una variable compuesta

Examinemos la variable llamada jose más cercanamente, como ya mencionamos, cada uno de los tres elementos de jose son simples variables y pueden ser utilizadas como cualquier otra, por ejemplo, el elemento edad es una variable de tipo int que puede ser utilizada en cálculos, como contador, en operaciones de E/S, etc. Tenemos ahora el problema de definir cómo usar la variable llamada edad que es parte de la variable compuesta llamada jose, para esto utilizamos ambos nombres separados por un punto decimal con el nombre principal en primer término, entonces, jose.edad es el nombre completo para el campo edad de jose, este enunciado puede utilizarse en cualquier parte del programa C si deseamos referirnos a éste campo. De hecho, es ilegal utilizar el nombre jose ó edad individualmente porque son definiciones parciales de un campo.

 

Asignando valores a las variables

 

Usando la definición dada arriba, podemos asignar un valor a cada uno de los tres campos de jose e igualmente para miguel, observe que jose.inicial es una variable de tipo char ya que así fué definida en la estructura por lo que se le debe asignar un caracter. En la línea 14 asignamos el caracter J a jose.inicial de acuerdo a las reglas en tanto que a los otros dos campos de jose se les asigna valores de acuerdo a sus respectivos tipos. Finalmente asignamos valores a los tres campos de miguel pero en diferente orden para ilustrar que ésto no es crítico, observe que se utiliza la edad del jose para determinar la edad de la miguel, esto ilustra el uso de un miembro de la estructura.

 

Un array de estructuras

 

El siguiente programa es básicamente el mismo que el anterior, pero esta vez definimos un array de 12 variables llamadas chicos, está claro que éste programa contiene 12 veces 3=36 variables sencillas cada una de las cuales puede almacenar un ítem de dato siempre y cuando sea del tipo adecuado, se define además una variable común llamada indice para utilizarla en los bucles, estudie el código:

 

#include

#include

 

struct

{

    char inicial;

    int  edad;

    int  calificacion;

}

chicos[12];

 

int main()

{

    int indice;

 

    for (indice = 0; indice < 12; indice++)

    {

        chicos[indice].inicial = 'A' + indice;

        chicos[indice].edad = 16;

        chicos[indice].calificacion = 17;

    }

 

    chicos[2].edad = chicos[4].edad = 15;

    chicos[3].calificacion = chicos[5].calificacion = 16;

    chicos[11].calificacion = 14;

 

    for (indice = 0; indice < 12; indice++)

    printf("%c tiene %d anos y una calificacion de %d\n",

      chicos[indice].inicial, chicos[indice].edad,

      chicos[indice].calificacion);

 

    getch();

}

 

Para asignar un valor a cada uno de los campos utilizamos un bucle for, en cada ciclo del bucle se asignan todos los valores para uno de los chicos, en una situación real ésta podría no ser la mejor manera de asignar datos, pero un bucle puede leer los datos de un archivo y almacenarlos en la correcta ubicación en un programa real, considere éste ejemplo como un inicio burdo a una base da datos, pues eso es justamente nuestro ejemplo. El código resulta fácil de entender, el resultado de la ejecución del programa es el siguiente:

 

A tiene 16 anos y una calificacion de 17

B tiene 16 anos y una calificacion de 17

C tiene 15 anos y una calificacion de 17

D tiene 16 anos y una calificacion de 16

E tiene 15 anos y una calificacion de 17

F tiene 16 anos y una calificacion de 16

G tiene 16 anos y una calificacion de 17

H tiene 16 anos y una calificacion de 17

I tiene 16 anos y una calificacion de 17

J tiene 16 anos y una calificacion de 17

K tiene 16 anos y una calificacion de 17

L tiene 16 anos y una calificacion de 14