Ir ao conteúdo
  • Cadastre-se
Marcia Santos

Números repetidos

Recommended Posts

Galera preciso de ajuda! Preciso fazer um programa em Pascal pra facul. Eu já fiz ele e está rodando certinho, porém preciso fazer uma mensagem de erro. Tem um vetor de dimensão 5 onde a pessoa vai digitar os valores sorteados numa loto. Como faço um comando pra não deixar a pessoa digitar um numero repetido? Se caso ela digite aparece uma mensagem de erro solicitando que ela mude o valor?

Se alguem ai puder me ajudar eu agradeço desde já!

Editado por Marcia Santos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera preciso de ajuda! Preciso fazer um programa em Pascal pra facul. Eu já fiz ele e está rodando certinho, porém preciso fazer uma mensagem de erro. Tem um vetor de dimensão 5 onde a pessoa vai digitar os valores sorteados numa loto. Como faço um comando pra não deixar a pessoa digitar um numero repetido? Se caso ela digite aparece uma mensagem de erro solicitando que ela mude o valor?

Se alguem ai puder me ajudar eu agradeço desde já!

Olá,

Se você fosse fazer essa "tarefa" no papel como você faria essa verificação?

A lógica é basicamente a mesma, a programação vem para "automatizar' a tarefa.

Veja, basta que a cada leitura você comparare o valor lido com os valores já armazenados.

Repita a leitura de número até que o valor não seja igual algum valor já lido. Se um valor for igual ao já lido exiba uma mensagem de erro.

Tente fazer algo e se tiver dúvidas, de preferência, post o trecho do código também...

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu já tentei fazer de várias formas, usando o while e o for, mas não estou fazendo certo, pois ao digitar um numero repetido ele mostra a mensagem de erro, mas ao digitar o novo valor ele não le esse novo valor, mas sim o que ja havia sido digitado, então ele dá a mensagem de erro de novo e assim sucessivamente. Hoje, fui numa monitoria e o codigo que o monitor fez foi o seguinte a 1ª parte eu ja havia feito e funciona, a que ele fez é a partir do "While aux=0 do;"):

Writeln ('Entre com os 5 numeros sorteados na loto (respeitando o intervalo [00,99]):');
For i:=1 to 5 do
Begin
Readln (loto[i]);
While (loto[i]<0) or (loto[i]>99) do
Begin
Writeln ('Favor digitar o numero fora do intervalo [00,99] e o resto da sequencia:');
Readln (loto[i]);
End;


While aux=0 do
Begin
For b:=1 to i-1 do
Begin
If loto[i]=loto[b] then
Begin
aux:=0;
Writeln ('Mude o numero repetido');
End;

If(loto[i]<>loto[b]) then
aux:=1;
End;
End;
Readln(loto[i]);}
End;

usou-se dois "IF" porque não estava aceitando o "ELSE" + desse jeito também não deu certo. Na hora de executar o programa você digita um unico valor e ele trava!

Editado por Marcia Santos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu já tentei fazer de várias formas, usando o while e o for, mas não estou fazendo certo, pois ao digitar um numero repetido ele mostra a mensagem de erro, mas ao digitar o novo valor ele não le esse novo valor, mas sim o que ja havia sido digitado, então ele dá a mensagem de erro de novo e assim sucessivamente. Hoje, fui numa monitoria e o codigo que o monitor fez foi o seguinte a 1ª parte eu ja havia feito e funciona, a que ele fez é a partir do "While aux=0 do;"):


For i:=1 to 5 do
Begin
Readln (loto[i]);
While (loto[i]<0) or (loto[i]>99) do
Begin
Writeln ('Favor digitar o numero fora do intervalo [00,99] e o resto da sequencia:');
Readln (loto[i]);
End;


While aux=0 do
Begin
For b:=1 to i-1 do
Begin
If loto[i]=loto[b] then
Begin
aux:=0;
Writeln ('Mude o numero repetido');
End;

