Generation de nombre

thereminder Messages postés 1 Date d'inscription vendredi 3 mai 2002 Statut Membre Dernière intervention 3 mai 2002 - 3 mai 2002 à 10:51
Blustuff Messages postés 20 Date d'inscription jeudi 7 mars 2002 Statut Membre Dernière intervention 27 juin 2007 - 3 mai 2002 à 15:03
Bonjour, mon pb est le suivant
j'ai besoin de générer 300 000 nombres aléatoires et uniques (en borland c++ builder) en donnant deux bornes (nombre min et nombre max)

Cependant, à la génération, j'ai un débordement de pile.
Comment faire pour éviter cela, et pour avoir un code optimiser ?

Merci

1 réponse

Blustuff Messages postés 20 Date d'inscription jeudi 7 mars 2002 Statut Membre Dernière intervention 27 juin 2007
3 mai 2002 à 15:03
Avec Borland C++, tu peux augmenter la limite de la pile dans les options du compilateur. Tu utilise un tableu de 300 000 valeurs, ce qui est enorme. Tu ne devrait pas le déclarer dans la pile (stack), mais tu devrai le déclarer dynamiquement avec new ou avec malloc :

#incldue <malloc.h> //Pour malloc()
#include <stdlib.h> //Pour random()

#define max 34 //Valeur Max.
#define min 4 //Valeur Min.

main()
{
int* Tableau = (int*) malloc(300000*sizeof(int));
for (x = 0 ; x < 300000 ; x++)
Tableau[x] = random(max - min) + min;

free(Tableau); //Ne pas oublier de desallouer le tableau
}

Tu peux également utiliser une variable globale pour ton tableau, qui ne sera donc pas dans la pile mais dans le segment de code. Mais tu dois savoir qu'une variable globale c'est en général une mauvaise solution. Tu peux aussi remplacer malloc et free par new et Delete. La le code doit etre optimisé pour du c, tu peux essayer d'optimiser en assembleur aussi, mais je ne connais pas l'equivalent de ce code en asm. Si tu remplacer les constantes min et max, par des variables, pense a calculer max - min avant la boucle.

Blustuff.
0
Rejoignez-nous