génération de nombres aléatoire qui chie dans la colle... [V C++] - Programmation
Marsh Posté le 16-05-2002 à 18:18:12
il sort d'où ton "borne"?
(ie. file aussi l'appel de la fonction)
T'as pas un debugger là?
[jfdsdjhfuetppo]--Message édité par Willyzekid le 16-05-2002 à 18:18:31--[/jfdsdjhfuetppo]
Marsh Posté le 16-05-2002 à 18:22:13
Willyzekid a écrit a écrit : il sort d'où ton "borne"? (ie. file aussi l'appel de la fonction) T'as pas un debugger là? |
mon borne, c'est un entier qui me définit la plage de génération (entre 0 et borne - 1). J'ai un debugger, mais je vois juste que ça couille dans le 2 eme random. Ensuite, il me montre un truc barbare ( de l'assembleur) et me demande si je veux debugger rand.c !!!).
Marsh Posté le 16-05-2002 à 18:23:26
En plus, j'ai essayé de faire 10 random de suite ailleurs dans le prog. Je les affiche et ça marche... je suis aux fraises !
Marsh Posté le 16-05-2002 à 18:23:59
oui ben tu modifie sans doute ton borne en cour de route!!! c'est pour ca que je demande l'appelle de ta fonction! Je me doute bien que borne n'est pas là pour faire joli
Quand au debbuger, utilise le pas à pas! Et vois comment ca se passe!
Marsh Posté le 16-05-2002 à 18:24:48
tu devrais mettre un spy sur la variable borne, et voir sa valeur lors du 2eme passage
Marsh Posté le 16-05-2002 à 18:25:57
Willyzekid a écrit a écrit : oui ben tu modifie sans doute ton borne en cour de route!!! c'est pour ca que je demande l'appelle de ta fonction! Je me doute bien que borne n'est pas là pour faire joli Quand au debbuger, utilise le pas à pas! Et vois comment ca se passe! |
for (i = 0; i < 32; i++)
{
testnbEG = false;
resrand = 0;
while ( ! testnbEG)
{ resrand = random(8);
if (tnbEG[resrand] < 3)
{ testnbEG = true;
tnbEG[resrand]++;
taffE[i] = resrand;
}
}
}
Voilà la partie de code ou je l'appelle.
Marsh Posté le 16-05-2002 à 18:26:57
Harkonnen a écrit a écrit : tu devrais mettre un spy sur la variable borne, et voir sa valeur lors du 2eme passage |
je sais pas faire ça !
Marsh Posté le 16-05-2002 à 18:32:17
lorsque tu débugges avec le débugger de vc++, tu as dans le menu Debug des options qui te permettent de surveiller une variable au fur et a mesure de l'éxecution du prog
utilise la fonction Quickwatch pour surveiller borne
ou alors poste ton source pour qu'on puisse voir le cycle de vie de cette variable
Marsh Posté le 16-05-2002 à 18:39:34
Ben je crois pas que c'est borne qui va pas, elle est toujours à 8.
Marsh Posté le 16-05-2002 à 18:47:01
Je crois que j'ai trouvé...
C'est effectivement un probleme de mémoire. Quand j'initialise resrand, le debugger me dit : error : variable needs stack.
chiotte !
bon j'y retourne !
Merci pour vos réponses !
Marsh Posté le 16-05-2002 à 18:49:51
John of the Baptiste a écrit a écrit : for (i = 0; i < 32; i++) { testnbEG = false; resrand = 0; while ( ! testnbEG) { resrand = random(8); if (tnbEG[resrand] < 3) { testnbEG = true; tnbEG[resrand]++; taffE[i] = resrand; } } } Voilà la partie de code ou je l'appelle. |
Code :
|
Ce n'est pas 4 à la place de 3 ? (à moins que tu considères que 0 veut dire une equipe ?)
Code :
|
Voilà une autre manière de faire le mélange. On utilise pas le while car si tu n'as pas de chance lors du choix du random tu peux faire plein d'iteration pour rien.
Marsh Posté le 16-05-2002 à 19:00:19
Merci c'est cool !
Cependant, ça fait chier si je fais pleins d'itérations pour le stack ?
Autre question :
Si je déclare : CObjet tab[10];
=> stocké dans le tas
CObjet *tab;
tab = new CObjet[10]
=> stocké ailleurs
j'ai bon ?
Marsh Posté le 16-05-2002 à 19:04:28
John of the Baptiste a écrit a écrit : Merci c'est cool ! Cependant, ça fait chier si je fais pleins d'itérations pour le stack ? |
Je dirais que moins y'a d'iterations, mieux c'est.
Marsh Posté le 16-05-2002 à 19:06:37
DarkOli a écrit a écrit : Je dirais que moins y'a d'iterations, mieux c'est. |
Bon ben merci, je vais étudier ton algo. Où tu as appris à faire de jolies choses comme ça ?
Marsh Posté le 16-05-2002 à 19:15:05
John of the Baptiste a écrit a écrit : Bon ben merci, je vais étudier ton algo. Où tu as appris à faire de jolies choses comme ça ? |
Ben programmant et en DUT info aussi.
Marsh Posté le 16-05-2002 à 19:17:47
DarkOli a écrit a écrit : Ben programmant et en DUT info aussi. |
Je suis en licence d'info mais on a jamais abordé la question de la gestion de la mémoire en cours. Je suis perdu dans la jungle, avec mon coupe coupe comme seul ami !
Marsh Posté le 17-05-2002 à 10:37:02
Salut !
Un prof m'a dit ce matin qu'on pouvait augmenter la taille de la pile dans Visual. Quelqu'un sait-il le faire ?
Merci d'avance.
Marsh Posté le 16-05-2002 à 18:06:43
Salut !
En ce moment je fais du Visual c++. Pour apprendre à l'utiliser, je m'amuse pendant mes heures libres (très nombreuses, evidemment !) à programmer un petit logiciel de gestion de la coupe du monde de football ( qui pourrait être étendu à tout autre compet, je pense). Pour essayer si ça marche, j'ai décidé de créer des équipes imaginaire automatiquement. Je leur affecte
un groupe aléatoirement ( pour mémoire, pendant le premier tour de la coupe du monde, les équipes sont réparties en 8 poules de 4 équipes). Pour chaque équipe, je tire donc un nombre entre 0 et 7 ( qui représente un numéro de groupe) et je regarde si le groupe en question ne comporte pas déjà 4 équipes. Si il y a de la place dans ce groupe, j'y inclus l'équipe, sinon, je recommence le tirage aléatoire jusqu'à ce que l'équipe trouve de la place dans un groupe.
J'ai défini une fonction random que voici :
int random(int borne)
{
int resrand;
resrand = (rand() % borne);
return resrand;
}
J'ai bien initialisé le générateur avec un srand().
Tout ceci marche à la perfection jusqu'au deuxième tirage aléatoire. Le random sort alors ce nombre :-858993460.
Je comprend pas. Problème de mémoire, peut-être ?
Help !