Jump to content
Sign in to follow this  
Fire

Euromilhões - dúvida em números repetidos

Recommended Posts

Fire

Boa Tarde, estou Criando um programa de euromilhões para que o Utilizador indique a chave do euromilhoes e Compare com a Chave dada pelo random e diga se é Vencedor ou não mas Meu Problema está no ordenar a Chave dada pelo random e não permitir Sair valores repetidos.

Agradecia vossa Ajuda

program Euromilhao;
uses crt;
var E,i:integer;
    Num:Array[0..5] of integer;
    Est:Array[0..2] of integer;
    CNum:Array[0..5] of integer;
    CEst:Array[0..2] of integer;

begin
 For I:=1 to 5 do
  Begin
   Writeln('Insira os Seus Numeros');
   Readln(CNum);
  end;
 For i:=1 to 2 do
  Begin
   Writeln('Insira as Estrelas');
   Readln(CEst);
  End;
Randomize;
  For i:=1 to 5 do
    Begin
       Num:=random(49)+1
     end;
  Writeln('Numeros :', ' ', Num[1],' ',Num[2],' ',Num[3],' ',Num[4],' ',Num[5]);
 For E:=1 to 2 do
   Begin
    Repeat
      Est[E]:=random(11)+1;
       Until (Est[1]<>Est[2]);
    end;
   Writeln('Estrelas :', ' ',Est[1],' ', Est[2]);
   Writeln(' ');
 if (CNum=Num) or (CEst=Est) then
  Writeln('Voc',char(136),' Ganhou')
 Else
  Writeln('Voc',char(136),' Perdeu');
Readln();
end.

 

Edited by nunopicado
Syntax highlight

Hi Im fire

Share this post


Link to post
Share on other sites
nunopicado

Para que não saiam valores repetidos, deves, de cada vez que geras um número, ir verificar se esse é igual a algum dos que já exista. Se já algum igual existir, ele volta a gerar.
Algo tipo isto:

 

  for i := 1 to 5 do
    repeat 
      Num[i] := Random(49) + 1;
      Duplicado := False;      
      for j := 1 to i - 1 do
        begin
          if Num[i] = Num[j] 
            then Duplicado := True;
        end;
    until not Duplicado;     


Dependendo do teu nível de conhecimento, esse código deve ser convertido para uma função, para que o possas reutilizar para as estrelas (ainda que tenhas um método estabelecido para que isso não aconteça com elas).

 

Outras considerações:

  • Tendo em conta que estás a usar os arrays todos a partir da posição 1, porque os declaraste como começando em 0?
  • Writeln('Numeros :', ' ', Num[1],' ',Num[2],' ',Num[3],' ',Num[4],' ',Num[5]);
    Esta linha funciona, sem dúvida... Mas imagina que em vez de 5 posições, o array tinha 1000.
    Aqui um ciclo que percorra as posições de 1 a 5 (ou 1 a 1000, se fosse o caso), seria a melhor opção.

 


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

Share this post


Link to post
Share on other sites
Fire

Obrigado mas o código que puseste não funcionou, diz mismatch error no repeat e ainda não sei o que isso significa.


Hi Im fire

Share this post


Link to post
Share on other sites
nunopicado
26 minutos atrás, Fire disse:

Obrigado mas o código que puseste não funcionou, diz mismatch error no repeat e ainda não sei o que isso significa.

Que compilador estás a usar?


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

Share this post


Link to post
Share on other sites
Fire

Estou usando o programa Dev-Pascal.

Agora o compilador não sei, ainda estou no 1º ano de Programação


Hi Im fire

Share this post


Link to post
Share on other sites
nunopicado
1 minuto atrás, Fire disse:

Estou usando o programa Dev-Pascal.

Agora o compilador não sei, ainda estou no 1º ano de Programação

A não ser que seja uma exigência absoluta do professor, foge do Dev-Pascal 'como o diabo da cruz'...
O Dev-Pascal usa uma versão completamente obsoleta do compilador FreePascal (versão 1, de 2002 - já tem 17 anos). Pior que isso, só o Pascal-ZIM.

Dito isto, instalei o Dev Pascal e aqui passou bem... Ou melhor, passou bem depois de eu colocar o índice nos locais onde estavas a usar os arrays sem o referir.

Exemplo:

For I:=1 to 5 do
  Begin
   Writeln('Insira os Seus Numeros');
   Readln(CNum);    // <-- Isto é o que tens: não funciona. Deves usar assim: Readln(CNum[i]);
  end;

 


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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.