Ir ao conteúdo
  • Cadastre-se

Case..of..end; AJUDA!!!


eduardokazuo

Posts recomendados

Eae pessoal, sou novo por aqui, e estou cursando Logica de Programação.

Hoje tive um exercicio que não consegui resolver nem a paulada...

Que e criar um algoritmo que o usuario digite um numero e ele te mostra se o numero e par ou não, até ai tudo bem... Mas ele me pede pra fazer utilizando a função "Case", ai que entra a dor de cabeça.. :wacko:

Eu n faço ideia de como realizar um teste utilizando o case! :confused:

No if ficaria: If(num mod 2 = 0) Then...

Mas no case complica..

Tentei da seguinte forma: Case (num mod 2) = 0 Of...

1..1000:...

Mas nao deu.

Peço ajuda de vocês!

Vou postar até onde fui:

program numero_par;

var num, teste: integer;

begin
Writeln('Digite um numero: ');
Readln(num);

case num of

1..1000: Writeln('O numero digitado e um numero par!');
Else
Writeln('O numero digitado nao e um numero par!');
end;
Readln;


end.

Deem sugestoes!

Obrigado!!! :lol:

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Eae pessoal, sou novo por aqui, e estou cursando Logica de Programação.

Hoje tive um exercicio que não consegui resolver nem a paulada...

Que e criar um algoritmo que o usuario digite um numero e ele te mostra se o numero e par ou não, até ai tudo bem... Mas ele me pede pra fazer utilizando a função "Case", ai que entra a dor de cabeça.. :wacko:

Eu n faço ideia de como realizar um teste utilizando o case! :confused:

No if ficaria: If(num mod 2 = 0) Then...

Mas no case complica..

Tentei da seguinte forma: Case (num mod 2) = 0 Of...

1..1000:...

Mas nao deu.

Peço ajuda de vocês!

Vou postar até onde fui:



var num, teste: integer;

begin
Writeln('Digite um numero: ');
Readln(num);

case num of

1..1000: Writeln('O numero digitado e um numero par!');
Else
Writeln('O numero digitado nao e um numero par!');
end;
Readln;


end.
program numero_par;

Deem sugestoes!

Obrigado!!! :lol:

Olá,

Não vou te dar a resposta, mas posso te passar 2 dicas:

Não tem como delimitar as possibilidade usando de X..Y, por um simples motivo: os números não são sequencias, mas sim dependem de uma fórmula.

E... perceba a pequena diferença entre o if e o case:

O if só recebe uma VARIÁVEL BOOLEANA na sua assinatura, ou seja, que retorna true ou false. (a expressão que se coloca no if só é uma forma para que se obtenha true ou false, e que no caso, obviamente, depende de outras variáveis - se não tiver variável, a resposta sempre será a mesma, logo não precisando de um if.)

O case recebe uma VARIÁVEL DE TIPOS DIVERSOS: ou tipo inteira, ou tipo caractere, ou tipo booleano também (acho que só :unsure:).

No caso, ((num mod 2) = 0) retorna que tipo de valor? (se for usar a expressão, terá que ser usado os possíveis tipos para possíveis casos.)

PS: Você também pode usar somente (num mod 2)...

PS2: Acho que já respondi né?? rs

No aguardo

Abraços

Link para o comentário
Compartilhar em outros sites

Consegui resolver...

Mas não entendi bolhufas do que fiz...

Consegui do nada, cliquei em compile e foi...

Code:

program numero_par;

var num: integer;

begin
Writeln('Digite um numero: ');
Readln(num);

case num mod 2 of

1..1000: Writeln('O numero digitado nao e um numero par!');
Else
Writeln('O numero digitado e um numero par!');
end;
Readln;


end.

Tipo foi assim eu tinha colocado:

program numero_par;

var num: integer;

begin
Writeln('Digite um numero: ');
Readln(num);

case (num mod 2=0) of

1..1000: Writeln('O numero digitado e um numero par!');
Else
Writeln('O numero digitado nao e um numero par!');
end;
Readln;

end.

Que na logica seria:

Caso numero dividido por 2 tenha quociente 0 de

1 ate 1000: escreva('O numero e par');

Senao

Escreva('o numero nao e par');

Mas ai deu um erro e tive que excluir "o = 0", então compilo..

Mas no lugar de falar que era um numeor par ele falava que nao era, e quando nao era um numero par ele falava que era..

então troquei os "Writeln" de lugar..

então isso fico bem esquisito pra mim, se alguem tiver uma analise do programa pra resumir pra mim... Obrigado!

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá,

eduardokazuo, basta você entender como funciona o case.

Como havia comentado: ((num mod 2) = 0) retornará quais possíveis valores?

Vamos analisar:

