Il y a actuellement 109 visiteurs
Mardi 26 Novembre 2024
accueilactualitésdossierscomparer les prixtélécharger gratuitement vos logicielsoffres d'emploiforum informatique
Connexion
Créer un compte

Générer un nombre aléatoire...

Besoin d'aide pour configurer un serveur ? Vous souhaitez obtenir des conseils pour référencer votre site ? Un petit souci pour accéder à votre FTP ? Des soucis de programmation en PHP / ASP / HTML / XHTML / XML / XSLT / CSS / ReactJS / AngularJS / VueJS / CGI / PERL / C / MySQL / PostgreSQL ??? Nous avons peut-être la solution dans ce forum ...

Générer un nombre aléatoire...

Message le 26 Nov 2009 20:44

Moi poster un truc ici ? :o

Et ouais, j'en apprend de plus en plus sur le langage C grâce à l'I.U.T.. ;)
Cependant je voulais faire un p'tit programme qui me sera utile plus tard, hélas il me manque un élément-clé pour pouvoir le réaliser...

Je voudrais générer un nombre aléatoire en l'attribuant à une valeur. Je sais qu'on peut écrire...
Code: Tout sélectionner
int nb=rand()

... mais cela ne génère qu'un nombre fixe pour toute la durée de l'utilisation du système il me semble.

Ce que j'aimerais savoir, c'est comment générer un nombre aléatoire ayant ces caractéristiques comme exemple :
- Qui soit en continu regénéré, à chaque fois qu'on fait appel à "nb", un nouveau nombre s'affiche.
- Qui soit compris entre 0 et 20 (par exemple)
- Qui soit possible d'être répété, même plusieurs fois de suite (par exemple : 2, 4, 6, 3, 2, 4, 4, 1, 4, 2, 5, 5, ...)
Apparemment c'est assez compliqué, le prof' n'a pas sû me l'expliquer rapidement à la fin d'un cours.

Pourriez-vous m'aider s'il vous plaît ? :3
Avatar de l'utilisateur
Thyrion
Expert(e)
Expert(e)
 
Messages: 1253
Inscription: 25 Aoû 2007 19:49
 


Re: Générer un nombre aléatoire...

Message le 26 Nov 2009 22:37

Thyrion a écrit:- Qui soit en continu regénéré, à chaque fois qu'on fait appel à "nb", un nouveau nombre s'affiche.

Bahh justement il faut pas faire appel à nb alors, faut appeler rand() à chaque fois. Partout où il y a nb, tu peux mettre rand() à la place.
Thyrion a écrit:- Qui soit compris entre 0 et 20 (par exemple)

Tu réécris alors la fonction rand() dans ton programme.
genre :
Code: Tout sélectionner
int mon_rand() {
  int nb;
  while(nb=rand())
  { if (nb >= 0 && nb <=20) return nb; }
  return nb; // == 0
}

(un truc comme ça... désolé mais ça fait bien 8 ans que j'ai pas fait de C...)
... et bien entendu, tu remplaces rand() partout par mon_rand().
Thyrion a écrit:- Qui soit possible d'être répété, même plusieurs fois de suite (par exemple : 2, 4, 6, 3, 2, 4, 4, 1, 4, 2, 5, 5, ...)

Ca doit être le cas avec le code au-dessus...

edit : blague de codeur => http://xkcd.com/221/
attention à pas faire pareil... :-)
Avatar de l'utilisateur
CaSa
PC-Infopraticien
PC-Infopraticien
 
Messages: 9048
Inscription: 13 Mai 2003 16:32
Localisation: Sisteron... et jamais loin d'une Debian
 

Re: Générer un nombre aléatoire...

Message le 26 Nov 2009 23:14

Ah il faut faire une fonction... Génial. ;) Merci CaSa !

En fait, je voudrais faire un système de "lecture" aléatoire pour un futur lecteur multimédia (que je ferais dans quelques années je pense :lol: ). Et je vais y configurer une multitude de choix différents pour la randomisation de la lecture, car je trouve que beaucoup trop de lecteur on ce problème là...
Avatar de l'utilisateur
Thyrion
Expert(e)
Expert(e)
 
