Ir ao conteúdo

Posts recomendados

Postado

Desenvolva um programa para controlar a venda de poltronas para um teatro. O programa deverá fazer a consulta, reserva, venda ou liberação de uma poltrona informando a fila (linha) e coluna da poltrona em questão. Considere que o teatro possui o lado “A” e “B” com 8 filas e 5 colunas. Considere que entre o lado “A” e “B” existe uma coluna representada pelo corredor do teatro

Deve ser feito em linguagem c, usando matrizes e modularização e uma das rotinas necessariamente precisa ser o menu.

 

 

NÃO CONSIGO ENCONTRAR O ERRO NESSE CÓDIGO! NA HORA DA EXECUÇÃO, A TELA FICA PRETA E NÃO MOSTRA ONDE ESTÁ O ERRO

 

 

#include <stdio.h>
#include <stdlib.h>
#include <locale.h> 
int matriz[8][5],l,c,b,e;
     int ocupadas=0;
 EscolherPoltrona() {
    printf("\nDigite o numero da poltrona desejada:");
                scanf("%d", &e);
                if(e<1 || e > 40){
                    printf("\nNumero de poltrona invalido.\n");
                }                             
                if(matriz[e-1][e-1]==e){
                    printf("\nEssa Poltrona ja esta ocupada.\n");
                }else{
                    matriz[e-1][e-1]=e;
                    ocupadas++;
                    printf("\nPoltrona reservada com sucesso.\n");
                }
            return 0;
}

VisualizarPoltronas() {

    printf("\nAs seguintes poltronas estão vazias:\n");                 
                for(l=0;l<40;l++){
                    if(matriz[l]==0)
                        printf("%2d - ",l+1);
                    else
                        printf("** - ");
                }
                printf("\n");
              return 0;
}
main(){
    setlocale(LC_ALL, "Portuguese");
   
    for(l=0;l<40;l++)
        matriz[l][c]=0;
         printf("Bem vindo ao teatro .\n XD.\n\n");
        printf("\
       1) Para escolher uma poltrona.\n\
       2) Para visualizar as poltronas vagas.\n\
       3) Para saber quantas ja estão ocupadas.\n\
       4)Sair.\n\n\
       Selecione uma opcao: ");
        scanf("%d", & b);
    while(b!=4){
        system("cls");         
        if(b>4 || b<1)
            printf("\nOpcao invalida.\n"); 
        switch(b){
           case 1:      
                EscolherPoltrona();
                 break;
               
            case 2:
                VisualizarPoltronas();
                break;                
            case 3:                
                printf("\nJa foram reservadas %d poltrona(s)\n",ocupadas);
        }
  }

}

Postado

@Anasantos095 Da forma que está fazendo acho que vai ficar mais complicado, use funções com parâmetros e valores de retorno quando necessário. Acho que devia tentar fazer algo assim,

 

#include <stdio.h>

int menu(){
    int opcao;
    printf(
       "1) Escolher uma poltrona.\n"
       "2) Poltronas vagas.\n"
       "3) Ocupacao.\n"
       "4) Sair.\n: "
    );
    scanf("%d",&opcao);
    return opcao;
}

int ocupacao(int poltronas[8][5]){
    int qtd = 0;
    for(int i = 0; i < 8; i += 1){
        for(int j = 0; j < 5; j += 1){
            if(poltronas[i][j]){
                qtd += 1;
            }
        }
    }
    return qtd;
}

int reserva(int poltronas[8][5], int fila, int coluna){
    if(poltronas[fila][coluna] != 1){
        poltronas[fila][coluna] = 1;
        return 1;
    }
    return 0;
}

int main(){
    int poltronas[8][5] = {0};
    
    while(1){
        int opcao = menu();
        
        if(opcao == 1){
            int fila;
            int coluna;
            printf("Informe a fila e coluna da poltrona: ");
            scanf("%d %d", &fila, &coluna);
            if(reserva(poltronas, fila, coluna)){
                printf("RESERVA FEITA\n");
            }else{
                printf("LUGAR OCUPADO\n");
            }
        }else if(opcao == 2){
            
        }else if(opcao == 3){
            printf("%d poltronas ocupadas\n", ocupacao(poltronas));
        }else if(opcao == 4){
            break;
        }
    }
    return 0;
}

 

Postado
1 hora atrás, Anasantos095 disse:

NÃO CONSIGO ENCONTRAR O ERRO NESSE CÓDIGO! NA HORA DA EXECUÇÃO, A TELA FICA PRETA E NÃO MOSTRA ONDE ESTÁ O ERRO

 

É raro um programa mostrar onde está o erro :( 


O compilador vai te mostrar erros de sintaxe e construção, mas depois de gerado o código fica tudo por sua conta. Use mensagens ou aprenda a usar o debugger que acompanha seu compilador e permite rodar o programa passo a passo e examinar as variáveis.

 

Seu programa tem muitos problemas, e muitos são clássicos já. Imagino que seja pelo tipo de instrutor e material que usam pra ensinar isso atualmente,

 

O problema que justifica sua questão 

 

    scanf("%d", &b);
    while (b != 4)
    {
        system("cls");
        if (b > 4 || b < 1)
            printf("\nOpcao invalida.\n");
        switch (b) {
        case 1:
            EscolherPoltrona();
            break;

        case 2:
            VisualizarPoltronas();
            break;
        case 3:
            printf("\nJa foram reservadas %d poltrona(s)\n", ocupadas);
        }
    };	// while()

 

Dentro do loop o programa nunca mais lê novo valor de b então não surpreende que o programa não faça mais nada... Vai executar a opção correspondente ao valor de b por toda a eternidade ...

 

Outros problemas:

 

  • não use variáveis globais. É bobagem e é proibido em toda parte, escolas e empresas.
  • Use argumentos. Evite void. Em geral é um desperdício, muitas vezes um erro mesmo
  • TESTE sempre o retorno de scanf(). Não tem sentido seguir se não leu nada
  • Declare variáveis de controle do loop DENTRO do for. Sempre.
  • Não declare mais de uma variável por linha. É grátis.
  • Nunca use system(): não estará fazendo nada. Não vai aprender nada. Está programando em C e tem acesso a todas as funções do sistema. system() foi escrita em C ;) 

 

Ainda sobre o programa:

 

1 hora atrás, Anasantos095 disse:

uma das rotinas necessariamente precisa ser o menu.

 

Seu programa tem várias funções. Porque não tem a mais simples de todas?

 

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!