]T0rr3nT[ Posted November 9, 2009 at 07:23 PM Report Share #295309 Posted November 9, 2009 at 07:23 PM 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 More sharing options...
M6 Posted November 9, 2009 at 08:36 PM Report Share #295324 Posted November 9, 2009 at 08:36 PM É 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 More sharing options...
]T0rr3nT[ Posted November 9, 2009 at 09:11 PM Author Report Share #295331 Posted November 9, 2009 at 09:11 PM não percebi :S desculpa ser noob mas só comecei a 1 semana e meio... 😉 Link to comment Share on other sites More sharing options...
M6 Posted November 10, 2009 at 11:33 AM Report Share #295379 Posted November 10, 2009 at 11:33 AM 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 More sharing options...
]T0rr3nT[ Posted November 10, 2009 at 02:06 PM Author Report Share #295409 Posted November 10, 2009 at 02:06 PM 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 More sharing options...
M6 Posted November 10, 2009 at 04:08 PM Report Share #295437 Posted November 10, 2009 at 04:08 PM 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 More sharing options...
]T0rr3nT[ Posted November 22, 2009 at 08:37 PM Author Report Share #297224 Posted November 22, 2009 at 08:37 PM obrigado! já acertei a coisa com o repeat/until 🙂 Cumps! se precisares de algo relacionado com design apita aí q eu percebo dessa área! Link to comment Share on other sites More sharing options...
ManelJaquim Posted November 27, 2009 at 02:02 PM Report Share #297763 Posted November 27, 2009 at 02:02 PM nao sei se e grande ajuda mas... ja tentaste usar uma label? depois é só pores um if no fim Link to comment Share on other sites More sharing options...
sr._neves Posted November 27, 2009 at 07:59 PM Report Share #297830 Posted November 27, 2009 at 07:59 PM 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. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now