Ir para conteúdo

POWERED BY:

Arquivado

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

Everaldodeco

Reservas para Cinema

Recommended Posts

entao gente, nao estou conseguindo fazer esse programa.

ele pede para mostrar as poltronas reservadas, para reservar uma poltrona(mostrar se esta livre ou nao), cancelar poltrona, faturamento total, e sair.

soh que esta dando problema, e nao consigo achar o erro,

entao se alguem puder ajudar.

 

#include<stdio.h>
int main(){
	int i,j,ocup,op;
	int polt[10][10];
	float fat;
	for(i=0;i<=9;i++){
	for(j=0;j<=9;j++){
		polt[i][j]=0;
	}
	}
	printf("O que deseja fazer?\n\n1-Ver poltronas reservadas\n2-Reservar poltrona\n3-Cancelar reserva\n4-Faturamento\n5-Sair\nOpcao: ");
	scanf("%d",&op);
	while(op!=5){
	switch(op){
	case 1:
		if(polt[i][j]==1){
		printf("Poltronas ocupadas:\n");
		printf("%d",polt[i][j]);
		break;
	case 2:
		printf("Digite a poltrona desejada: ");
		scanf("%d",&polt[i][j]);
		if(polt[i][j]==0){
		polt[i][j]=1;
		ocup++;
		printf("Poltrona reservada.\n");
		}
		break;
	case 3:
		printf("Digite a poltrona que deseja cancelar reserva: ");
		scanf("%d",&polt[i][j]);
		if(polt[i][j]==1){
		polt[i][j]=0;
		ocup--;
		printf("Reserva cancelada.\n");
		}
	case 4:
		fat=(ocup*15.00);
		printf("Faturamento total: %.2f\n",fat);
		break;
	case 5:
		break;
	}
	}
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, vo da uma ideia pra ti, ao invés de você digitar diretamente o codigo dentro dos casos da estrutura de controle switch, coloca eles em funçoes, e dentro dos casos, apenas as chamadas para as funçoes, assim, você vai poder executar uma funçao e retornar ao menu principal pra poder executar otura. Esse while q você coloco dentro da estrutura switch, acho q eles nao se dao muito bem não, talvez seja por isso q ta dando erro, se você for usar o while pra escolher opcao, nao precisa do switch.Se precisar de ajuda pra isso, tenta implementar isso q te falei e posta o novo codigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

só botei o while pra ele ficar rodando sem para o programa, só sair qdo digitar a opçao pra isso.

tem como você montar +- a sintaxe pra mim de uma dessas funções? nao tenho noçao de como fazer isso dentro do case depois

Compartilhar este post


Link para o post
Compartilhar em outros sites

só botei o while pra ele ficar rodando sem para o programa, só sair qdo digitar a opçao pra isso.

tem como você montar +- a sintaxe pra mim de uma dessas funções? nao tenho noçao de como fazer isso dentro do case depois

Cara, como eu te falei, se você nao ta conseguindo com o shiwtch, usa so o while msm, tb da certo, dae ao inves de cases, você usa, "ifs". Mas o mas indicado seria msm o shitch. vo colocar aki um pseudo codigo pra você enteder +- como ficaria.....

se você ainda não sabe mexer com funçoes, tem aki um link de umas videos aulas muito boas, da uma olhada la, tem ate exempolos pra você baixa:Construindoo Aprender- Vanessa Baldo

funcao menu();
funcao1();
funcao2();
... faz todas as funçoes antes
main();// corpo programa
.
.
.aki todos os comandos
.
dae na ultima linhado seu programa, fora do shtich, você coloca pra chamar a funcao do menu
espero ter ajudado, abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

seria tpw assim?

funcao1(int polt[i][j]){
... faz os comandos
}
e na ultima linha do programa chamar essa funcao dai? só tenho duvida como se ta certo ali o modo que declarei a matriz

Compartilhar este post


Link para o post
Compartilhar em outros sites

a unica coisa q você num sabe é montar uma função?

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

kara, pude percerber q seu codigo ta cheio de erros. mas vo te dar uma mao...

você deve prestar atenção quanto a identação do programa, dei uma arrumada, fica muito dificil corriguir um codigo q nao esteja bem estruturado.

Pra ficar mais facil pra você, coloquei as variaveis fora do main() e so uma funçao void pra preencher seu vetor, e no final de cada caso, ele sempre retornara ao inicio do main.

Agora é so você corrigir os erros q tem nele, apontei alguns pra ti, mas ja ta meio tarde, entao foi o q eu consegui. ta ae espero ter ajudado, Abraço

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int i,j,ocup,op;
	int polt[10][10];
	float fat;
void preenche()
{
		 for(i=0;i<=9;i++)
		 {
						   for(j=0;j<=9;j++)
						   {
						   polt[i][j]=0;
						   }
		 }
}	
int main()
{
		printf("O que deseja fazer?\n\n1-Ver poltronas reservadas\n2-Reservar poltrona\n3-Cancelar reserva\n4-Faturamento\n5-Sair\nOpcao: ");
		scanf("%d",&op);
		switch(op)
		{
				  case 1:// essa sua estrutura esta errada o vetor plot[i][j] não anda sozinho, você tem de colorcar um for aqui tb
						 if(polt[i][j]==1){
						 printf("Poltronas ocupadas:\n");
						 printf("%d",polt[i][j]);
						 }
						 getche();//pausa a tela
						 system("cls");//limpa a tela
						 main();// volta ao inicio do programa				
				  break;
				  case 2:// aki tb esta errado, o usurio vai escolher a posicao da poltrona certo? estao você presiza tratar ela, e nao grava no vetor,
						 printf("Digite a poltrona desejada: ");
						 scanf("%d",&polt[i][j]);
						 if(polt[i][j]==0)
						 {
										  polt[i][j]=1;
										  ocup++;
										  printf("Poltrona reservada.\n");
						 }
						 getche();
						 system("cls");
						 main();
				  break;
				  case 3:
					   printf("Digite a poltrona que deseja cancelar reserva: ");
					   scanf("%d",&polt[i][j]);
					   if(polt[i][j]==1)
					   {
										polt[i][j]=0;
										ocup--;
										printf("Reserva cancelada.\n");
					   }
					   getche();
					   system("cls");
					   main();
				  break;
				  case 4:
						 fat=(ocup*15.00);
						 printf("Faturamento total: %.2f\n",fat);
						 getche();
						 system("cls");
						 main();
				  break;
				  case 5:
				  break;
				  default:// caso o usuario escola uma opacao q nao esteja no menu
						  printf("Opcao Ivalida");
						  getche();
						  system("cls");
						  main();
		}
		
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu nao sei muito bem mexer com matriz, to começando ver isso agora, mas valeu pela ajuda.

só nao entendi oq você diz para fazer no "case 2" quando você fala tratar e nao gravar, como seria isso?

e no "case 1" você diz só para por denovo os 2 for, o da linha e da coluna? só isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu nao sei muito bem mexer com matriz, to começando ver isso agora, mas valeu pela ajuda.

só nao entendi oq você diz para fazer no "case 2" quando você fala tratar e nao gravar, como seria isso?

e no "case 1" você diz só para por denovo os 2 for, o da linha e da coluna? só isso?

Pelo q eu pode percerber, você ta querendo fazer isso, as poltronas 0, estao desocupadas, e as 1 ocupas, certo? entao no caso 2 você ta colocando pra gravar o posicao q o usuario ta querendo dentro da matriz o que nao é o correto, e no caso 1, você deve sim por mais 2 fors.

Compartilhar este post


Link para o post
Compartilhar em outros sites

alguem sabe como faço pra botar poltrona ocupada? sem atribuir um valor, 1 por exemplo, pra ela?

se eu atribuir valor 1, o que o usuario digitar sai ser descartado e ficara só 1 dai..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, teu código inteiro está errado (ou você esqueceu várias coisas quando postou).

 

if(polt[i][j]==1){
	printf("Poltronas ocupadas:\n");
	printf("%d",polt[i][j]);
	break;

 

Erro aqui. você não fechou a chave.

 

case 3:
			printf("Digite a poltrona que deseja cancelar reserva: ");
			scanf("%d",&polt[i][j]);
			if(polt[i][j]==1){
				polt[i][j]=0;
				ocup--;
				printf("Reserva cancelada.\n");
			}
		case 4:

 

Erro. Falta o break. E qual é o valor de i e j[/j] que você está usando pra acessar?

 

 

fat=(ocup*15.00);

 

Não precisa de parênteses.

 

 

case 2:
	printf("Digite a poltrona desejada: ");
	scanf("%d",&polt[i][j]);

 

E se já estiver reservada? você cancela a reserva anterior arbitrariamente. Pense que poderia estar associada a uma pessoa.

 

 

 

- Tem uma chave sobrando no final do main.

- O programa não retorna para exibir o menu. Por isso sempre fica na mesma opção.

- você não inicializa a variável ocup. você está usando lixo existente na memória.

 

 

BOA PRÁTICA: Não coloque constantes mágicas em menus. Prefira defines ou enumerations com nomes explicativos.

 

LEGIBILIDADE:

 

Qual dos dois você prefere p/ ler?

 

printf("O que deseja fazer?\n\n1-Ver poltronas reservadas\n2-Reservar poltrona\n3-Cancelar reserva\n4-Faturamento\n5-Sair\nOpcao: ");

 

puts("O que deseja fazer?");
puts("1-Ver poltronas reservadas");
puts("2-Reservar poltrona");
puts("3-Cancelar reserva");
puts("4-Ver faturamento.");
puts("5-Sair");

 

 

 

 

 

 

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

#define MAXIMO_POLTRONAS 10

void menu () {
puts("O que deseja fazer?");
puts("1-Ver poltronas reservadas");
puts("2-Reservar poltrona");
puts("3-Cancelar reserva");
puts("4-Ver faturamento.");
puts("5-Sair");
}


int main(){
int poltronas[MAXIMO_POLTRONAS][MAXIMO_POLTRONAS];
int opcao;
int ocupadas = 0;
int i,j;
int reservar,cancelar;

memset(poltronas,0,MAXIMO_POLTRONAS*MAXIMO_POLTRONAS*sizeof(int));

enum OPCOES {VER=1,RESERVAR,CANCELAR,FATURAMENTO,SAIR};

while (1) {
	menu();
	scanf("%d",&opcao);
	if (opcao == SAIR) break;

	switch(opcao) {
		case VER:
				printf("Poltronas ocupadas:\n");
				if (ocupadas) {
					for(i=0;i<MAXIMO_POLTRONAS;i++)
						for(j=0;j<MAXIMO_POLTRONAS;j++) {
							if(poltronas[i][j]==1)
								printf(" %d ",i*10+j);
						}
					puts("");
				} else puts("NENHUMA POLTRONA OCUPADA.");

				break;

		 case RESERVAR:

		 		while(1) {
			 		printf("Digite a poltrona desejada: ");
					scanf("%d",&reservar);
					if (reservar< 0 || reservar >= MAXIMO_POLTRONAS*MAXIMO_POLTRONAS)
						puts("Poltrona inválida.");
					else break;
				}

				i = reservar/10;
				j = reservar -i*10;
				if (poltronas[i][j])
					puts("Poltrona já reservada. Escolha outra.");
				else {
					poltronas[i][j] = 1;
					printf("Poltrona %d reservada.\n",reservar);
					ocupadas++;
				}
				break;

		case CANCELAR:
				while (1) {
					printf("Digite a poltrona que deseja cancelar reserva: ");
					scanf("%d",&cancelar);
					if (cancelar < 0 || cancelar >= MAXIMO_POLTRONAS*MAXIMO_POLTRONAS)
						puts("Poltrona inválida.");
					else break;
				}

				i = cancelar/10;
				j = cancelar-i*10;
				if (!poltronas[i][j])
					puts("Não existe reserva para esta poltrona. Não é possível cancelar.");
				else {
					poltronas[i][j] = 0;
					ocupadas--;
					printf("Reserva da poltrona %d cancelada.\n",cancelar);
				}
				break;

		case FATURAMENTO:
			printf("Faturamento total: %.2f\n",ocupadas*15.00);

	}
}
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem como você me dizer oq isso faz ?

memset(poltronas,0,MAXIMO_POLTRONAS*MAXIMO_POLTRONAS*sizeof(int));
	
	enum OPCOES {VER=1,RESERVAR,CANCELAR,FATURAMENTO,SAIR};
isso é um trabalho de faculdade e vou precisar explicar o codigo, tem como fazer oq isso ai ta fazendo, de outra maneira?

 

e como faço um case para dizer todas a livres?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem como você me dizer oq isso faz ?

memset(poltronas,0,MAXIMO_POLTRONAS*MAXIMO_POLTRONAS*sizeof(int));
	
	enum OPCOES {VER=1,RESERVAR,CANCELAR,FATURAMENTO,SAIR};
isso é um trabalho de faculdade e vou precisar explicar o codigo, tem como fazer oq isso ai ta fazendo, de outra maneira?

 

e como faço um case para dizer todas a livres?

 

o que é memset

 

o que é enum

 

tem outras duvidas? use tags inteligentes e em ingles no google.

 

Exemplo : do loop C++ ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você poderia usar manipulação de arquivos para registrar as poltronas permanentemente... ou seja.. quando fechar o programa as informações ainda existirem.. em um ou mais arquivos ;)

------------------------------------------||

só uma opinião http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites
não tem como voce fala bem resumido o que ele faz?

 

Larga de preguiça e leia o primeiro link.

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.