Probleme rand() et for

vanpet Messages postés 149 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 5 février 2006 - 10 juil. 2002 à 18:19
cs_ProGamer Messages postés 44 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 1 février 2022 - 15 juil. 2002 à 14:57
je suis nouveau en C++ (je migre de VB6) et il y a quelques petites choses que l'aide de Microsoft ne parvient pas a me faire comprendre... (pourquoi vous riez ?? j'aime bien le MSDN d'habitude)

c'est a propos du rand() : j'ai en tete l'utilisation sous VB c'est a dire nombre=rnd((5)+3) pour avoir ma variable nombre qui retourne quelque chose entre 3 et 5. mais vous vc++ c'est apparemment pa la meme chose... quelqu'un peut me dire comment faire ca en c++ ?

et pis je pige pas du tout la boucle for...
dans vb c'était for i = 0 to 10, next mais dans vc++ il demande 3 arguments !!?? quelqu'un maitrise ca ?
@+

10 réponses

jcecchi Messages postés 117 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 14 janvier 2003 3
10 juil. 2002 à 20:47
salut

Pour ton rand(), si tu veux un resultat en A et B, faut faire

Nombre = A + (rand() % (B-A+1);

donc dans ton cas

Nombre = 3 + (rand() % 3);

pour la boucle for c'est

for(etat initial ; test ; evolution)

donc pour toi

for(i=0;i<=10;++i)

mais si tu ne veux que les valeurs 0,2,4,6,8,10

tu dois faire
for(i=0;i<=10;i+=2)

voila
0
guguy Messages postés 28 Date d'inscription jeudi 27 décembre 2001 Statut Membre Dernière intervention 5 août 2002
10 juil. 2002 à 20:51
En c++ pour avoir un nombre rand il y a deux chose à faire :
tout d'abord il faut initialiser avec la fonction srand(), pour avoir un nombre vraiment aléatoire je te conseille de mettre time comme argument :
srand((unsigned) time(NULL));
avec ca tu initialise avec le nombre de secondes écoulés depuis 1970.
ensuite pour assigner un nombre aléatoire tu fait par exemple :
int a = rand();
pour avoir un nombre compris entre 0 et 10 :
int a = rand()%10;
entre 3 et 5 :
int a = (rand()%2)+3;

Note : pour utiliser rand() et srand() il faut inclure le header <cstdlib> et pour time il faut inclure <ctime>.
Sinon pour for je vais te mettre un petit exemple pour que tu comprenne :
for(int a=0; a<10; a++){
cout << a;}
Le premier argument est l'initialisation, le second est la condition et le troisième est "l'action".
On pourrais aussi mettre :
int a=0;
while(a<10) {
cout << a;
a++;}

J'espère t'avoir aidé.
0
cs_kjus Messages postés 269 Date d'inscription mercredi 24 avril 2002 Statut Membre Dernière intervention 9 juin 2003
10 juil. 2002 à 22:01
tout est dit..
sinon ya pas mal de tutos qui expliquent bien ces choses la :)
***raph***
0
vanpet Messages postés 149 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 5 février 2006
10 juil. 2002 à 22:17
Les gars vous etes géniaux ! C'est dans ces moments là que j'aime le réseau codes-sources !
Ca fait chaud au coeur de voir que la solidarité existe toujours entre les hommes, snif ;-)
Heu.. j'en fais peut-etre un peu trop là.
merci quand meme !
@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vanpet Messages postés 149 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 5 février 2006
10 juil. 2002 à 23:23
j'ai compris le fond, mais lorsque je mets en pratique, voila ce que me retourne VC++ 6.0 :
error C2447: missing function header (old-style formal list?)

Or, voici la liste des headers que j'ai integré au debut :

#include <ctype.h>
#include <stdlib.h>
#include <time.h>
#include <fstream.h>
#include

en manquerait-il un ??
pour parer a toute eventualité, je vous fourni le code source de la partie delicate (il s'agit d'un generateur automatique de noms pour personnages de jeux de roles) :

