Ir para o conteúdo
Spartan

Onde e como utilizar FOR e CASE?

Mensagens Recomendadas

Spartan

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

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 Nunopicado

Quanto 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

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

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 por passarito

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Spartan

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 por Spartan

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
crazypt14

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

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
passarito

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

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

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 os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.