Ir ao conteúdo
  • Cadastre-se
Rodrigo Viana Pereira

Pascal Criação menu e submenu pascalzim

Recommended Posts

Bom dia, pessoal.

 

Estou bem perdido para fazer esse programa no PascalZim. Já tentei fazer três programas mas nenhum tá rodando. Estou perdido pra fazer o submenu e a varredura pra saber se o ingresso já foi selecionado ou não.

 

Precisaria disso até amanhã. Se alguém puder me ajudar, agradeceria.

 

 

Elabore um programa que permita reservar um ingresso em um cinema, considerando que o cinema tem 15 fileiras e 20 cadeiras por fileira. As fileiras são identificadas pelas letras A, B, C, ... e O, seguidas de um número sequencial de 2 dígitos (01 até 20). Para a reserva, o programa deve armazenar, em uma estrutura do tipo record, as informações solicitadas e somente salvar no arquivo INGRESSO.txt após o término do programa.

• Deve ser exibido um menu com as seguintes opções:

1. Incluir Ingresso;

2. Alterar Ingresso;

3. Excluir Ingresso;

4. Listar Ingresso:

     1. Listar por Sobrenome;

     2. Listar por Assento;

     3. Listar todas as Reservas; 

5. Salvar e Terminar

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

Poste o que já conseguiu fazer e onde está com dúvidas.

 

 

 

Segue algumas dicas:


1#
Sobre:

4 horas atrás, Rodrigo Viana Pereira disse:

Estou perdido pra fazer o submenu

Submenu seria apenas um menu tradicional, só que dentro dum outro... não tem mistério. Um detalhe que deve levar em consideração é utilizar uma outra variável para ler a resposta do usuário. Ex.;

repeat
  ClrScr;
  writeln('        MENU        ');
  writeln;
  writeln('1. Incluir Ingresso ');
  writeln('2. Alterar Ingresso ');
  writeln('3. Excluir Ingresso ');
  writeln('4. Listar Ingresso  ');
  writeln('5. Salvar e Terminar');
  writeln;
  write  ('=> ');
  opMenu:=ReadKey;
  write  (opMenu);
  writeln;
  writeln;
  case opMenu of
    '1':begin

        end; //fim menu 1
    '2':begin
      
        end; //fim menu 2
    '3':begin
      
        end; //fim menu 3
    '4':begin
        writeln('     1. Listar por Sobrenome    ');
        writeln('     2. Listar por Assento      ');
        writeln('     3. Listar todas as Reservas');
        writeln;
        write  ('=> ');
        opSubMenu:=ReadKey;
        case opSubMenu of
          '1':begin
              
              end; //fim submenu 1
          '2':begin

              end; //fim submenu 2
          '3':begin
              
              end; //fim submenu 3
          end; //fim case submenu
        end; //fim menu 4
    '5':begin

        end; //fim menu 5
    end; //fim case menu
until opMenu='5';


Poderia colocar outros submenus dentro de outra opção do menu (poderia utilizar a mesma variável opSubMenu) ou mesmo inserir um submenu dentro do uma opção de um submenu (aí precisaria de uma terceira variável, como opSubMenu2 etc). Pode ter quantos, e como, submenus quiser!

Uma dica muito bacana é deixar as estruturas prontas... veja no exemplo do código acima. A proposta é deixar sempre o código compilável, ou seja, minimizar os riscos de sintaxe incorreta... desta forma, deixando as "preocupações" apenas na lógica. Cada estrutura nova que inserir, já a complete. Ex.:

if not poltronas[f,c].ocupado then
  begin

  end;

Ao colocar o begin, já colocar o respectivo end. Após "preenche-os" .



 

2#

Para tentar ajudar numa referência, fiz um exemplo de como poderia fazer para listar:

program FCdH;

type
  t_poltronas = record
    nome     :string[20];
    sobrenome:string[20];
    ocupado  :boolean;
  end;


var
  poltronas :array ['A'..'O',1..20] of t_poltronas; //vetor para armazenar as poltronas
  f :char;     //coordenada das fileiras
  c :integer;  //coordenada das cadeiras (da fileira)

begin
poltronas['F', 9].ocupado:=true;
poltronas['D',16].ocupado:=true;
poltronas['D',17].ocupado:=true;
poltronas['D',18].ocupado:=true;
poltronas['J', 3].ocupado:=true;

