Ir ao conteúdo

Programa em pascal duvidas


vinicionagel

Posts recomendados

Postado

Galera o programa é o seguinte

Criar um algoritmo para gerenciar um sistema de reservas de mesas em uma casa de espetáculo.

A casa possui 10 mesas de 5 lugares cada. O algoritmo deverá permitir que o usuário escolha código de uma mesa (100 a 109) e forneça a quantidade de lugares desejados. O algoritmo deverá informar se foi possível realizar a reserva e atualizar a reserva. Se não for possível, o algoritmo deverá emitir uma mensagem. O algoritmo deve terminar quando o usuário digitar o código 0 (zero) para uma mesa ou quando todos os 50 lugares estiverem ocupados.

eu ja tinha começado mas estou com duvida na parte de lugares

Program Pzim ;

const max = 5;
var mesa:integer;
codimesa: integer;
codigo: integer;
lugar: array[1..max] of integer;
opcaomesa: String;
opcao1: String;
contmesa1:integer;
i:integer;
Begin
i:=1;
writeln ('Se você deseja cadastrar digite entrar');
readln (opcao1);

while (opcao1 = 'Entrar') or (opcao1 <> 'Sair' )do
begin
// parte menu
TextColor(15);
WriteLn(' [C]adastrar mesa 1');
WriteLn(' [L]ista de mesas livres 2');
WriteLn(' [S]AIR ');
readln (opcao1);
//parte opções
if (opcao1 = '1') then
begin
writeln ('Escolha a mesa que você deseje ver se esta vaga');
TextColor(15);

WriteLn('Mesa 100');
WriteLn('Mesa 101 ');
WriteLn('Mesa 102');
WriteLn('Mesa 103');
WriteLn('Mesa 104');
WriteLn('Mesa 105 ');
WriteLn('Mesa 106');
WriteLn('Mesa 107');
WriteLn('Mesa 108');
WriteLn('Mesa 109');
readln (opcaomesa);
if (opcaomesa = '100') then
begin
writeln ('Deseja comprar um lugar lembrando que sao 5 por mesas');
readln(lugar[i]);
if (lugar[i] = 5) then
writeln ('Mesa cheia desculpe tente outra mesa.');
if (lugar [i] <= 5) then
writeln ('Mesa tem lugares vagos');
end;


end;

end;



End.

Postado

Olá vinicionagel,

Seguinte, esse pedaço de código abaixo só quero fazer um comentário para ficar mais legível ao usuário:

  Citação
WriteLn(' [C]adastrar mesa 1');

WriteLn(' [L]ista de mesas livres 2');

WriteLn(' AIR ');

readln (opcao1);

//parte opções

if (opcao1 = '1') then

Aqui você separou a letra incial da opção, ex: "[L]ista de mesas livres 2", o que me dá a entender é que eu preciso digitar a letra L para executar esta opção mas pelo resto do teu código, o que vejo é que tu usas o número ao lado para fazer a verificação da opção, te aconselho a mudar isso para ficar mais entendível ao usuário, "[2] Lista de mesas livres", ok?

Aqui um erro muito comum, que deve ser evitado, não que irá prejudicar o funcionamento do programa, mas daria para considerar um erro quanto ao que o programa deveria fazer naquela situação...

  Citação
writeln ('Se você deseja cadastrar digite entrar');

readln (opcao1);

while (opcao1 = 'Entrar') or (opcao1 <> 'Sair' )do

begin

FAÇA O SEGUINTE:

  Citação
writeln ('Se você deseja cadastrar digite entrar');

readln (opcao1);

opcao1 := upcase(opcao1);

inicio:

while (opcao1 = 'ENTRAR') do

begin

..............

end;

if (opcao1 <> 'ENTRAR') and (opcao1 <> 'SAIR') then

begin

while (opcao1 <> 'ENTRAR') and (opcao1 <> 'SAIR') do

begin

writeln(sua opção é inválida! Digite novamente:);

readln(opcao1);

end;

end;

else if (opcao1 = 'ENTRAR') then

goto inicio;

else

exit;

Já esta outra parte do código....

  Citação
