Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2058 connectés 

 


Dernière réponse
Sujet : [V C++] génération de nombres aléatoire qui chie dans la colle...
John of the Baptiste 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.

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
John of the Baptiste 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.
John of the Baptiste

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 !

darkoli

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.

John of the Baptiste

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 ?

darkoli

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.

John of the Baptiste 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 ?
darkoli

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 :
  1. for (i = 0; i < 32; i++)
  2. {
  3.  testnbEG = false;
  4.  resrand = 0;
  5.  while (testnbEG != true)
  6.   {
  7.    resrand = random(8);
  8.    if (tnbEG[resrand] < 3)
  9.     {
  10.      testnbEG = true;
  11.      tnbEG[resrand]++;
  12.      taffE[i] = resrand;
  13.     }
  14.   }
  15. }


 
Ce n'est pas 4 à la place de 3 ? (à moins que tu considères que 0 veut dire une equipe ?)
 

Code :
  1. int  taffE[32]; // Tableau d'affectation des equipes
  2. int  i=0;       // compteur
  3. int  e1=0;      // equipe 1
  4. int  e2=0;      // equipe 2
  5. int  tmp=0;     // valeur temporaire
  6. // Assignation par défaut des groupes
  7. // Les 4 premières equipes ont le groupe 0, ...
  8. for (i = 0; i < 32; i++) taffE[i >> 2];
  9. // Melange des assignations
  10. for (i = 0; i < 500; i++)
  11. {
  12.   e1=random(32); // resultat entre 0 et 31
  13.   e2=random(31); // resultat entre 0 et 30, on choisit une des 31 équipes restantes
  14.   if (e2 >= e1) e2++;
  15.   tmp=taffE[e1];
  16.   taffE[e1]=taffE[e2];
  17.   taffE[e2]=tmp;
  18. }


 
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.

John of the Baptiste 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 !  :hello:
John of the Baptiste Ben je crois pas que c'est borne qui va pas, elle est toujours à 8.
Harkonnen 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
John of the Baptiste

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 ! :pt1cable:

John of the Baptiste

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.

Harkonnen tu devrais mettre un spy sur la variable borne, et voir sa valeur lors du 2eme passage
Willyzekid 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!
John of the Baptiste 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 !
John of the Baptiste

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

Willyzekid 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]

John of the Baptiste 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 ! :cry:

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)