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 :

Tirage au sort d'un mot


Sujet :

C

  1. #21
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    Tu m'as demandé pourquoi je le trouvais pas assez aléatoire, je t'ais répondu. Donc question naïve, réponse naïve.

    Sinon pour la lecture:

    Un fgets arrete ça lecture dés qu'il trouve un \n.
    fgets(char* buffer,int size ,FILE* fichier);
    Vive le C => Quoique pas sympa pour la mémoire de mon PC.

    Seul le chat le savait!!!!

    De la rigueur en programmation est maître mot!!!

  2. #22
    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 Dav-D
    Sinon j'arrive toujours pas à lire, il faut que je fasse un fgets, c'est bien ca ? afin de lire ma ligne. Quels seront les paramètres de mon fgets ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
       int chaine[30],mot,i;
    <...>
       fichier = fopen("dico.txt","r"); // ouverture et lecture du .txt
    <...>
            while (i<=mot)
            {
                  fgets(chaine,30,fichier);
                 i++;
    C'est bien toi qui a écrit ça. Tu ne sais pas ce que tu écris ?
    Pas de Wi-Fi à la maison : CPL

  3. #23
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    Citation Envoyé par Dav-D
    L'aléatoire que j'ai me suffit amplement, bien que léger je n'ai pas besoin de plus, car le mot ensuite choisi aléatoirement sera mélangé aussi aléatoirement, et le jeu étant de trouver le mot exacte en remettant les lettres dans l'ordre.

    Vous voyez que peu importe le mot, le jeu demande quand meme reflexion, meme si le mot suivant est 15 lignes plus bas.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      mot=(rand()*1)%(249643); // tirage aléatoire sur 249643 mots, 1 mot par ligne
            while (i<=mot)
            {
                  fgets(chaine,30,fichier);
                 i++;
                  }
                 fgets(mot,30,fichier);
                  printf ("Le mot choisi est : %d\n",mot);
    ici, mon second fgets a bien pour rôle de lire la ligne ?

    Vérifie le type de tes données. Surtout pour le deuxiéme fgets car a vu d'oeil ton code ne compile pas. mot est un int, et fgets prend char*.
    Et fait un dessin, tu verras que tu peux faire une boucle plus simple.
    et le i<=mot, fera que ton deuxieme gets lira mot+1.
    De plus vérifie le retour de fgets, car si tu arrives en fin de fichier, ça va planté.
    Vive le C => Quoique pas sympa pour la mémoire de mon PC.

    Seul le chat le savait!!!!

    De la rigueur en programmation est maître mot!!!

  4. #24
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    si si, je sais me servir de fgets et je sais quoi mettre, mais dans mon exemple ici, je m'y perd un peu.

    En rajoutant cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     fgets(mot,30,fichier);
    il me sort l'erreur de compilation suivante :

    27 * initializing argument 1 of `char* fgets(char*, int, FILE*)'


    or ma variable mot est bien en char (je l'ai modifié par rapport à mon message précédent), mon 30 est bien un entier et mon FILE est bien sous le nom de "fichier"

    Quesako ?

  5. #25
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    Donne ton code en entier dans ce cas, et dit que tu l'as modifié car si au fur et à mesure tu changes les types de tes variables, en laissant les noms, on est pas devin.

    Et sinon, char* ou char []!!!!! Un peu de reflexion.
    Vive le C => Quoique pas sympa pour la mémoire de mon PC.

    Seul le chat le savait!!!!

    De la rigueur en programmation est maître mot!!!

  6. #26
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Oui j'ai oublié de le précisé, j'ai édité le précedent post.

    Voici le code :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h> 
    int main(void)
      {
       FILE * fichier;
       char chaine[30],mot;
       int i;
       i=0;
       srand((unsigned) time(NULL));
       fichier = fopen("dico.txt","r"); // ouverture et lecture du .txt
         if(fichier==0)
           {
            printf("Erreur ouverture fichier !\n\n");  // verif du fopen
            system ("pause");
            return -1;
           }
         else
           {
            mot=(rand()*1)%(249643); // tirage aléatoire sur 249643 mots, 1 mot par ligne
            while (i<=mot)
            {
                  fgets(chaine,30,fichier);
                 i++;
                  }
                 fgets(mot,30,fichier);
                  printf ("Le mot choisi est : %d\n",mot);
            fclose(fichier);
           }
     
     
       system("pause");
       return 0;
      }

  7. #27
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    Un peu de reflexion, et tu vas trouver pourquoi ton fgets ne peut pas accepter ta variable.
    Regarde ce que prend fgets en param, et là déclaration de tes variables.

    char* .... char [] !!!!!

    Et pourquoi plusieurs variable, pour une même utilisation? genre mot et chaine. Pas tres jolie tout ça.
    Vive le C => Quoique pas sympa pour la mémoire de mon PC.

    Seul le chat le savait!!!!

    De la rigueur en programmation est maître mot!!!

  8. #28
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    D'après l'erreur de compil, le fgets prend un char*, moi j'ai déclaré :

    char mot;

    Difference entre char * et char ?

  9. #29
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    Euh là que dire a par de chercher un bon tuto sur les pointeurs. Et ou d'aller dans la du site, où tu vas trouver je pense un cour sur les chaines de caractéres.

    http://c.developpez.com/cours/#cours-c => Bonne lecture

    Tu as su déclare chaine[30]? As tu compris ce que tu as fait?
    sinon pour faire simple, mais pas tout expliquer.
    char est un caractére, tandis que char * est un pointeur de type char .
    Vive le C => Quoique pas sympa pour la mémoire de mon PC.

    Seul le chat le savait!!!!

    De la rigueur en programmation est maître mot!!!

  10. #30
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    ok, nous n'avons pas encore vu précisément les pointeurs, voila pourquoi je ne comprenais pas ...
    sinon pour le fgets précédent je comprend tout a fait, j'en ai vu beaucoup en exercices ...

    Merci de ton aide.

  11. #31
    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 Dav-D
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      mot=(rand()*1)%(249643); // tirage aléatoire sur 249643 mots, 1 mot par ligne
            while (i<=mot)
            {
                  fgets(chaine,30,fichier);
                 i++;
                  }
                 fgets(mot,30,fichier);
                  printf ("Le mot choisi est : %d\n",mot);
    ici, mon second fgets a bien pour rôle de lire la ligne ?
    Pourquoi un second fgets() ? La dernière lecture contient le mot. Si ce n'est pas le cas, c'est que le test est faux (< vs <= ...) ou que le compteur est mal initialisé (0 vs 1...)

    Ecrit un algorithme avant de coder. Ca permet de se concentrer sur la logique en ignorant les détails de codage...

    Et puis attention à tes identificateurs. Ce que tu appelles 'mot' est en réalité un 'numéro' ou un 'rang'.

    Le 'mot', c'est ce qu'il y aura dans la 'chaine' (en réalité, une 'ligne') lorsque tu auras supprimé le '\n'.
    Pas de Wi-Fi à la maison : CPL

  12. #32
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    Citation Envoyé par Dav-D
    ok, nous n'avons pas encore vu précisément les pointeurs, voila pourquoi je ne comprenais pas ...
    sinon pour le fgets précédent je comprend tout a fait, j'en ai vu beaucoup en exercices ...

    Merci de ton aide.
    http://c.developpez.com/cours/#cours-c => Bonne lecture

    et char * ou tu as char var[10] est rien d'autre qu'une * déguisée.
    Vive le C => Quoique pas sympa pour la mémoire de mon PC.

    Seul le chat le savait!!!!

    De la rigueur en programmation est maître mot!!!

  13. #33
    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 theshark85
    http://c.developpez.com/cours/#cours-c => Bonne lecture

    et char * ou tu as char var[10] est rien d'autre qu'une * déguisée.
    C'est ça, embrouille le un peu plus en confondant tableaux et pointeurs...
    Pas de Wi-Fi à la maison : CPL

  14. #34
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    ça peut aider à comprendre au lieu de toujours croire au pére noël.
    Car tu lui expliques comment que quand, il envoie une variable char mot[30] dans une fonction qui prend un char* que le compilo ne lui dise rien. Alors que pour un char il va lui dire quelque chose.
    Vive le C => Quoique pas sympa pour la mémoire de mon PC.

    Seul le chat le savait!!!!

    De la rigueur en programmation est maître mot!!!

  15. #35
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Ok je vois pourquoi l'erreur de compilation dans l'immediat, je le verrais + en détail en cours je pense.

    Merci de cette explication.

  16. #36
    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 theshark85
    ça peut aider à comprendre au lieu de toujours croire au pére noël.
    Car tu lui expliques comment que quand, il envoie une variable char mot[30] dans une fonction qui prend un char* que le compilo ne lui dise rien. Alors que pour un char il va lui dire quelque chose.
    http://emmanuel-delahaye.developpez.....htm#param_tab
    Pas de Wi-Fi à la maison : CPL

  17. #37
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    Oui avec un cour, comme le lien que je lui ais fournit.
    Mais ça m'étonnerais qu'il lise tout et comprenne tout.
    Vive le C => Quoique pas sympa pour la mémoire de mon PC.

    Seul le chat le savait!!!!

    De la rigueur en programmation est maître mot!!!

  18. #38
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Salut,

    Pour une discussion détaillée des nombres aléatoires en C, voici un document écrit par Jean-Marc Bourguet: http://www.bourguet.org/cpp/random.pdf

    Par ailleurs, je ne vois pas où tu veux en venir en disant que la valeur fournie par rand() n'est pas assez aléatoire. Moyennant une initialisation du générateur avec time(NULL), on obtient quelque chose qui convient à la plupart des utilisations. Pour aller plus dans les détails, voir le document ci-dessus, la FAQ http://c.developpez.com/faq/c/?page=..._random_bornes, et Numerical Recipes in C: http://www.nrbook.com/b/bookcpdf.php.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  19. #39
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,
    Citation Envoyé par theshark85
    Oui avec un cour, comme le lien que je lui ais fournit.
    Mais ça m'étonnerais qu'il lise tout et comprenne tout.
    Pourquoi présumer cela ?

    C'est ton cas que tu projettes sur autrui ?
    Compilation sans erreur ne signifie pas programme sans erreur.
    L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.

  20. #40
    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 thewho
    Pourquoi présumer cela ?
    Oui, moi aussi, ça m'agace quand on prétend penser à la place des autres...
    C'est ton cas que tu projettes sur autrui ?
    Bzzt ! Pas d'attaque personnelle à 2 balles...

    Inutile et inefficace.
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. Tirage au sort pour un tournoi de belote
    Par aldom dans le forum VB.NET
    Réponses: 1
    Dernier message: 24/06/2007, 20h43
  2. Quelle fonction pour faire un tirage au sort de noms
    Par Sofie109 dans le forum VBA Access
    Réponses: 6
    Dernier message: 01/06/2007, 14h52
  3. Tirage au sort
    Par Titeuf82 dans le forum Ada
    Réponses: 5
    Dernier message: 17/04/2007, 11h05
  4. [VBA-E] Tirage au sort avec probabilité
    Par clarisse dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 12/05/2006, 11h01
  5. Tirage au sort
    Par clampin dans le forum Langage
    Réponses: 2
    Dernier message: 19/12/2005, 16h38

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