Ir ao conteúdo

Posts recomendados

Postado

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
Postado

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
Postado

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

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
Postado

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
Postado
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
Postado

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
Postado
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
Postado
34 minutos atrás, Flávio Pedroza disse:

Por padrão os compiladores são configurados para gerar código de 32 bits (x86). Tente configurar os projetos para gerar código 64 bits (x64) e veja se resolve.

como faço isto

  • Curtir 1
Postado

@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;
}

 

Postado

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
Postado
#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

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