writeln ('Deseja comprar um lugar lembrando que sao 5 por mesas');

readln(lugar);

if (lugar = 5) then

writeln ('Mesa cheia desculpe tente outra mesa.');

if (lugar <= 5) then

writeln ('Mesa tem lugares vagos');

end;

no readln adicione diretamente ao i, e não a lugar. ficaria:

Cuidado que no writeln novamente você estava perguntando se a pessoa queria ou não comprar lugares, e não quantos lugares ela queria... Você terá também que fazer uma verificação se há lugares disponíveis, assim estás só determinando que se a pessoa quiser comprar os 5 lugares a mesa ficará cheia, sem verificar se ela possui os 5 lugares vazios...

para isso você terá que varrer todo o array para verificar antes de realizar esta pergunta... use um for para isso.

  Citação

writeln ('Deseja comprar quantos lugares? lembrando que sao 5 por mesas');

readln(i);

if (i = 5) then

writeln ('Mesa cheia desculpe tente outra mesa.');

if (i <= 5) then

begin

writeln ('Mesa tem lugares vagos');

end;

Espero que isso ai já ajude!

^_^

Postado

eu também preciso desse código o meu ta assim:

Program trabalho_vetor;
var nlugar,codigo:array[100..109] of integer;i,n,limite,menu,buscar,nlugar2: integer;
Begin
writeln('1) Verificar disponibilidade de mesas.');
writeln('2) Reservar lugar(es).');
writeln('3) Sair.');
readln (menu);
clrscr;
i:=100;
while(menu=2)do
begin
writeln('Digite o codigo da mesa (100 a 109)');
readln(codigo[i]);
writeln('Quantos lugares você deseja');
readln (nlugar[i]);
if (codigo[i]<100) or (codigo[i]>109) then
begin
writeln ('Não temos mesas com esse codigo');
end;
if (nlugar[i]>5) then
begin
writeln ('o numero maximo de lugares para cada mesa é 5');
end;
writeln(codigo[i],' ',nlugar[i]);
i:=i+1;
writeln('1) Verificar disponibilidade de mesas.');
writeln('2) Reservar lugar(es).');
writeln('3) Sair.');
readln (menu);
clrscr;
end;
readln (menu);
clrscr;
while(menu=1)do
begin
n:=5;
writeln('Digite o código da mesa (100 a 109)');
readln(buscar);
if (buscar<100) or (buscar>109) then
begin
writeln ('Não temos mesas com esse codigo');
end;
if (buscar>=100) and (buscar<=109)then
begin
for i:=100 to 109 do
begin
if (buscar = codigo[i])then
begin
nlugar2:= n - nlugar[i];
writeln('Esta mesa possui ',nlugar2,' lugares disponiveis');
end;
end;
end;
writeln('1) Verificar disponibilidade de mesas.');
writeln('2) Reservar lugar(es).');
writeln('3) Sair.');
readln (menu);
clrscr;
end;
clrscr;


if(menu=3) or (limite<>50)then
begin
writeln('PRESSIONE <ENTER> PARA CONFIRMAR A SAÍDA');
end;
End.

  • Membro VIP
Postado
  vinicionagel disse:

Galera o programa é o seguinte

Criar um algoritmo para gerenciar um sistema de reservas de mesas em uma casa de espetáculo.

A casa possui 10 mesas de 5 lugares cada. O algoritmo deverá permitir que o usuário escolha código de uma mesa (100 a 109) e forneça a quantidade de lugares desejados. O algoritmo deverá informar se foi possível realizar a reserva e atualizar a reserva. Se não for possível, o algoritmo deverá emitir uma mensagem. O algoritmo deve terminar quando o usuário digitar o código 0 (zero) para uma mesa ou quando todos os 50 lugares estiverem ocupados.

eu ja tinha começado mas estou com duvida na parte de lugares



const max = 5;
var mesa:integer;
codimesa: integer;
codigo: integer;
lugar: array[1..max] of integer;
opcaomesa: String;
opcao1: String;
contmesa1:integer;
i:integer;
Begin
i:=1;
writeln ('Se você deseja cadastrar digite entrar');
readln (opcao1);