writeln;
writeln('############################################# POLTRONAS #############################################');
for f:='A' to 'O' do
  begin
  writeln;
  for c:=1 to 20 do
    begin
    if not poltronas[f,c].ocupado then
      begin
      if c<10 then
        write  (' ',f,'-0',c)
      else
        write  (' ',f,'-',c);
      end
     else
      write  (' ----');
    end;
  end;
writeln;
writeln;
writeln('############################################# POLTRONAS #############################################');
writeln;




readln;
end.

Vale salientar que o código é apenas para ter uma referência...

 

 

 

3#

4 horas atrás, Rodrigo Viana Pereira disse:

Estou perdido pra fazer [...] a varredura pra saber se o ingresso já foi selecionado ou não.

 

Aí vai depender da estrutura que está utilizando para armazenar os dados. O enunciado indica que deve armazenar em "uma estrutura do tipo record".

 

Por exemplo, abaixo criei uma base de código que utiliza um "vetor de record". Veja:

program FCdH;
uses
  CRT;
type
  t_poltronas = record
    nome     :string[20];
    sobrenome:string[20];
    ocupado  :boolean;
  end;


var
  poltronas :array ['A'..'O',1..20] of t_poltronas; //vetor para armazenar as poltronas
  f         :char;     //coordenada da fileira
  c         :integer;  //coordenada da cadeira (da fileira)
  opMenu    :char;
  opSubMenu :char;
  
begin

repeat
  ClrScr;
  writeln('        MENU        ');
  writeln;
  writeln('1. Incluir Ingresso ');
  writeln('2. Alterar Ingresso ');
  writeln('3. Excluir Ingresso ');
  writeln('4. Listar Ingresso  ');
  writeln('5. Salvar e Terminar');
  writeln;
  write  ('=> ');
  opMenu:=ReadKey;
  write  (opMenu);
  writeln;
  writeln;
  case opMenu of
    '1':begin
        poltronas['F', 9].ocupado:=true;
        poltronas['D',16].ocupado:=true;
        poltronas['D',17].ocupado:=true;
        poltronas['D',18].ocupado:=true;
        poltronas['J', 3].ocupado:=true;
        write  ('Poltronas incluidas com sucesso');
        ReadKey;
        end; //fim menu 1
    '2':begin
      
        end; //fim menu 2
    '3':begin
      
        end; //fim menu 3
    '4':begin
        writeln('     1. Listar por Sobrenome    ');
        writeln('     2. Listar por Assento      ');
        writeln('     3. Listar todas as Reservas');
        writeln;
        write  ('=> ');
        opSubMenu:=ReadKey;
        case opSubMenu of
          '1':begin
              
              end; //fim submenu 1
          '2':begin
              writeln;
              writeln('############################################# POLTRONAS #############################################');
              for f:='A' to 'O' do
                begin
                writeln;
                for c:=1 to 20 do
                  begin
                  if not poltronas[f,c].ocupado then
                    begin
                    if c<10 then
                      write  (' ',f,'-0',c)
                    else
                      write  (' ',f,'-',c);
                    end
                   else
                    write  (' ----');
                  end;
                end;
              writeln;
              writeln;
              writeln('############################################# POLTRONAS #############################################');
              writeln;
              ReadKey;
              end; //fim submenu 2
          '3':begin
              
              end; //fim submenu 3
          end; //fim case submenu
        end; //fim menu 4
    '5':begin

        end; //fim menu 5
    end; //fim case menu
until opMenu='5';








readln;
end.

 

 

***

 

Por ai vai.


 

 

No aguardo.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Comecei com esse algoritmo

  write('Informe o número de reservas de qustro algarismos: ');
  readln(Reserva_Ingresso.reserva);
  if (Reserva_Ingresso.reserva < 1000) or (n > 9999) then
    begin
    repeat
      write('O número digitado não possui quatro algarismos. Digite um que satisfaça a condição: ');
      readln(Reserva_Ingresso.reserva);
    until (Reserva_Ingresso.reserva >= 1000) and (Reserva_Ingresso.reserva <= 9999);
    end;
  write('Informe o sobrenome de quem vai receber a reserva: ');
  readln(Reserva_Ingresso.sobrenome);
  end; 

procedure alterar(menu1:integer);
  begin
  write('Informe o número de reserva que deseja alterar: ');
  readln(Reserva_Ingresso.reserva);
  if (Reserva_Ingresso.reserva <> Reserva_Ingresso.reserva) then
    begin
    Repeat
      write('A reserva digitada não existe. Informe uma existente para a alteração: ');
      readln(Reserva_Ingresso.reserva);
    Until (Reserva_Ingresso.reserva = Reserva_Ingresso.reserva);
    end;
  write('Informe o novo assento desejado no padrão XNN, onde X é uma fileira de A a O e NN o número do assento 01 à 99: ');
  readln(Reserva_Ingresso.assento);
  write('Informe o sobrenome a quem pertence a nova reserva.');
  end;

