Ir ao conteúdo
  • Cadastre-se

Ajuda com retorno de menu/ pascal


Posts recomendados

Bom dia pessoal, estou com um problema em um projeto da facul, preciso fazer que o programa apresente os seguintes menu com a opção para retornar para o anterior e menu principal.
O problema é o seguinte, ao digitar a opção 1( OP1) ele avança normal, ao digitar a opção 'C' ( OP2) ele retorna ao menu principal, tudo ok, depois avançando para o menu seguinte digitando ' A' (OP2) , tudo funciona normalmente, porém depois que ele retorna ao menu anterior digitando 3 (OP3) e tentando retorna logo em seguida ao menu principal, ele não volta, ou seja ele não retorna ao menu principal apos ter passado pelo 2º submenu.
se puderem me ajudar agradeço muito.
 

var
varop1,op3:integer;                                                               {declaração de variaveis}CM,METROS,LITROS,MILI:real;op2:CHAR;LOOP1:string;  Begin  REPEAT//REPEAT DO SUB MENU PARA O MENU PRINCIPAL    CLRSCR;    gotoxy(22,1);write ('--------------------------------------');                      gotoxy(22,2);write ('|            Conversor               |');    gotoxy(22,3);write ('|                                    |');    gotoxy(22,4);write ('|                                    |');    gotoxy(22,5);write ('|      1-Conversor de Medidas        |');    gotoxy(22,6);write ('|      2-Conversor de Moedas         |');    gotoxy(22,7);write ('|      3-Conversor de Peso           |');    gotoxy(22,8);write ('|      4-Sair do Programa            |');    gotoxy(22,9);write ('|                                    |');    gotoxy(22,10);write('|      Digite a Opção desejada:      |');    gotoxy(22,11);write('--------------------------------------');    gotoxy(53,10); readln(OP1);         CASE OP1 OF    1:BEGIN        REPEAT//REPEAT SUBMENU 2 PARA SUBMENU 1        CLRSCR;        gotoxy(22,1);write ('--------------------------------------------------');                          gotoxy(22,2);write ('|         CONVERSOR DE MEDIDAS                   |');        gotoxy(22,3);write ('|                                                |');        gotoxy(22,4);write ('|     A- MÉTRICAS                                |');        gotoxy(22,5);write ('|     B- VOLUMÉTRICAS                            |');              gotoxy(22,6);write ('|     C- VOLTAR AO MENU PRINCIPAL                |');        gotoxy(22,7);write ('|                                                |');         gotoxy(22,8);write ('|        Digite a Opção desejada:                |');                                       gotoxy(22,9);write ('--------------------------------------------------');              gotoxy(55,8);readln(op2);        UNTIL OP3<>3  //REPEAT DO SUB MENU        END;//END OP1 1     4:BEGIN       GOTOXY(35,20);WRITELN (' BYEE');       EXIT;     END;         END;//END CASE OP1  UNTIL OP1=4  //REPEAT DO MENU INICIALEnd.
Link para o comentário
Compartilhar em outros sites

@Valdemir Silva_708599

Coloque o menu dentro de funções. E dentro do case, ao invés de escrever todo o submenu, chame a função referente a ele. Mesmo caso para o menu principal.

Poderia me explicar melhor, como assim dentro de funções, procedures ?

então o que foi proposto era ser feito apenas com as funcões iniciantes, case/ if, repeat, while.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

Minhas sugestões:

1) Não recomendo o uso do comando exit para esse contexto, pois ele meio que burla a estruturação do código! Remova e ajuste o código. (o item abaixo ajuda a resolver isso)

 

2) Deixe apenas o "Menu Principal" gerenciar a saída do programa, ou seja, se escolher 4. Poderá até usar o "Case 4", mas apenas para mostrar a mensagem (sem esse exit), e deixa o programa seguir e sair ao chegar no until. No restante das opções, após o que for feito, deverá voltar para o Menu Principal. (sempre após executar, volta pro menu principal e lá o usuário poderá escolher fazer outra coisa ou sair)

Resumidamente, o ajuste seria:

UNTIL OP1=4;  //REPEAT DO MENU INICIAL

...mais a pequenas correções para funcionar assim.

PS:

3) Tente se atentar mais um pouco a identação... dá para dar uma arrumadinha a mais ai... tem coisa fora do lugar. (identação é importante para o programador e também pode ser critério de avaliação)

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