Messages: 1253
Inscription: 25 Aoû 2007 19:49
 

Re: Générer un nombre aléatoire...

Message le 03 Déc 2009 00:53

Moi, ce que j'aime bien faire dans les programmes qui vont nécessiter plusieurs fois des appels à des nombres aléatoires, je rajoute une petite fonction dans ce style au début du programme :

Code: Tout sélectionner
int my_rand (int min, int max)
{
   /*Fonction de génération d'un nombre pseudo aléatoire compris
     entre les  paramètres min et max*/
   return ((int)(min+((float)rand()/RAND_MAX*(max-min+1))));
}


En passant max et min en argument, cela me permet de générer un nombre compris entre max et min à chaque appel...

Par contre, il ne faut pas oublier d'initialiser le générateur, en appelant la fonction srand() au moins une fois au début de ton programme.

Concrétement, ça donne ça :

Code: Tout sélectionner
#include<time.h>
#include<stdio.h>
int my_rand (int min, int max)
{
   /*Fonction de génération d'un nombre pseudo aléatoire compris
     entre les  paramètres min et max*/
   return ((int)(min+((float)rand()/RAND_MAX*(max-min+1))));
}

int main(void)
{
   int nb;
   srand(time(NULL));
   nb=my_rand(1,5);

}


La, tu as une vraie génération aléatoire (utiliser rand sans srand te donnera des nombres pseudos aléatoires)...

Un peu de lecture par ici...
Avatar de l'utilisateur
H3bus
Moderateur
Moderateur
 
Messages: 12195
Inscription: 08 Avr 2008 15:13
Localisation: /home/h3bus
 

Re: Générer un nombre aléatoire...

Message le 03 Déc 2009 18:10

Woaw excellent !

printf ("Merci H3bus. ;) Très pratique tout ça !") ;

:P
Avatar de l'utilisateur
Thyrion
Expert(e)
Expert(e)
 
Messages: 1253
Inscription: 25 Aoû 2007 19:49
 

Re: Générer un nombre aléatoire...

Message le 03 Déc 2009 18:17

Code: Tout sélectionner
std::cout << "Pas de problème !" << std::endl;


Aaah non, ça c'est quand tu auras commencé le C++...

Bon courage !
Avatar de l'utilisateur
H3bus
Moderateur
Moderateur
 
Messages: 12195
Inscription: 08 Avr 2008 15:13
Localisation: /home/h3bus
 

Re: Générer un nombre aléatoire...

Message le 04 Déc 2009 20:24

Euh... Y quelques p'tits problèmes quand-même... x)