procedure excluir(exclusao:integer);
  begin
  write('Informe o número da reserva que deseja excluir: ');
  readln(Reserva_Ingresso.reserva);
  if (Reserva_Ingresso.reserva <> Reserva_Ingresso.reserva) then
    begin
    repeat
      write('A reserva digitada não existe. Informe uma existente para a exclusão: ');
      readln(Reserva_Ingresso.reserva);
    until (Reserva_Ingresso.reserva = Reserva_Ingresso.reserva);
  end;
  end;

procedure listar(menu2:integer);
  begin
  repeat
    write('Digite 1 para listar as reservas por sobrenome: ');
    write('Digite 2 para listar as reservas por assento: ');
    write('Digite 3 para listar todas as reservas: ');
    readln(menu2);
    case menu2 of
      1: Listar_Sobrenome;
      2: Listar_Assento;
      3: Listar_Reservas;
    else
      if (menu2<>1) and (menu2<>2) and (menu<>3) then
        writeln('Opção Inválida!');
  until (menu2=1) or (menu2=2) or (menu2=3);
end; 

procedure Ordem_Sobrenome(Listar_Sobrenome:integer);
procedure Ordem_Assento(Listar_Assento:integer);
procedure Ordem_Reserva(Listar_Reserva:integer);
procedure salvar(salvo:integer);        

var 
  ingresso : char;
  menu : integer;
begin
repeat    
  writeln('Digite 1 para incluir ingresso: ');
  writeln('Digite 2 para alterar as informações referentes ao seu ingresso: ');
  writeln('Digite 3 para excluir seu ingresso: ');
  writeln('Digite 4 para listar o ingresso: ');
  writeln('Digite 5 para salvar e terminar: ');
  readln(menu);
  case menu of
    1: incluir;
    2: alterar;
    3: excluir;
    4: listar;
    5: salvar; 
  else
    if (menu<>1) and (menu<>2) and (menu<>3) and (menu<>4) and (menu<>5) then
      writeln('Opção Inválida!');
until (menu=5);

 

Só depois eu vi que o ingresso tinha que ter o formato XNN com X a fileira e NN o número do assento

 

Aí mudei a procedure para a inclusão

program TRABALHO_02;

var
  menu1, menu2, exclusao, salvo : integer;
  poltrona : integer;
  fileira: char;
  cadeia: string[3];

type
  Reserva_Ingresso = record
    reserva   :integer;
    sobrenome:string[20];
  end;

procedure incluir(menu1:integer);
  begin
  write('Informe a fileira desejada: ');
  readln(fileira);
  write('Informe o número de poltrona desejado: ');
  readln(poltrona);
  case fileira of
    'A': num_fil:= 1;
    'B': num_fil:= 2;
    'C': num_fil:= 3;
    'D': num_fil:= 4;
    'E': num_fil:= 5;
    'F': num_fil:= 6;
    'G': num_fil:= 7;
    'H': num_fil:= 8;
    'I': num_fil:= 9;
    'J': num_fil:= 10;
    'K': num_fil:= 11;
    'L': num_fil:= 12;
    'M': num_fil:= 13;
    'N': num_fil:= 14;
    '0': num_fil:= 15;
  begin
  cadeia:=concat(s1,s2);
  writeln(cadeia);
  end;
begin
  repeat    
    writeln('Digite 1 para incluir ingresso: ');
    writeln('Digite 2 para alterar as informações referentes ao seu ingresso: ');
    writeln('Digite 3 para excluir seu ingresso: ');
    writeln('Digite 4 para listar o ingresso: ');
    writeln('Digite 5 para salvar e terminar: ');
    readln(menu);
    case menu of
      1: incluir;
      2: alterar;
      3: excluir;
      4: listar;
      5: salvar;
    else
      if (menu<>1) and (menu<>2) and (menu<>3) and (menu<>4) and (menu<>5) then
        writeln('Opção Inválida!');
  until (menu=5);
end.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi.

 

Poste o código completo.

adicionado 10 minutos depois

 

3 horas atrás, Rodrigo Viana Pereira disse:

Comecei com esse algoritmo

 

Está com dúvida em qual parte?

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

As reservas têm que ser armazenadas em arquivo. Só que eu faltei essa aula. Nem tô preocupado com essa parte

