Ir ao conteúdo
  • Cadastre-se

C++ preciso gerar números aleatórios 0 a 10 milhões


vinicyo luan

Posts recomendados

preciso gerar números de 0 a 10 milhões mais meu compilador não gera números maior 32767 não sei porque

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


using namespace std;
#define TamA 1000000
#define TamM 2000001



bool Existe(int Valores[], int tam, int valor) {//chama a função existe e passa o vetor de valores o vetor que tem todos os valores
												//tam tamnho do vetor / verifica se o valor ta no vetor - pecore todo o vetor
	for (int i = 0; i < tam; i++) {
		if (Valores[i] == valor)
			return true;
	}
	return false;
}

void GeraAleatorios(int numeros[], int quantNumeros, int Limite) {
	srand((unsigned int)time(NULL));

	long int v, i;
	for (i = 0; i < quantNumeros; i++) {
		v = (int)rand();

		while (Existe(numeros, i, v)) {
			v = (int)rand();
		}
		numeros[i] = v;
		printf("%d ", numeros[i]);
	}

}
int main()
{
	//FILE* geRar;
	//geRar = fopen("D:\\Down\\100000Numeros.txt", "w");

	//int numeros[TamA];
	int* numeros;

	numeros = (int*)malloc(TamM * sizeof(int));

	GeraAleatorios(numeros, TamA, TamM);
	for (int i = 0; i < TamA; i++) {
		//fprintf(geRar, "%d ", numeros[i]);
		printf("%d ", numeros[i]);

	}

	return 0;

}

me ajuda

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Mesmo eu usando long ele não gera números maior 32767, já os compiladores da internet gera

 

adicionado 3 minutos depois
2 minutos atrás, vinicyo luan disse:

Mesmo eu usando long ele não gera números maior 32767, já os compiladores da internet gera

 

Sera que e o compilador, e se fosse adiciona o long onde eu colocaria no código rsrs só novo em programação

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Flávio Pedroza  <--seguindo a ideia do parça ali de cima o código ficará assim verifica onde você errou

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


using namespace std;
#define TamA 1000000
#define TamM 2000001



bool Existe(long int Valores[], int tam, long int valor) {//chama a função existe e passa o vetor de valores o vetor que tem todos os valores
												//tam tamnho do vetor / verifica se o valor ta no vetor - pecore todo o vetor
	for (int i = 0; i < tam; i++) {
		if (Valores[i] == valor)
			return true;
	}
	return false;
}

void GeraAleatorios(long int numeros[], int quantNumeros, int Limite) {
	srand((unsigned int)time(NULL));
	long int v, i;
	for (i = 0; i < quantNumeros; i++) {
		v = (int)rand();

		while (Existe(numeros, i, v)) {
			v = (int)rand();
		}
		numeros[i] = v;
		printf("%d ", numeros[i]);
	}

}
int main()
{
	//FILE* geRar;
	//geRar = fopen("D:\\Down\\100000Numeros.txt", "w");

	//int numeros[TamA];
	long int* numeros;

	numeros = (long int*)malloc(TamM * sizeof(long int));

	GeraAleatorios(numeros, TamA, TamM);
	for (int i = 0; i < TamA; i++) {
		//fprintf(geRar, "%d ", numeros[i]);
		printf("%d ", numeros[i]);

	}

	return 0;

}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Execute o código abaixo e veja o resultado:

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

int main()
{
    printf("%d", RAND_MAX);

    return 0;
}

Se for 32767, então o problema é o seu compilador.

Tente colocar #define RAND_MAX 2147483647 logo após os #include e veja se funciona

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Tente usar o gerador de números aleatórios do C++

 

o mt19937 não tem limtes entre 0 e RAND_MAX como rand().

 

#include <iostream>
#include <random>
#include <chrono>

using namespace std;

