Jump to content
Fórum Script Brasil
  • 0
Guilherme31415

Problema com variáveis aleatórias dentro de um loop.

Question

Olá, meu nome é Guilherme e estou com um dúvida. Em uma certa parte do meu programa há um loop e eu preciso gerar uma variável aleatória dentro desse loop. Só que o valor dessa variável fica mudando e não queria que acontecesse isso. Como faço para "fixar" essa variável logo após que ela foi gerada?

Share this post


Link to post
Share on other sites

4 answers to this question

Recommended Posts

  • 0
17 horas atrás, Guilherme31415 disse:

Olá, meu nome é Guilherme e estou com um dúvida. Em uma certa parte do meu programa há um loop e eu preciso gerar uma variável aleatória dentro desse loop. Só que o valor dessa variável fica mudando e não queria que acontecesse isso. Como faço para "fixar" essa variável logo após que ela foi gerada?

poste o seu algoritmo e diga o que esta errado nele para que eu possa ver como ajudar

Share this post


Link to post
Share on other sites
  • 0

Estou fazendo um tipo de "terreno 2D" feito só por quadrados. Estou usando OpenGL para isso. Essa é a parte do meu código que estou com dúvida:

void terreno(){
    
    int i, j, max_j;
    
    glPushMatrix();
    glTranslatef(x, y, 0);
    
    for(i = -grade_parametro; i < grade_parametro; i++){
        
        max_j = -10 + rand() % 10;
        
        for(j = -grade_parametro; j < max_j; j++){
            
            glPushMatrix();
            glScalef(scale, scale, 0);
            glTranslatef(i, j, 0);
            
                quadrado_terreno();
            
            glPopMatrix();
            
        }
        
    }
    
    glPopMatrix();
    
}

Se eu troco o

max_j = -10 + rand() % 10;

por

max_j = 5;

por exemplo, chega até funcionar...(obtenho um terreno plano).

Enfim, eu quero "simular um ruído" usando rand() só que quando entra o loop do OpenGL  o valor fica mudando. Queria o mesmo valor sempre... 

Será q tem um modo de resolver essa gambiarra que eu fiz?

Share this post


Link to post
Share on other sites
  • 0

Nunca utilizei OpenGL, mas se entendi corretamente seu desejo e analisando seu código, sugiro uma solução.

Em 26/07/2020 em 19:57, Guilherme31415 disse:
for(i = -grade_parametro; i < grade_parametro; i++){
        
        max_j = -10 + rand() % 10;
        
        for(j = -grade_parametro; j < max_j; j++){
            
            glPushMatrix();
            glScalef(scale, scale, 0);
            glTranslatef(i, j, 0);
            
                quadrado_terreno();
            
            glPopMatrix();
            
        }
        
    }

 

O problema está em a variável max_j ser redefinida a cada nova iteração. Para resolver, você pode simplesmente defini-la fora do laço, antes de iniciá-lo. Além disso, para fazer com que o número aleatório gerado não seja sempre o mesmo, você deve fornecer uma semente ao gerador. Para mais detalhes, aconselho a leitura desta página.

srand(time(NULL));	//Semente (a função time() pertence a biblioteca time.h)
max_j = -10 + rand() % 10; 	//Definindo a variável fora do loop
for(i = -grade_parametro; i < grade_parametro; i++){
        for(j = -grade_parametro; j < max_j; j++){
            
            glPushMatrix();
            glScalef(scale, scale, 0);
            glTranslatef(i, j, 0);
            
                quadrado_terreno();
            
            glPopMatrix();
            
        }
        
    }


 

Share this post


Link to post
Share on other sites
  • 0

Então deu esses erros (quando tento compilar o código) 

C:\Users\...\Voxel (3)\collect2.exe    [Error] ld returned 1 exit status

C:\...\Dev-Cpp\MinGW64\x86_64-w64-mingw32\bin\ld.exe    cannot open output file Voxel + Noise.exe: Permission denied

25        C:\...\Voxel (3)\Makefile.win    recipe for target 'Noise.exe"' failed

Não consigo definir se não for dentro do loop...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.




  • Forum Statistics

    • Total Topics
      148558
    • Total Posts
      644318
×
×
  • Create New...