Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

eapinto

Programa de vagas em um ônibus

Recommended Posts

Boa Noite a todos!

 

Estou fazendo um curso de análise de sistemas e estou precisando de ajuda para resolver o seguinte exercício:

 

Uma empresa de turismo precisa de um sistema de controle de vagas para seus ônibus. Cada ônibus possui nove fileiras de poltronas. Em cada fileira, há quatro poltronas: duas do lado direito (motorista) e duas do lado esquerdo (escada). Há então 36 vagas por ônibus.

 

Considere que para o armazenamento das informações vamos trabalhar com a seguinte variável do tipo matriz (com quatro linhas e nove colunas):

char onibus[4][9];

 

Esta variável está inicialmente preenchida da seguinte forma:

for(linha = 0; linha < 4; linha++)

for(coluna = 0; coluna < 9; coluna++)

onibus[linha][coluna] = ‘0’;

 

Baseando-se nessas informações, desenvolva o que se pede a seguir:

 

1-Uma função para preencher uma vaga. A função terá os seguintes parâmetros:

Fileira, que pode ser de ‘0’ a ‘8’;

Lado, que pode ter os valores ‘D’ (direito) ou ‘E’ (esquerdo);

Poltrona que pode ter os valores ‘J’ (janela) ou ‘C’ (corredor).

 

Observação: Esta função deve imprimir um erro caso a vaga já esteja ocupada.

 

2. Uma função que escreva na tela o relatório de vagas, conforme o exemplo abaixo:

 

123456789

x00000000

00000000x

000x00000

00000x000

 

Pessoas na janela: 2

Pessoas no corredor: 2

Total ocupadas: 4

Total Vazias: 32

-----------------------------------------------------------------------------------------------------------------

 

Por favor, peço ajuda para elaborar o programa.

 

Att

Eduardo.

 

Algumas informações: Estamos utilizando o bloodshed C++.

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