A questão é fazer os menus, e, no de inclusão dizer se algum assento já foi ou não reservado

 

Você tem algum e-mail para que eu possa te mostrar o trabalho completo?

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 minutos atrás, Rodrigo Viana Pereira disse:

As reservas têm que ser armazenadas em arquivo. Só que eu faltei essa aula. Nem tô preocupado com essa parte

A parte do arquivo deve ficar pro final. Mas não tem mistério... a parte que deve se preocupar é na estrutura do programa... finja que não vai existir arquivos...

 

 

 

4 minutos atrás, Rodrigo Viana Pereira disse:

A questão é fazer os menus, e, no de inclusão dizer se algum assento já foi ou não reservado

Então, para saber se foi ou não reservado, as reservas anteriores devem está salvas em algum lugar, correto? ou seja, ou vai utilizar um vetor ou vai utilizar arquivos... como a parte dos arquivos não será aborda por enquanto, utilize vetores.

 

Veja. Para usar arquivo, é só fazer algumas alterações... o funcionamento do programa é igual, só que em vez de usar variáveis da memória ram, vai utilizar arquivo do HD... em fim. Não se preocupe com isso. No momento adequado explicamos como fazer!! A parte que importa é da lógica do funcionamento de reservas..

 

 

6 minutos atrás, Rodrigo Viana Pereira disse:

Você tem algum e-mail para que eu possa te mostrar o trabalho completo? 

 

Pode enviar pelo fórum mesmo. Poderia colocar num arquivo zip, por exemplo, e anexar.

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou analisar e já já respondo...

adicionado 7 minutos depois

Veja que as variáveis do registro já foram definidas.


Por exemplo, já poderíamos ter como base do algoritmo algo assim:

program TRABALHO_02;
uses
  CRT;
type
  t_reservaPoltrona = record
    assento  :string[3];
    reserva  :integer;
    sobrenome:string[20];
  end;
  
  
BEGIN


END.

Ou seja, todo o programa deve se basear nesta estrutura...  vou revisar o pdf para ver se consigo entender como deverá ser a dinâmica do programa.

adicionado 15 minutos depois

Sobre:

32 minutos atrás, Simon Viegas disse:

    assento  :string[3];
    reserva  :integer;
    sobrenome:string[20];

 

Pelo que eu entendi:
No assento vai o código do acento, ex.: F09
No sobrenome vai o sobrenome do cliente, ex.: Silva

Mas na reserva, vai o quê?

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Reserva é um número qualquer que o usuário escolhe

adicionado 5 minutos depois

Fiz o menu principal e o menu de inclusão

Program TRABALHO_02 ;

Var

menu1, menu2, exclusao, salvo : integer;
poltrona : integer;
fileira: char;
s1, s2, cadeia: string[3];

Type  Reserva_Ingresso = record
                reserva : integer;
                sobrenome : string[20];
End;

Procedure incluir(menu1:integer);
    
    Begin
      Repeat
            write('Informe o número da reserva: ');
            readln(Reserva_Ingresso.reserva);
            write('Informe a fileira desejada ou 0 para terminar: ');
          readln(fileira);
          write('Informe o número de poltrona desejado: ');
          readln(poltrona);
      

           Case fileira of
           'A': num_fil:= 1;
             'B': num_fil:= 2; 
             'C': num_fil:= 3; 
             'D': num_fil:= 4; 
             'E': num_fil:= 5;
             'F': num_fil:= 6; 
             'G': num_fil:= 7;
             'H': num_fil:= 8; 
             'I': num_fil:= 9; 
             'J': num_fil:= 10; 
             'K': num_fil:= 11; 
             'L': num_fil:= 12; 
             'M': num_fil:= 13; 
             'N': num_fil:= 14; 
             '0': num_fil:= 15; 
            
            
                 cadeia:= concat(fileira-assento);
                writeln(cadeia); 
        
            write('Informe o sobrenome de quem vai receber a reserva: ');
            readln(Reserva_Ingresso.sobrenome);
        
        Until (fileira = 0);    
                
                writeln('Confira os dados da compra do seu ingresso: ',Reserva_Ingresso.reserva, cadeia, Reserva_Ingresso.sobrenome);
                
    End;
    
    