void namegenerator(); // Genere des noms au hasard (PNJs, monstres, etc...)
{
srand((unsigned) time(NULL));
int b = (rand()%5);
char syllabe[4]="";
switch (b)
{
case 0:
{
syllabe="jin";
break;
}
case 1:
{
syllabe="mar";
break;
}
case 3:
{
syllabe="tol";
break;
}
case 4:
{
syllabe="gul";
break;
}
case 5:
{
syllabe="kadh";
break;
}
};
int a = (rand()%2)+2;
switch (a)
{
case 2:
{
for(int a=1; a<2; a++){
pnj_nom=pnj_nom+syllabe;}
break;
}
case 3:
{
for(int a=1; a<3; a++){
pnj_nom=pnj_nom+syllabe;}
break;
}
case 4:
{
for(int a=1; a<4; a++){
pnj_nom=pnj_nom+syllabe;}
break;
}
case 5:
{
for(int a=1; a<5; a++){
pnj_nom=pnj_nom+syllabe;}
break;
}
};
};
0
cs_kjus Messages postés 269 Date d'inscription mercredi 24 avril 2002 Statut Membre Dernière intervention 9 juin 2003
10 juil. 2002 à 23:57
#include <ctype> (sans le .h)
***raph***
0
vanpet Messages postés 149 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 5 février 2006
11 juil. 2002 à 11:53
le malheur continue de s'abattre sur moi, car dans mes headers, le
#include <ctype.h> // il le trouve sans probleme
mais le
#include <ctype> // il me dit qu'il ne le trouve pas
Si quelqu'un pouvait me fournir ce fichier j'en serais reconnaissant (et m'expliquer dans quel repertoire je dois le copier)
parce que mon projet nécéssite ce fichier (pour la fonction srand() je suppose, vu que c la que ca plante)
merci
@+(et je suis sous VC++ 6.0)
0
cs_kjus Messages postés 269 Date d'inscription mercredi 24 avril 2002 Statut Membre Dernière intervention 9 juin 2003
11 juil. 2002 à 12:31
si tu l'as pas c pas grave.
tu fais #include <stdio.h>
<stdlib.h>
et la t trankil pour srand
(je ne sais ds quel header se trouve srand ;)
***raph***
0
vanpet Messages postés 149 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 5 février 2006
11 juil. 2002 à 14:10
J'ai trouvé le bug tout seul comme un grand ;-)
ca n'avait rien a voir avec les header (l'aide de microsoft est vraiment tres mal foutu, parce qu'ils me disaient "header missing")
en fait j'avais fait une fonction nommée :
void namegenerator();
{
// blablabla...
}
et il fallait pas mettre de ";" derriere les "(" ")" !
voila
merci quand meme pour votre aide !
@+
0
cs_ProGamer Messages postés 44 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 1 février 2022
15 juil. 2002 à 14:57
En fait, sous VB aussi il peut y avoir 3 paramètres pour la boucle for.

En VB, c'est:

For VARIABLE = [ETAT INITIAL] To [ETAT FINAL] Step [INCREMENTATION]

En C++, c'est:
for (VARIABLE = [ETAT INITIAL]; [TEST]; [INCREMENTATION])

Le TEST est l'équivalent de l'ETAT FINAL. Au lieu de spécifier un nombre, on indique une condition qui, si elle est vraie, fait se poursuivre la boucle.

L'INCREMENTATION indique de combien modifier la variable à chaque boucle. En VB, c'est un nombre positif ou négatif, en C++, c'est un calcul qui modifie la valeur de la variable.

Les boucles sont aussi faciles à manipuler qu'en VB, mais elles sont plus complètes. Il suffit juste d'être un peu plus rigoureux, pour éviter de faire une boucle infinie.

Quelques exemples...

Pour:
For I = 0 To 7
ou For I = 0 To 7 Step 1

On a:
for (i=0;i<=7;++i) (celle-là c'est la meilleure)
ou for (i=0;i<=7;i++)
ou for (i=0;i<=7;i+=1)
ou for (i=0;i<=7;i=i+1)

Par contre, pour:
For I = 0 To 7 Step 2

On a:
for (i=0;i<=7;i+=2)
ou for (i=0;i<=7;i=i+2)

Tiens, voilà que je m'improvise professeur... (heu, ceux qui connaissent bien le C++, qu'est-ce que vous pensez de ça ?)
0
Rejoignez-nous