int main()
{
    unsigned seed = chrono::system_clock::now().time_since_epoch().count();
    mt19937 gen(seed);
    uniform_int_distribution<unsigned int> dist(1, 10000000);
    int random = dist(gen);
    cout << random << '\n';
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

8 horas atrás, Flávio Pedroza disse:

Execute o código abaixo e veja o resultado:


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

int main()
{
    printf("%d", RAND_MAX);

    return 0;
}

Se for 32767, então o problema é o seu compilador.

Tente colocar #define RAND_MAX 2147483647 logo após os #include e veja se funciona

e executei deu 32767

adicionado 0 minutos depois
5 horas atrás, Benjamin Breeg disse:

Tente usar o gerador de números aleatórios do C++

 

o mt19937 não tem limtes entre 0 e RAND_MAX como rand().

 


#include <iostream>
#include <random>
#include <chrono>

using namespace std;

int main()
{
    unsigned seed = chrono::system_clock::now().time_since_epoch().count();
    mt19937 gen(seed);
    uniform_int_distribution<unsigned int> dist(1, 10000000);
    int random = dist(gen);
    cout << random << '\n';
}

 

preciso criar números que não se repete

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Pesquisando um pouco, vi que se você configurar o CodeBlocks para funcionar em modo 64 bits, talvez rand() gere os números que quer.

Tenta seguir esse tutorial:

https://groups.google.com/forum/#!topic/ccppbrasil/DnXxw1vII8I

em inglês

http://wiki.codeblocks.org/index.php/64Bit_Windows

 

Boa sorte...

Edit: Uma alternativa seria usar o Visual Studio

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

3 minutos atrás, Flávio Pedroza disse:

Pesquisando um pouco, vi que se você configurar o CodeBlocks para funcionar em modo 64 bits, talvez rand() gere os números que quer.

Tenta seguir esse tutorial:

https://groups.google.com/forum/#!topic/ccppbrasil/DnXxw1vII8I

em inglês

http://wiki.codeblocks.org/index.php/64Bit_Windows

 

Boa sorte...

Edit: Uma alternativa seria usar o Visual Studio

tenho o visual ta dando a mesma coisa

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@vinicyo luan     aqui no code blocks 16.01 está funcionando bem 

1990020106_codeblock.JPG.27be1b0f142bdfbc85337b54f730d79f.JPG

esse código aqui :

#include <stdlib.h>
#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <math.h>
#include <conio.h>
#include <time.h>
//#include <random>
using namespace std;
#define TamA 1000000
#define TamM 2000001
#define H GetStdHandle(STD_OUTPUT_HANDLE)
void textcolor_2(int l,int f){SetConsoleTextAttribute(H,l+(f<<4));}
bool Existe(int Valores[], int tam,int valor){ // chama a função existe e passa o 
                                               // vetor de valores o vetor que tem 
                                               // todos os valores tam tamnho do 
                                               // vetor / verifica se o valor ta 
                                               // no vetor - pecore todo o vetor
    for(int i=0; i<tam; i++){
        if(Valores[i] == valor)
            return true;
    }
    return false;
}
void GeraAleatorios(int numeros[], int quantNumeros, int Limite){
    long int v4, i;
    int v,v3;
    int v0,v1,v2;
    for(i=0; i<quantNumeros; i++){
        do{
            v0 = rand()%1001;
            v1 = rand()%1001;
            v2 = rand()%  11;
            v  = v0*v1*v2;
            cout<<"valor de v0 = "<<v0<<endl;
            cout<<"valor de v1 = "<<v1<<endl;
            cout<<"valor de v2 = "<<v2<<endl;
        }while(Existe(numeros, i, v));
        numeros[i] = v;
        printf("\n  com printf = %d\n",numeros[i]);
        if(v > 9000000){
            textcolor_2(10,12);
            cout<<"  com cout   = "<<numeros[i]<<"  ";
            getch();
            textcolor_2(7,0);            
            cout<<endl;
        }
    }
}
int main(){
    //FILE* geRar;
    //geRar = fopen("D:\\Down\\100000Numeros.txt", "w");
    //int numeros[TamA];
    srand(time(NULL));
    int *numeros;
    numeros = (int*)malloc(TamM * sizeof(int));
    GeraAleatorios(numeros, TamA, TamM);
    for (int i = 0; i < TamA; i++) {
        //fprintf(geRar, "%d ", numeros[i]);
        printf("%d ",numeros[i]);
    }
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Talvez nem seja preciso tudo isso

 

Estamos falando de números e matemática e notação posicional como no ensino fundamental

 

  • Em um número cada dígito é multiplicado pela base ao se mover para  esquerda.
  • Zero é o elemento neutro, então um zero a esquerda não muda nada.
  • Um zero a direita multiplica pela base e essa foi a grande invenção dos então hindus e depois absorvida por todo mundo, séculos atrás.

Um número entre 10 milhões

 

Um número assim estaria entre 0 e 9.999.999, e isso é uma sequência de 1 a 7 ...

 

...Dígitos.

 

Na base 10 temos dez dígitos.

 

Então

 

Você pode usar o seu gerador de números aleatórios  e gerar 7 dígitos --- sim, entre 0 e 9 --- e colocar um depois do outro...

Só isso. Zero é o elemento neutro então eventuais zeros à esquerda vão sumir mesmo, mas mantendo a probabilidade de 1 para 10 para cada um dos 7 dígitos

 

Só isso

 

Gostaria de ver um programa de exemplo ou entendeu a ideia?

 

De todo modo em limits.h limits.h o header que tem as constantes com os limites e lá você pode ver

limits.thumb.png.3b72a9fd4dc2bffb2d5b2ea60d849b94.png

 

 

que ULONG_MAX tem 10 dígitos e será suficiente --- você só precisa de 7 --- se precisar operar com esses valores, sem ter que criar uma classe só para isso, o que podia ser divertido até :)

unsigned long int valores[]; 

Se não precisa operar com eles, use texto --- char --- mesmo e siga adiante

 

Seu código sugere apenas que precisa gravar em disco 100.000 deles, sem repetição, como texto... Então já imagina o que vou dizer: tanto faz.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

#include <stdlib.h>
#include <iostream>
#include <stdio.h>
#include <time.h>
#include <chrono>
#include <random>

using namespace std;
#define TamA 10000000
#define TamM 20000001
bool Existe(int Valores[], int tam, int valor) {//chama a fun??o existe e passa o vetor de valores o vetor que tem todos os valores
                        //tam tamnho do vetor / verifica se o valor ta no vetor - pecore todo o vetor
    for (int i = 0; i < tam; i++) {
        if (Valores[i] == valor)
            return true;
    }
    return false;
}
void GeraAleatorios(int numeros[], int quantNumeros, int Limite) {
    srand(time_t(NULL));
    unsigned long int v;
    unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
    std::minstd_rand0 generator(seed); // minstd_
    for (int i = 0; i < quantNumeros; i++) {
        v = generator()%TamM;
        while(Existe(numeros, i, v)) {
            v = generator()%TamM;
        }
        numeros[i] = v;
        printf("%d- ", v);
    }
}
int main()
{
    FILE* geRar;
    geRar = fopen("C:\\Users\\Vinicyo092\\Downloads\\Numeros10kk.txt", "w");
    //int numeros[TamA];
    int* numeros;
    numeros = (int*)malloc(TamM * sizeof(int));
    GeraAleatorios(numeros, TamA, TamM);
    for (int i = 0; i < TamA; i++) {
        fprintf(geRar, "%d ", numeros[i]);
        printf("%d ", numeros[i]);
    }
    return 0;
}

Consegui fazer utilizando o código acima, muito obrigado a todos que me ajudaram. 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!