Begin
        
    Repeat    
        writeln('                    Menu Principal                    ');
        writeln('');
        writeln('Digite 1 para incluir ingresso: ');
        writeln('Digite 2 para alterar as informações referentes ao seu ingresso: ');
        writeln('Digite 3 para excluir seu ingresso: ');
        writeln('Digite 4 para listar o ingresso: ');
        writeln('Digite 5 para salvar e terminar: ');
        readln(menu);
  
            case menu of
            
                1: incluir;
            2: alterar;
            3: excluir;
            4: listar;
                5: salvar; 
              
                Else
                  If (menu<>1) and (menu<>2) and (menu<>3) and (menu<>4) and (menu<>5) then
                  writeln('Opção Inválida!');
    Until (menu=5);


End.

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 minutos atrás, Rodrigo Viana Pereira disse:

Reserva é um número qualquer que o usuário escolhe

 

Dê um exemplo de valores para essas 3 variáveis.

50 minutos atrás, Simon Viegas disse:

    assento  :string[3];
    reserva  :integer;
    sobrenome:string[20];

 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
14 minutos atrás, Rodrigo Viana Pereira disse:

Reserva é um número qualquer que o usuário escolhe

adicionado 5 minutos depois

Fiz o menu principal e o menu de inclusão

Spoiler


Program TRABALHO_02 ;

Var

menu1, menu2, exclusao, salvo : integer;
poltrona : integer;
fileira: char;
s1, s2, cadeia: string[3];

Type  Reserva_Ingresso = record
                reserva : integer;
                sobrenome : string[20];
End;

Procedure incluir(menu1:integer);
    
    Begin
      Repeat
            write('Informe o número da reserva: ');
            readln(Reserva_Ingresso.reserva);
            write('Informe a fileira desejada ou 0 para terminar: ');
          readln(fileira);
          write('Informe o número de poltrona desejado: ');
          readln(poltrona);
      

           Case fileira of
           'A': num_fil:= 1;
             'B': num_fil:= 2; 
             'C': num_fil:= 3; 
             'D': num_fil:= 4; 
             'E': num_fil:= 5;
             'F': num_fil:= 6; 
             'G': num_fil:= 7;
             'H': num_fil:= 8; 
             'I': num_fil:= 9; 
             'J': num_fil:= 10; 
             'K': num_fil:= 11; 
             'L': num_fil:= 12; 
             'M': num_fil:= 13; 
             'N': num_fil:= 14; 
             '0': num_fil:= 15; 
            
            
                 cadeia:= concat(fileira-assento);
                writeln(cadeia); 
        
            write('Informe o sobrenome de quem vai receber a reserva: ');
            readln(Reserva_Ingresso.sobrenome);
        
        Until (fileira = 0);    
                
                writeln('Confira os dados da compra do seu ingresso: ',Reserva_Ingresso.reserva, cadeia, Reserva_Ingresso.sobrenome);
                
    End;
    
    
Begin
        
    Repeat    
        writeln('                    Menu Principal                    ');
        writeln('');
        writeln('Digite 1 para incluir ingresso: ');
        writeln('Digite 2 para alterar as informações referentes ao seu ingresso: ');
        writeln('Digite 3 para excluir seu ingresso: ');
        writeln('Digite 4 para listar o ingresso: ');
        writeln('Digite 5 para salvar e terminar: ');
        readln(menu);
  
            case menu of
            
                1: incluir;
            2: alterar;
            3: excluir;
            4: listar;
                5: salvar; 
              
                Else
                  If (menu<>1) and (menu<>2) and (menu<>3) and (menu<>4) and (menu<>5) then
                  writeln('Opção Inválida!');
    Until (menu=5);


End.

 

 

Seu código não compila...

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 minutos atrás, Rodrigo Viana Pereira disse:

Exatamente.

 

Vou acabar entregando a estrutura, mas sem compilar.

Tentar mostrar a bendita "lógica de programação" rsrs

 

Não acho interessante. O código SEMPRE deve ficar compilável. A medida que vai implementando, vai corrigindo. É só ir apertando F9.

adicionado 1 minuto depois

Use esse código como base:
 

program TRABALHO_02;
uses
  CRT;
type
  t_reservaPoltrona = record
    assento  :string[3];
    reserva  :integer;
    sobrenome:string[20];
  end;

var
  arquivoReservas :array [1..20] of t_reservaPoltrona; //armazenar as reservas
  numRegistro     :integer; //números de reservas feitas
  opMenu          :char; //opção do menu escolhida

procedure incluir;
  begin
  //aqui colete os dados de uma nova reserva;
  //após insira essa reserva no vetor de reservas
  end;
  
procedure listar;
  begin
  //aqui coloque para listar todas as reservas já cadastradas
  end;


