Desafio de programação em C

Utilizando os conceitos de Funções e Structs, resolva o problema abaixo de acordo com os itens solicitados:

Faça um programa que efetue reserva de passagens aéreas de uma certa companhia. O programa deverá ler informações sobre os vôos (número, origem e destino) juntamente com o número de lugares disponíveis para 12 aviões (um vetor para cada um desses dados). O programa deverá apresentar um menu com as seguintes opções:

  • Consultar;
  • Efetuar Reserva;
  • Sair.

Quando a opção escolhida for Consultar deverá ser disponibilizado mais um menu com as seguintes opções:

  • Por número de vôo;
  • Por origem;
  • Por destino.

Quando a opção escolhida for Efetuar Reserva deverá ser perguntado o número do vôo no qual a pessoa deseja viajar. O programa deverá dar as seguintes respostas:

  • Reserva confirmada – caso exista o vôo e lugar disponível, dando baixa nos lugares disponíveis;
  • Vôo lotado – caso não exista lugar disponível nesse vôo;
  • Vôo inexistente – caso o código do vôo não exista.

A opção sair é a única que permite sair do programa. Sendo assim, após cada operação de consulta ou reserva o programa volta ao menu principal.

OBS.: Pode ser criado uma função para cada item exigido no problema, da mesma forma a struct ou como acharem melhor.

Após implementar o código responda:

1 – Qual a(s) diferença(s) entre variáveis locais e variáveis globais.

2 – Qual(ais) a(s) vantagem(ens) de utilizar funções na programação?

3 – Qual(ais) a(s) dificuldade(s) encontrada(s) na programação? Caso não houver dificuldade deixe a resposta em branco.

4 – Na sua opinião o que são Registros (Structs) e para que servem?

Cole o código implementado no comentário, bem como as respostas do questionário. Good luck!

Fonte: Pexels.

