Código en C: Ordenación de Grupos Musicales, Búsqueda de Discos, Reserva de Asientos y Actualización de Flota

Informática3,79 KB

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);
    }
}

Descargar

PDF Word HTML