Duvida com While

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Duvida com While

Mensagem por mleoni 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

mleoni

Número de Mensagens : 81
Idade : 21
Data de inscrição : 06/03/2013
Reputação : 23
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Duvida com While

Mensagem por PedroX 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.

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Duvida com While

Mensagem por mleoni 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.

mleoni

Número de Mensagens : 81
Idade : 21
Data de inscrição : 06/03/2013
Reputação : 23
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Duvida com While

Mensagem por mleoni em Dom 28 Jul 2013, 12:22

help pale 

mleoni

Número de Mensagens : 81
Idade : 21
Data de inscrição : 06/03/2013
Reputação : 23
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Duvida com While

Mensagem por PedroX 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.

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Duvida com While

Mensagem por mleoni 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.

mleoni

Número de Mensagens : 81
Idade : 21
Data de inscrição : 06/03/2013
Reputação : 23
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Duvida com While

Mensagem por PedroX 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.

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Duvida com While

Mensagem por Thyago 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;
}

Thyago

Ranking : Nota B
Número de Mensagens : 1092
Idade : 30
Data de inscrição : 24/08/2009
Notas recebidas : D+B+B+C+A
Reputação : 31
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 1
   :

Voltar ao Topo Ir em baixo

Re: Duvida com While

Mensagem por mleoni em Seg 29 Jul 2013, 12:26

Entendido,valeu gnt xD

mleoni

Número de Mensagens : 81
Idade : 21
Data de inscrição : 06/03/2013
Reputação : 23
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Duvida com While

Mensagem por Conteúdo patrocinado Hoje à(s) 15:41


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum