Ir ao conteúdo
  • Cadastre-se
Philipe de Souza

Programação c - gerar um número aleatório

Recommended Posts

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).

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz MA-=Ma e depois do número ser gerado some Ma.

Assim o limite fica entre Ma e MA e não perde tempo processando a comparação do IF

Compartilhar este post


Link para o post
Compartilhar em outros sites
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á!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×