Veja, o mod é um operador que calcula o resto. Qualquer número inteiro positivo divido por 2 só terá dois possíveis restos: ou 0, se for uma divisão exata; ou 1 se não for exata. Daí justamente o motivo de usar o mod para saber se é par ou ímpar!!! Todo número par é divisível por dois, logo o resto é 0.

Se for 0... 0 = 0? é logo retorna true.

Se for 1... 1 = 0? NÃO, logo retorna false.

Ex.:

num igual 10;

Na fórmula ((num mod 2) = 0)

((num mod 2) = 0) => ((10 mod 2) = 0) => ((0) = 0) => true

Com números ímpares é a mesma lógica...

***

O case é uma estrutura de seleção, como o if. O detalhe dele é que pode definir vários "casos" (daí vem o case).

Ai no caso porque o seu programa está dando certo??? Simples, pois quando o número é ímpar o resto dá 1, e 1 está na faixa de 1..1000. :lol:

Quando é par, o resto dá 0, 0 não está na faixa de 1..1000, como não tem outra opção ele vai por else...

Corrigindo poderia ficar assim:

[color=#0000ff]PROGRAM[/color] numero_par[color=#000000];[/color]
[color=#0000ff]var[/color]
num [color=#000000]:[/color][color=#0000ff]integer[/color][color=#000000];[/color]

[color=#0000ff]BEGIN[/color]
[color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'Digite um numero: '[/color][color=#000000]);[/color]
[color=#000000]readln[/color][color=#000000]([/color]num[color=#000000]);[/color]
[color=#0000ff]case[/color] [color=#000000]([/color]num [color=#0000ff]mod[/color] [color=#000000]2[/color][color=#000000])[/color] [color=#0000ff]of[/color]
[color=#000000]1[/color] [color=#000000]:[/color][color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'O numero digitado é IMPAR!'[/color][color=#000000]);[/color]
[color=#2b91af]else[/color]
[color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'O numero digitado é PAR!'[/color][color=#000000]);[/color]
[color=#0000ff]end[/color][color=#000000];[/color] [color=#008000]{fim case}[/color]
readln[color=#000000];[/color]
[color=#0000ff]END[/color][color=#000000].[/color]

ou se preferi

[color=#0000ff]PROGRAM[/color] numero_par[color=#000000];[/color]
[color=#0000ff]var[/color]
num [color=#000000]:[/color][color=#0000ff]integer[/color][color=#000000];[/color]

[color=#0000ff]BEGIN[/color]
[color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'Digite um numero: '[/color][color=#000000]);[/color]
[color=#000000]readln[/color][color=#000000]([/color]num[color=#000000]);[/color]
[color=#0000ff]case[/color] [color=#000000]([/color]num [color=#0000ff]mod[/color] [color=#000000]2[/color][color=#000000])[/color] [color=#0000ff]of[/color]
[color=#000000]1[/color] [color=#000000]:[/color][color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'O numero digitado é IMPAR!'[/color][color=#000000]);[/color]
[color=#000000]0[/color] [color=#000000]:[/color][color=#000000]writeln[/color][color=#000000]([/color][color=#a31515]'O numero digitado é PAR!'[/color][color=#000000]);[/color]
[color=#0000ff]end[/color][color=#000000];[/color] [color=#008000]{fim case}[/color]
readln[color=#000000];[/color]
[color=#0000ff]END[/color][color=#000000].[/color]

***

Tente fazer agora usando ((num mod 2) = 0)...

No aguardo

Abraços

Link para o comentário
Compartilhar em outros sites

AHHHHHHHHHHHHHHHH, agora entendiiii!!

Nossa cara, esclareceu bastante pra mim!

Antes eu pensava que o case funcionava da seguinte maneira:

Caso(se caso o numero digitado divido por 2 sobrar 0) (num mod 2) De

1 ate 1000(Aqui que eu nao entendia! Aqui eu pensava que era assim: Se o numero digitado de 1 a 1000 dividido por 2 sobrar 0 então mostrar mensagem): escreva('Numero par.');

Senão

escreva('numero nao e par');

end;

Agora entendi!

Caso (num mod 2) Of

resultado verdadeiro, que no caso e 0: escreva('Numero par');

Senao

resultado falso, que no caso e diferente de 0: escreva('Numero nao par');

fim;

Muito obrigado amigo!

Ahh e vou contar o que aconteceu..

Eu ja tinha terminado os exercicios de 5 aulas pra frente da minha pra ja adianta o trabalho..

Dai desliguei o PC e fui dormir, no dia seguinte fui liga.. e nada. So uma tela preta com o cursor piscando e n sai de la nem a pau.

Agora tive que volta pro meu HD antigo, e perdi todo meu trabalho que tava no outro HD..

Ja tentei de tudo no outro HD mas n vai de jeito nenhum. =/

Agora e n perder as esperanças e programas umas 5000 linhas de novo.. X.x

Obrigado e Abraço!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!