Même après correction de vos exemples, le programme ne marche pas... :°
Soit ben il ne m'affiche rien, soit il m'affiche (quand j'ajoute un scanf) un nombre négatif allant dans les millions, malgré les conditions.

Pourriez-vous me faire un p'tit programme entier qui m'affiche "Nombre aléatoire : %d" (où "%d" est le nombre aléatoire compris entre 0 et 20) ? :P
Ce serait très gentil ! ^^
Avatar de l'utilisateur
Thyrion
Expert(e)
Expert(e)
 
Messages: 1253
Inscription: 25 Aoû 2007 19:49
 

Re: Générer un nombre aléatoire...

Message le 04 Déc 2009 22:21

L'exemple de H3BUS corrigé
Code: Tout sélectionner
#include<time.h>
#include<stdio.h>
#include <limits.h>

#define RAND_MAX INT_MAX

int my_rand (int min, int max)
{
   /*Fonction de génération d'un nombre pseudo aléatoire compris
     entre les  paramètres min et max*/
   return ((int)(min+((float)rand()/RAND_MAX*(max-min+1))));
}

int main(void)
{
   int nb;
   srand(time(NULL));
   nb=my_rand(0,20);
   printf("%d\n",nb);

}

T'as pas du beaucoup chercher à le corriger non ? :roll:
Avatar de l'utilisateur
CaSa
PC-Infopraticien
PC-Infopraticien
 
Messages: 9048
Inscription: 13 Mai 2003 16:32
Localisation: Sisteron... et jamais loin d'une Debian
 

Re: Générer un nombre aléatoire...

Message le 04 Déc 2009 23:22

Attends, tu crois que j'aurais pu trouver tout ça tout seul ? :lol: On vient à peine de commencer les fonctions.
Donc quand je vois "return ((int)(min+((float)rand()/RAND_MAX*(max-min+1)))) ;", j'ai l'impression d'être en deuxième année. :o

On a déjà vu des #define MAX, mais mettre un "INT_MAX" après, jamais vu. Oõ
Et "srand(time(NULL));" non-plus j'aurais jamais deviné. ;)

Enfin bon, merci à tous les deux !
Avatar de l'utilisateur
Thyrion
Expert(e)
Expert(e)
 
Messages: 1253
Inscription: 25 Aoû 2007 19:49
 



Sujets similaires

Message Pc bloqué de façon aléatoire
Bonjour,Ton Bios est bien le 2103 car il est tout récent il est ici , puis il y a pas mal de pilotes qui sont aussi récent.Pour connaitre ta version de pilote tu tapes msinfo32 dans ta recherche et tu auras une page d'information sur ton PC dont la version du bios et sa date d'installation.Les bloca ...
Réponses: 16

Message Limiter le nombre de FPS ou pas?
Bonjour,Suite à un upgrade de carte graphique, je me demande s'il est utile de limiter les FPS en jeu (simulateur).Mon écran propose 60 ou 75 en taux de rafraîchissement. Mon pilote NVIDIA propose une option de limitation aussi.Est-ce inutile de monter dans les FPS si mon écran ne propose pas davant ...
Réponses: 1

Message Bruit aléatoire Caisson de basse
Bonsoir à tous,Je viens vers vous pour un petit soucis (?) au niveau du Subwoofer de mon Home cinéma. Je précise que personne ne m'a répondu sur site spécialisé. J'espère donc trouver un éclairage chez vous !Tout d'abord mon équipement :- Système Bose Acoustimass 6- Ampli Onkyo TXNR-656- Lecteur blu ...
Réponses: 2

Message Freezes généralisés et aléatoire windows 10
Bonjour,Depuis quelque temps le windows 10 de ma tour se met à freezer aléatoirement, c-à-d tout le système se fige, les applications ouvertes également, je suis obligé de reset le pc via le bouton de la tour, ou quand j'ai de la chance je peux déconnecter la session avec ctrl+alt+suppr avant que to ...
Réponses: 6

Message Probleme de freeze aléatoire
Bonjour, pour faire simple et expliquer mon problème, en décembre 2018 mon PC sans aucune explication a commencé à avoir des freezes de manière aléatoire tous les 45minutes/1heures, ses freezes se traduisent par un bug son, un freeze de mes écrans voir parfois un écran noir, ainsi qu'une légère déco ...
Réponses: 3

Message [Réglé] Windows 10 - écran bleu aléatoire
Bonjour à tous,Je possède un pcque j'ai assemblé moi mème, dont voici les caractèristiques :- Carte Mère ASUS P8P67-M PRO- Processeur : Intel Core i5 2500K - 3.3 Ghz- Carte Graphique : Nvidia Geforce GTX 1050 Ti- RAM : 4x2Go Gskill Ripjaws X DDR 3 PC-10666 1333 Mhz CAS 8 - F3- Alimentation : Enermax ...
Réponses: 6

Message Générer les fiches contact Outlook à partir des emails
Hello,J'ai du supprimer des comptes IMAP sur Outlook Office 365 sous Windows 10 et Outlook n'a pas garder les adresses emails avec le nom du contact lorsque j'ai de nouveau installé les comptes IMAP.J'essaye de trouver un moyen de régénérer les contacts à partir des emails ou dossier car la personne ...
Réponses: 0


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


.: Nous contacter :: Flux RSS :: Données personnelles :.