Ir ao conteúdo
  • Cadastre-se

nao consigo finalizar o programa


Posts recomendados

Escreva um programa em Pascal que use um vetor para gerenciar a venda de ingressos das poltronas numeradas de um teatro, que tem 50 lugares.
 
Eu consegui fazer uma parte, o único o problema é que quando eu finalizo ele ao aperta 0, ele pede nome e poltrona. Como eu concerto isso?
 

  //NOME DO PROGRAMAProgram Poltrona_teatro; //DECLARANDO VARIAVEISvarcliente:array [0..50] of string;i:integer; Beginwriteln('                        ==============================                             ');writeln('===========RESERVA DE POLTRONAS NUMERADAS============');writeln('*                                                                                                                *');writeln('*                                                                                                                *');writeln('*      DIGITE O NUMERO DA POLTRONA DE [1 á 50]                             *');writeln('*   DIGITE "0 (Zero)" PARA FINALIZAR O PROGRAMA                          *');writeln('*                                                                                                               *');writeln('*                                                                                                               *');writeln('========================================================');     for i:= 1 to 50 do    // PERMITE A ENTRADA DE ATE 50 DADOS  cliente[i]:= '';    // ASPAS SIMPLES INDICANDO CAMPO VAZIO  repeatbegin    writeln;    write('Poltrona: ' );    readln(i);    while ((i < 0) or (i > 50)) do begin  writeln('Poltrona deve ser de 1 á 50');    writeln;    write('Poltrona: ' );    readln(i);  end;  if (i = 0) then     // BLOCO QUE MOSTRA AO USUARIO O QUE JA FOI RESERVADO PELO SISTEMA    begin    writeln('POLTRONA   NOME');    for i:= 1 to 50 do    if (cliente[i] <> '') then            writeln('       ',i,'    ',cliente[i]);  end;        if (cliente[i] = '') then //SE A POLTRONA ESTIVER VAZIA, CONFIRMA MOSTRANDO O CLIENTE E A CONFIRMAÇÃO DA RESERVA    begin    write('Nome: ');      readln(cliente[i]);      writeln('Confirmado');      writeln;    end         elsebegin      writeln('Poltrona não disponivel! '); //ALERTA PARA SABER SE A POLTRONA ESTA RESERVADA      writeln;      write('Poltrona<s> não disponiveis ');           for i:= 1 to 50 doif (cliente[i] <> '') thenwrite(' ',i);writeln;writeln;    end;  end;until i = 0;End.

A Imagem da esquerda é a correta e a da direita a incorreta.

post-785465-0-09158400-1447527780_thumb.

post-785465-0-45343200-1447527786_thumb.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

1) O repeat não precisa de begin/end, seria bom removê-los;

 

2) você está usando a mesma variável para ler as poltronas, e para controlar o for, não poderia. "Cada um no seu quadrado"... Para as poltronas, use algo mais sugestivo, como numPoltrona.

3) Se são 50 poltronas, não seria de 0 a 49 ou 1 a 50?

4) O texto aqui (no Free Pascal) ficou meio bagunçado. Qual o compilador que você está usando?

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

Eu uso pascalzin, acho q agr ta melhor pra você entender
 

Olá.

1) O repeat não precisa de begin/end, seria bom removê-los;
 
2) você está usando a mesma variável para ler as poltronas, e para controlar o for, não poderia. "Cada um no seu quadrado"... Para as poltronas, use algo mais sugestivo, como numPoltrona.

3) Se são 50 poltronas, não seria de 0 a 49 ou 1 a 50?

4) O texto aqui (no Free Pascal) ficou meio bagunçado. Qual o compilador que você está usando?
 
No aguardo.

 

mudei aq e nao ajudou muito, so piorou
 
 
 