Boa tarde e obrigado pelas respostas, realmente me atentei a estes pontos retirando o exit e fazendo com que apos o processamento retornasse ao menu principal, ficou melhor pois aparenta não ter erros, da outra forma ele estava com conflito nas estruturas de repetição.

Agora sobre identação, sim é um dos critérios de avaliação, porém como estou no primeiro período e estou iniciando o contato com o mundo da programação fico meio perdido nesse quesito, estou a procura de algum código pronto com a identação para seguir de exemplo, obrigado pelas respostas.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá
 

Boa tarde e obrigado pelas respostas, realmente me atentei a estes pontos retirando o exit e fazendo com que apos o processamento retornasse ao menu principal, ficou melhor pois aparenta não ter erros, da outra forma ele estava com conflito nas estruturas de repetição.


Daria também para deixar as subcategorias gerenciar a saída, apenas acho que deixando pro menu principal fica mais simples e centralizado...


 

Agora sobre identação, sim é um dos critérios de avaliação, porém como estou no primeiro período e estou iniciando o contato com o mundo da programação fico meio perdido nesse quesito, estou a procura de algum código pronto com a identação para seguir de exemplo, obrigado pelas respostas.


Em relação a identação existem padrões diferentes, mas basicamente seria "subir um degrau" para o que está "dentro de estrutura"...

ex.:

obs.: deixei comentários com [simon.Viegas] para identificar o que foi feito por mim!

 

var  op1, op3:integer;                                                               {declaração de variaveis}  CM, METROS , LITROS, MILI:real;  op2 :CHAR;  LOOP1:string; BEGINREPEAT//REPEAT DO SUB MENU PARA O MENU PRINCIPAL  //está dentro do Begin, mas eu particularmente não idento com Begin (mas poderia) [Simon.Viegas]  //esses comandos estão "dentro" do repeat, logo fica um degrau a direita em relação ao "pai" (repeat/until)  [Simon.Viegas]  ClrClr;  GotoXY(22, 1); write('--------------------------------------');                    GotoXY(22, 2); write('|            Conversor               |');  GotoXY(22, 3); write('|                                    |');  GotoXY(22, 4); write('|                                    |');  GotoXY(22, 5); write('|      1-Conversor de Medidas        |');  GotoXY(22, 6); write('|      2-Conversor de Moedas         |');  GotoXY(22, 7); write('|      3-Conversor de Peso           |');  GotoXY(22, 8); write('|      4-Sair do Programa            |');  GotoXY(22, 9); write('|                                    |');  GotoXY(22,10); write('|      Digite a Opção desejada:      |');  GotoXY(22,11); write('--------------------------------------');  GotoXY(53,10); readln(OP1);  CASE OP1 OF    1:BEGIN //identado em relação ao CASE [Simon.Viegas]      REPEAT//REPEAT SUBMENU 2 PARA SUBMENU 1 //veja que aqui também deveria ser identado, mas não não idento [Simon.Viegas]        CLRSCR; //identa pois está dentro do Repeat  [Simon.Viegas]        GotoXY(22,1); write('--------------------------------------------------');                          GotoXY(22,2); write('|         CONVERSOR DE MEDIDAS                   |');        GotoXY(22,3); write('|                                                |');        GotoXY(22,4); write('|     A- MÉTRICAS                                |');        GotoXY(22,5); write('|     B- VOLUMÉTRICAS                            |');              GotoXY(22,6); write('|     C- VOLTAR AO MENU PRINCIPAL                |');        GotoXY(22,7); write('|                                                |');         GotoXY(22,8); write('|        Digite a Opção desejada:                |');                                       GotoXY(22,9); write('--------------------------------------------------');              GotoXY(55,8);readln(op2);      UNTIL OP3<>3; //REPEAT DO SUB MENU       END;//END OP1 1     4:BEGIN //fica na mesma direção do "1". Está identado em relação ao CASE      GotoXY(35,20); write(' BYEE'); //aqui está dentro do begin, deveria identar! (como citado: eu não faço isso) [Simon.Viegas]      EXIT;      END;    END;//END CASE OP1  //eu deixo o END do Case na mesma direção do opções (1, 4). [Simon.Viegas]UNTIL OP1=4  //REPEAT DO MENU INICIAL  //fica alinhado com o repeat correspondenteEND.

No aguardo.

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