Jump to content

[AJUDA] Como voltar ao inicio do programa


]T0rr3nT[
 Share

Recommended Posts

Boas!

ora bem, fiz um programa que supostamente mostra os codigos de cores de pascal... no fim de cada opção do menu pus umas operações que deveriam caso o user escrevesse a letra "s"ou"S" a ir para o inicio do programa e assim este começar de novo... O que se passa é que o programa não volta ao inicio quando escrevo s ou S, ao invés disso fecha!

não queria que o programa fechasse mas sim que voltasse ao inicio...  😉

aqui está o código (sem erros)... pedia que me esclarecessem um pouco sobre este assunto ?

program cores;

uses crt;

const black = 0;
const dblue = 1;
const dgreen = 2;
const dcyan = 3;
const dred = 4;
const purple = 5;
const brown = 6;
const lgrey = 7;
const dgrey = 8;
const lblue = 9;
const lgreen = 10;
const cyan = 11;
const lred = 12;
const pink = 13;
const yellow = 14;
const white = 15;
var opcao : integer;
var menu : char;

Procedure inicio;
BEGIN
   clrscr;
   writeln ('O que deseja fazer?');
   writeln ('-----------------------------------------------------------------');
   textcolor (7);
   writeln ('MENU:');
   writeln ('1 Cores');
   writeln ('2 Creditos');
   writeln ('3 Sair');
   writeln ('Escolha o n£mero da op‡Æo: ');
   read (opcao);
        if (opcao = 1) then
        BEGIN
        clrscr;
             textcolor (4);
             write ('LISTA DE CORES EM ');
             textcolor (14);
             writeln ('PASCAL!');
             textcolor (0);
             textbackground (7);
             writeln ('PRETO = 0');
             textcolor (1);
             textbackground (0);
             writeln ('AZUL ESCURO = 1');
             textcolor (2);
             writeln ('VERDE ESCURO = 2');
             textcolor (3);
             writeln ('TURQUESA ESCURO = 3');
             textcolor (4);
             writeln ('VERMELHO ESCURO = 4');
             textcolor (5);
             writeln ('ROXO = 5');
             textcolor (6);
             writeln ('CASTANHO = 6');
             textcolor (7);
             writeln ('CINZENTO CLARO = 7');
             textcolor (8);
             writeln ('CINZENTO ESCURO = 8');
             textcolor (9);
             writeln ('AZUL CLARO = 9');
             textcolor (10);
             writeln ('VERDE CLARO = 10');
             textcolor (11);
             writeln ('TURQUESA = 11');
             textcolor (12);
             writeln ('VERMELHO CLARO = 12');
             textcolor (13);
             writeln ('ROSA = 13');
             textcolor (14);
             writeln ('AMARELO = 14');
             textcolor (15);
             writeln ('BRANCO = 15');
             writeln (' ');
             Begin
             writeln ('Para voltar ao menu escreva "s"');
             readln (menu);
             case menu of
             'S','s' : inicio;
             END;
             readkey;
        END;
        if (opcao = 2) then
        BEGIN
            BEGIN
             clrscr;
             writeln ('Programa feito em free pascal por !');
             textcolor (8);
             writeln ('Para voltar ao menu escreva "s"');
             readln (menu);
             case menu of
             'S','s' : inicio;
            END;
        readkey;
        END;
        if (opcao = 3) then
        BEGIN
                exit;

        END;

END;
END;
END;

Begin
inicio;
End.

e desde já o meu obrigado  🙂

Link to comment
Share on other sites

É melhor fazeres um ciclo do que fazeres uma chamada recursiva ao procedimento como estás a fazer agora.

Ou seja, alteras a lógica para um "do until tecla = 'S'" e cada um dos submenus é que devem estar em procedimentos próprios.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

O que estás a fazer é a invocar o procedimento de desenho do menu várias vezes.

O que deves fazer é um ciclo pelo menu principal:

do

  desenhaMenu();

  if opção = '1' subMenuCores();

  if opção = '2' subMenuCreditos();

until opção = '3'

em que as funções desenhaMenu desenham o menu principal e as sub funções subMenuCores e subMenuCreditos() fazem algo idêntico: têm um ciclo que termina quando opção = 's' e lá dentro desenha o menu correspondente.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

ou seja, ponho o menu depois de

BEGIN

(...)

do

  desenhaMenu();

      write menu

      write blabla

            if opcao = '1' subMenuCores();

                  Begin

                  clrscr;

                  preto = 0

                  (...)

                  End;

            if opcao = '2' subMenuCreds();

                  Begin

                  write creditos aqui

                  End;

      until opcao = '3'

End.

Dúvidas:

1. o que aconteceria no '3' se eu carregasse nele no menu? e no submenu cores?

2. o codigo acima (estrutura) está "bem feito"? ou aquilo deve-se por em outro sitio?

3. ha problema em meter o begin e o end; ? ou afecta o código?

ta um pouco confuso mas a questão geral é q nao percebi bem :S

anyway... obrigado por me estares a ajudar

Link to comment
Share on other sites

Respostas:

1. No menu termina a aplicação. No submenu sairá do procedimento e voltará a correr o ciclo do menu principal.

2. Não totalmente. O código que tens entre o Begin/End das opções deves passá-lo para os procedimentos de subMenus.

3. Creio que não, mas estou a responder de cabeça.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.