//NOME DO PROGRAMAProgram Poltrona_teatro;//DECLARANDO VARIAVEISvarcliente:array [0..50] of string;i:integer;Beginwriteln('=RESERVA DE POLTRONAS NUMERADAS= ');writeln('*DIGITE O NUMERO DA POLTRONA DE [1 á 50 *');writeln('*DIGITE "0 (Zero)" PARA FINALIZAR O PROGRAMA *');  for i:= 1 to 50 do    // PERMITE A ENTRADA DE ATE 50 DADOS  cliente[i]:= '';    // ASPAS SIMPLES INDICANDO CAMPO VAZIOrepeatbegin     writeln;     write('Poltrona: ' );     readln(i);  while ((i < 0) or (i > 50)) dobegin   writeln('Poltrona deve ser de 1 á 50');     writeln;     write('Poltrona: ' );     readln(i);   end;      if (i = 0) then     // BLOCO QUE MOSTRA AO USUARIO O QUE JA FOI RESERVADO PELO SISTEMA    begin     writeln('POLTRONA   NOME');     for i:= 1 to 50 do     if (cliente[i] <> '') then             writeln('       ',i,'    ',cliente[i]);   end;         if (cliente[i] = '') then //SE A POLTRONA ESTIVER VAZIA, CONFIRMA MOSTRANDO O CLIENTE E A CONFIRMAÇÃO DA RESERVA    begin     write('Nome: ');      readln(cliente[i]);      writeln('Confirmado');      writeln;    end         elsebegin      writeln('Poltrona não disponivel! '); //ALERTA PARA SABER SE A POLTRONA ESTA RESERVADA      writeln;      write('Poltrona<s> não disponiveis ');            for i:= 1 to 50 doif (cliente[i] <> '') thenwrite(' ',i);writeln;writeln;    end;   end;until i = 0;End.
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

Mudou o quê e onde?



Mas vamos lá:
 

1) O repeat não precisa de begin/end, seria bom removê-los;


Você continua usando o begin/end no repeat. Mas isso não impacta no funcionamento do código, é apenas desnecessário (eu considero um erro).


Usando:
 

repeatbegin.........  end;until i = 0;End.

 

...esse begin logo após o repeat é desnecessário!!! (assim como seu respectivo end lá antes do until)

 
***
 

2) você está usando a mesma variável para ler as poltronas, e para controlar o for, não poderia. "Cada um no seu quadrado"... Para as poltronas, use algo mais sugestivo, como numPoltrona.

 
Você continua usando uma variável para ambos.


***
 

3) Se são 50 poltronas, não seria de 0 a 49 ou 1 a 50?

Você continua usando 51 posições, em vez de 50.


***
 

4) O texto aqui (no Free Pascal) ficou meio bagunçado. Qual o compilador que você está usando?

Usando PascalZIm! Ok!

Obs.: Testei o seu código lá do primeiro post, e ficou bagunçado da mesma forma:

post-409554-0-56455700-1447604212_thumb.


***

No aguardo


 

Link para o comentário
Compartilhar em outros sites

Olá.

Mudou o quê e onde?

Mas vamos lá:

 

Você continua usando o begin/end no repeat. Mas isso não impacta no funcionamento do código, é apenas desnecessário (eu considero um erro).

Usando:

 

 

...esse begin logo após o repeat é desnecessário!!! (assim como seu respectivo end lá antes do until)

 

***

 

 

Você continua usando uma variável para ambos.

***

 

Você continua usando 51 posições, em vez de 50.

***

 

Usando PascalZIm! Ok!

Obs.: Testei o seu código lá do primeiro post, e ficou bagunçado da mesma forma:

attachicon.giffch.JPG

***

No aguardo

 

Removi o begin e end do repeat
mudei a variavel para as poltronas
e ta de 1..50 posiçoes, como antes, ele ta la na variaveis
 
 
//NOME DO PROGRAMAProgram Poltrona_teatro;//DECLARANDO VARIAVEISvarcliente:array [1..50] of string;i,numpolt:integer;Beginwriteln('CADASTRE O NUMERO DA POLTRONA DE [1 á 50]');writeln('DIGITE "0 (Zero)" PARA FINALIZAR O PROGRAMA');writeln;writeln;writeln;  for i:= 1 to 50 do    // PERMITE A ENTRADA DE ATE 50 DADOS  cliente[i]:= '';    // ASPAS SIMPLES INDICANDO CAMPO VAZIOrepeat     writeln;     writeln('CADASTRE O NUMERO DA POLTRONA');     write('Poltrona: ' );     readln(numpolt);    while ((numpolt < 0) or (numpolt > 50)) do   begin   writeln('Poltrona deve ser de 1 á 50');     writeln;     writeln('CADASTRE O NUMERO DA POLTRONA');     write('Poltrona: ' );     readln(i);   end;   if (cliente[i] = '') then //SE A POLTRONA ESTIVER VAZIA, CONFIRMA MOSTRANDO O CLIENTE E A CONFIRMAÇÃO DA RESERVA    beginwriteln;writeln;writeln('CADASTRE O NOME DO CLIENTE');     write('Cliente: ');      readln(cliente[i]);      writeln('Confirmado');      writeln;    end    else begin      writeln('Poltrona não disponivel! '); //ALERTA PARA SABER SE A POLTRONA ESTA RESERVADA      writeln;      write('Poltrona<s> não disponiveis: ');       for i:= 1 to 50 doif (cliente[i] <> '') thenwrite(' ',numpolt);writeln;writeln;end;until numpolt = 0;writeln('POLTRONA   NOME'); //BLOCO QUE MOSTRA AO USUARIO O QUE JA FOI RESERVADO PELO SISTEMA     for i:= 1 to 50 do     if (cliente[i] <> '') then             writeln('    ',numpolt,'       ',cliente[i]);End.
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.
 

 