BEGIN
numRegistro:=0;
repeat
  ClrScr;
  writeln('        MENU        ');
  writeln;
  writeln('1. Incluir Ingresso ');
  writeln('2. Alterar Ingresso ');
  writeln('3. Excluir Ingresso ');
  writeln('4. Listar Ingresso  ');
  writeln('5. Salvar e Terminar');
  {readln(opMenu);}
  opMenu:=ReadKey;
  case opMenu of
    '1': incluir;
    {'2': alterar;}
    {'3': excluir;}
    '4': listar;
    '5':writeln('Tchau')
  else
    writeln('Opcao Invalida!');
  end; //fim case opMenu
  ReadKey;
until (opMenu='5');
END.

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

tá dando erro na concatenação da fileira com o assento

não sei se estou usando a estrutura correta

procedure incluir(opMenu:integer);
  Begin
      Repeat
            write('Informe o número da reserva: ');
            readln(Reserva_Ingresso.reserva);
            write('Informe a fileira desejada ou 0 para terminar: ');
          readln(fileira);
          write('Informe o número de poltrona desejado: ');
          readln(poltrona);
      

           Case fileira of
           'A': num_fil:= 1;
             'B': num_fil:= 2; 
             'C': num_fil:= 3; 
             'D': num_fil:= 4; 
             'E': num_fil:= 5;
             'F': num_fil:= 6; 
             'G': num_fil:= 7;
             'H': num_fil:= 8; 
             'I': num_fil:= 9; 
             'J': num_fil:= 10; 
             'K': num_fil:= 11; 
             'L': num_fil:= 12; 
             'M': num_fil:= 13; 
             'N': num_fil:= 14; 
             '0': num_fil:= 15; 
            
            
                 cadeia:= concat(fileira-assento);
                writeln(cadeia); 
        
            write('Informe o sobrenome de quem vai receber a reserva: ');
            readln(Reserva_Ingresso.sobrenome);
        
        Until (fileira = 0);    
                
                writeln('Confira os dados da compra do seu ingresso: ',Reserva_Ingresso.reserva, cadeia, Reserva_Ingresso.sobrenome);
                
    End;

 

 

ele diz que o := de cadeia := concat ...... não é válido

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
13 minutos atrás, Rodrigo Viana Pereira disse:

ele diz que o := de cadeia := concat ...... não é válido

 

Aqui deu:

=> Erro sintático na linha 30...
=> ":=" não esperado

Ele está dizendo que ocorreu um erro sintático (só não diz qual). Diz que esse ":=" não era esperado, ou seja, tem algo errado na estrutura geral...

 

Analisando, verás que, entre outras coisas, faltou pelo menos o end; do case.

Vou editar e posto, pera.
 

 

 

adicionado 3 minutos depois

Pronto. Ficou faltando os end; dos 2 case.

program TRABALHO_02 ;
var
  menu1, menu2, exclusao, salvo : integer;
  poltrona : integer;
  fileira: char;
  s1, s2, cadeia: string[3];
type
  reserva_Ingresso = record
    reserva : integer;
    sobrenome : string[20];
  end;

procedure incluir(opMenu:integer);
  begin
  repeat
    write('Informe o número da reserva: ');
    readln(Reserva_Ingresso.reserva);
    write('Informe a fileira desejada ou 0 para terminar: ');
    readln(fileira);
    write('Informe o número de poltrona desejado: ');
    readln(poltrona);
    case fileira of
      'A': num_fil:= 1;
      'B': num_fil:= 2; 
      'C': num_fil:= 3; 
      'D': num_fil:= 4; 
      'E': num_fil:= 5;
      'F': num_fil:= 6; 
      'G': num_fil:= 7;
      'H': num_fil:= 8; 
      'I': num_fil:= 9; 
      'J': num_fil:= 10; 
      'K': num_fil:= 11; 
      'L': num_fil:= 12; 
      'M': num_fil:= 13; 
      'N': num_fil:= 14; 
      '0': num_fil:= 15; 
    end; //fim case fileira   FALTOU ESSA LINHA
    cadeia:= concat(fileira-assento);
    writeln(cadeia); 
    write('Informe o sobrenome de quem vai receber a reserva: ');
    readln(Reserva_Ingresso.sobrenome);
  until (fileira = 0); 
  writeln('Confira os dados da compra do seu ingresso: ',Reserva_Ingresso.reserva, cadeia, Reserva_Ingresso.sobrenome);
  end;


