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 :

Simuler le jeu des chiffres et des lettres


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 44
    Par défaut Simuler le jeu des chiffres et des lettres
    On s’intéresse dans ce projet uniquement à la partie des lettres
    ************
    Le programme consiste à choisir 9 lettres (des consonnes et
    des voyelles)
    Si l’utilisateur choisis une consonne la machine doit choisir au hasard une consonnes
    De même pour les voyelles. Evidemment les consonnes et les voyelles n’ont pas la même probabilité d'apparaître et à vous de réfléchir à ce problème.
    Après le tirage des 9 lettres la machine va donner un temps de réflexion à l’utilisateur (40 secondes )
    L’utilisateur doit taper ensuite le mot le plus long qu’il peut trouver. Evidemment la machine doit :
    - Vérifier si les lettres figures parmi le tirage ( on ne peut pas utiliser deux fois la même lettre sauf si elle figure une autre fois dans le tirage )
    - Vérifier si le mot figure dans le dictionnaire français.


    ****
    j'ai commencé par ce code ( juste l'affichage des 9 lettres - mélange des voyelles et consonnes)
    mais il y a une erreur dans l'affichage


    merci de m'aider

    je suis débutant


    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
     
    int main()
     
    {
     
    char lettre=0;
     
    char tab[9];
    int i=0;
    do {
     
    printf("Entrez une lettre\n");
    scanf("%c", &tab[i]);i++;
    if (lettre == 'a' || lettre == 'e' || lettre == 'i' || lettre == 'o' || lettre == 'u' || lettre == 'y')
    {
    do
    {
    srand(time(NULL));
    tab[i] = (rand() % ('z' - 'a'+ 1)) + 'a';
    }
    while (lettre == 'a' || lettre == 'e' || lettre == 'i' || lettre == 'o' || lettre == 'u' || lettre == 'y');
     
    }
    else
    {
    do
    {
    srand(time(NULL));
    tab[i] = (rand() % ('z' - 'a'+ 1)) + 'a';
    }
    while (lettre == 'b' || lettre == 'c' || lettre == 'd' || lettre == 'f' || lettre == 'g' || lettre == 'h');
        i++;
     
    }
      getchar();
    }
    while (i<9);
    return 0;
     
     
     
     for (i=0;i<9;i++)
     
        printf("%c", tab[i]);
     
    return 0;
     
    }

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Ton indentation ! J'espère pour toi que c'est juste une erreur de copier/coller, sinon tu as beaucoup de soucis de lisibilité à te faire...

    Concernant l'affichage, c'est normal que tu aies un "problème"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    return 0;
     
     
     
     for (i=0;i<9;i++)
     
        printf("%c", tab[i]);
     
    return 0;
     
    }
    Il y a un return 0; en trop, ce qui fait que jamais tu ne rentres dans ta boucle d'affichage.

    Petite remarque concernant le srand(time(NULL));, il s'agit ici de la fonction servant d'amorce à la fonction rand(). Tu n'as pas besoin de le réinitialiser à chaque fois, le faire une seule fois en début de programme est amplement suffisant dans ton cas.

    Pense aussi éventuellement à blinder tes saisies, vérifie que l'on te rendre bien une lettre, et non un chiffre (ou tout autre caractère non voulu).

    J'espère que tu vas faire évoluer le code encore, car là il y a au moins une belle boucle infinie, à hauteur du while (lettre == 'a' || lettre == 'e' || lettre == 'i' || lettre == 'o' || lettre == 'u' || lettre == 'y');.

    Fait attention aussi car tu ne rentres dans aucune de tes conditions, jamais tu n'assignes de valeur à lettre.
    Si tu veux aussi, tu pourrais aussi alléger ton code en créant une fonction du genre int isvoyelle(const char test); qui te renverrais 0 ou 1 suivant que le caractère rentré en paramètre est une voyelle ou non.

    Je suppose que toute la partie des if est pour le moment optionnel ?
    Dernière modification par Invité ; 03/12/2014 à 22h48.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Tu aimes faire des calculs inutiles ? Pourquoi écrire rand() % ('z' - 'a' + 1) et pas simplement rand() % 26 ???

    Sinon quand une lettre n'est pas une voyelle c'est alors forcément une consonne. Donc plutôt que de commencer à regarder si lettre = 'b' ou 'c' ou 'd' ou..., autant regarder si ce n'est pas une voyelle. Accessoirement créer une fonction isVoyelle() te faciliterait ensuite tous ces tests...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 44
    Par défaut
    Je vous remercie

    je suis un très débutant en C ; c'est pour ça je n'ais pas utilisé les fonctions

    si vous le permettez veuillez me guider pour améliorer cette partie
    comment je crée la fonction isVoyelle et surtout comment l'appeler

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par iMech Voir le message
    Je vous remercie

    je suis un très débutant en C ; c'est pour ça je n'ai pas utilisé les fonctions
    si vous le permettez veuillez me guider pour améliorer cette partie
    comment je crée la fonction isVoyelle et surtout comment l'appeler
    Est-ce un projet de cours ? Si c'est le cas, avez-vous déjà vu les fonctions ? Ou simplement avez-vous "peur" de les utiliser ?

    Si ce n'est point un projet de cours, et que vous apprenez en autodidacte, je vous conseille de lire de la documentation, ceci par exemple.

    Si c'est un projet de cours, et que vous n'avez pas encore vu les fonctions... Sauf si c'est demandé explicitement par votre professeur (ou que c'est sous-entendu), n'essayez pas d'aller trop vite et concentrez-vous sur le but de l'exercice (manipulation de caractères, à première vue). Une fois la logique acquise, il sera bien assez temps pour vous plonger dans de nouvelles choses.

    Si c'est plutôt que vous n'êtes pas à l'aise avec les fonctions d'une manière générale, je vous conseille de vous entraîner, faites un petit programme de test utilisant des fonctions, apprenez et comprenez la logique qu'il y a derrière. Plus vous les utiliserez, plus vite vous serez en confiance. C'est le meilleur moyen pour se lancer dans le grand bain.

    Si c'est un projet de cours ET que vous les avez déjà vues.. Relisez votre cours !
    Toute les informations nécessaires à la création et à l'utilisation d'une fonction devraient être dedans.

    Sinon, pour répondre à la question...
    "Il suffit" alors de transférer le test if((lettre == 'a' || lettre == 'e' || lettre == 'i' || lettre == 'o' || lettre == 'u' || lettre == 'y') vers la fonction, et le tour est joué.
    Avec un prototype du genre int isVoyelle(const char test);, je pense que vous avez toutes les cartes en main pour réaliser ce dont vous avez besoin.
    Dernière modification par Invité ; 04/12/2014 à 18h16.

  6. #6
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 44
    Par défaut
    bonjour, ce travail est dans le cadre d'un mini projet
    le prof nous a laissé la liberté de choisir la méthode chacun selon son niveau et il a dis de se documenter du NET en attendant quand commence à étudier le C dans 5 jours.

    j'ai corrigé un peux suivant vos conseils
    j'ai un affichage mais un peux bizarre " une lettre puis un caractère spéciaux puis une lettre puis un caractère spéciaux ( 8 fois...)

    le problème dans la boucle while je pense

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
     
    int main()
     
    {
     
    char lettre=0;
     
    char tab[9];
    int i=0;
    do {
     
    printf("Entrez une lettre\n");
    scanf("%c", &tab[i]);i++;
    if (lettre == 'a' || lettre == 'e' || lettre == 'i' || lettre == 'o' || lettre == 'u' || lettre == 'y')
    {
    do
    {
    srand(time(NULL));
    tab[i] = (rand() % 26);
    }
    while (lettre == 'a' || lettre == 'e' || lettre == 'i' || lettre == 'o' || lettre == 'u' || lettre == 'y');
    return 0;
    }
    else
    {
    do
    {
    tab[i] = (rand() % 26);
    }
    while (lettre == 'b' || lettre == 'c' || lettre == 'd' || lettre == 'f' || lettre == 'g' || lettre == 'h');
        i++;
     
    }
      getchar();
    }
    while (i<9);
     
     
     for (i=0;i<9;i++)
     
        printf("%c", tab[i]);
     
     
    }

    merci d'avoir un peux de patience avec moi

    je veux corrigé l'affichage puis lundi je vais refaire le travail en utilisant les fonctions.

    merci encore une fois

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

Discussions similaires

  1. [Sources] Jeu des chiffres et des lettres
    Par User dans le forum Contribuez
    Réponses: 31
    Dernier message: 20/01/2025, 12h36
  2. Le jeu des chiffres et des lettres
    Par shayw dans le forum Contribuez
    Réponses: 0
    Dernier message: 22/05/2014, 22h56
  3. Ecrire des chiffres en toutes lettres
    Par ali_Imouzzer dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 21/02/2007, 18h44
  4. remplacer des chiffres par des lettres, & vis versa
    Par Argorate dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/08/2006, 19h36

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