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 :

la fonction rand()


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 112
    Points : 53
    Points
    53
    Par défaut la fonction rand()
    Bonsoir chers ami(es)

    Je voulais savoir comment est-il possible d'utiliser la fonction rand() uniquement avec des nombres entre 1 et 100 ?
    merci

  2. #2
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Points : 354
    Points
    354
    Par défaut
    tiens, un piti lien qui explique comment ca marche !
    http://man.developpez.com/man3/rand.3.php
    __________
    "Any sufficiently advanced technology is indistinguishable from magic" Arthur C. Clarke

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par bonomsoleil
    Je voulais savoir comment est-il possible d'utiliser la fonction rand() uniquement avec des nombres entre 1 et 100 ?
    What the
    Pas de Wi-Fi à la maison : CPL

  4. #4
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    Bonjour,

    A noter qu'il faut initialiser avec srand(int a), mais si ton a est une constante alors tu auras toujours la même suite logique...

    Une astuce consiste à récupérer la valeur de l'heure systeme et à l'affecter à a.
    en incluant "time.h"

    @+.
    For crying out loud !

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par PadawanDuDelphi
    A noter qu'il faut initialiser avec srand(int a),
    Pas obligatoire. Ca dépend de l'application.
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Oui, tu peux vouloir produire une série aleatoire, et vouloir retrouver à chaque fois la meme serie aleatoire...

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 112
    Points : 53
    Points
    53
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    # include <stdlib.h>
    # include <stdio.h>
    # include <conio.h>
    int rand (int){
    int y;
    y=rand();
    return y;
    }
    int main(){
    int x=0,y=0;
    for (int i=0;i<100;i++)
    				{
                rand (x);
                if (x==y)
                printf("%d", y);
                }
    getch();
    }
    le program fonctionne bien avec le rand() mais quand je voudrai faire une comparaison pour imprimer les chiffres qui se ressemblent il se plante.

  8. #8
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Citation Envoyé par bonomsoleil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int rand (int){
    int y;
    y=rand();
    return y;
    }
    Recursivité infinie ?

  9. #9
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par Gruik
    Recursivité infinie ?
    Nop c'est juste qu'il a juste appelé sa fonction rand sauf que la sienne prend en paramètre un int.

    Et oui c'est pas comme en C++ deux fonctions peuvent pas avoir le même nom...
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  10. #10
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    Fais extrêmement attention avec cette fonction : la valeur maximale (RAND_MAX) peut être très petite et il se peut qu'elle ne soit définie que sur un short, et non un int, contrairement à son type de retour !

    Sur Solaris 9, avec des UltraSparc IIIi, la valeur de RAND_MAX est d'environ 30 000 (la valeur minimale définie par la norme ANSI), ce qui correspond à un short... alors que la fonction est censée retourner un int ! C'est comme ça qu'un programme que j'avais fait sur IA32 plantait lamentablement sur Sparc à cause du nombre de collisions fréquentes.

    Une vraie saloperie cette fonction si on ne fait pas gaffe !
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par InOCamlWeTrust
    Fais extrêmement attention avec cette fonction : la valeur maximale (RAND_MAX) peut être très petite et il se peut qu'elle ne soit définie que sur un short, et non un int, contrairement à son type de retour !

    Sur Solaris 9, avec des UltraSparc IIIi, la valeur de RAND_MAX est d'environ 30 000 (la valeur minimale définie par la norme ANSI), ce qui correspond à un short... alors que la fonction est censée retourner un int ! C'est comme ça qu'un programme que j'avais fait sur IA32 plantait lamentablement sur Sparc à cause du nombre de collisions fréquentes.

    Une vraie saloperie cette fonction si on ne fait pas gaffe !
    Boaf, aucun rapport entre le type et RAND_MAX... Pourquoi tu parles de short ? EOF vaut souvent -1, c'est pas pour ça que le type retourné par fgetc() est short ou signed char.

    Et puis les 30000, c'est bon pour un int dont la plage minimale garantie est -32767 à + 32767. int est le bon type, y'a pas à chercher autre chose. De toutes façons, char et short, c'est comme float, ça sert au stockage de masse, aux tableaux, mais les paramètres et les expressions constantes sont physiquement de type int, long, double ou pointeur. (OK, il y a des expression constantes de type float pour éviter les conversions couteuses).

    Au fait, le type de l'expression constante 32000 est int, pas short...
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. [Dates] problème fonction rand()
    Par eacute dans le forum Langage
    Réponses: 3
    Dernier message: 09/12/2006, 13h12
  2. [Mail] valider par mail un formulaire et fonction rand
    Par guillaume2vo dans le forum Langage
    Réponses: 2
    Dernier message: 17/09/2006, 20h37
  3. fonction rand() sur liste ?
    Par debutant-1 dans le forum C
    Réponses: 10
    Dernier message: 24/05/2006, 10h58
  4. Algo de la fonction RAND
    Par booby dans le forum C
    Réponses: 3
    Dernier message: 21/04/2006, 14h25
  5. fonction rand() php
    Par taka10 dans le forum Langage
    Réponses: 5
    Dernier message: 12/04/2006, 13h35

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