Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Pinhalnovo

Euromilhões e Totoloto

Mensagens Recomendadas

thoga31

Por causa daquilo que o nuno disse.

Pois, obrigado, e porque é que o @nuno disse aquilo?

Eu quero ver se entendeste o bubblesort, porque aplicar o que o @nuno disse no código que eu dei é fácil, a questão é perceber o que é que o código faz.


Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
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.

 

Editado por nunopicado
Syntax highlight

Hi Im fire

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

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.