int main()
{
  char onibus[4][9];
  for(linha = 0; linha < 4; linha++)
for(coluna = 0; coluna < 9; coluna++)
onibus[linha][coluna] = '0';

  system("PAUSE");	
  return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função para preencher a vaga você já recebe o número da coluna pronta como parâmetro. Então, você precisa calcular a linha, e isto vai depender das informações D, E, J e C.

 

Imagine que você está olhando para a matriz que você postou como exemplo com a sua cabeça encostando no seu ombro esquerdo, então a configuração será a seguinte:

Linha 0 significa Janela Direita

Linha 1 significa Corredor Direita

Linha 2 signifca Corredor Esquerda

Linha 3 significa Janela Esquerda

 

Utilize if/else para descobrir a llinha. Como você já tem a coluna, então basta armazenar um 'x' nesta posição quando ela estiver vazia (isto é, tiver um zero nesta posição da matriz), caso contrário, imprima a mensagem de erro.

 

A segunda questão basta somar a quantidade de 'x' que tem nas linhas 0 e 3 para saber quantas pessoas tem na janela, e somar a quantidade de 'x' que tem nas linhas 1 e 2 para saber quantas pessoas tem no corredor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, segue abaixo o que conseguimos fazer. Entretanto, não está funcionando.

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

int main()
{
char onibus[4][9], lado, poltrona, resp, contador;
int fileira, local, linha, coluna;
for(linha=0;linha<4;linha++)
for(coluna=0;coluna<9;coluna++)
onibus[linha][coluna] = '0';
do {
printf ( "Digite a fileira: ");
scanf ("%d", &fileira);
printf( "Digite o lado-(D)direito ou (D)esquerdo: ");
scanf ("%s", &lado);
printf( "Digite a poltrona-(J)janela ou (C)corredor: ");
scanf ("%s", &poltrona);
  if (lado == 'D' || 'd') {
         if (poltrona == 'J' || 'j')
         local=3;
         else if (poltrona == 'C' || 'c')
         local=2; }
 else  {
         if (poltrona == 'J' || 'j')
         local=0;
         else if (poltrona == 'C' || 'c')
         local=1; }
if (onibus [local][fileira]= 'x')
printf("Poltrona ocupada!");    
else onibus [linha][coluna]='x';        
printf("Digite S para continuar ou digite outra tecla para finalizar..");
scanf("%d",&resp);}
while(resp=='s' || 'S');
system("PAUSE");
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Condições como (lado == 'D' || 'd') não funciona, é preciso repetir a comparação. Então o correto é (lado == 'D' || lado == 'd')

 

(lado == 'D') é avaliada como um valor FALSO ou VERDADEIRO e então é feito um OU com a letra 'd' que é diferente do código ascii 0, portanto, a sua expressão sempre é avaliada como VERDADEIRO independentemente do valor que está dentro da variável lado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Condições como (lado == 'D' || 'd') não funciona, é preciso repetir a comparação. Então o correto é (lado == 'D' || lado == 'd')

 

(lado == 'D') é avaliada como um valor FALSO ou VERDADEIRO e então é feito um OU com a letra 'd' que é diferente do código ascii 0, portanto, a sua expressão sempre é avaliada como VERDADEIRO independentemente do valor que está dentro da variável lado

 

#include <stdio.h>
#include <stdlib.h>
int main(){
      char onibus[4][9], lado=0, poltrona=0, resp=0, corredor=0, janela=0;//MODIFICADA*** 
      char c; // variável temporária para descartar caracteres
      int fileira=0, local=0, linha=0, coluna=0, ocupadas=0, disponiveis=0; //MODIFICADA***
      for(linha=0;linha<4;linha++)
      for(coluna=0;coluna<9;coluna++)
      onibus[linha][coluna] = '0';
      do {
          printf ( "Digite a fileira(1 a 9): ");
          scanf ("%d", &fileira);
          printf( "Digite o lado:(D)direito ou (E)esquerdo? ");
      while((c = getchar()) != '\n' && c != EOF); // comando para descartar caracteres inválidos
          scanf ("%c", &lado); // LINHA ALTERADA    
          printf( "Digite a poltrona:(J)janela ou (C)corredor? ");
          while((c = getchar()) != '\n' && c != EOF); // comando para descartar caracteres inválidos
          scanf ("%c", &poltrona); // LINHA ALTERADA    
          if (lado == 'D' || lado == 'd') { // LINHA ALTERADA
          if (poltrona == 'J' || poltrona == 'j') // LINHA ALTERADA
          local=3;  
          else if (poltrona == 'C' || poltrona == 'c') // LINHA ALTERADA
          local=2; }
          else { if (poltrona == 'J' || poltrona == 'j') // LINHA ALTERADA 
          local=0; 
          else if (poltrona == 'C' || poltrona == 'c') // LINHA ALTERADA 
          local=1; } 
          if (onibus [local][fileira] == 'x')  // LINHA ALTERADA 
          printf("Poltrona ocupada!\n"); // ADICIONADO UM \n 
          else onibus [local][fileira]= 'x';   // LINHA ALTERADA 
          printf("Digite S para continuar ou digite outra tecla para finalizar: ");  
          while((c = getchar()) != '\n' && c != EOF); // comando para descartar caracteres inválidos  
          scanf("%c",&resp); // LINHA ALTERADA 
          }  
          while (resp =='s' || resp == 'S'); // LINHA ALTERADA 
          printf ("\n\n\nResultado:\n\n");//nova
          for (linha=0;linha<4;linha++)//nova
          for (coluna=0;coluna<9;coluna++){//nova
              if (onibus[local] == 'x' || onibus[local+3] == 'x')//nova
              janela=janela+1;//nova
              if (onibus[local+1]== 'x' || onibus[local+2]=='x')//nova
              corredor=corredor+1;//nova
              }  //nova
              ocupadas=janela+corredor;//nova
              disponiveis=36-(ocupadas);//nova            
	for (linha=0;linha<4;linha++)//nova
                printf ("%s\n",onibus[linha]);//nova
                printf("Pessoas na janela:",janela);//nova
                printf("\nPessoas no corredor:\n",corredor);//nova
                printf("Total de cadeiras ocupadas:\n",ocupadas);//nova
                printf("Total de vagas disponiveis:\n",disponiveis);//nova
system("PAUSE"); 
return 0;
}

Fiz as alterações e está imprimindo a matriz, porém, com erro. O código imprime 4 linhas, sendo a primeira linha 36 posições, a segunda 27 posições, a terceira 18 posições e a quarta 9 posições. Além disso, ao fim de cada linha, aparecem os seguintes caracteres(úÂç|). Sabe me dizer o que significa?

Também pedi que somasse as poltronas ocupadas e disponíveis, mas não consigo exibir as quantidades, fica em branco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No seu código você colocou: if(onibus[local] == 'x' ...), onibus é uma matriz que precisa de dois parâmetros (linha e coluna)...

Compartilhar este post


Link para o post
Compartilhar em outros sites

No seu código você colocou: if(onibus[local] == 'x' ...), onibus é uma matriz que precisa de dois parâmetros (linha e coluna)...

 

Márcio,

 

corrigi os parâmetros e agora o programa está imprimindo 4 linhas com 36 colunas cada. Os caracteres estranhos continuam aparecendo:

for (linha=0;linha<4;linha++)//nova
          for (coluna=0;coluna<9;coluna++){//nova
              if (onibus[local][fileira] == 'x' || onibus[local+3][fileira] == 'x')//nova
              janela=janela+1;//nova
              if (onibus[local+1][fileira]== 'x' || onibus[local+2][fileira]=='x')//nova
              corredor=corredor+1;//nova
              }  //nova
Outra coisa, se eu colocar os parâmetros nessa linha:

 

for (linha=0;linha<4;linha++)//nova
                printf ("%s\n",onibus[local]);//nova
<<<<<<<Aqui

 

o programa trava na hora de compilar. tentei declarar outro for, com coluna, mas naum funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Outra coisa, se eu colocar os parâmetros nessa linha:

 

for (linha=0;linha<4;linha++)//nova
                printf ("%s\n",onibus[local]);//nova
<<<<<<<Aqui

 

o programa trava na hora de compilar. tentei declarar outro for, com coluna, mas naum funciona.

 

Você está tentando imprimir uma linha da matriz como se fosse uma string, porém no seu caso não é uma string, pois não tem o \0 na última coluna, por isso é que está travando.

 

Você precisaria colocar um for para as colunas aí dentro deste for para as linhas e trocar o %s por um %c.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.