Removi o begin e end do repeat

mudei a variavel para as poltronas
e ta de 1..50 posiçoes, como antes, ele ta la na variaveis

Certo. E ?

Então, após essas mudanças, o que está ocorrendo? você apenas postou o seu código.. qual a sua dúvida? onde você acha que está dando problemas?


Então, você adicionou uma nova variável numpolt, OK... Mas não ajustou o código...

Ex.:

    write('Poltrona: ' );    readln(i);

Como assim i ? onde você deveria armazenar o "Número da Poltrona" de fato? reanalise a o código e refaça as correções.

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

Fiz esse aqui, o único problema é ele exibir os dados coletados, como na imagem

 


//NOME DO PROGRAMA

Program Poltrona_teatro;


//DECLARANDO VARIAVEIS
var
cliente:array [1..50] of string;
i:integer;


Begin
writeln('DIGITE O NUMERO DA POLTRONA DE [1 á 50]');
writeln('DIGITE "0 (Zero)" PARA FINALIZAR O PROGRAMA');




  for i:= 1 to 50 do    // PERMITE A ENTRADA DE ATE 50 DADOS
  cliente[i]:= '';    // ASPAS SIMPLES INDICANDO CAMPO VAZIO




repeat
    writeln;
    write('Poltrona: ' );
    readln(i);




  while ((i < 0) or (i > 50)) do


begin
  writeln('Poltrona deve ser de 1 á 50');
    writeln;
    write('Poltrona: ' );
    readln(i);
  end;
 
  


    if (cliente[i] = '') then //SE A POLTRONA ESTIVER VAZIA, CONFIRMA MOSTRANDO O CLIENTE E A CONFIRMAÇÃO DA RESERVA    
begin
    write('Nome: ');
      readln(cliente[i]);
      writeln('Confirmado');
      writeln;
    end
    
     else
begin
      writeln('Poltrona não disponivel! '); //ALERTA PARA SABER SE A POLTRONA ESTA RESERVADA
      writeln;
      write('Poltrona<s> não disponiveis ');
       
    for i:= 1 to 50 do
if (cliente[i] <> '') then
write(' ',i);
writeln;
writeln;
    end;
until i = 0;


if (i = 0) then     // BLOCO QUE MOSTRA AO USUARIO O QUE JA FOI RESERVADO PELO SISTEMA
    begin
    writeln('POLTRONA   NOME');
    for i:= 1 to 50 do
    if (cliente[i] <> '') then      
      writeln('       ',i,'    ',cliente[i]);
  end;

End.

post-785465-0-85555900-1447618546.jpg

Link para o comentário
Compartilhar em outros sites

Agr ele fica dizendo poltrona nao disponivel, sendo que eu nao digitei ele anteriormente


//NOME DO PROGRAMA

Program Poltrona_teatro;


//DECLARANDO VARIAVEIS
var
cliente:array [1..50] of string;
i,numpolt:integer;


Begin
writeln('CADASTRE O NUMERO DA POLTRONA DE [1 á 50]');
writeln('DIGITE "0 (Zero)" PARA FINALIZAR O PROGRAMA');
writeln;
writeln;
writeln;






  for i:= 1 to 50 do    // PERMITE A ENTRADA DE ATE 50 DADOS
  cliente[i]:= '';    // ASPAS SIMPLES INDICANDO CAMPO VAZIO