while (opcao1 = 'Entrar') or (opcao1 <> 'Sair' )do
begin
// parte menu
TextColor(15);
WriteLn(' [C]adastrar mesa 1');
WriteLn(' [L]ista de mesas livres 2');
WriteLn(' [S]AIR ');
readln (opcao1);
//parte opções
if (opcao1 = '1') then
begin
writeln ('Escolha a mesa que você deseje ver se esta vaga');
TextColor(15);

WriteLn('Mesa 100');
WriteLn('Mesa 101 ');
WriteLn('Mesa 102');
WriteLn('Mesa 103');
WriteLn('Mesa 104');
WriteLn('Mesa 105 ');
WriteLn('Mesa 106');
WriteLn('Mesa 107');
WriteLn('Mesa 108');
WriteLn('Mesa 109');
readln (opcaomesa);
if (opcaomesa = '100') then
begin
writeln ('Deseja comprar um lugar lembrando que sao 5 por mesas');
readln(lugar[i]);
if (lugar[i] = 5) then
writeln ('Mesa cheia desculpe tente outra mesa.');
if (lugar [i] <= 5) then
writeln ('Mesa tem lugares vagos');
end;


end;

end;



End.
Program Pzim ;

Olá,

Tem vários detalhes a se verificar... abaixo o seu código com algumas correções!!!

{
Criar um algoritmo para gerenciar um sistema de reservas de mesas em uma casa
de espetaculo. A casa possui 10 mesas de 5 lugares cada. O algoritmo devera
permitir que o usuario escolha codigo de uma mesa (100 a 109) e forneca a
quantidade de lugares desejados. O algoritmo devera informarse foi possivel
realizar a reserva e atualizar a reserva. Se nao for possivel, o algoritmo
devera emitir uma mensagem. O algoritmo deve terminar quando o usuario digitar
o codigo 0 (zero) para uma mesa ou quando todos os 50 lugares estiverem
ocupados.

eu ja tinha comecado mas estou com duvida na parte de lugares

Codigo:
}

