Código en C: Ordenación de Grupos Musicales, Búsqueda de Discos, Reserva de Asientos y Actualización de Flota
Código en C: Discográfica, Reserva de Asientos y Flota
A continuación se presenta un programa en C que gestiona tres problemas: una discográfica con 138 grupos musicales, la reserva de asientos de un evento y la actualización de la flota de aviones.
1. Discográfica
Cada grupo musical almacena: nombre, año de creación, creador, país, número de discos y la lista de discos (nombre y año).
#include <stdio.h>
#include <string.h>
// Ordena ascendentemente por nombre de grupo
struct Discos
{
char nombre[80];
int anno;
};
struct grupos
{
char nombre[100];
int annoCreacion;
char creador[100];
char pais[50];
int numDiscos;
struct Discos discos[100];
};
struct grupos grupos[1000];
int numGrupos;
void ordena();
void ordena()
{
int i, j, k;
struct grupos aux;
for (i = 0; i < numGrupos; i = i + 1)
{
for (j = i + 1; j < numGrupos; j = j + 1)
{
if (strcmp(grupos[i].nombre, grupos[j].nombre) > 0)
{
strcpy(aux.nombre, grupos[i].nombre);
strcpy(grupos[i].nombre, grupos[j].nombre);
strcpy(grupos[j].nombre, aux.nombre);
aux.annoCreacion = grupos[i].annoCreacion;
grupos[i].annoCreacion = grupos[j].annoCreacion;
grupos[j].annoCreacion = aux.annoCreacion;
for (k = 0; k < 100; k = k + 1)
{
aux.discos[k].anno = grupos[i].discos[k].anno;
grupos[i].discos[k].anno = grupos[j].discos[k].anno;
grupos[j].discos[k].anno = aux.discos[k].anno;
}
}
}
}
}
// Busca el año de un disco de un grupo
// (a continuación en el examen podríamos continuar con la variable nombre dentro de struct Discos)
int busca(char nomGrupo[], char nomDisco[])
{
int i, j;
for (i = 0; i < numGrupos; i++)
{
if (strcmp(grupos[i].nombre, nomGrupo) == 0)
{
for (j = 0; j < grupos[i].numDiscos; j = j + 1)
{
if (strcmp(nomDisco, grupos[i].discos[j].nombre) == 0)
{
return grupos[i].discos[j].anno;
}
}
}
}
return -1;
}2. Reserva de asientos
Matriz de 25 filas por 4 columnas. Cada asiento indica si está reservado, su tipo, el nombre y el DNI del titular.
struct Asiento
{
int reservado;
char tipo[50];
char nombre[255];
char dni[10];
};
struct Asiento mat[25][4];
void reserva(char nombre[], char dni[], int x, int y)
{
if (mat[x][y].reservado == 0)
{
mat[x][y].reservado = 1;
strcpy(mat[x][y].nombre, nombre);
strcpy(mat[x][y].dni, dni);
}
else
{
printf("Error\n");
}
}3. Flota de aviones
Se actualizan las coordenadas (X, Y, Z) de cada avión a partir de una lista de cambios. Si un avión no se encuentra, se informa por pantalla.
struct Avion
{
char companya[50];
char id[12];
float X, Y, Z;
};
struct Cambio
{
char id_nave[12];
float camX, camY, camZ;
};
struct Avion flota[1000];
void actualizaDatos(struct Cambio V[], int tam)
{
int i, j, enc;
for (i = 0; i < tam; i++)
{
enc = 0;
for (j = 0; j < 1000 && !enc; j++)
{
if (strcmp(V[i].id_nave, flota[j].id) == 0)
{
flota[j].X = flota[j].X + V[i].camX;
flota[j].Y = flota[j].Y + V[i].camY;
flota[j].Z = flota[j].Z + V[i].camZ;
enc = 1;
}
}
if (!enc)
printf("El avión %s no ...\n", V[i].id_nave);
}
}