3 comentários em “Desafio de programação em C

  1. #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    #define MAX_VOOS 12
    #define MAX_NOME 50

    typedef struct {
    int numero;
    char origem[MAX_NOME];
    char destino[MAX_NOME];
    int lugares_disponiveis;
    } Voo;

    void consultarPorNumero(Voo voos[]) {
    int numero;
    printf(“Digite o número do voo: “);
    scanf(“%d”, &numero);
    getchar();

    int encontrado = 0;
    for (int i = 0; i < MAX_VOOS; i++) {
        if (voos[i].numero == numero) {
            printf("Número: %d\n", voos[i].numero);
            printf("Origem: %s\n", voos[i].origem);
            printf("Destino: %s\n", voos[i].destino);
            printf("Lugares disponíveis: %d\n", voos[i].lugares_disponiveis);
            encontrado = 1;
            break;
        }
    }
    
    if (!encontrado) {
        printf("Voo inexistente.\n");
    }
    

    }

    void consultarPorOrigem(Voo voos[]) {
    char origem[MAX_NOME];
    printf(“Digite a origem do voo: “);
    fgets(origem, MAX_NOME, stdin);
    origem[strcspn(origem, “\n”)] = ‘\0’;

    int encontrado = 0;
    for (int i = 0; i < MAX_VOOS; i++) {
        if (strcmp(voos[i].origem, origem) == 0) {
            printf("Número: %d\n", voos[i].numero);
            printf("Origem: %s\n", voos[i].origem);
            printf("Destino: %s\n", voos[i].destino);
            printf("Lugares disponíveis: %d\n", voos[i].lugares_disponiveis);
            encontrado = 1;
        }
    }
    
    if (!encontrado) {
        printf("Nenhum voo encontrado com essa origem.\n");
    }
    

    }

    void consultarPorDestino(Voo voos[]) {
    char destino[MAX_NOME];
    printf(“Digite o destino do voo: “);
    fgets(destino, MAX_NOME, stdin);
    destino[strcspn(destino, “\n”)] = ‘\0’;

    int encontrado = 0;
    for (int i = 0; i < MAX_VOOS; i++) {
        if (strcmp(voos[i].destino, destino) == 0) {
            printf("Número: %d\n", voos[i].numero);
            printf("Origem: %s\n", voos[i].origem);
            printf("Destino: %s\n", voos[i].destino);
            printf("Lugares disponíveis: %d\n", voos[i].lugares_disponiveis);
            encontrado = 1;
        }
    }
    
    if (!encontrado) {
        printf("Nenhum voo encontrado com esse destino.\n");
    }
    

    }

    void efetuarReserva(Voo voos[]) {
    int numero;
    printf(“Digite o número do voo: “);
    scanf(“%d”, &numero);
    getchar();

    int encontrado = 0;
    for (int i = 0; i < MAX_VOOS; i++) {
        if (voos[i].numero == numero) {
            if (voos[i].lugares_disponiveis > 0) {
                voos[i].lugares_disponiveis--;
                printf("Reserva confirmada.\n");
            } else {
                printf("Voo lotado.\n");
            }
            encontrado = 1;
            break;
        }
    }
    
    if (!encontrado) {
        printf("Voo inexistente.\n");
    }
    

    }

    int main() {
    Voo voos[MAX_VOOS];
    int opcao;

    for (int i = 0; i < MAX_VOOS; i++) {
        voos[i].numero = i + 1;
        sprintf(voos[i].origem, "Origem%d", i + 1);
        sprintf(voos[i].destino, "Destino%d", i + 1);
        voos[i].lugares_disponiveis = 10; 
    }
    
    do {
        printf("\n----- Menu Principal -----\n");
        printf("1. Consultar\n");
        printf("2. Efetuar Reserva\n");
        printf("3. Sair\n");
        printf("Escolha uma opcao: ");
        scanf("%d", &opcao);
        getchar(); 
        switch (opcao) {
            case 1: {
                int consulta;
                printf("\n----- Menu de Consulta -----\n");
                printf("1. Por número de voo\n");
                printf("2. Por origem\n");
                printf("3. Por destino\n");
                printf("Escolha uma opcao: ");
                scanf("%d", &consulta);
                getchar(); 
    
                switch (consulta) {
                    case 1:
                        consultarPorNumero(voos);
                        break;
                    case 2:
                        consultarPorOrigem(voos);
                        break;
                    case 3:
                        consultarPorDestino(voos);
                        break;
                    default:
                        printf("Opcao invalida.\n");
                }
    
                break;
            }
            case 2:
                efetuarReserva(voos);
                break;
            case 3:
                printf("Encerrando o programa.\n");
                break;
            default:
                printf("Opcao invalida.\n");
        }
    } while (opcao != 3);
    
    return 0;
    

    }

    Curtir

  2. #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    #define MAX_VOOS 12
    #define MAX_NOME 50

    typedef struct {
    int numero;
    char origem[MAX_NOME];
    char destino[MAX_NOME];
    int lugares_disponiveis;
    } Voo;

    void consultarPorNumero(Voo voos[]) {
    int numero;
    printf(“Digite o número do voo: “);
    scanf(“%d”, &numero);
    getchar();

    int encontrado = 0;
    for (int i = 0; i < MAX_VOOS; i++) {
        if (voos[i].numero == numero) {
            printf("Número: %d\n", voos[i].numero);
            printf("Origem: %s\n", voos[i].origem);
            printf("Destino: %s\n", voos[i].destino);
            printf("Lugares disponíveis: %d\n", voos[i].lugares_disponiveis);
            encontrado = 1;
            break;
        }
    }
    
    if (!encontrado) {
        printf("Voo inexistente.\n");
    }
    

    }

    void consultarPorOrigem(Voo voos[]) {
    char origem[MAX_NOME];
    printf(“Digite a origem do voo: “);
    fgets(origem, MAX_NOME, stdin);
    origem[strcspn(origem, “\n”)] = ‘\0’;

    int encontrado = 0;
    for (int i = 0; i < MAX_VOOS; i++) {
        if (strcmp(voos[i].origem, origem) == 0) {
            printf("Número: %d\n", voos[i].numero);
            printf("Origem: %s\n", voos[i].origem);
            printf("Destino: %s\n", voos[i].destino);
            printf("Lugares disponíveis: %d\n", voos[i].lugares_disponiveis);
            encontrado = 1;
        }
    }
    
    if (!encontrado) {
        printf("Nenhum voo encontrado com essa origem.\n");
    }
    

    }

    void consultarPorDestino(Voo voos[]) {
    char destino[MAX_NOME];
    printf(“Digite o destino do voo: “);
    fgets(destino, MAX_NOME, stdin);
    destino[strcspn(destino, “\n”)] = ‘\0’;

    int encontrado = 0;
    for (int i = 0; i < MAX_VOOS; i++) {
        if (strcmp(voos[i].destino, destino) == 0) {
            printf("Número: %d\n", voos[i].numero);
            printf("Origem: %s\n", voos[i].origem);
            printf("Destino: %s\n", voos[i].destino);
            printf("Lugares disponíveis: %d\n", voos[i].lugares_disponiveis);
            encontrado = 1;
        }
    }
    
    if (!encontrado) {
        printf("Nenhum voo encontrado com esse destino.\n");
    }
    

    }

    void efetuarReserva(Voo voos[]) {
    int numero;
    printf(“Digite o número do voo: “);
    scanf(“%d”, &numero);
    getchar();

    int encontrado = 0;
    for (int i = 0; i < MAX_VOOS; i++) {
        if (voos[i].numero == numero) {
            if (voos[i].lugares_disponiveis > 0) {
                voos[i].lugares_disponiveis--;
                printf("Reserva confirmada.\n");
            } else {
                printf("Voo lotado.\n");
            }
            encontrado = 1;
            break;
        }
    }
    
    if (!encontrado) {
        printf("Voo inexistente.\n");
    }
    

    }

    int main() {
    Voo voos[MAX_VOOS];
    int opcao;

    for (int i = 0; i < MAX_VOOS; i++) {
        voos[i].numero = i + 1;
        sprintf(voos[i].origem, "Origem%d", i + 1);
        sprintf(voos[i].destino, "Destino%d", i + 1);
        voos[i].lugares_disponiveis = 10; 
    }
    
    do {
        printf("\n----- Menu Principal -----\n");
        printf("1. Consultar\n");
        printf("2. Efetuar Reserva\n");
        printf("3. Sair\n");
        printf("Escolha uma opcao: ");
        scanf("%d", &opcao);
        getchar(); 
        switch (opcao) {
            case 1: {
                int consulta;
                printf("\n----- Menu de Consulta -----\n");
                printf("1. Por número de voo\n");
                printf("2. Por origem\n");
                printf("3. Por destino\n");
                printf("Escolha uma opcao: ");
                scanf("%d", &consulta);
                getchar(); 
    
                switch (consulta) {
                    case 1:
                        consultarPorNumero(voos);
                        break;
                    case 2:
                        consultarPorOrigem(voos);
                        break;
                    case 3:
                        consultarPorDestino(voos);
                        break;
                    default:
                        printf("Opcao invalida.\n");
                }
    
                break;
            }
            case 2:
                efetuarReserva(voos);
                break;
            case 3:
                printf("Encerrando o programa.\n");
                break;
            default:
                printf("Opcao invalida.\n");
        }
    } while (opcao != 3);
    
    return 0;
    

    }

    Curtir

  3. #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    typedef struct {
    int numero;
    char origem[50];
    char destino[50];
    int lugares_disponiveis;
    }passagens;

    void consultarPorNumero(passagens voos[]) {
    int numeroVoo;
    printf(“Digite o número do voo: “);
    scanf(“%d”, &numeroVoo);

    for (int i = 0; i < 12; i++) {
        if (voos[i].numero == numeroVoo) {
            printf("Voo encontrado!\n");
            printf("Origem: %s\n", voos[i].origem);
            printf("Destino: %s\n", voos[i].destino);
            printf("Lugares disponíveis: %d\n", voos[i].lugares_disponiveis);
            return;
        }
    }
    
    printf("Voo inexistente.\n");
    

    }

    void consultarPorOrigem(passagens voos[]) {
    char origem[50];
    printf(“Digite a origem do voo: “);
    scanf(“%s”, origem);

    for (int i = 0; i < 12; i++) {
        if (strcmp(voos[i].origem, origem) == 0) {
            printf("Voo encontrado!\n");
            printf("Número do voo: %d\n", voos[i].numero);
            printf("Destino: %s\n", voos[i].destino);
            printf("Lugares disponíveis: %d\n", voos[i].lugares_disponiveis);
        }
    }
    

    }

    void consultarPorDestino(passagens voos[]) {
    char destino[50];
    printf(“Digite o destino do voo: “);
    scanf(“%s”, destino);

    // Procurar os voos pelo destino
    for (int i = 0; i < 12; i++) {
        if (strcmp(voos[i].destino, destino) == 0) {
            printf("Voo encontrado!\n");
            printf("Número do voo: %d\n", voos[i].numero);
            printf("Origem: %s\n", voos[i].origem);
            printf("Lugares disponíveis: %d\n", voos[i].lugares_disponiveis);
        }
    }
    

    }

    void efetuarReserva(passagens voos[]) {
    int numeroVoo;
    printf(“Digite o número do voo desejado: “);
    scanf(“%d”, &numeroVoo);

    for (int i = 0; i < 12; i++) {
        if (voos[i].numero == numeroVoo) {
            if (voos[i].lugares_disponiveis > 0) {
                voos[i].lugares_disponiveis--;
                printf("Reserva confirmada. Aproveite sua viagem!\n");
            } else {
                printf("Voo lotado. Não há lugares disponíveis.\n");
            }
            return;
        }
    }
    
    printf("Voo inexistente.\n");
    

    }

    int main() {
    passagens voos[12];

    for (int i = 0; i < 12; i++) {
        voos[i].numero = i + 1;
        sprintf(voos[i].origem, "Origem %d", i + 1);
        sprintf(voos[i].destino, "Destino %d", i + 1);
        voos[i].lugares_disponiveis = 100;
    }
    
    int opcao;
    do {
        printf(">>> MENU <<<\n");
        printf("-> Digite (1) para: Consultar\n");
        printf("-> Digite (2) para: Efetuar Reserva\n");
        printf("-> Digite (3) para: Sair\n");
        printf("\nInforme a opção desejada --> ");
        scanf("%d", &opcao);
    
        switch (opcao) {
            case 1:
                int opcaoConsulta;
                printf("==== Menu de Consulta ====\n");
                printf("1. Por número de vôo\n");
                printf("2. Por origem\n");
                printf("3. Por destino\n");
                printf("Digite sua opção: ");
                scanf("%d", &opcaoConsulta);
    
                switch (opcaoConsulta) {
                    case 1:
                        consultarPorNumero(voos);
                        break;
                    case 2:
                        consultarPorOrigem(voos);
                        break;
                    case 3:
                        consultarPorDestino(voos);
                        break;
                    default:
                        printf("Opção inválida.\n");
                        break;
                }
                break;
    
            case 2:
                efetuarReserva(voos);
                break;
    
            case 3:
                printf("Programa encerrado.\n");
                break;
    
            default:
                printf("Opção inválida.\n");
                break;
        }
    } while (opcao != 3);
    
    return 0;
    

    }

    Curtir

Deixar mensagem para João Miglionari Cancelar resposta

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.