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 :

générer un caractère aléatoirement


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Par défaut générer un caractère aléatoirement
    bonsoir à tous,

    Voilà je souhaiterais stocker dans un tableau un caractere qui aurait ete generé aleatoirement (oui mais comment, je sais pas).

    Je connais déjà la fonction rand() qui elle genere des nombres aleatoirement.
    Je sais aussi qu un caractere à la base n est qu un nombre.

    J ai déjà essyé cecile a minuscule etant le 97 et z le 122)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       long chiffre;
       const long MAX = 122, MIN = 97;
       char tableau[1];
     
       srand(time(NULL));
       chiffre = (rand() % (MAX - MIN + 1)) + MIN;
       tableau[1] = chiffre;
      printf("%c",tableau);
    mais les resultat ne se trouve pas seulement dans les lettres minuscules comme je l aurai souhaité. Je fais certainement fausse route.

    Quelqu un pourrait-il me donner un coup de pouce ?

    Merci par avance

    Shaz

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
     
    int main (void)
    {
       unsigned loop = 1000;
     
       srand ((unsigned) time (NULL));   
     
       while (loop--)
       {
          putchar (rand () % 26 + 'a');
       }
     
       return 0;
    }

  3. #3
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    le a minuscule etant le 97 et z le 122
    C'est vrai sur un système qui utilise un codage basé sur ASCII (Windows par exemple).

    Correction (première approximation) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    long chiffre;
    const long MAX = 122, MIN = 97;
    char tableau[1];
    
    srand(time(NULL));
    chiffre = (rand() % (MAX - MIN + 1)) + MIN;
    tableau[0] = chiffre;
    printf("%c",tableau[0]);
    tableau est un tab. de 1 caractère, son seul élément est tableau[0] (l'indice du premier élément d'un tableau est 0, pas 1).

    Ensuite :
    - Pourquoi des longs partout ? int suffit.
    - Pourquoi utiliser un tableau si ce n'est que pour stocker un caractère ? Qu'est-ce qui est mal avec char mon_car ?
    - putchar(mon_char) peut rempacer printf("%c", mon_char);
    - Il existe une bien meilleure méthode pour obtenir un nombre aléatoire compris entre un min et un max, expliquée ici.

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Par défaut Reponse à melem et nicolas.sitbon
    Bonjour et un grand merci à tous les deux,

    Ta fonction nicolas.sitbon est terrible, et du coup j ai remplacer le putchar par le nom de ma variable comme tu m a dit Melem, plutot qu un tableau.

    Peut tu me dire nicolas.sitbon où tu as trouvé cet facon de generer un nombre aleatoire.(tu l a peut etre creeé toi meme).

    En tous les cas merci ca me fait bien avancer dans mon petit projet.

    Cordialement

    Shaz

  5. #5
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par shazad Voir le message
    Peut tu me dire nicolas.sitbon où tu as trouvé cet facon de generer un nombre aleatoire.(tu l a peut etre creeé toi meme).
    La fonction rand() me renvoie un nombre dans l'intervalle [0, {RAND_MAX}], j'ai diminué cet interval avec l'opérateur % pour avoir l'interval [0, 25] (les 26 lettres de l'alphabet) que j'ajoute à la valeur du caractère 'a'.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    La fonction rand() me renvoie un nombre dans l'intervalle [0, {RAND_MAX}], j'ai diminué cet interval avec l'opérateur % pour avoir l'interval [0, 25] (les 26 lettres de l'alphabet) que j'ajoute à la valeur du caractère 'a'.
    C'est pas portable. La norme ne garantie pas que les valeurs soient consécutives... (à part pour '0' à '9').

  7. #7
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    C'est pas portable. La norme ne garantie pas que les valeurs soient consécutives... (à part pour '0' à '9').
    Cela a déjà été précisé par melem, vu le peu d'implémentation qui utilise encore l'EBCDIC, je propose quand même la solution.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par shazad Voir le message
    bonsoir à tous,

    Voilà je souhaiterais stocker dans un tableau un caractere qui aurait ete generé aleatoirement (oui mais comment, je sais pas).

    Je connais déjà la fonction rand() qui elle genere des nombres aleatoirement.
    Je sais aussi qu un caractere à la base n est qu un nombre.
    Il faut décoreller le traitement numérique (nombre de 0 à n-1) de la valeur du caractère. Pour cela on utilise un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char const charset[] = "abcDEF123";
    int i_rnd = rand() % (sizeof charset - 1);
    int c = charset[i_rnd];
    putchar (c);
    Dans charset, tu mets ce que tu veux...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. générer deux caractères aléatoires
    Par sarah65536 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 22/06/2009, 12h21
  2. Réponses: 16
    Dernier message: 08/03/2006, 11h18
  3. Besoin de générer une chaine aléatoire
    Par warsky dans le forum Langage
    Réponses: 7
    Dernier message: 01/12/2005, 19h34
  4. générer un nombre aléatoire gaussien
    Par kayari dans le forum Probabilités
    Réponses: 9
    Dernier message: 24/05/2005, 23h57
  5. Générer un nombre aléatoire entre 0 et 1 (INCLUS !!!)
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/08/2002, 16h30

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