begin
repeat    
  writeln('                    Menu Principal                    ');
  writeln('');
  writeln('Digite 1 para incluir ingresso: ');
  writeln('Digite 2 para alterar as informações referentes ao seu ingresso: ');
  writeln('Digite 3 para excluir seu ingresso: ');
  writeln('Digite 4 para listar o ingresso: ');
  writeln('Digite 5 para salvar e terminar: ');
  readln(menu);
    case menu of
      1: incluir;
      2: alterar;
      3: excluir;
      4: listar;
      5: salvar; 
    else
      If (menu<>1) and (menu<>2) and (menu<>3) and (menu<>4) and (menu<>5) then
      writeln('Opção Inválida!');
    end; //fim case menu FALTOU ESSA LINHA
until (menu=5);
end.

 

adicionado 12 minutos depois

Vai compilando e corrigindo...

 

Então, esse processo de ir compilando é feito a medida que vai implementando. O que aconteceu foi que você inseriu muitas coisas novas e não compilou.. ai foi acumulando.

 

Cada parte nova que é inserida, dá uma compilada... Nesse processo, o código SEMPRE deve está compilável. Isso é imprescindível!!!... o que ficará "pendente" é saber se a LÓGICA do código está de acordo com o que você quer... entende?

 

Além de ir compilando, tem momentos que é interessante testar.. se está fazendo um menu, testa para ver se está entrando no menu. Se está cadastrando algo, implementa algo para exibir esse cadastro... por ai vai...

 

Em relação ao código... ao compilar, verás que a variável num_fil não foi declarada... se já tivesse esse macete de ir compilando, já teria visto isso logo quando tava fazendo. Por ai vai... Corrige isso. Vai compilando e corrigindo.

 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

consegui acertar isso aí

 

já tá compilando o menu incluir.

 

Agora, quando eu digito 0 pra encerrar a inclusão, ele não volta ao menu inicial

e depois que eu incluo o primeiro ingresso, ele não lista os dados todos: reserva, assento e sobrenome

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
program TRABALHO_02;
uses
  CRT;
type
  t_reservaPoltrona = record
    assento  :string[3];
    reserva  :integer;
    sobrenome:string[20];
  end;

var
  ArquivoReservas :array [1..20] of t_reservaPoltrona; //armazenar as reservas
  NumRegistro     :integer; //números de reservas feitas
  opMenu          :char; //opção do menu escolhida
    fileira         :char;
    poltrona        :integer;
    num_fil         :integer;
    assento         :string[3]; 
    
procedure incluir(opMenu:integer);
  
  Begin
      Repeat
            write('Informe o número da reserva ou 0 para terminar: ');
            readln(t_reservaPoltrona.reserva);
            write('Informe a fileira desejada: ');
          readln(fileira);
          write('Informe o número de poltrona desejado: ');
          readln(poltrona);
      

           Case fileira of
           'A': num_fil:= 1;
             'B': num_fil:= 2; 
             'C': num_fil:= 3; 
             'D': num_fil:= 4; 
             'E': num_fil:= 5;
             'F': num_fil:= 6; 
             'G': num_fil:= 7;
             'H': num_fil:= 8; 
             'I': num_fil:= 9; 
             'J': num_fil:= 10; 
             'K': num_fil:= 11; 
             'L': num_fil:= 12; 
             'M': num_fil:= 13; 
             'N': num_fil:= 14; 
             '0': num_fil:= 15; 
          End;  
            
     assento:= concat(fileira,assento);
    writeln(assento); 
        
    write('Informe o sobrenome de quem vai receber a reserva: ');
    readln(t_reservaPoltrona.sobrenome);
    
        Until (t_reservaPoltrona.reserva = 0);    
                
    writeln('Confira os dados da compra do seu ingresso: ',t_reservaPoltrona.reserva, assento, t_reservaPoltrona.sobrenome);
                
    End;
  
  
procedure alterar(opMenu: integer);
  begin
  //aqui coloque para listar todas as reservas já cadastradas
  end;


Begin
numRegistro:=0;
Repeat
  ClrScr;
  writeln('        MENU        ');
  writeln;
  writeln('1. Incluir Ingresso ');
  writeln('2. Alterar Ingresso ');
  writeln('3. Excluir Ingresso ');
  writeln('4. Listar Ingresso  ');
  writeln('5. Salvar e Terminar');
  
    opMenu:=ReadKey;
  case opMenu of
    '1': incluir;
    '2': alterar;
    {'3': excluir;
    '4': listar;
    '5': salvar;}
  else
    writeln('Opcao Invalida!');
  end;
  ReadKey;
until (opMenu='5');
End.

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

No trecho:

  repeat
    write('Informe o número da reserva ou 0 para terminar: ');
    readln(t_reservaPoltrona.reserva);

