Spartan Posted April 11, 2013 at 08:11 AM Report #502671 Posted April 11, 2013 at 08:11 AM eu necessito de ajuda com o meu programa preciso de adicionar um for e o case. E tambem de uma maneira que faça repetir o programa sem ter que o escrever outra vez. Program Trabalho; //If/case/for/while/repeat var custo,op,op2:integer; var sim:string; Begin Writeln('---------------------AwesomeGamers---------------------'); Repeat Writeln('Escolha um dos jogos disponiveis'); Writeln('1 -> Battlefield4 Special Edition'); Writeln('2 -> Gta5 com todos os packs incluidos'); Writeln('3 -> WatchDogs Special Bundle Pack'); Writeln('4 -> Killzone 4'); Writeln('5 -> Assassins Creed IV Collectors Edition'); Writeln('6 -> Dead Island RipTide'); Writeln('7 -> Crysis 3'); Writeln('8 -> Tomb Raider'); Writeln('9 -> Infamous Second Son'); Writeln('10 -> Dead Space 3'); Readln(op); case op of 1:custo:=90; 2:custo:=120; 3:custo:=80; 4:custo:=69; 5:custo:=150; 6:custo:=70; 7:custo:=100; 8:custo:=79; 9:custo:=75; 10:custo:= 110; End; Until (op=1) or (op=2) or (op=3) or (op=4) or (op=5) or (op=6) or (op=7) or (op=8) or (op=9) or (op=10); Writeln(''); Writeln('Foi um boa escolha ',op,' O seu custo vai ser',custo); Begin Writeln('quer comprar mais algum jogo?'); Writeln(''); Writeln('Se quiser comprar outro jogo entao escreva-> sim'); Writeln(''); Writeln('Se nao quiser comprar outro jogo entao escreva-> nao'); Readln(sim); writeln(''); If(sim = 'sim') then Repeat Writeln('Escolha um dos jogos disponiveis'); Writeln('1 -> Battlefield4 Special Edition'); Writeln('2 -> Gta5 com todos os packs incluidos'); Writeln('3 -> WatchDogs Special Bundle Pack'); Writeln('4 -> Killzone 4'); Writeln('5 -> Assassins Creed IV Collectors Edition'); Writeln('6 -> Dead Island RipTide'); Writeln('7 -> Crysis 3'); Writeln('8 -> Tomb Raider'); Writeln('9 -> Infamous Second Son'); Writeln('10 -> Dead Space 3'); Readln(op); case op of 1:custo:=90; 2:custo:=120; 3:custo:=80; 4:custo:=69; 5:custo:=150; 6:custo:=70; 7:custo:=100; 8:custo:=79; 9:custo:=75; 10:custo:= 110; End; Writeln('Foi um boa escolha ',op,' O seu custo vai ser',custo); Until (op=1) or (op=2) or (op=3) or (op=4) or (op=5) or (op=6) or (op=7) or (op=8) or (op=9) or (op=10); End; Writeln('Qual vai ser o método de pagamento?'); Writeln('1 - MB - MULTIBANCO'); Writeln('2 - MASTERCARD/VISA'); Writeln('3 - PAYPAL'); Writeln('4 - DINHEIRO VIVO'); readln(op2); Case op2 of 1: Writeln('Optou por pagar por multibanco'); 2: Writeln('Optou por pagar por cartão de crédito'); 3: Writeln('Optou por pagar por Paypal'); 4: Writeln('Optou por pagar por dinheiro vivo'); End; End.
passarito Posted April 11, 2013 at 07:00 PM Report #502860 Posted April 11, 2013 at 07:00 PM Antes de te começar a ajudar diz-me uma coisa, já deste arrays, procedimentos e/ou funções? Isto servirá para saber até onde te posso ajudar! Entretanto é bom que indentes o teu código, como eu não diria melhor vou citar o Nunopicado Pode não parecer agora, mas é das coisas mais importantes que podes ter a programar. Se com um programa de 50 linhas ainda se passa mais ou menos sem ela, num programa com 50.000 linhas vais desejar que nem um caracter esteja fora do sitio. by NunopicadoQuanto ao CASE tu já lá tens dois, necessitas de mais? A linha seguinte: Writeln('Foi um boa escolha ',op,' O seu custo vai ser',custo); A variavel op vai retornar um número de 1 a 10 Trocaria a linha Until (op=1) or (op=2) or (op=3) or (op=4) or (op=5) or (op=6) or (op=7) or (op=8) or (op=9) or (op=10); por Until op in [1..10]; Testa todos os valores entre 1 e 10, assim se tiveres 100 opções sequenciais não tens de fazer 100 vezes (op=...) O teu programa apenas dá para ser repetido 2 vezes no máximo, portanto o meu conselho é usares um repeat..until O repeat será no inicio, o until no sitio onde tens a seguite linha: If(sim = 'sim') then tudo para baixo deixa de fazer sentido Trata disto e depois diz qq coisa!
pmg Posted April 11, 2013 at 07:07 PM Report #502861 Posted April 11, 2013 at 07:07 PM ... uma maneira que faça repetir o programa sem ter que o escrever outra vez. Converte o teu programa principal numa funcao. Faz outro programa principal que chama essa funcao varias vezes. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
passarito Posted April 11, 2013 at 07:14 PM Report #502862 Posted April 11, 2013 at 07:14 PM (edited) Converte o teu programa principal numa funcao. Faz outro programa principal que chama essa funcao varias vezes. Por isso é que lhe perguntei se já tinha dado procedimentos e funções. Edited April 11, 2013 at 07:15 PM by passarito
passarito Posted April 11, 2013 at 07:25 PM Report #502863 Posted April 11, 2013 at 07:25 PM É verdade, quanto à indentação, para te ajudar, tens este link aqui: https://wiki.portugal-a-programar.pt/dev_geral/pascal/indentacao/
Spartan Posted April 12, 2013 at 09:12 AM Author Report #502914 Posted April 12, 2013 at 09:12 AM (edited) Ainda nao dei arrays , isto é um programa basico que mais tarde irei converter numa função. E ainda nao dei as funções. Eu estou a usar o pascalzim nao da para usar Until op in [1..10]; Edited April 12, 2013 at 09:28 AM by Spartan
crazypt14 Posted April 12, 2013 at 09:37 AM Report #502917 Posted April 12, 2013 at 09:37 AM E ainda nao dei as funções. Eu estou a usar o pascalzim nao da para usar Until op in [1..10]; Como me disseram, isso é devido ao PascalZIM, usa o Free Pascal, foi o conselho que o @nunopicado e o @thoga31 me deram 😉 1 Report
passarito Posted April 12, 2013 at 09:37 AM Report #502918 Posted April 12, 2013 at 09:37 AM Sem Arrays não estou a ver qualquer aplicação para um ciclo FOR a não ser que te obriguem a executar uma má programação! Não te esqueças que se deixares o utilizador escolher mais do que 1 jogo há nuances a considerar.
nunopicado Posted April 13, 2013 at 02:55 PM Report #503088 Posted April 13, 2013 at 02:55 PM (edited) Program Trabalho; //If/case/for/while/repeat var custo,op,op2:integer; sim:string; Begin Writeln('---------------------AwesomeGamers---------------------'); Repeat Writeln('Escolha um dos jogos disponiveis'); Writeln('1 -> Battlefield4 Special Edition'); Writeln('2 -> Gta5 com todos os packs incluidos'); Writeln('3 -> WatchDogs Special Bundle Pack'); Writeln('4 -> Killzone 4'); Writeln('5 -> Assassins Creed IV Collectors Edition'); Writeln('6 -> Dead Island RipTide'); Writeln('7 -> Crysis 3'); Writeln('8 -> Tomb Raider'); Writeln('9 -> Infamous Second Son'); Writeln('10 -> Dead Space 3'); Readln(op); case op of 1:custo:=90; 2:custo:=120; 3:custo:=80; 4:custo:=69; 5:custo:=150; 6:custo:=70; 7:custo:=100; 8:custo:=79; 9:custo:=75; 10:custo:= 110; End; Until (op=1) or (op=2) or (op=3) or (op=4) or (op=5) or (op=6) or (op=7) or (op=8) or (op=9) or (op=10); // IN se for FPC, no PZim, se fores masoquista para o continuar a usar, podes por "Until (op>=1) and (op<=10); Writeln(''); // Basta Writeln; Writeln('Foi um boa escolha ',op,' O seu custo vai ser',custo); Begin // ???????????????? Writeln('quer comprar mais algum jogo?'); Writeln(''); Writeln('Se quiser comprar outro jogo entao escreva-> sim'); Writeln(''); Writeln('Se nao quiser comprar outro jogo entao escreva-> nao'); Readln(sim); writeln(''); If (sim='sim') // Melhor seria usar "If (UpperCase(sim)='SIM')" --> Assim ele ignoraria maiúsculas ou minúsculas then Repeat // ALERTA! CÓDIGO REPETIDO! ALERTA! CÓDIGO REPETIDO! ALERTA!.... Writeln('Escolha um dos jogos disponiveis'); Writeln('1 -> Battlefield4 Special Edition'); Writeln('2 -> Gta5 com todos os packs incluidos'); Writeln('3 -> WatchDogs Special Bundle Pack'); Writeln('4 -> Killzone 4'); Writeln('5 -> Assassins Creed IV Collectors Edition'); Writeln('6 -> Dead Island RipTide'); Writeln('7 -> Crysis 3'); Writeln('8 -> Tomb Raider'); Writeln('9 -> Infamous Second Son'); Writeln('10 -> Dead Space 3'); Readln(op); case op of 1:custo:=90; 2:custo:=120; 3:custo:=80; 4:custo:=69; 5:custo:=150; 6:custo:=70; 7:custo:=100; 8:custo:=79; 9:custo:=75; 10:custo:= 110; End; Writeln('Foi um boa escolha ',op,' O seu custo vai ser',custo); Until (op=1) or (op=2) or (op=3) or (op=4) or (op=5) or (op=6) or (op=7) or (op=8) or (op=9) or (op=10); End; Writeln('Qual vai ser o método de pagamento?'); Writeln('1 - MB - MULTIBANCO'); Writeln('2 - MASTERCARD/VISA'); Writeln('3 - PAYPAL'); Writeln('4 - DINHEIRO VIVO'); readln(op2); Case op2 of 1: Writeln('Optou por pagar por multibanco'); 2: Writeln('Optou por pagar por cartão de crédito'); 3: Writeln('Optou por pagar por Paypal'); 4: Writeln('Optou por pagar por dinheiro vivo'); End; End. Agora que já se percebe um pouquinho o que para aqui anda... A primeira coisa a mudar são aqueles or's todos... Mesmo sem usares a função IN, nada te impede de usar o >= e <=... Nem mesmo a nódoa que é o PZim te impede de usar isso. Deves meter "todo" o código dentro de um repeat, no fim do qual fará uma pergunta ao utilizador, se quer continuar a comprar. Se sim, volta à pergunta inicial. Se não quiser, avança para a parte do pagamento. A validação do input do utilizador não deve fazer repetir todo o menu. metes só o readln dentro de um segundo repeat, que analisa a resposta e repete só essa linha. Se quiseres, por uma questão de estética, podes usar os comandos GotoXY e CrlEol para que a pergunta seja feita sempre na mesma linha, sem avança o cursor a cada resposta errada. A validação da "continuação a comprar" deve ter presente as maiúsculas e minúsculas, como coloquei em cima, em comentário. Visto que a cada compra a variável custo deve ir acumulando o valor da compra, tens de ter em atenção duas coisas: - Deves inicializar as variáveis a 0 antes de entrar no ciclo repeat - No case, não podes por Custo:=90. Tens de usar Custo:=Custo+90, para ele ir incrementando à compra anterior. Podes se quiseres ir apresentando ao utilizador, ao inicio de cada compra, em quanto vai o valor a pagar. Quando o utilizador decide que não quer continuar a comprar, mostras o ecrã de pagamento (deves mostrar o total a pagar). Podes aqui usar um while para ir abatendo o pagamento (se deve 100, pode pagar 20 em multibanco, 30 em cheque e 50 em dinheiro. O while irá repetir o ecrã de pagamento enquanto o custo for > do que 0 Podes até fazer um "troco". No fim do while, se o custo for < que 0, entregas esse valor (sem o sinal negativo) como troco. Para meteres aqui um FOR, só mesmo rebuscando... Podes meter, antes do menu de pagamento, um for a "preencher uma barra de progresso" enquanto dá a mensagem "Processando a sua compra..." Tenta por aí, e se houver dúvidas, avisa... Edited April 13, 2013 at 02:58 PM by nunopicado "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
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