Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

]T0rr3nT[

[AJUDA] Como voltar ao inicio do programa

Mensagens Recomendadas

]T0rr3nT[    0
]T0rr3nT[

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 :hmm:

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  :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
M6    71
M6

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
M6    71
M6

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
]T0rr3nT[    0
]T0rr3nT[

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
M6    71
M6

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
]T0rr3nT[    0
]T0rr3nT[

obrigado! já acertei a coisa com o repeat/until :)

Cumps! se precisares de algo relacionado com design apita aí q eu percebo dessa área!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
sr._neves    0
sr._neves

Também podes usar o ciclo while ou o for.to.do para resolver o teu problema.

Mas como estás a iniciar o repeat é a maneira mais fácil de conseguires o que queres.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade