Ir ao conteúdo

Posts recomendados

Postado

Pessoal, acredito que para vocês isso possa parecer muito simples, mas para mim está gerando uma pequena dor de cabeça.

 

Estou precisando imprimir um número aleatório que esteja dentro de uma range. Existem duas variáveis: mA e MA, preciso gerar um número N aleatório que esteja entre os números mA e MA obedecendo a seguinte regra (mA<=N<=MA).

 

Li em alguns fóruns que deve-se usar a função da biblioteca chamada "rand", mas não sei como inserir um número aleatório que esteja ENTRE as duas variáveis.

 

Basicamente está assim:

 

srand((unsigner)time(NULL));

N = rand()%MA;

 

(dessa forma irá gerar um número aleatório que esteja antes do MA, mas não é isso que eu quero, deve ser ENTRE os dois).

 

Por exemplo:

 

mA = 5

MA = 10

N = 5||6||7||8||9||10

obs: || = ou

 

Se me ajudarem serei eternamente grato (inclusive dou +rep).

Postado

@Philipe de Souza Você pode tentar assim:

 

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
     int i,mA,MA,N;
 
     
     printf("Digite os valores de mA e MA separados por espaço:\n");

     scanf("%d %d",&mA,&MA);
 
     for(;;){
     	N = rand() % MA;
     	if (N<MA && N>=mA)
     	{
     		printf("%d\n",N );
     		break;
     	}
     }

 
     return 0;
}

 

  • Curtir 1
Postado
26 minutos atrás, eliumoraes disse:

@Philipe de Souza Você pode tentar assim:

 


#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
     int i,mA,MA,N;
 
     
     printf("Digite os valores de mA e MA separados por espaço:\n");

     scanf("%d %d",&mA,&MA);
 
     for(;;){
     	N = rand() % MA;
     	if (N<MA && N>=mA)
     	{
     		printf("%d\n",N );
     		break;
     	}
     }

 
     return 0;
}

 

 

Funcionou como uma luva! o número está caindo dentro do range especificado. Só estou achando estranho que está repetindo muito o "número 5" ao invés de variar. =O Obrigado desde já!

Postado

@MassakiMsk Eu não entendi direito o que você quis dizer, pode dar um exemplo?

 

@Philipe de Souza Fiz um teste aqui pra gerar 10 e ficou assim:

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
     int i,mA,MA,N;
 
     printf("Gerando 10 valores aleatorios:\n");
     printf("Digite os valores de mA e MA separados por espaço:\n");

     scanf("%d %d",&mA,&MA);
 	for(i=0;i<10;i++){
	     for(;;){
	     	N = rand() % MA;
	     	if (N<MA && N>=mA)
	     	{
	     		printf("%d\n",N );
	     		break;
	     	}
	     }

 	}
     return 0;
}

 

@Philipe de Souza Testei e estava repetindo, pra não repetir tem que usar o time.h, fica assim:

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(void)
{
     int i,mA,MA,N;
 
     printf("Gerando 10 valores aleatorios:\n");
     printf("Digite os valores de mA e MA separados por espaço:\n");

     scanf("%d %d",&mA,&MA);
     srand( (unsigned)time(NULL) );
 	for(i=0;i<10;i++){
	     for(;;){
	     	N = rand() % MA;
	     	if (N<MA && N>=mA)
	     	{
	     		printf("%d\n",N );
	     		break;
	     	}
	     }

 	}
     return 0;
}

 

  • Curtir 1
Postado

@eliumoraes Assim ó:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
     int i,mA,MA,N;

     printf("Gerando 10 valores aleatorios:\n");
     printf("Digite os valores de mA e MA separados por espaço:\n");

     scanf("%d %d",&mA,&MA);
     srand( (unsigned)time(NULL) );
 	for(i=0;i<10;i++){
        N = rand() % (MA-mA);
        printf("%d\n",N+mA);
 	}
     return 0;
}

 

  • Curtir 2
Postado

@eliumoraes Eliu, deu certo! Obrigado!

 

Está rodando perfeitamente.

 

Desculpe o incomodo mas...

Quanto a gerar um atributo que receba números e letras aleatórios, você saberia me dizer como faz? (dois caracteres e 4 números inteiros) ex: JJ8043

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...