Você está usando um TIPO como se fosse uma variável. Não era nem para compilar!!! (algum bug do PascalZim). Aí você precisa declarar uma variável do tipo t_reservaPoltrona e usar a variável. Ex.:

 

var
  ...
  novaReserva :t_reservaPoltrona;

e usar:

    write('Informe o número da reserva ou 0 para terminar: ');
    readln(novaReserva.reserva);

Deu para entender? é para usar uma variável. Ali usou um tipo.

 

Fazer isso:

 readln(t_reservaPoltrona.reserva);

Seria análogo a fazer isso:

 readln(integer);

 

 

adicionado 2 minutos depois

Segue essa correções implementadas:
 

program TRABALHO_02;
uses
  CRT;
type
  t_reservaPoltrona = record
    assento  :string[3];
    reserva  :integer;
    sobrenome:string[20];
  end;

var
  ArquivoReservas :array [1..20] of t_reservaPoltrona; //armazenar as reservas
  NumRegistro     :integer; //números de reservas feitas
  opMenu          :char; //opção do menu escolhida
  fileira         :char;
  poltrona        :integer;
  num_fil         :integer;
  assento         :string[3]; 
  novaReserva     :t_reservaPoltrona;

{procedure incluir(opMenu:integer);} //para que esse parâmetro?
procedure incluir;
  begin
  repeat
    write('Informe o número da reserva ou 0 para terminar: ');
    readln(novaReserva.reserva);
    write('Informe a fileira desejada: ');
    readln(fileira);
    write('Informe o número de poltrona desejado: ');
    readln(poltrona);
    case fileira of
      'A': num_fil:= 1;
      'B': num_fil:= 2; 
      'C': num_fil:= 3; 
      'D': num_fil:= 4; 
      'E': num_fil:= 5;
      'F': num_fil:= 6; 
      'G': num_fil:= 7;
      'H': num_fil:= 8; 
      'I': num_fil:= 9; 
      'J': num_fil:= 10; 
      'K': num_fil:= 11; 
      'L': num_fil:= 12; 
      'M': num_fil:= 13; 
      'N': num_fil:= 14; 
      '0': num_fil:= 15; 
    end;
    assento:= concat(fileira,assento);
    writeln(assento); 
    write('Informe o sobrenome de quem vai receber a reserva: ');
    readln(novaReserva.sobrenome);
  until (novaReserva.reserva = 0);
  writeln('Confira os dados da compra do seu ingresso: ',novaReserva.reserva, assento, novaReserva.sobrenome);
end;

{procedure alterar(opMenu: integer);} //para que esse parâmetro
procedure alterar();
  begin
  //aqui coloque para listar todas as reservas já cadastradas
  end;


begin
numRegistro:=0;
repeat
  ClrScr;
  writeln('        MENU        ');
  writeln;
  writeln('1. Incluir Ingresso ');
  writeln('2. Alterar Ingresso ');
  writeln('3. Excluir Ingresso ');
  writeln('4. Listar Ingresso  ');
  writeln('5. Salvar e Terminar');

  opMenu:=ReadKey;
  case opMenu of
    '1': incluir;
    '2': alterar;
    {'3': excluir;}
    {'4': listar;}
    {'5': salvar;}
  else
    writeln('Opcao Invalida!');
  end; //fim case opMenu
  ReadKey;
until (opMenu='5');
end.

Analise e dê continuidade.

adicionado 15 minutos depois

No incluir precisa fazer algo assim:

1 hora atrás, Simon Viegas disse:

procedure incluir;
  begin
  //aqui colete os dados de uma nova reserva;
  //após insira essa reserva no vetor de reservas
  end;

 

No caso:

- ler os dados do novaReserva;  (insira dados ideais. Não se preocupe agora com validações)

- atualize o total de registros:

numRegistro:=numRegistro+1; //numRegistro tá igual a 0, vai para 1

- insera a novaReserva no vetor.

arquivoReservas[numRegistro]:=novaReserva; //a reserva será armazenada na posição 1


Dessa forma, "autoincrementar" as posições e atualizando o vetor.

 

 

 

Aí, em vez de alterar, você vai implementar o procedimento listar, pois vai servi para verificar se foi cadastrado corretamente ou não.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Rodrigo Viana Pereira. Alguma novidade?

Creio que para o trabalho já tenha passado o prazo, correto? mas caso queira dar continuidade para assimilar um pouco mais o conteúdo e também poder entrar posteriormente à professora (mesmo que não valha ponto), estamos aqui!

 

No aguardo.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×