• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

]T0rr3nT[

[AJUDA] Como voltar ao inicio do programa

9 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não percebi :S

desculpa ser noob mas só comecei a 1 semana e meio... ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao sei se e grande ajuda mas...

ja tentaste usar uma label?  depois é só pores um if no fim

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

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