If(loto[i]<>loto[b]) then
aux:=1;
End;
End;
Readln(loto[i]);}
End;
Writeln ('Entre com os 5 numeros sorteados na loto (respeitando o intervalo [00,99]):');

usou-se dois "IF" porque não estava aceitando o "ELSE" + desse jeito também não deu certo. Na hora de executar o programa você digita um unico valor e ele trava!

Olá,

Eu reendentei o código e fiz alguns comentários:


loto :array[1..5] of byte; {armazena os valores sorteados}
i,j :byte; {usados no for}
aux :byte; {usado como "flag" (se repetiu um numero)}

BEGIN
Writeln ('Entre com os 5 numeros sorteados na loto (respeitando o intervalo [00,99]):');
{ler os 5 valores sorteados}
For i:=1 to 5 do
Begin
{ler o proximo valor}
Readln (loto[i]);
{verifica se o numero digitado esta entre 0 e 99}
While (loto[i]<0) or (loto[i]>99) do
{* enquanto estiver fora da faixa leia outro valor *}
Begin
Writeln ('Favor digitar o numero fora do intervalo [00,99] e o resto da sequencia:');
Readln (loto[i]);
End;
{Verifica se o numero é repetido}
(* precisa fazer alguns ajustes - by Simon*)
While aux=0 do
Begin
For j:=1 to i-1 do
Begin
If loto[i]=loto[j] then
Begin
aux:=0;
Writeln ('Mude o numero repetido');
End
(* aqui deve usar o Else já que so pode ser uma opcao ou outra (e nunca as duas) *)
Else If(loto[i]<>loto[j]) then
aux:=1;
End;
End;
Readln(loto[i]);
End;
(**)
END.
VAR

A sua lógica está no caminho certo, mas é preciso fazer alguns ajustes, sobretudo na parte de "Verifica se o numero é repetido". Existem pequenos erros de lógicas, mas que um implica em outro, ou seja, ao arrumar uma coisa, mexe na outra...

Mas o caminho é mais ou menos este.

A base que usaira seria mais ou menos esta:


Para 1 até 5 faça
ler numero novo
marcar numero como INCOMPATIVEL (só para entrar no While)
[B]enquanto numero INCOMPATIVEL[/B]
enquanto numero fora da faixa de 0 a 99
ler novamente o numero
verifica se o número é repetido (sim: repetido=true, nao: repetido=false...)
if numero for repetido
marcar como numero INCOMPATIVEL
else
marcar numero como COMPATIVEL

Para marcar como compatível/incompatível ou repetido/inédito você pode ser "flags", como "aux" (1/0) ou "booleans" (true/flase).

Lembre-se, caso o número seja repetido deverá ser feita outra verificação se o número está na faixa e se também não é repetido. Acho que está estrutura faz isso.

Peço que edite seu post anterior e coloque o seu código entre as tags "CODE" (símbolo #) para organizar o post.

Fico no aguardo

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

É pra seguir esse segundo modelo q você digitou? Esse numero novo seria o meu "loto" ? Numero é o mesmo que o numero novo? Na parte de verificar se o numero é repetido é pra usar a mesma estrutura que estava antes? (se for ainda está dando o mesmo erro - digita um numero depois trava e não faz + nada). Desculpa, + eu estou tão preocupada que eu não estou conseguindo fazer e preciso entregar amanhã que eu não estou conseguindo pensar e entender direito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É pra seguir esse segundo modelo q você digitou? Esse numero novo seria o meu "loto" ? Numero é o mesmo que o numero novo? Na parte de verificar se o numero é repetido é pra usar a mesma estrutura que estava antes? (se for ainda está dando o mesmo erro - digita um numero depois trava e não faz + nada). Desculpa, + eu estou tão preocupada que eu não estou conseguindo fazer e preciso entregar amanhã que eu não estou conseguindo pensar e entender direito.

Me add no msn que te ajudo!!!

SimonViegas@gmail.com

T+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×