AnteriorPosterior

5.5. Estructuras

  Curso: Fundamentos de programación en C, por Nacho Cabanes

5.5. Estructuras

5.5.1. Definición y acceso a los datos

Un registro es una agrupación de datos, los cuales no necesariamente son del mismo tipo. Se definen con la palabra “struct”.

Para acceder a cada uno de los datos que forman el registro, tanto si queremos leer su valor como si queremos cambiarlo, se debe indicar el nombre de la variable y el del dato (o campo) separados por un punto:

/*---------------------------*/
/*  Ejemplo en C nº 50:      */
/*  C050.C                   */
/*                           */
/*  Registros (struct)       */
/*                           */
/*  Curso de C,              */
/*    Nacho Cabanes          */
/*---------------------------*/
 
#include <stdio.h>
 
int main()
{
  struct 
  {
    char  inicial;
    int   edad;
    float nota;
  } persona;
 
  persona.inicial = 'J';
  persona.edad = 20;
  persona.nota = 7.5;
  printf("La edad es %d", persona.edad);
 
  return 0;
}
 

Como es habitual en C, para declarar la variable hemos indicado primero el tipo de datos (struct { ...} ) y después el nombre que tendrá esa variable (persona).

También podemos declarar primero cómo van a ser nuestros registros, y más adelante definir variables de ese tipo:

/*---------------------------*/
/*  Ejemplo en C nº 51:      */
/*  C051.C                   */
/*                           */
/*  Registros (2)            */
/*                           */
/*  Curso de C,              */
/*    Nacho Cabanes          */
/*---------------------------*/
 
#include <stdio.h>
 
struct datosPersona 
{
  char  inicial;
  int   edad;
  float nota;
};
 
int main()
{
  struct datosPersona ficha;
 
  ficha.inicial = 'J';
  ficha.edad = 20;
  ficha.nota = 7.5;
  printf("La edad es %d", ficha.edad);
 
  return 0;
}
 

Ejercicios propuestos:

  • Un ?struct? que almacene datos de una canción en formato MP3: Artista, Título, Duración (en segundos), Tamaño del fichero (en KB). Un programa debe pedir los datos de una canción al usuario, almacenarlos en dicho ?struct? y después mostrarlos en pantalla.

5.5.2. Arrays de estructuras

Hemos guardado varios datos de una persona. Se pueden almacenar los de varias personas si combinamos el uso de los “struct” con las tablas (arrays) que vimos anteriormente. Por ejemplo, si queremos guardar los datos de 100 alumnos podríamos hacer:

struct
{ 
  char inicial; 
  int edad; 
  float nota; 
} alumnos[100]; 
 

La inicial del primer alumno sería “alumnos[0].inicial”, y la edad del último sería “alumnos[99].edad”.

Ejercicios propuestos:

  • Ampliar el programa del apartado 5.5.1, para que almacene datos de hasta 100 canciones. Deberá tener un menú que permita las opciones: añadir una nueva canción, mostrar el título de todas las canciones, buscar la canción que contenga un cierto texto (en el artista o en el título).
  • Un programa que permita guardar datos de "imágenes" (ficheros de ordenador que contengan fotografías o cualquier otro tipo de información gráfica). De cada imagen se debe guardar: nombre (texto), ancho en píxeles (por ejemplo 2000), alto en píxeles (por ejemplo, 3000), tamaño en Kb (por ejemplo 145,6). El programa debe ser capaz de almacenar hasta 700 imágenes (deberá avisar cuando su capacidad esté llena). Debe permitir las opciones: añadir una ficha nueva, ver todas las fichas (número y nombre de cada imagen), buscar la ficha que tenga un cierto nombre.

 

5.5.3. Estructuras anidadas

Podemos encontrarnos con un registo que tenga varios datos, y que a su vez ocurra que uno de esos datos esté formado por varios datos más sencillos. Para hacerlo desde C, incluiríamos un “struct” dentro de otro, así:

/*---------------------------*/
/*  Ejemplo en C nº 52:      */
/*  C052.C                   */
/*                           */
/*  Registros anidados       */
/*                           */
/*  Curso de C,              */
/*    Nacho Cabanes          */
/*---------------------------*/
 
#include <stdio.h>
 
struct fechaNacimiento 
{
  int  dia;
  int  mes;
  int anyo;
};
 
struct 
{
  char  inicial;
  struct fechaNacimiento diaDeNacimiento;
  float nota;
} persona;
 
int main()
{
  persona.inicial = 'I';
  persona.diaDeNacimiento.mes = 8;
  persona.nota = 7.5;
  printf("La nota es %f", persona.nota);
 
  return 0;
}
 

Ejercicios propuestos:

  • Ampliar el programa del primer apartado de 5.5.2, para que el campo ?duración? se almacene como minutos y segundos, usando un ?struct? anidado que contenga a su vez estos dos campos.

 

Actualizado el: 24-07-2014 15:36

AnteriorPosterior