eapinto 0 Denunciar post Postado Julho 16, 2010 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
Marcio Bueno 0 Denunciar post Postado Julho 17, 2010 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
eapinto 0 Denunciar post Postado Julho 18, 2010 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
Marcio Bueno 0 Denunciar post Postado Julho 18, 2010 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
eapinto 0 Denunciar post Postado Julho 19, 2010 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
Marcio Bueno 0 Denunciar post Postado Julho 19, 2010 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
eapinto 0 Denunciar post Postado Julho 19, 2010 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
Marcio Bueno 0 Denunciar post Postado Julho 19, 2010 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