repeat
    writeln;
    writeln('CADASTRE O NUMERO DA POLTRONA');
    write('Poltrona: ' );
    readln(numpolt);


  while ((numpolt < 0) or (numpolt > 50)) do
  begin
  writeln('Poltrona deve ser de 1 á 50');
    writeln;
    writeln('CADASTRE O NUMERO DA POLTRONA');
    write('Poltrona: ' );
    readln(numpolt);
  end;
 
if (cliente[i] = '') then //SE A POLTRONA ESTIVER VAZIA, CONFIRMA MOSTRANDO O CLIENTE E A CONFIRMAÇÃO DA RESERVA    
begin
writeln;
writeln;
writeln('CADASTRE O NOME DO CLIENTE');
    write('Cliente: ');
      readln(cliente[i]);
      writeln('Confirmado');
      writeln;
    end
    
else 


begin
      writeln('Poltrona não disponivel! '); //ALERTA PARA SABER SE A POLTRONA ESTA RESERVADA
      writeln;
      write('Poltrona<s> não disponiveis: ');
      for i:= 1 to 50 do
if (cliente[i] <> '') then
write(' ',numpolt);
writeln;
writeln;
end;
until numpolt = 0;
writeln('POLTRONA   NOME'); //BLOCO QUE MOSTRA AO USUARIO O QUE JA FOI RESERVADO PELO SISTEMA
    for i:= 1 to 50 do
    if (cliente[i] <> '') then      
      writeln('    ',numpolt,'       ',cliente[i]);
End.
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

Basta ter um pouco mais de atenção na hora de corrigir. Você está usando i, onde deveria usar numpolt.
 

Se você leu numpolt lá no readln, no if que vem depois, você teria que usar o numpolt, e não i !!!

 

 

Basicamente, você só vai usar o i dentro do for !!

 

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

e o " i "do vetor " cliente ", mudo tbem??

 

De certo modo, o i não é do vetor, assim como o numpolt ou qualquer outra variável... o programador apenas pode usar qualquer variável ou valor numérico que esteja na faixa do array.

 

Em relação ao seu código, como disse:

 

Basicamente, você só vai usar o i dentro do for !!

No restante usa numpolt. (no if, no readln, no ultil...)

 

 

Link para o comentário
Compartilhar em outros sites

Ficou pior q antes, compilar ae
 

//NOME DO PROGRAMAProgram Poltrona_teatro; //DECLARANDO VARIAVEISvarcliente:array [0..50] of string;i,numpolt:integer; Beginwriteln('*CADASTRE O NUMERO DA POLTRONA DE [1 á 50]*');writeln('*DIGITE "0 (Zero)" PARA FINALIZAR O PROGRAMA*');     for i:= 1 to 50 do    // PERMITE A ENTRADA DE ATE 50 DADOS  cliente[i]:= '';    // ASPAS SIMPLES INDICANDO CAMPO VAZIO  repeat    writeln;    writeln('CADASTRE O NUMERO DA POLTRONA');    write('Poltrona: ' );    readln(numpolt);   while ((numpolt < 0) or (numpolt > 50)) do  begin  writeln('Poltrona deve ser de 1 á 50');    writeln;    writeln('CADASTRE O NUMERO DA POLTRONA');    write('Poltrona: ' );    readln(numpolt);  end; if (cliente[i] = '') then //SE A POLTRONA ESTIVER VAZIA, CONFIRMA MOSTRANDO O CLIENTE E A CONFIRMAÇÃO DA RESERVA    beginwriteln;writeln;writeln('CADASTRE O NOME DO CLIENTE');    write('Cliente: ');      readln(cliente[i]);      writeln('Confirmado');      writeln;    end    else  begin      writeln('Poltrona não disponivel! '); //ALERTA PARA SABER SE A POLTRONA ESTA RESERVADA      writeln;      write('Poltrona<s> não disponiveis: ');      for i:= 1 to 50 doif (cliente[i] <> '') thenwrite(' ',numpolt);writeln;writeln;end;until i = 0; writeln('POLTRONA   NOME'); //BLOCO QUE MOSTRA AO USUARIO O QUE JA FOI RESERVADO PELO SISTEMA    for i:= 1 to 50 do    if (cliente[i] <> '') then            writeln('    ',numpolt,'       ',cliente[i]);End.
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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...