Généré un nombre au hazard sur c (doute hazar
cole
-
Pacorabanix Messages postés 4122 Date d'inscription Statut Membre Dernière intervention -
Pacorabanix Messages postés 4122 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai réalisé une fonction qui génére un nombre au hazard entre 1 et 100 qu'on doi trouver, mon programme fonctionne mai j'ai des doute sur le fonctionnement du hazard : voici la parti de mon code qui est concerné :
int genereNombre()
{
int nombreMystere = 0;
const MIN = 1, MAX = 100;
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
return nombreMystere;
}
int main(int argc, char *argv[])
{
int nombreMystere = 0, nombreEntre = 0;
const int MAX = 100, MIN = 1;
// Génération du nombre aléatoire
nombreMystere = genereNombre(MIN, MAX);
j'ai aussi une question sur mon propre code (je sais c'est bizard)
pourquoi on est obligé de définir les variables MAX et MIN sur la fonction genereNombre alors qu'elles sont déja défini dans la fonction main? (j'ai essayer sans définir les variable MAX et MIN sur la fonction genereNombre mais sa m'affiche une erreur)
merci d'avencee pour votre aide si précieuse
j'ai réalisé une fonction qui génére un nombre au hazard entre 1 et 100 qu'on doi trouver, mon programme fonctionne mai j'ai des doute sur le fonctionnement du hazard : voici la parti de mon code qui est concerné :
int genereNombre()
{
int nombreMystere = 0;
const MIN = 1, MAX = 100;
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
return nombreMystere;
}
int main(int argc, char *argv[])
{
int nombreMystere = 0, nombreEntre = 0;
const int MAX = 100, MIN = 1;
// Génération du nombre aléatoire
nombreMystere = genereNombre(MIN, MAX);
j'ai aussi une question sur mon propre code (je sais c'est bizard)
pourquoi on est obligé de définir les variables MAX et MIN sur la fonction genereNombre alors qu'elles sont déja défini dans la fonction main? (j'ai essayer sans définir les variable MAX et MIN sur la fonction genereNombre mais sa m'affiche une erreur)
merci d'avencee pour votre aide si précieuse
A voir également:
- Généré un nombre au hazard sur c (doute hazar
- Nombre de jours entre deux dates excel - Guide
- Nombre facile - Télécharger - Outils professionnels
- Afficher le 0 devant un nombre dans excel - Guide
- Comment générer un qr code - Guide
- Supprimer espace nombre excel ✓ - Forum Excel
7 réponses
comme les variables sont déclarées dans main(), elles sont locales à la fonction main. L'autre ne peut pas les voir.
Pour avoir des variables communes à toutes tes fonctions, il faut les déclarer en global (c-à-d les déclarer avant tes fonctions)
Pour avoir des variables communes à toutes tes fonctions, il faut les déclarer en global (c-à-d les déclarer avant tes fonctions)
cole
et si par exemple les MAX = 100 000 et MIN = 1 dans la 1er fonction et MAX = 10 et MIN = 1, la quel sera pris en compte? (j'ai testé et aparement c'est les MAX et MIN de la 1er fonction qui sont pris en compte mais pk? a quoi sa sert de définir MAX et MIN dn la 2em fonction alors qu'ils ne sont pas pris en compte?)
cole
>
cole
ou alors je suis tout simplement entrin de m'embrouiller parceque j'ai donner a 2 variables différents le meme nom sur deux fonction... (dsl il est 2h07 du matin et continue encor a bosser sur ce programme)
Hum... De toute manière, il y a une erreur dans ton code.
Elle est pas méchante, car elle permet quand même de faire marcher le programme, mais bon ca gâche un peu tout. En fait, tu n'utilises pas les arguments que tu passes à ta fonction genereNombre().
Il y a marqué ca :
->
nombreMystere = genereNombre(MIN, MAX);
Et aussi ca :
->
int genereNombre()
{
int nombreMystere = 0;
const MIN = 1, MAX = 100;
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
return nombreMystere;
}
Je ne me souviens plus trop du C, mais il faudrait pas plutôt écrire :
->
int genereNombre(int MIN, int MAX)
{
int nombreMystere = 0;
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
return nombreMystere;
}
Elle est pas méchante, car elle permet quand même de faire marcher le programme, mais bon ca gâche un peu tout. En fait, tu n'utilises pas les arguments que tu passes à ta fonction genereNombre().
Il y a marqué ca :
->
nombreMystere = genereNombre(MIN, MAX);
Et aussi ca :
->
int genereNombre()
{
int nombreMystere = 0;
const MIN = 1, MAX = 100;
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
return nombreMystere;
}
Je ne me souviens plus trop du C, mais il faudrait pas plutôt écrire :
->
int genereNombre(int MIN, int MAX)
{
int nombreMystere = 0;
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
return nombreMystere;
}
sa marche aussi mais MAX = 100 n'est pas respecté, le MAX il peut etre infini
c'est pour sa je ne comprend pas tro a quoi servent les variables MAX et MIN dans la fonction main
car je rappele que c'est un exercice et que je suis entrin détudier comment apprendre a faire les fonctions donc j'ai fai toute les fonction aux quels la fonction main (que mon prof ma fourni) fat appel. en résumer j'ai fai toutes les fonctions avant main.
le programme marche, j'ai réussi mai je ne comprend pas pourquoi les variables MAX et MIN de la fonction main ne sont pas prisent en compte.
c'est pour sa je ne comprend pas tro a quoi servent les variables MAX et MIN dans la fonction main
car je rappele que c'est un exercice et que je suis entrin détudier comment apprendre a faire les fonctions donc j'ai fai toute les fonction aux quels la fonction main (que mon prof ma fourni) fat appel. en résumer j'ai fai toutes les fonctions avant main.
le programme marche, j'ai réussi mai je ne comprend pas pourquoi les variables MAX et MIN de la fonction main ne sont pas prisent en compte.
Hù...
Normalement si, avec mon code ca devrait marcher. Désolé de ne pas essayer mais je n'ai pas les outils sous la main pour compiler. Les variables max et min du main sont prises en compte :
int genereNombre(int cochon, int vache)
{
int loupgarou = 0;
srand(time(NULL));
nombreMystere = (rand() % (cochon - vache + 1)) + vache;
return loupgarou;
}
int main(int argc, char *argv[])
{
int nombreMystere = 0, nombreEntre = 0;
const int MAX = 100, MIN = 1;
nombreMystere = genereNombre(MIN, MAX);
J'ai changer quelques noms de variables pour que tu comprennes bien le principe. Ce code marche.
Quand tu écris : genereNombre(MIN, MAX);
Cela appelle la fonction genereNombre, avec comme parametre 0 et 100 (MIN et MAX)
La fonction genereNombre, elle attend deux variables : cochon et vache. Et elle les reçoit !
Ce code lui as envoyé dans l'ordre 0 et 100, alors elle se dit :
cochon = 0 et vache = 100
Les noms de variables de ta fonction genereNombre n'ont rien a voir avec celles de ta fonction main.
Alors ta fonction elle fait tout son truc, donc en l'occurence elle fait un nombre au hasard, puis on arrive a :
return loupgarou;
Donc ta fonction, "main" lui as envoyé 0 et 100, et elle as répondue un truc genre 32.
Bref bref, c'était pour mettre les choses au point. Si tu veux que les variables de "main" soient prises en compte dans "genereNombre", il faut lui envoyer, mais aussi que genereNombre() les reçoive. D'où l'erreur de tout a l'heure :
nombreMystere = genereNombre(MIN, MAX); // j'envoi MIN et MAX a genereNombre
et
int genereNombre() // genereNombre ne s'attend pas à recevoir quoi que ce soit
il fallait donc mettre :
int genereNombre(int MIN, int MAX) // genereNombre s'attend à recevoir deux int
J'espère ne pas avoir répondu a cote de la plaque :p
Normalement si, avec mon code ca devrait marcher. Désolé de ne pas essayer mais je n'ai pas les outils sous la main pour compiler. Les variables max et min du main sont prises en compte :
int genereNombre(int cochon, int vache)
{
int loupgarou = 0;
srand(time(NULL));
nombreMystere = (rand() % (cochon - vache + 1)) + vache;
return loupgarou;
}
int main(int argc, char *argv[])
{
int nombreMystere = 0, nombreEntre = 0;
const int MAX = 100, MIN = 1;
nombreMystere = genereNombre(MIN, MAX);
J'ai changer quelques noms de variables pour que tu comprennes bien le principe. Ce code marche.
Quand tu écris : genereNombre(MIN, MAX);
Cela appelle la fonction genereNombre, avec comme parametre 0 et 100 (MIN et MAX)
La fonction genereNombre, elle attend deux variables : cochon et vache. Et elle les reçoit !
Ce code lui as envoyé dans l'ordre 0 et 100, alors elle se dit :
cochon = 0 et vache = 100
Les noms de variables de ta fonction genereNombre n'ont rien a voir avec celles de ta fonction main.
Alors ta fonction elle fait tout son truc, donc en l'occurence elle fait un nombre au hasard, puis on arrive a :
return loupgarou;
Donc ta fonction, "main" lui as envoyé 0 et 100, et elle as répondue un truc genre 32.
Bref bref, c'était pour mettre les choses au point. Si tu veux que les variables de "main" soient prises en compte dans "genereNombre", il faut lui envoyer, mais aussi que genereNombre() les reçoive. D'où l'erreur de tout a l'heure :
nombreMystere = genereNombre(MIN, MAX); // j'envoi MIN et MAX a genereNombre
et
int genereNombre() // genereNombre ne s'attend pas à recevoir quoi que ce soit
il fallait donc mettre :
int genereNombre(int MIN, int MAX) // genereNombre s'attend à recevoir deux int
J'espère ne pas avoir répondu a cote de la plaque :p
c'est exact :) j'ai tout compris et je pense tout comme toi, j'ai modifié le nom des variables dans la 1er fonction histoire que je ne m'embrouille pas avec la seconde. mais (car ya toujours un mais :p) le max n'est pas respecté sa me donne des nombres, + que 100 :
voici le code apres modif
int genereNombre(int maximum, int minimum)
{
int nombreMystere = 0;
srand(time(NULL));
nombreMystere = (rand() % (maximum - minimum + 1)) + minimum;
return nombreMystere;
}
int main(int argc, char *argv[])
{
int nombreMystere = 0, nombreEntre = 0;
const int MAX = 100, MIN = 1;
// Génération du nombre aléatoire
nombreMystere = genereNombre(MIN, MAX);
voici le code apres modif
int genereNombre(int maximum, int minimum)
{
int nombreMystere = 0;
srand(time(NULL));
nombreMystere = (rand() % (maximum - minimum + 1)) + minimum;
return nombreMystere;
}
int main(int argc, char *argv[])
{
int nombreMystere = 0, nombreEntre = 0;
const int MAX = 100, MIN = 1;
// Génération du nombre aléatoire
nombreMystere = genereNombre(MIN, MAX);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
oui j'avais remarqué la différence du nom des variable, mais je pensai qu'ils n"y aurai pas de probleme puisque ce sont 2 fonctions différentes :
la fonction mais demande un nombremystere (avec un mini et un maxi) donc elle fai appele a la fonction genereNombre (elle lui aprend comment généré un nombre au hazard) mais les deux variables ne sont pas obligé de s'appelé pareil
la fonction mais demande un nombremystere (avec un mini et un maxi) donc elle fai appele a la fonction genereNombre (elle lui aprend comment généré un nombre au hazard) mais les deux variables ne sont pas obligé de s'appelé pareil
Mouarf ce que veux dire Pacorabanix quand il écrit ca :
int genereNombre(int maximum, int minimum)
nombreMystere = genereNombre(MIN, MAX);
(ce qui vient de ton code modifié), c'est que tu envoi deux variables a la fonction :
numero 1 : MIN
numero 2 : MAX
et ta fonction en attend deux, dans l'ordre :
numero 1 : maximum
numero 2 : minimum
Donc...
la fonction reçoit
maximum = MIN
minimum = MAX
Désolé quand j'ai remplacé par cochon et vache, j'me suis gouré de sens :/
int genereNombre(int maximum, int minimum)
nombreMystere = genereNombre(MIN, MAX);
(ce qui vient de ton code modifié), c'est que tu envoi deux variables a la fonction :
numero 1 : MIN
numero 2 : MAX
et ta fonction en attend deux, dans l'ordre :
numero 1 : maximum
numero 2 : minimum
Donc...
la fonction reçoit
maximum = MIN
minimum = MAX
Désolé quand j'ai remplacé par cochon et vache, j'me suis gouré de sens :/