Partage
  • Partager sur Facebook
  • Partager sur Twitter

TP pendu langage C

Demande d'avis

10 mai 2010 à 21:58:56

Bonjour à tous !

voilà je suis entrain d'essayer d'apprendre à programmer en C et j'ai fait le tp du pendu.
Pour le moment je n'ai fais que la première partie, c'est à dire que je n'ai pas encore intégré le système de dictionnaire. Je voulais vous proposez mon Code et que vous me disiez si il vous semble optimisé.
Le code fonctionne parfaitement mais je n'ai pas du tout fait comme dans la correction :-°
Mon fichier pendu.h contient seulement deux prototypes et un define, je pense donc qu'il n'est pas vraiment nécessaire de le mettre :D

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include "pendu.h"




int main()
{
    char mot_secret[MAXIMUM] = "MARRON";     //Mot à deviner
    char ma_lettre;     // Lettre saisie
    char mon_mot[MAXIMUM] = "XXXXXX";    // Mot pas encore deviner
    int nombre_de_coup = 10;    //Nombre de coup restant pour deviner
    int longueur_mot = strlen(mot_secret);

    printf("Bonjour et bienvenue sur le jeu du pendu !\n\n\n");
    printf("Le principe est simple : Trouver le mot secret en proposant des lettres.\n");
    printf("Vous avez le droit a 10 erreurs. Si vous faites 10 erreurs, vous avez perdu.\n");
    printf("Les accents et le caracteres speciaux ne sont pas prit en compte.\n");
    printf("Vous etes pret ? Alors allons y !\n\n");
    printf("Quel est le mot secret ? %s\n", mon_mot);
    printf("Proposez une lette :");

    do
    {

        ma_lettre = lireCaractere();
        int reste_chaine = strchr(mot_secret, ma_lettre);   //Reste chaine représente la chaine à partir du caractère ma_lettre

        if(strchr(mot_secret, ma_lettre) == NULL)   //Test si la lettre est dans le mot secret
        {
            nombre_de_coup--;
            printf("\n\nNon, \"%c\" n'est pas dans le mot !\nIl ne vous reste plus que %d erreurs !\n\n", ma_lettre, nombre_de_coup);
            printf("Quel est le mot secret ? %s\n", mon_mot);
            printf("Proposez une lette :");

            if(nombre_de_coup == 0)
            {
                system("cls");
                printf("\n\n\nVous n'avez plus d'essai, vous etes mort...\n\n\n");
                return 0;
            }
        }
        else
        {

            int i;

            for( i = 0 ; i < longueur_mot; i++) //remplacement de la lettre dans mon mot ( le mot tel qu'il sera afficher : XXXXX )
            {

                if(ma_lettre == mot_secret[i])
                {

                    mon_mot[i] = mot_secret[i];
                }
            }

            printf("\n\nSuper ! \"%c\" est dans le mot !\n", ma_lettre);
            printf("Quel est le mot secret ? %s\n", mon_mot);
            printf("Proposez une lette :");

        }

    }while(strcmp(mon_mot, mot_secret)!= 0);

    system("cls");
    printf("\n\n\nBravo vous avez trouver le mot secret, c'etait bien %s !\n\n\n", mot_secret);

    return 0;

}

char lireCaractere()
{
    char caractere;

    caractere = getchar(); // On lit le premier caractère
    caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà

    // On lit les autres caractères mémorisés un à un jusqu'à l'\n (pour les effacer)
    while (getchar() != '\n') ;

    return caractere; // On retourne le premier caractère qu'on a lu

}
  • Partager sur Facebook
  • Partager sur Twitter
11 mai 2010 à 1:34:59

Ca marche, c'est le principal. Après ce n'est qu'une question de propreté et d'algorithme utilisé.
Ici, ce programme est pas trop gros ni complexe, donc à part mieux diviser les étapes (avec plus de fonctions), c'est très bien :)
  • Partager sur Facebook
  • Partager sur Twitter
11 mai 2010 à 6:45:27

Et un conseil, laisse ton .h, on sait jamais si un jour tu comptes l'améliorer et rajouter pas mal de fonctions :D
  • Partager sur Facebook
  • Partager sur Twitter
11 mai 2010 à 8:42:11

Je n'ai pas encore le réflexe "Et si je créer ma fonction pour faire ça ?". Mais je suppose que ca viendra avec le temps et la difficulté des projets ^^

