Spartan 0 Denunciar mensagem Publicado 11 de Abril de 2013 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. Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
passarito 58 Denunciar mensagem Publicado 11 de Abril de 2013 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! Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
pmg 96 Denunciar mensagem Publicado 11 de Abril de 2013 ... 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! Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
passarito 58 Denunciar mensagem Publicado 11 de Abril de 2013 (editado) 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. Editado 11 de Abril de 2013 por passarito Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
passarito 58 Denunciar mensagem Publicado 11 de Abril de 2013 É verdade, quanto à indentação, para te ajudar, tens este link aqui: http://wiki.portugal-a-programar.pt/dev_geral:pascal:indentacao Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
Spartan 0 Denunciar mensagem Publicado 12 de Abril de 2013 (editado) 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]; Editado 12 de Abril de 2013 por Spartan Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
crazypt14 1 Denunciar mensagem Publicado 12 de Abril de 2013 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 Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
passarito 58 Denunciar mensagem Publicado 12 de Abril de 2013 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. Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
nunopicado 1150 Denunciar mensagem Publicado 13 de Abril de 2013 (editado) 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... Editado 13 de Abril de 2013 por 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. Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites