Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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






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

×