Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

rand dans langage c



  1. #1
    merak

    rand dans langage c

    Bonjour

    coment utiliser la fonction rand ? j'ai tout essayé mais rien ne marche ...

    -----


  2. Publicité
  3. #2
    matthias

    Re : rand dans langage c

    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).

  4. #3
    merak

    Re : rand dans langage c

    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

  5. #4
    fderwelt

    Re : rand dans langage c

    Citation Envoyé par merak
    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,

    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

  6. #5
    matthias

    Re : rand dans langage c

    Citation Envoyé par fderwelt
    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.
    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.


    donc : srand(time(NULL)); /* pas de warning en general */
    ou : srand((unsigned int)time(NULL)); /* pour les maniaques */

  7. A voir en vidéo sur Futura
  8. #6
    fderwelt

    Re : rand dans langage c

    Citation Envoyé par matthias
    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.


    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:
    (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

  9. Publicité
  10. #7
    matthias

    Re : rand dans langage c

    Citation 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.
    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.
    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.

  11. #8
    fderwelt

    Re : rand dans langage c

    Citation 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.
    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?

    "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

  12. #9
    Gre

    Re : rand dans langage c

    Citation 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.
    Si si c'est garanti... sinon tu n'es pas aux normes.
    Le temps est donné en temps UNIX.
    War does not decide who's right, but who's left. (Bertrand Russell)

  13. #10
    matthias

    Re : rand dans langage c

    Citation Envoyé par Gre
    Si si c'est garanti... sinon tu n'es pas aux normes.
    merci de la confirmation.

  14. #11
    fderwelt

    Re : rand dans langage c

    Citation Envoyé par matthias
    merci de la confirmation.
    Merci à Gre aussi...

    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

Sur le même thème :

Discussions similaires

  1. Découverte historique : un algèbre dans le langage courant
    Par toulous1 dans le forum Epistémologie et Logique
    Réponses: 9
    Dernier message: 16/12/2007, 11h52
  2. Problème dans une fonction en Langage C
    Par lui dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 04/05/2007, 23h25
  3. Lecture dans un fichier texte en Langage C
    Par lui dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 16/04/2007, 11h04
  4. Matlab...Help... rand
    Par king_ae dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 08/11/2005, 11h33