En tout cas merci à vous pour vos avis :)
  • Partager sur Facebook
  • Partager sur Twitter
11 mai 2010 à 9:29:05

Ce que je peux te conseiller pour t'améliorer et apprendre les bons réflexes (c'est à dire pas tout foutre dans le main), crée une fonction verifierLettre qui pourra comparer la lettre entrée avec chaque lettre du mot mystère. Son prototype devrait être quelque chose du genre :
void verifierLettre(char lettreSaisie, char motSecret[]);

Il te faudra aussi peut-être utiliser un tableau de int qui contiendra, à chaque endroit, 0 si l'utilisateur n'a pas trouvé la lettre et 1 s'il l'a trouvé. A ce moment, le prototype prendra également ce tableau en compte.
void verifierLettre(char lettreSaisie, char motSecret[], int tableauLettresTrouvees[]);


Tu peux après en créer une fonction verifierMot qui renverra 1 si l'utilisateur a gagné ou 0 s'il a perdu. Le prototype sera :
int verifierGagner(int tableauLettresTrouvees[]);


Enfin bref, ton pendu fonctionne et c'est le principale ! Mais entraine-toi a faire des fonctions !!! Plein de fonctions !!! Tu verras, plus tard, tu prendras le réflexe (tu ne pensera même plus à tout mettre dans le main) et ton code sera beaucoup plus claire et plus facile pour toi pour t'y retrouver et le modifier :)

ps : et se sera aussi plus facile pour trouver tes erreurs, ou demander de l'aide sur le forum :D
  • Partager sur Facebook
  • Partager sur Twitter
Lorsque l'on fait une recherche google, on tombe sur des forums qui nous disent de chercher sur google...
24 avril 2015 à 18:22:10

Bonjours tout le monde ! j'esper avoir avoir votre aide pour pouvoir réaliser ce TP. J'en ai vraiment besoin et depuis je m'y mets à fond, votre aide svp.

Ecrire un programme qui gère la saisi et le calcul des moyennes des élèves dans un établissement. Le programme pourra au moins effectuer les tâches suivantes :

ØCréer une classe

ØCharger une classe

ØAjouter un élève dans une classe

ØTransférer un élève dans une autre classe

ØModifier élève

ØDéfinir les matières et leur coefficient dans une classe

ØAttribuer une matière a un prof dans une classe

ØDéfinir la liste des profs par matière

ØAjouter un prof

ØModifier un prof

ØModifier le prof d’une classe selon une matière

ØSaisir notes des élèves par matière

ØCalculer moyenne des élèves d’une classe

ØAfficher les résultats d’un élève

ØAffichez les résultats d’une classe : par ordre de mérite

ØAfficher la liste des élèves d’une classe

ØAfficher la liste des profs d’une classe

ØAfficher le prof d’une classe selon une matière

NB : Tous les informations relatives aux élèves aux notes et aux profs sont stockées dans des fichiers. 

  • Partager sur Facebook
  • Partager sur Twitter
25 avril 2015 à 7:58:13

MouhAmmad2 tu devrais créer ton propre topic là tu squattes celui d'un autre (Gaïus). Cela t'ôte des chances qu'on voit ton problème et qu'on t'aide puisqu'on ne le voit pas dans la liste des topic.

:)

  • Partager sur Facebook
  • Partager sur Twitter
4 mai 2015 à 14:34:09

je sais ms j'aimrai bien avoir votre aide pour le realiser car j'y connai pas grand chose
  • Partager sur Facebook
  • Partager sur Twitter
5 mai 2015 à 8:12:45

Bonjour MouhAmmad2,

Si tu sais qu'il te faut créer ton propre topic, pourquoi ne le fais tu pas ? (ce n'est pas plus compliqué ce créer un topic que de poster une réponse sur un topic existant).

Le topic que tu viens de remonter date de 2010, il n'y a vraiment peu de chance que quelqu'un te réponde ici.

Je ferme pour déterrage.

PS: nous ne sommes pas ici pour faire ton devoir à ta place, il faudrait nous montrer ce que tu as essayé de faire en postant de code de façon à ce que l'on puisse te guider dans les corrections à apporter.

-
Edité par lorrio 5 mai 2015 à 8:20:35

  • Partager sur Facebook
  • Partager sur Twitter