Conectar-se
Quem está conectado
29 usuários online :: 2 usuários cadastrados, Nenhum Invisível e 27 Visitantes

CRP-Max, Evandro Braga

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Data de inscrição : 06/03/2013
Número de Mensagens : 81
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 23

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Duvida com While

em Sab 27 Jul 2013, 18:34
Eu estava criando um programinha tipo mega sena,onde se sorteavam numeros sem repeti-los.Entao usei o seguinte codigo no Create :
Código:

numero_apostas = 6;
limite_numeros = 50;

for (i=0;i<numero_apostas;i+=1)
{
numero[i] = irandom_range(1,limite_numeros);
}

//----TIRA OS NUMEROS REPETIDOS GERANDO OUTROS----------------//

for (s=0;s<numero_apostas;s+=1)
  {
    for (n=0;n<s;n+=1)
      {
        while (numero[s] = numero[n])
          {
            numero[s] = irandom_range(1,limite_numeros);
          }
      }
  }
Porem eu percebi que esse código para tirar os numeros repetidos só funciona uma vez,como se fosse um IF.Para dar certo meu programa,precisei colocar esse código no STEP.Pensei que essa era a função do while,gostaria de saber o que pode ter acontecido.Obrigado Happy
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 288

Prêmios
   :
   :
   :
Ver perfil do usuário

Re: Duvida com While

em Sab 27 Jul 2013, 18:41
Código:
var list, r;
list = ds_list_create();

for(i=0; i<numero_apostas; i+=1)
{
r = irandom_range(1, limite_numeros);

while (ds_list_find_index(list, r) != -1)
r = irandom_range(1, limite_numeros);

ds_list_add(list, r);
}

Use a list como quiser.
avatar
Data de inscrição : 06/03/2013
Número de Mensagens : 81
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 23

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Duvida com While

em Sab 27 Jul 2013, 19:04
Não cara,não quero um código novo,queria saber o que há de errado com o meu.
avatar
Data de inscrição : 06/03/2013
Número de Mensagens : 81
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 23

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Duvida com While

em Dom 28 Jul 2013, 12:22
help pale 
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 288

Prêmios
   :
   :
   :
Ver perfil do usuário

Re: Duvida com While

em Dom 28 Jul 2013, 17:03
Seu código é meio estranho. Só que já achei um erro:

Código:
for (n=0;n<s;n+=1)

Se 's' começa em 0, não tem como 'n' ser menor que 's', pois 'n' é 0.
avatar
Data de inscrição : 06/03/2013
Número de Mensagens : 81
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 23

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Duvida com While

em Dom 28 Jul 2013, 18:22
'n' não será menor que 's' quando 's' for 0,porem quando 's' for 5,'n' será 0,1,2,3 e 4.A questão mesmo é no while,pois foi preciso colocar esse código no STEP para dar certo,isso que eu não entendo.
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 288

Prêmios
   :
   :
   :
Ver perfil do usuário

Re: Duvida com While

em Dom 28 Jul 2013, 19:24
Vamos fazer uma análise:

 
Código:
for (s=0;s<numero_apostas;s+=1)
  for (n=0;n<s;n+=1)
  while (numero[s] = numero[n])
  numero[s] = irandom_range(1,limite_numeros);

Quando s=0, então o segundo loop não funciona.
Quando s=1, então ele checa se o numero[0]=numero[1].
Quando s=2, então ele checa se o numero[0]=numero[2] e se numero[1]=numero[2].
...
Quando s=5, então ele checa se o numero[0]=numero[5], se o numero[1]=numero[5], se o numero[2]=numero[5], se o numero[3]=numero[5] e se o numero[4]=numero[5].

Vendo
Quando s=2, então ele checa se o numero[0]=numero[2] e se numero[1]=numero[2].
, podemos ver que se o numero[2]=numero[0], o numero[2] passa a ser outro número, só que depois se esse numero[2]=numero[1], ele vai ser outro número (pode acabar sendo o numero[0], ou seja, vai repetir).

É aí que mora o erro.
avatar
Ranking : Nota B
Notas recebidas : D+B+B+C+A
Data de inscrição : 24/08/2009
Número de Mensagens : 1092
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 31

Prêmios
   : 1
   : 1
   :
Ver perfil do usuário

Re: Duvida com While

em Dom 28 Jul 2013, 20:07
é isso mesmo que o pedro disse,ele checa se é igual o primeiro e muda até ficar diferente,ai ele checa se é igual o segundo até ficar diferente,mas com isso pode voltar a ser igual o primeiro.Você pode criar uma lista com os numeros usados,fiz umas alterações no seu código nesse exemplo.
Código:

numero_apostas = 16;
limite_numeros = 50;

for(i=0 i<limite_numeros i+=1){
ja_foi[i]=false;
}


for (i=0;i<numero_apostas;i+=1)
{
ii=irandom_range(1,limite_numeros);
while(ja_foi[ii]=1){
ii=irandom_range(1,limite_numeros);
}
//----valor foi usado ----------------//
ja_foi[ii]=true;
//-----------------------------------------------------------
numero[i]=ii;
}
avatar
Data de inscrição : 06/03/2013
Número de Mensagens : 81
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 23

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Duvida com While

em Seg 29 Jul 2013, 12:26
Entendido,valeu gnt xD
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum