Bonjour
coment utiliser la fonction rand ? j'ai tout essayé mais rien ne marche ...
-----
Bonjour
coment utiliser la fonction rand ? j'ai tout essayé mais rien ne marche ...
Comment ça rien ne marche ? Tu pourrais préciser un peu ?
En C la fonction rand ne prend pas d'argument, donc un appel se fait sous la forme "rand()". Elle renvoit un int compris dans [0;RAND_MAX].
Pour ne pas avoir toujours la même série de valeurs, il faut initialiser la "graine" de manière variable avec srand ("srand(graine)"). Tu peux prendre l'heure par exemple pour initialiser. Par défaut, tout se passe comme si tu avais fait un srand(1).
voici mon programme , enfin la correction du prof carrement ,elle ne marche pas ....
et come tu l'as dis j'ai fait avec l'horloge de l'ordi
Bonsoir,Envoyé par merakvoici mon programme , enfin la correction du prof carrement ,elle ne marche pas ....
et come tu l'as dis j'ai fait avec l'horloge de l'ordi
J'aimerais bien voir le source en question...
Une fois de plus matthias a raison (petite allusion privée au forum maths ), mais il faut bien faire attention aux prototypes:
#include <stdlib.h>
void srand (unsigned seed) ;
int rand (void) ;
Mais le type unsigned n'est pas ce qu'on fait de plus portable (et int non plus, d'ailleurs)! C'est pour ça que j'aimerais voir comment tu utilises l'horloge du computre.
-- françois
Et le type time_t retourné par time n'est pas toujours implémenté de la même manière (ça peut être entier ou flottant). Mais bon au pire tu fais un cast en unsigned et c'est réglé. La seule chose qui compte c'est que le résultat dépende de l'heure.Envoyé par fderweltMais le type unsigned n'est pas ce qu'on fait de plus portable (et int non plus, d'ailleurs)! C'est pour ça que j'aimerais voir comment tu utilises l'horloge du computre.
donc : srand(time(NULL)); /* pas de warning en general */
ou : srand((unsigned int)time(NULL)); /* pour les maniaques */
Oulà! C'est casse-gueule à mon avis... Si time_t est typedef long (comme en Borland C++) ça passe, mais si c'est un flottant... Mais comme tu dis, l'essentiel est d'avoir quelque chose de:Envoyé par matthiasEt le type time_t retourné par time n'est pas toujours implémenté de la même manière (ça peut être entier ou flottant). Mais bon au pire tu fais un cast en unsigned et c'est réglé. La seule chose qui compte c'est que le résultat dépende de l'heure.
donc : srand(time(NULL)); /* pas de warning en general */
ou : srand((unsigned int)time(NULL)); /* pour les maniaques */
(1) convertible en unsigned;
(2) qui dépende du temps de manière non prévisible, autrement dit qui change toutes les quelques millisecondes au pire.
N'importe quelle variable système un peu dynamique doit pouvoir coller. Mais time_t... à moins qu'il n'y ait une fonction plus "portable", style nombre de millisecondes depuis la naissance de Guillaume Portail, mais de mémoire je ne vois pas.
-- françois
Mouais. srand, tu ne l'appelles qu'une fois, je ne crois pas que ce soit nécessaire d'avoir une valeur qui change toutes les millisecondes.Envoyé par fderwelt(2) qui dépende du temps de manière non prévisible, autrement dit qui change toutes les quelques millisecondes au pire.
Pour le flottant, j'ai vu ça sur Internet, mais je ne garantis rien. De toute façon, même si c'est possible, je ne crois pas que quiconque se soit amusé à l'implémenter de cette manière.
Surtout que time est censée retourner le temps écoulé en secondes depuis le 1er janvier 1970 à 0 heure GMT (pareil, trouvé sur Internet, pas garanti), donc ce n'est pas juste l'heure de la journée.
C'est vrai que pour srand(), à une seconde près ça passe. Encore que, depuis 1970, on commence à frôler les 32 bits... Je suppose que ça cycle quand on dépasse? A quand le bug de la seconde 232?Envoyé par matthiasSurtout que time est censée retourner le temps écoulé en secondes depuis le 1er janvier 1970 à 0 heure GMT (pareil, trouvé sur Internet, pas garanti), donc ce n'est pas juste l'heure de la journée.
"Les seules pertes de mémoire causées par le bug de l'an 2000 sont celles de ceux qui avaient annoncé la catastrophe."
-- françois
Si si c'est garanti... sinon tu n'es pas aux normes.Envoyé par matthias[...]
Surtout que time est censée retourner le temps écoulé en secondes depuis le 1er janvier 1970 à 0 heure GMT (pareil, trouvé sur Internet, pas garanti), donc ce n'est pas juste l'heure de la journée.
Le temps est donné en temps UNIX.
merci de la confirmation.Envoyé par GreSi si c'est garanti... sinon tu n'es pas aux normes.
Merci à Gre aussi...Envoyé par matthiasmerci de la confirmation.
J'en étais resté à la norme ANSI C++ 90X, qui n'avait jamais été finalisée. Mais Borland C++ V6.0 est, lui, supposé complètement compatible, y compris la STL.
-- françois