PROGRAM Pzim;
USES CRT; {para carregar o TextColor(), ClrScr; ReadKey, etc}
CONST
[COLOR="Red"] (*
max = 5;
[B]//é comum renomear as constantes em maiuscula, ou algo do tipo [/B](viadagem)
*)[/COLOR]
MAXmesas = 10; {maximo de mesas para reserva}
MAXlugares = 5 ; {maximo de lugares para cada mesa}
MESAinicial = 100; {numero da primeira mesa}
VAR
[COLOR="Red"] (*
mesa :integer; [B]//pra q serve?[/B]
codigo :integer; [B]//pra q serve?[/B]
opcaomesa :string; [B]//pra q serve?[/B]
//só precisa do codigo
*)[/COLOR]
codMesa :integer; {codigo da mesa (101 a 109)}
[COLOR="Red"] (*
{lugar :array[1..max] of integer;}
[B]//renomei arrays no plural!!![/B]
*) [/COLOR] { =109 }
mesas :array[MESAinicial..MESAinicial+MAXmesas-1] of boolean;
{mesas disponiveis {disponivel=true ocupada=false}
lugares :array[MESAinicial..MESAinicial+MAXmesas-1] of integer;
{quantidade de lugares na mesa corespondente}
[COLOR="Red"] (*
opcao1 :string;
[B] //tem opcao2???
//OBS.: porque como string? char fica muito mais simples e pratico[/B]
*)[/COLOR]
[COLOR="Red"] (*
opcao :char;
[B]//nao vai precisar, já que sai com codiMesa=0!!![/B]
*)[/COLOR]

[COLOR="Red"] (*
contmesa :integer;
[B]//tem contmesa2?[/B]
*)[/COLOR]
contMesa :integer; {quantidade de mesas cadastradas}
i :integer; {usado no for}

BEGIN
TextColor(15); {cor do texto branco}
TextBackGround(0); {cor do fundo preto}
{inicializa as mesas}
for i:=MESAinicial to MESAinicial+MAXmesas-1 do
mesas[i]:=true; {marca como disponivel}
[COLOR="Red"] (*
i:=1;
[B]//a quantidade deve comecar em zero[/B]
*)[/COLOR]
[COLOR="Red"] (*
writeln('Se voce deseja cadastrar digite entrar');
readln (opcao1);
[B]//nao faz sentido perguntar para exexutar pela primeira vez!!!![/B]
*)[/COLOR]

[COLOR="Red"] (*
while (opcao = 'Entrar') or (opcao <> 'Sair') do
[B]//corrigindo a condicao do while
//OBS.: Do jeito que estava qualquer coisa que digitasse ia entrar menos se
digitasse 'Sair'[/B]

*)[/COLOR]
codMesa:=1; {só para entrar no While} {[B]//OBS.: ou poderia transformar o
while em Repeat[/B]}
while (codMesa <> 0) and (contMesa < MAXmesas*MAXlugares) do
{codicao para sair} {maximo permitido}
begin
ClrScr; {limpa a tela}
[COLOR="Red"] (*
TextColor(15); {cor do texto branco
[B]//só precisa atribuir a cor uma vez!!! (assim a esta a cada loop)[/B]
(vai lá pra cima)
*)[/COLOR]

[COLOR="Red"] (*
{***** TELA DE MENU DE OPCAO *****}
WriteLn(' [C]adastrar mesa 1');
WriteLn(' [L]ista de mesas livres 2');
WriteLn(' [S]AIR 3');
ReadLn(opcao); {ler a opcao escolhida}
opcao:=UpCase(opcao); {torna a letra maiuscula}
if opcao in ['1', 'S'] then
{o mesmo que if (opcao = '1') or (opcao='S') then}
begin
[B]//segundo o enunciado, esse problema nao tem MENU!!!
"O algoritmo deve terminar quando o usuario digitar o codigo 0 (zero) para
uma mesa ou quando todos os 50 lugares estiverem ocupados."[/B]
*)[/COLOR]
WriteLn('Escolha a mesa que voce deseja ver se esta vaga');
WriteLn(' "0" para sair!');
WriteLn;
[COLOR="Red"] (*
TextColor(15);
[B]//já esta branco, lembra?[/B]
*)[/COLOR]
[COLOR="Red"] (*
WriteLn('Mesa 100');
WriteLn('Mesa 101');
WriteLn('Mesa 102');
WriteLn('Mesa 103');
WriteLn('Mesa 104');
WriteLn('Mesa 105');
WriteLn('Mesa 106');
WriteLn('Mesa 107');
WriteLn('Mesa 108');
WriteLn('Mesa 109');
[B]//abaixo uma versao mais elegante para imprimir a lista!!![/B]
*)[/COLOR]
for i:=MESAinicial to MESAinicial+MAXmesas-1 do
WriteLn('Mesa ',i);
WriteLn('Total de mesas cadastradas : ',contMesa);
WriteLn;
Write('MESA => '); ReadLn(codMesa);
WriteLn;
[COLOR="Red"] (*
{if (codiMesa = '100') then}
if (opcaomesa = '100') then
[B]//primeiro ve se a mesa esta disponivel[/B]
*)[/COLOR]
{VALIDA SE A MESA é VALIDA}
if codMesa in [MESAinicial..(MESAinicial+MAXmesas-1)] then
{o mesmo que if (codiMesa>MESAinicial) and (codiMesa<MESAinicial+MAXmesas-1) then}
begin
if mesas[codMesa] then {se disponivel (true)}
begin
WriteLn('Para quantas pessoas senhor? (Lembrando que sao 5 por mesas)');
Write('QUANTIDADE :'); ReadLn(lugares[i]);
WriteLn;
if (lugares[i] <= 5) and (lugares[i]>=1) then
begin
TextColor(14); {amarelo}
Write('Mesa RESERVADA com SUCESSO!!!');
TextColor(15); {branco (original)}
mesas[codMesa]:=false; {marca como indiponivel}
{atualiza a qnt de mesas}
inc(contMesa); {o mesmo que x:=x+1}
end
else
begin
WriteLn('Nao possivel realizar a reserva e atualizar a reserva');
TextColor(4+blink); {vermelho piscando}
Write(' RESERVAS ENTRE 1 e 5 PESSOAS POR MESAS');
TextColor(15); {branco (original)}
end; {else}
ReadKey; {da um pause}
end {if mesas disponiveis}
else
begin
TextColor(10); {amarelo}
Write('MESA OCUPADA, escolha outra');
TextColor(15); {branco (original)}
ReadKey; {da um pause}
end;
end {if VALIDA}
else if codMesa<>0 then {caso n deseje sair}
begin
TextColor(14); {amarelo}
Write('Infelizmente essa mesa esta indisponivel, escolha uma entre'
+' 100 e 109');
TextColor(15); {branco (original)}
ReadKey; {da um pause}
end; {else}
end; {while}
if contMesa >= MAXmesas then
begin
WriteLn('TODAS AS MESAS estão ESGOTAS');
ReadKey;
end;
WriteLn(' OBRIGADO POR USAR MEU PROGRAMA');
ReadKey; {da um pause}
END.

Espero ter ajudado... qualquer dúvida é só postar!!!

UPDATE

Tem outro coisa que esqueci de comentar... eu editei o código baseada na característica que somente pode ser aberto uma conta por mesa, ou seja, não pode reservar uma mesa que já esteja ocupada!!! (ex.: se um casal ocupar uma mesa, as outras 3 cadeiras não poderão ser usadas por outras pessoas!!!)

Se este não for o caso, terá que fazer alguns ajustes para que, deste modo, consiga reservar as outras cadeiras!!!

No meu caso

  Citação
if mesas[codMesa] then {se disponivel (true)}
.
.
else
begin
.
Write('MESA OCUPADA, escolha outra');
.
.
end;

No vosso caso

  Citação
if (lugar[i] = 5) then
writeln ('Mesa cheia desculpe tente outra mesa.');
if (lugar [i] <= 5) then
writeln ('Mesa tem lugares vagos');
end;

Abraços

  foxchange disse:

Olá vinicionagel,

Seguinte, esse pedaço de código abaixo só quero fazer um comentário para ficar mais legível ao usuário:

Aqui você separou a letra incial da opção, ex: "[L]ista de mesas livres 2", o que me dá a entender é que eu preciso digitar a letra L para executar esta opção mas pelo resto do teu código, o que vejo é que tu usas o número ao lado para fazer a verificação da opção, te aconselho a mudar isso para ficar mais entendível ao usuário, "[2] Lista de mesas livres", ok?

Aqui um erro muito comum, que deve ser evitado, não que irá prejudicar o funcionamento do programa, mas daria para considerar um erro quanto ao que o programa deveria fazer naquela situação...

FAÇA O SEGUINTE:

Já esta outra parte do código....

no readln adicione diretamente ao i, e não a lugar. ficaria:

Cuidado que no writeln novamente você estava perguntando se a pessoa queria ou não comprar lugares, e não quantos lugares ela queria... Você terá também que fazer uma verificação se há lugares disponíveis, assim estás só determinando que se a pessoa quiser comprar os 5 lugares a mesa ficará cheia, sem verificar se ela possui os 5 lugares vazios...

para isso você terá que varrer todo o array para verificar antes de realizar esta pergunta... use um for para isso.

Espero que isso ai já ajude!

^_^

Olá,

Só uns comentários sobre o código de foxchange.

1)

  Citação
writeln ('Se você deseja cadastrar digite entrar');

readln (opcao1);

opcao1 := upcase(opcao1);

UpCase(); não funciona com Strings, pelo menos no Turbo Pascal!!!

2)

  Citação
inicio:

.

.

.

goto inicio;

Eu acredito que esse conceito de LABEL / GOTO esteja em desuso, ou seja, é preferível usar laços de repetições comuns mesmo!!!

Abraços

Postado

valeu ai galera pela ajuda o trabalho fico bom tirei A, obrigado pelo pessoal que tiro algumas duvidas, o programa está no meu pendrive que esqueci na ksa de um coléga, qalqer hora posto ele pra você's verem como fico valeu mesmo..

Arquivado

Este tópico foi arquivado e está fechado para 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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!