Page 141

CC 2003, 2008 Andr´ es Marzal e Isabel Gracia

2 Estructuras de datos en C: vectores est´aticos y registros

struct CompactDisc cd [MAXDISCOS]; int cantidad ; } mis_cds ; // Declara la variable mis_cds como de tipo struct Coleccion.

Apuntemos ahora c´ omo enriquecer nuestro programa de gesti´on de una colecci´on de discos compactos almacenando, adem´ as, las canciones de cada disco. Empezaremos por definir un nuevo registro: el que modela una canci´on. De cada canci´on nos interesa el t´ıtulo, el autor y la duraci´on: 1 2 3 4 5

struct Cancion { char titulo[LONTITULO+1]; char autor [LONINTERPRETE+1]; struct Tiempo duracion; };

Hemos de modificar el registro struct CompactDisc para que almacene hasta, digamos, 20 canciones: 1

#define MAXCANCIONES 20

2 3 4 5 6 7 8 9 10

struct CompactDisc { char titulo[LONTITULO+1]; char interprete[LONINTERPRETE+1]; struct Tiempo duracion; int anyo; struct Cancion cancion[MAXCANCIONES]; // Vector de canciones. int canciones; // N´ umero de canciones que realmente hay. };

¿C´omo leemos ahora un disco compacto? Aqu´ı tienes, convenientemente modificada, la porci´on del programa que se encarga de ello: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

... int main(void) { int segundos; ... switch(opcion) { case Anyadir : // A˜ nadir un CD. if (mis_cds.cantidad == MAXDISCOS) printf ("La base de datos est´ a llena. Lo siento.\n"); else { printf ("T´ ıtulo: "); gets(mis_cds.cd [mis_cds.cantidad ].titulo); printf ("Int´ erprete: "); gets(mis_cds.cd [mis_cds.cantidad ].interprete); printf ("A~ no: "); gets(linea); sscanf (linea, "%d", &mis_cds.cd [mis_cds.cantidad ].anyo);

17 18 19 20 21

do { printf ("N´ umero de canciones: "); gets(linea); sscanf (linea, "%d", &mis_cds.cd [mis_cds.cantidad ].canciones); } while (mis_cds.cd [mis_cds.cantidad ].canciones > MAXCANCIONES);

22 23 24 25 26 27 28 29 30 31 32 33 34

for (i=0; i<mis_cds.cd [mis_cds.cantidad ].canciones; i++) { printf ("T´ ıtulo de la canci´ on n´ umero %d: ", i); gets(mis_cds.cd [mis_cds.cantidad ].cancion[i].titulo); printf ("Autor de la canci´ on n´ umero %d: ", i); gets(mis_cds.cd [mis_cds.cantidad ].cancion[i].autor ); printf ("Minutos que dura la canci´ on n´ umero %d: ", i); gets(linea); sscanf (linea, "%d", &mis_cds.cd [mis_cds.cantidad ].cancion[i].duracion.minutos); printf ("y segundos: "); gets(linea); sscanf (linea, "%d", &mis_cds.cd [mis_cds.cantidad ].cancion[i].duracion.segundos); }

Introducci´ on a la Programaci´ on con C

135

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement