#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ( int argc, char** argv )
{
int nombreMystere = 0, nombreEntre = 0;
const int MAX = 100, MIN = 1;
// Génération du nombre aléatoire
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
/* La boucle du programme. Elle se répète tant que l'utilisateur n'a pas trouvé le nombre mystère */
do
{
// On demande le nombre
printf("Quel est le nombre ? ");
scanf("%d", &nombreEntre);
// On compare le nombre entré avec le nombre mystère
if (nombreMystere > nombreEntre)
printf("C'est plus !\n\n");
else if (nombreMystere < nombreEntre)
printf("C'est moins !\n\n");
else
printf ("Bravo, vous avez trouve le nombre mystere !!!\n\n");
} while (nombreEntre != nombreMystere);
srand(time(NULL)) initialise la fonction srand sur le temps actuel.
rand() te retourne un nombre aléatoire comprit entre 0 et RAND_MAX ( généralement égale à 32767) en fonction de la valeur de srand et du temps actuel => temps ecoulé.
(MAX - MIN + 1) Te donne la différence entre ton maximum et ton minimum, + 1 pour inclure ton maximum.
rand() % (MAX - MIN + 1) te retourner un nombre entre 0 et (MAX - MIN + 1).
et pour finir tu ajoute MIN pour te retrouver dans l’intervalle.
exemple :
MAX = 5, MIN = 1
rand() % (5 - 1 + 1) + 1
= 7450 % (5) + 1 = 0 + 1 = 1
= 87 % (5) + 1 = 2 + 1 = 3
= 32763 % (5) + 1 = 3 + 1 = 4
Quoi qu'il arrive au finale tu obtient toujours un nombre compris entre MIN et MAX. j’espère avoir pu t'aider.
La fonction time retourne le nombre secondes qui se sont écoulée depuis 1970. Ici on lui passe la valeur NULL, ce qui indique à time qu'elle n'a rien d'autre à faire.
La fonction srand initialise le générateur de nombres pseudo-aléatoire. La fonction srand prend une valeur entière positive comme paramètre. On pourrait donc écrire srand(0), ou srand(12345). Mais on obtiendrait la même suite de nombres pseudo-aléatoires à chaque exécution de notre programme. On passe donc à srand le nombre de secondes écoulées depuis 1970, ainsi on obtient une suite différente à chaque exécution de notre programme. Sauf si l'on exécute deux fois notre programme dans la même seconde, bien sûr.
rand() génère un nombre pseudo-aléatoire (entier positif) et le retourne.
L'opérateur % est l'opérateur modulo, ou reste de la division entière. En prenant le reste de rand() divisé par (MAX-MIN+1) on obtient forcément une valeur entre 0 et MAX-MIN compris. Ensuite on ajoute MIN, et l'on se retrouve donc avec une valeur entre MIN et MAX.
@beusse59 On n'initialise pas une fonction, donc on n'initialise pas srand. C'est srand qui initialise qqch. La valeur retournée par rand ne dépend que de l'iniatialisation faite avec srand, pas du temps. rand() % (MAX - MIN + 1) vaut un nombre entre 0 et MAX - MIN.
La traduction dit clairement : "Conversion implicite sans le signe de 'time_t' (aussi appelé 'long') vers 'unsigned int'."
car la fonction time retourne un 'long' et que srand() prend un paramètre un unsigned int.
La conversion est implicite en C et voulu ( donc normal). En C++, il faut caster (faire la conversion) explicitement si tu veux ne pas avoir de message.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles- ♡ Copying is an act of love.
tu remplaces le time par un time_t et que tu compiles en c++ comme ici :
srand(time_t(NULL));
tu ne fais plus du tout la même chose, dans le second cas tu crées une structure de type time_t que tu initialises à NULL (elle vaudra toujours la même chose), alors que dans le premier cas tu utilises la fonction time pour qu'elle te renvoir l'heure actuelle (elle change toutes les secondes).
Caster en time_t revient à faire cela :
srand((time_t) time(NULL));
First solve the problem. Then, write the code. ~ John Johnson
Ah oui, c'est vrai : time_t(NULL) renvoit toujours 15 chez moi.
Mais la dernière ligne que tu m'envoies ne résoud pas le problème de conversion (enfin, c'est pas vraiment un problème mais si on pouvait faire disparaître ce message). Est-ce qu'il n'y a pas une fonction équivalente à time qui retourne un 'unsigned int'?
Désolé dans un de mes précédents messages j'ai interverti le cast … si srand attend un unsigned int et que l'on est certain que le cast ne pose pas de problème :
srand( (unsigned int) time(NULL) );
First solve the problem. Then, write the code. ~ John Johnson
je suis débutante en C++, et j'ai un problème similaire au votre, c'est-à-dire que le message implicit conversion changes signedness: 'time_t' (aka 'long') to 'unsigned int' s'affiche.
J'ai essaye de mettre time_t, de mettre un unsigned int, mais ma valeur aléatoire ne change pas. Elle reste toujours la meme... A quoi est ce du?
Certainent que tu appeles plusieurs fois srand ... Mais le mieux pour avoir une réponse, c'est de créer ton propre topic en postant ton code et le message du compilateur.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles- ♡ Copying is an act of love.
Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention plus facilement. Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé. Pour plus d'informations, nous vous invitons à lire les règles générales du forum
Avant de poster, demandez-vous si ce que vous allez dire apporte quelque chose au sujet. Si votre message n'apporte rien, vous ferez perdre du temps à tout le monde et le sujet pourrait dévier ou devenir difficile à suivre.
Aussi, vérifiez la date du topic. Le déterrage de topic nuit au bon fonctionnement du forum et est interdit. Utilisez les boutons pour dire merci. Si le topic date de plus de deux mois sans réponses, mieux vaut ne pas répondre.
Je ferme ce topic.
Pas d'aide concernant le code par MP, le forum est là pour ça :)
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
Pas d'aide concernant le code par MP, le forum est là pour ça :)