IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Fonction aléatoire / perror


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Par défaut Fonction aléatoire / perror
    Bonsoir,

    Deux petites questions à vous poser.

    La première: je ne saisis pas vraiment l'utilité de perror... Pouvez-vous m'en dire un peu plus svp?

    La deuxième:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int Aleatoire(void)
        {
          return (int) (0 + ((float) rand() / RAND_MAX * (3 - 0 + 1)));
        }
    Je ne comprends pas du tout ce que fait la fonction.. Pouvez-vous me commenter ce qu'elle fait svp?

    Merci d'avance!

  2. #2
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Bonsoir,

    perror est utile en cas de probleme. Elle decrit, en ecrivant sur la sortie d'erreur standart stderr, le dernier probleme qu'elle a rencontré. Si ma memoire est bonne, perror marche pour les fonction systeme de windows, et est dans stdio.h.


    Par exemple, si un fopen echoue, il serai bien de savoir pourquoi (mauvais chemin, permission non accordé ...).



    Pour ta fonction aleatoire :

    Cette fonction renvoie un entier compris entre 0 et 3 (a premiere vu). C'est du tirage aleatoire, d'ou le nom de la fonction et rand(). Vu la forme, je dirai qu'elle effectue un tirage aleatoire et equiprobable. Tu aura donc en sortie 0, 1,2 ou 3 avec respectivement 1/4 de chance chacune.

  3. #3
    Membre éclairé Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Par défaut
    Ok, merci pour tes précisions!

    Pour ce qui est de perror, je l'ai vu utilisé ainsi (après un test d'allocation mémoire):

    Concrètement qu'est-ce que cela fait?

    Pour la fonction aléatoire, comment obtiens tu les 1/4 de chance?

  4. #4
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Pour perror du malloc.

    En fait, perror prend une chaine en argument. Cette chaine, c'est ce que tu veux ecrire. Ensuite, s'il y a erreur, il recupere cette chaine (en l'occurence "malloc"), il l'ecrit en premier, il met ':' et il ecrit l'erreur que lui a recuperer (rien a voir avec ta chaine "malloc").

    En gros, imaginons que tu n'est plus de rame disponible. Ton perror est codé comme avant

    Le message que tu pourrais obtenir dans stderr serait (c'est pour l'exemple, ce n'est certainement pas ca) :


    malloc : limit overflow for allocation
    Si tu avai mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    perror("Il fait beau dehors");
    On aurai eu

    Il fait beau dehors : limit overflow for allocation
    (Je le repete, le message "limit overflow for allocation" est une pur invention de ma part, en plus je suis nul en anglais ...)



    Pour ce qui est de l'aleatoire.

    Equiprobable veut dire que chacun a la meme probabilité que l'autre d'etre tiré.
    Dans notre cas, les protagoniste sont 0,1,2 et 3, soit 4 nombre.

    Si chacun a la meme probabilité de sortir, alors ils ont tous 1/4 comme probabilité ou 25% si cela te parle mieux.

    (On considere l'exemple courant d'equiprobabilité : un dès a six face. Chaque face a donc 1/6 comme probabilité de sortir)

  5. #5
    Membre éclairé Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Par défaut
    Ok, je comprends mieux... Mais ne pourrait-on pas écrire cette fonction plus "simplement"? En fait, il s'agit de déterminer de façon aléatoire si des personnes sont positives à un test. Et quel était l'intérêt de renvoyer un nombre compris entre 0 et 3 du coup?

  6. #6
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Pour plus de precision :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    return (int) (MIN + ((float) rand() / RAND_MAX * (MAX - MIN + 1)));
    Les nombres entiers tiré equiprobablement appartiendront a l'intervalle [MIN - MAX], avec MIN et MAX inclue (c'est pour ca qu'on trouvé dans la fonction 3 - 0 et que je disais que la fonction fait un tirage aleatoire entre 0 et 3 compris).

    Pour plus de precision encore ->

  7. #7
    Membre éclairé Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Par défaut
    Mais il faut définir MIN et MAX non? Par rapport à la première fonction, qu'est-ce qui change?

    Et je le redemande, quel est l'intérêt de renvoyer un nombre entre 0 et 3?

Discussions similaires

  1. Fonction aléatoire, une fois pour toute ...
    Par Nothingness0x dans le forum Débuter
    Réponses: 19
    Dernier message: 18/11/2008, 22h07
  2. fonction aléatoire sous l'AS 400
    Par tenah34 dans le forum AS/400
    Réponses: 6
    Dernier message: 02/09/2008, 17h08
  3. Fonction aléatoire pas ordinaire
    Par gotrunkssj dans le forum C
    Réponses: 5
    Dernier message: 21/01/2008, 13h09
  4. Excel fonction aléatoire
    Par Biker-Robby dans le forum Excel
    Réponses: 3
    Dernier message: 11/12/2007, 09h17
  5. Fonctions aléatoires pour caractères
    Par IDE dans le forum C
    Réponses: 14
    Dernier message: 13/05/2007, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo