Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercices pour débutants en C

Au menu : zSommeChiffres (nombres, algo)

18 janvier 2009 à 9:36:57

Citation : mota

Cette meme curiosite est un reel atout, en particulier en informatique, et boire les paroles d'un tiers ne mene jamais rellement a quelque chose de productif, que le demandeur de solution soit novice, ou non.


......... je vois pas pourquoi tu vas encore à l'école? Les paroles d'un tiers comme tu dis ont été nécessaire pour que tu sois seuvré.........A mon avis tu as oublié.

Le novice je vais t'en parler puisque j'en suis un dans ce domaine: on a besoin d'une période de seuvrage plus ou moins longue, pour la simple raison que nous avons pas mal de problèmes à régler au début:
1. S'habituer à l'anglais (dans mon travail je m'en suis jamais servi,et il y a 25 ans que j'ai quitté les bancs de l'ecole !)
2. on a un IDE télécharger sur le net qui apparemment n'est pas correctement regler, ou tres permissif
3.Comprendre comment fonctionne sa machine: qu'est que la ram, la rom, memoire video,.....
4.Apprentissage d'un langage, comment cela s'articule

et la liste peut s'alonger en fonction du niveau de chacun.

Or ce site se veut "solidaire par des tiers" et il me semble que quand on a eu un coup de main (pour ma part j'essaye) je rends l'appareil, et je ne me contente pas de repondre à coté de la plaque !

Pour ta gouverne , les principales étapes en matiere de formation :
1 . on évalue
2 . on accompagne au début
3 . on lui donne des moyens pour qu'il devienne autonome
4 . au besoin on lui denne quelques astuces : ou quand comment ?
5 . on regarde s'il a les moyens de devenir autonome
  • Partager sur Facebook
  • Partager sur Twitter
18 janvier 2009 à 15:36:47

bon sinon à part ça ...

Très bonne initiative de Crys' que de nous donner des petits exercices. Rien de telle que la pratique. MERCI !!!

J'ai quasiement fini le programme mais la fonction clock() ne fonctionne pas chez moi. elle me revnoi toujour 0 (zero).
En gros je me suis inspiré du lien donné dans l'énnoncé pour écrire un truc du genre :

clock_t tempsDebut = 0, tempsFin = 0;
double tempsTotal = 0;
tempsDebut = clock();
jeu(); // déroulement du jeu

tempsFin = clock ();
tempsTotal = (double)((tempsFin-tempsDebut)/CLOCKS_PER_SEC);

printf("Vous avez fini en %.3lf secondes\n", tempsTotal);


le printf m'affiche "Vous avez fini en 0,000 secondes.
J'ai bien fait un #include <time.h> ... y aurait-il un truc que je n'ai pas compris ?

Merci
  • Partager sur Facebook
  • Partager sur Twitter
18 janvier 2009 à 15:41:42

Essaie de remplacer
(double)((tempsFin-tempsDebut)/CLOCKS_PER_SEC);
par
((tempsFin-tempsDebut) / (double) CLOCKS_PER_SEC);
  • Partager sur Facebook
  • Partager sur Twitter
18 janvier 2009 à 15:45:06

Citation : python-guy

Essaie de remplacer
(double)((tempsFin-tempsDebut)/CLOCKS_PER_SEC);
par
((tempsFin-tempsDebut) / (double) CLOCKS_PER_SEC);



Merci pour ta réponse
Toujours pareil... J'ai l'impression que c'est la fonciton qui ne marche pas...
  • Partager sur Facebook
  • Partager sur Twitter
18 janvier 2009 à 15:57:48

J'ai déjà posté une solution possible, en effet clock() ne fonctionnera pas comme on le veut.

Voici le post en question
  • Partager sur Facebook
  • Partager sur Twitter
18 janvier 2009 à 16:19:45


bonjour,

Citation : Eusebus

J'ai déjà posté une solution possible, en effet clock() ne fonctionnera pas comme on le veut.

Voici le post en question


je comprends pas le probleme évoqué, cela parait fonctionner chez moi?

qu'entends tu par la fonction scanf est bloquante?
qu'entends tu par "en effet clock() ne fonctionnera pas comme on le veut."
merci
@+


/*librairie standart à inclure */
#include <stdio.h>
#include <stdlib.h>
/*utilisation pour la fonction time */
#include <time.h>
/* utilisation pour manipuler les chaines de caracteres */
#include <string.h>
/* utilisation pour avoir un peu de couleur */
#include <conio2.h>



#define MAX 10
#define MIN 1

#define noir BLACK
#define jaune YELLOW
#define blanc WHITE
#define rouge RED


int zaleatoire(void);
int zcalcul(int tour);
void zdebut(void);
void zjeux(void);


/*corps principal du programme*/
int main(void)
{

    srand(time(NULL));/*initialisation du mode aleatoire */
    zdebut();
    zjeux();
return 0;
}


int zaleatoire(void) /*en entree rien*/
{
    int aleatoire;

    aleatoire = (rand() % (MAX - MIN + 1)) + MIN; /* MIN <= aleatoire <= MAX */

    return aleatoire;/*en sortie un nombre INT aleatoire*/
}

int zcalcul(int tour) /*en entree le nombre de fois que l'on effectue zcalccul*/
{
    int score=0;
    long nombreA,nombreB,resultatA,resultatB;
    printf("operation numero %d :  ",tour+1);

    /* tirage aleatoire des deux nombres */
    nombreA=zaleatoire();
    nombreB=zaleatoire();

    /*affichage de l operation a effectuer */
    textcolor(jaune);
    printf("%ld X %ld =",nombreA,nombreB);
    textcolor(blanc);

    /*attente par l utilisateur , entrer nombreA*/
    scanf("%ld",&resultatA);

    /* calcul du resultat correct */
    resultatB= nombreA * nombreB;

    /*comparaison des resultats */
    if (resultatA==resultatB)
        { score =1;}
    else
        {
            score =0;
            printf("Faux, le resultat correct est");
            textcolor(rouge);
            printf(" %ld \n",resultatB);
            textcolor(blanc);

        }
    printf("\n");
    return score;/*en sortie le score de zcalcul 1=correct, 0 calcul faux*/
}

void zdebut(void)
{
    textbackground(blanc);
    textcolor(noir);
    printf("Zgame exercice du mois de janvier 2009 propose par Chrys  \n");
    printf("--------------------------------------------------------  \n");
    printf("Le but est de faire du calcul mental avec les tables de   \n");
    printf("                multiplication                            \n\n\n");
    printf("Vous devez effectuer 10 multiplications le plus rapidement\n");
    printf("possible, alors vous etes pret, c est partie              \n");
    printf("..........................................................\n\n\n");
    textbackground (noir);
    textcolor(blanc);
}

void zjeux(void)
{
    int i;
    int nombreOperation = 10;
    int zscore = 0;
    clock_t t1, t2;

    t1 = clock();/*temps de depart*/

    for(i=0;i<nombreOperation;i++)
    {
       zscore = zscore + zcalcul(i);
    }
    t2 = clock();/*temps final*/

    printf("votre score est de %d / 10 \n",zscore);
    printf(" En : %.3lf secondes \n", (double)(t2-t1)/CLOCKS_PER_SEC);
}
  • Partager sur Facebook
  • Partager sur Twitter
18 janvier 2009 à 17:14:23

Citation : mota

J'ai pondu un code pour une correction d'un exercice ici parce que
j'estimais que le sujet n'employait pas un vocabulaire exact.


Comme la suite va le montrer, tu n'es pas en position de donner des leçons.

Citation : mota

A toi de le retrouver,


Non, ce serait à toi, car tu est censé davantage savoir que moi où tu as posté ton code.

Citation : mota

A toi de le retrouver, et si tu ne trouves pas beau,


Merci de te relire.

Citation : mota


Cette meme curiosite est un reel atout, en particulier en informatique, et boire les paroles d'un tiers ne mene jamais rellement a quelque chose de productif, que le demandeur de solution soit novice, ou non.


Tu parles pour toi. En tous cas, quand je vois la solution que tu produis pour un exercice facile
destiné aux débutants, je me dis que tu ferais mieux de travailler moins avec tes pages man et un
peu plus avec ta tête et tant qu'à faire, faire preuve d'un petit moins d'arrogance puisque tu n'as
pas le niveau de tes prétentions.

Venons-en à ton code, que je rappelle :

Citation : mota


#include <stdlib.h>                                                             
#include <stdio.h>                                                              
                                                                                
#define DIFF    ('A' - 'a')                                                     
#define ISCHAR(x) ((x >= 'a' && x <= 'z') || (x >='A' && x <= 'Z') ? 1 : 0)      
                                                                                
char    *zStrcap(char *str);                                                    
                                                                                
int     main(int ac, char **av)                                                 
{                                                                               
  if (ac == 2)                                                                  
    printf("%s\n", zStrcap(av[1]));                                             
  return (EXIT_SUCCESS);                                                        
}                                                                               
                                                                                
char    *zStrcap(char *str)                                                     
{                                                                               
  int   i;                                                                      
                                                                                
  i = 0;                                                                        
  while (str && str[i])                                                         
    {                                                                           
      if ((!i || !ISCHAR(str[i - 1])) && str[i] >= 'a' && str[i] <= 'z')        
        str[i] += DIFF;                                                         
      if (i && ISCHAR(str[i - 1]) && str[i] >= 'A' && str[i] <= 'Z')            
        str[i] -= DIFF;                                                         
      ++i;                                                                      
    }                                                                           
  return (str);                                                                 
}


Le problème était le suivant :

Citation : Invading


Vous devez coder la fonction strcapitalize: elle met en majuscule la premiere lettre d'une phrase,
et tout le reste en minuscule. (...)
Voici une serie d'exemple, regardez les bien:

"saLut les zeRos."


Salut les zeros.




Or, si on entre par exemple
saLut les zeRos-zeRos.


ton code C donne

SaLut Les Zeros-Zeros.


Bref, tu n'as même pas compris l'énoncé ou alors tu l'as compris mais ton code est tout faux.

En outre, il est étonnant de voir le nombre excessif de maladresses et de complications que contient ton code alors que le problème était d'une simplicité enfantine. Si tu te décides à modifier ton code pour qu'il réponde au problème posé, je passerai en revue ton code pour te mettre les points sur les I. Bref, je commence à comprendre pourquoi tu ponds si peu de code et pourquoi ton aide sur ce forum consiste à renvoyer vers les pages man et à nous citer le nom de l'école dans laquelle tu étudies.



  • Partager sur Facebook
  • Partager sur Twitter
18 janvier 2009 à 17:17:50

Citation : Eusebus

J'ai déjà posté une solution possible, en effet clock() ne fonctionnera pas comme on le veut.

Voici le post en question


Oui j'ai aussi réussi à le faire à la seconde près en utilisant la fonction localtime.
Mais J'aurais aimé utiliser clock pour avec des dixièmes.

Oui qu'entend tu par

Citation : Eusebus

en effet clock() ne fonctionnera pas comme on le veut.


meme si ça marche pas comme on veut, ça devrait sortir un chiffre ou un numéro. Chez moi ça sort un zero !

ps : Si vous pouviez arreter les règlements de comptes qui polluent ce sujet, ça serait sympa !!
  • Partager sur Facebook
  • Partager sur Twitter
18 janvier 2009 à 17:34:44

Citation : myst

meme si ça marche pas comme on veut, ça devrait sortir un chiffre ou un numéro. Chez moi ça sort un zero !



je comprends pas pourquoi ça sort un zero ? montre ton code pour voir, chez moi ça parait correct :

Zgame exercice du mois de janvier 2009 propose par Chrys
--------------------------------------------------------
Le but est de faire du calcul mental avec les tables de
                multiplication


Vous devez effectuer 10 multiplications le plus rapidement
possible, alors vous etes pret, c est partie
..........................................................


operation numero 1 :  1 X 10 =10

operation numero 2 :  10 X 8 =80

operation numero 3 :  4 X 1 =4

operation numero 4 :  7 X 1 =7

operation numero 5 :  10 X 6 =60

operation numero 6 :  3 X 1 =3

operation numero 7 :  2 X 9 =18

operation numero 8 :  4 X 7 =28

operation numero 9 :  4 X 8 =32

operation numero 10 :  5 X 5 =25

votre score est de 10 / 10
 En : 19.968 secondes

Process returned 0 (0x0)   execution time : 19.984 s
Press any key to continue.

cf code plus haut !








  • Partager sur Facebook
  • Partager sur Twitter
18 janvier 2009 à 17:41:57

zx-spectrum : j'ai testé ton code directement pour voir. et ça donne toujours un Zero ! :


Citation : Pas de titre

[mysthr@myhost zGames]$ ./test
Zgame exercice du mois de janvier 2009 propose par Chrys
--------------------------------------------------------
Le but est de faire du calcul mental avec les tables de
multiplication


Vous devez effectuer 10 multiplications le plus rapidement
possible, alors vous etes pret, c est partie
..........................................................


operation numero 1 : 5 X 8 =5
Faux, le resultat correct est 40

operation numero 2 : 7 X 10 =70

operation numero 3 : 7 X 10 =70

operation numero 4 : 1 X 9 =9

operation numero 5 : 2 X 1 =2

operation numero 6 : 2 X 5 =10

operation numero 7 : 5 X 2 =10

operation numero 8 : 10 X 7 =70

operation numero 9 : 6 X 1 =6

operation numero 10 : 7 X 6 =30
Faux, le resultat correct est 42

votre score est de 8 / 10
En : 0.000 secondes
[mysthr@myhost zGames]





Bizare cette histoire.
  • Partager sur Facebook
  • Partager sur Twitter
18 janvier 2009 à 17:47:50

Citation : undefined

Bizare cette histoire.


je suis d'accord avec toi !
je crois avoir compris la signification de blocante pour "scanf", et pourquoi le resultat de clock() n'est pas a la hauteur de nos esperances.
j'ai pris un chronomètre pour tester en réel le decompte du temps.
Resultat : mon chronomètre donne plus de temps que ce que mon programme me donne
ma conclusion : pendant que le programme execute un "scanf" le décompte du temps ne se fait pas.....donc je revoie ma copie, :p

--> Eusebus +1 !
  • Partager sur Facebook
  • Partager sur Twitter
18 janvier 2009 à 17:51:41

ok !
Donc ce qui veut dire qu'on a pas vraiment de moyen d'afficher des dixièmes de secondes alors ? Il faudra se contenter d'un time() qui n'affichera au mieux que des secondes.
  • Partager sur Facebook
  • Partager sur Twitter
18 janvier 2009 à 18:04:47

Citation : Mysth-R

ok !
Donc ce qui veut dire qu'on a pas vraiment de moyen d'afficher des dixièmes de secondes alors ?



Non, ce n'est pas possible de manière portable comme on l'a déjà dit dans ce fil.
  • Partager sur Facebook
  • Partager sur Twitter
18 janvier 2009 à 20:42:22

Bien j'ai codé un jeu de ce style, il y a environs 2 semaines, il ne correspond pas tout a fait a la régle imposé, c'est plus un jeu grandement amélioré, par contre je pense que le code est aussi grandement améliorable, parceque je le trouve trés long, pour un rendus acceptable. Je n'ai pas trouvé ce code difficile, sauf pour le temps ou j'ai du regarder le fonctionnement dans un livre sur le langage C.

Ma solution.

Voici le main.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#include "afficheRegle.h"
#include "afficheNiveau.h"
#include "afficheDefaite.h"

#define MAX 10
#define MIN 1
#define MAXI 20

int main(int argc, char *argv[])
{
    time_t start, finish;
    clock_t top_start, top_finish;
    long a = 0, b = 0, c = 0, choix = 0, abc = 0, abC = 0, niveau = 0;
    long pif = 0, nb1 = 0, nb2 = 0, nb3 = 0, nb4 = 0, temps = 0, ABC = 0, aBC = 0;
    double duree;
    struct tm
    {
        int tm_sec;
    }buf = {0};

    srand(time(NULL));

    while (choix != 2)
    {
        long score = 0;

        afficheRegle();
        scanf("%ld", &choix);
        system("CLS");

        if (choix == 2)
            return 0;

        else if (choix != 1 && choix != 2)
        {
            printf("\n\n\n\n\n\n\n\n\t\tVeuillez entrez un choix correcte, s'il vous plait.\n\n");
            system("PAUSE");
            system("CLS");
        }

        else
        {
            while (score <= 40)
            {
                niveau = afficheNiveau(score, temps);
                temps = afficheNiveau(score, temps);

                a = (rand() % (MAX - MIN + 1)) + MIN;
                b = (rand() % (MAX - MIN + 1)) + MIN;
                c = (rand() % (MAX - MIN + 1)) + MIN;
                pif = (rand() % (MAXI - MIN + 1)) + MIN;

                nb1 = a * (b + c);
                nb2 = a * (b - c);
                nb3 = (a * b) + c;
                nb4 = (a * b) - c;

                if (pif <= 5)
                {
                    start = time(0);
                    top_start = time(&buf);

                    printf("\n%c %ld * (%ld + %ld) = ", 16, a, b, c);
                    scanf("%ld", &abC);

                    finish = time(0);
                    top_finish = time(&buf);

                    duree = difftime(finish, start);

                    if (abC == nb1 && duree < temps)
                        score++;

                    else if (abC == nb1 && duree > temps)
                    {
                        afficheDefaite(duree, score);
                        break;
                    }

                    else
                    {
                        afficheDefaites(nb1, score);
                        break;
                    }
                }

                else if (pif > 5 && pif < 10)
                {
                    start = time(0);
                    top_start = time(&buf);

                    printf("\n%c %ld * (%ld - %ld) = ", 16, a, b, c);
                    scanf("%ld", &abc);

                    finish = time(0);
                    top_finish = time(&buf);

                    duree = difftime(finish, start);

                    if (abc == nb2 && duree < temps)
                        score++;

                    else if (abc == nb2 && duree > temps)
                    {
                        afficheDefaite(duree, score);
                        break;
                    }

                    else
                    {
                        AfficheDefaite(nb2, score);
                        break;
                    }
                }

                else if (pif >= 10 && pif < 15)
                {
                    start = time(0);
                    top_start = time(&buf);

                    printf("\n%c (%ld * %ld) + %ld = ", 16, a, b, c);
                    scanf("%ld", &ABC);

                    finish = time(0);
                    top_finish = time(&buf);

                    duree = difftime(finish, start);

                    if (ABC == nb3 && duree < temps)
                        score++;

                    else if (ABC == nb3 && duree > temps)
                    {
                        afficheDefaite(duree, score);
                        break;
                    }

                    else
                    {
                        AfficheDefaites(nb3, score);
                        break;
                    }
                }

                else if (pif >= 15)
                {
                    start = time(0);
                    top_start = time(&buf);

                    printf("\n%c (%ld * %ld) - %ld = ", 16, a, b, c);
                    scanf("%ld", &aBC);

                    finish = time(0);
                    top_finish = time(&buf);

                    duree = difftime(finish, start);

                    if (aBC == nb4 && duree < temps)
                        score++;

                    else if (aBC == nb4 && duree > temps)
                    {
                        afficheDefaite(duree, score);
                        break;
                    }

                    else
                    {
                        AffichEdefaites(nb4, score);
                        break;
                    }
                }

            }
        }

    }

    system("PAUSE");
    return 0;
}


la fonction afficheRegle.c
#include <stdio.h>
#include <stdlib.h>

void afficheRegle()
{
     printf("\t\t\t%cBienvenu dans speed caclcul (version beta)%c\n\n\n", 16, 17);
     puts("Le but du jeu est simple, calculer le plus rapidement possible.");
     puts("Il y a 4 niveaux de prevus avec chacun un temps limite pour repondre.");
     puts("\n\t Niveau 1, vous avez 10s pour calculer un calcul de la forme a * (b + c)\t a * (b - c)\t (a * b) + c ou encore (a * b) - c.");
     puts("\nLa forme des calculs ne varie pas au cours des niveaux, par contre, vous perdez du temps a chaques nouveaux niveaux, c'est a dire tous les 10 calculs.");
     puts("Niveau 2: 7s\tNiveau 3: 5s\tNiveau 4: 3s");
     
     puts("\n\nEtes vous tente par une partie ?");
     printf("%c 1. OUI\n", 11);
     printf("%c 2. NON\n", 12);
     printf("Quel est votre choix : ");   
}


Voici lafonction afficheNiveau.c
#include <stdio.h>
#include <stdlib.h>

long afficheNiveau(long score, long temps)
{
     if(score == 0)
     {
          system("CLS");
          printf("%c %c NIVEAU 1\n", 2, 16);
          temps = 10;
          return temps;
     }
     
     else if(score > 0 && score < 10)
     {
          temps = 10;
          return temps;
     }
     
     else if(score == 10)
     {
          system("CLS");
          printf("%c %c NIVEAU 2\n", 2, 16);
          temps = 7;
          return temps;
     }    
     
     else if(score > 10 && score < 20)
     {
          temps = 7;
          return temps;
     }        
     
     else if(score == 20)
     {
         system("CLS");
         printf("%c %c NIVEAU 3\n", 2, 16);
         temps = 5;
         return temps; 
     }
     
     else if(score > 20 && score < 30)
     {
          temps = 5;
          return temps;
     }        
            
     else if(score == 30)
     {     
          system("CLS");
          printf("%c %c NIVEAU 4\n", 2, 16);
          temps = 3;
          return temps;
     }       
                 
     else if(score > 30 && score < 40)
     {
          temps = 3;
          return temps;
     }       
}


Et pour finir, les fonctions afficheDefaites.c(attention il y en a plusieurs)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

long afficheDefaite(double duree, long score)
{
     system("CLS");
     printf("\n\n\n\n\n\t\t\tDommage, Vous avez mis trop de temps pour repondre: %lf secondes\n\n", duree);
     getchar();
     printf("\t\t\tVous vous arretez donc avec %ld bonnes reponses.\n\n", score);
     getchar();
     system("CLS");
}

void afficheDefaites(long nb1, long score)
{
     system("CLS");
     printf("\n\n\n\n\n\t\t\tDommage, la bonne reponse etait %ld\n\n", nb1);
     getchar();
     printf("\t\t\tVous vous arretez donc avec %ld bonnes reponses.\n\n", score);
     getchar();
     system("CLS");
}

void AfficheDefaite(long nb2, long score)
{
     system("CLS");
     printf("\n\n\n\n\n\t\t\tDommage, la bonne reponse etait %ld\n\n", nb2);
     getchar();
     printf("\t\t\tVous vous arretez donc avec %ld bonnes reponses.\n\n", score);
     getchar();
     system("CLS");
}

void AfficheDefaites(long nb3, long score)
{
     system("CLS");
     printf("\n\n\n\n\n\t\t\tDommage, la bonne reponse etait %ld\n\n", nb3);
     getchar();
     printf("\t\t\tVous vous arretez donc avec %ld bonnes reponses.\n\n", score);
     getchar();
     system("CLS");
}

void AffichEdefaites(long nb4, long score)
{
     system("CLS");
     printf("\n\n\n\n\n\t\t\tDommage, la bonne reponse etait %ld\n\n", nb4);
     getchar();
     printf("\t\t\tVous vous arretez donc avec %ld bonnes reponses.\n\n", score);
     getchar();
     system("CLS");
}


Voila, j'espere que vous pourrez me donner des conseils, je mets ça en secret pour ceux qui n'ont pas encore fait de code et qui ne veulent pas voir d' éventuelle solution. Et aussi parceque sinon sa prendrais beaucoup de place.
  • Partager sur Facebook
  • Partager sur Twitter
18 janvier 2009 à 22:33:18

Moi je propose ca

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

long genereNombre();

int main()
{
        srand(time(NULL));

        long resultat1, resultat2, total, entre;
        clock_t t1, t2;

        char continuer[] = "oui", choix[100];

        do
        {
                long erreur = 0, i = 0;
                t1 = clock();

                printf("\n");

                while(i < 10)
                {
                        resultat1 = genereNombre();
                        resultat2 = genereNombre();

                        total = resultat1 * resultat2;

                        printf("%2d * %2d = ", resultat1, resultat2);

                        scanf("%ld", &entre);

                        if(entre != total)
                        {
                                erreur++;
                        }

                        i++;
                }

                t2 = clock();

                printf("Tu as mis %ld secondes ", (long)(t2-t1)/CLOCKS_PER_SEC);

                if(erreur > 4)
                printf("et tu as fais %ld erreurs, il va falloir t'entrainer", erreur);

                else if(erreur >= 2 && erreur < 5)
                printf("et tu as fais %ld erreurs, c'est pas mal mais tu peux faire encore mieux !!!", erreur);

                else if(erreur == 0)
                printf("et tu n'as pas fais une seule erreur !!! Mais c'etait surement de la chance");

                else if(erreur == 1)
                printf("et tu n'as fais qu'une erreur! Pas mal");

                printf("\n\n"
                           "Veux-tu retester ton potentiel en Math?  ");

                           scanf("%s", choix);


        }while(strcmp(continuer, choix) == 0);

        printf("\n"
                   "Dans ce cas a la prochaine !!\n");

        return 0;
}

long genereNombre()
{
        long nombreMystere;
        long MIN = 1, MAX = 10;
        nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;

        return nombreMystere;
}


Is it good?


  • Partager sur Facebook
  • Partager sur Twitter
19 janvier 2009 à 12:52:27

Citation : candide


[...]



Citation : mota

J'ai pondu un code pour une correction d'un exercice ici parce que j'estimais que le sujet n'employait pas un vocabulaire exact.



Merci de me lire entierement et ne pas selectionner les passages qui te conviennent.

Il aurait ete bien trop bete (et bien plus simple, en effet) de re-proposer une correction pour cet exercice, mais n'ayant pas estime que le sujet etait clair, j'ai trouve souhaitable de proposer une nouvelle version en fonction du vocabulaire employe. (cf: revoir la definition de capitalization si tu n'es pas a l'aise avec la langue de shakespeare).

Bref, en plus d'etre agressif, presomptueux, pedant, hautain, tronque et plein de hargne, ton discours est ininteressant. Je ne vois donc pas du tout l'interet de continuer cette conversation avec toi.

Et je n'ai jamais eu la moindre pretention de savoir plein de choses (contrairement a d'autres) et j'estime avoir encore plein de choses a apprendre, en particulier concernant le langage C, mais certainement pas venant de quelqu'un de ta trempe. Un man a au moins la charmante courtoisie de ne pas etre desagreable

ps: Cordialement
  • Partager sur Facebook
  • Partager sur Twitter
19 janvier 2009 à 18:09:16

Citation : mota


Merci de me lire entierement et ne pas selectionner les passages qui te conviennent.


Tu n'as rien écrit de clair et on ne sait pas à quoi ce que ton programme est censé faire.
La proposition d'exercice donné était non seulement tout à fait valable (pas besoin de changer l'énoncé) mais reconnue Capitalize Sentences Tool (option "Lowercase all other letters (gOOD fOR tEXT lIKE tHIS.)")

Citation : mota

Il aurait ete bien trop bete (et bien plus simple, en effet) de re-proposer une correction pour cet exercice, mais n'ayant pas estime que le sujet etait clair,


Ah oui, en quoi le sujet n'était pas clair ?


Citation : mota

j'ai trouve souhaitable de proposer une nouvelle version en fonction du vocabulaire employe.



Ton code contient en peu de lignes pas mal d'anomalies et de lourdeurs. Par exemple cette macro absolument extraordinaire :

#define ISCHAR(x) ((x >= 'a' && x <= 'z') || (x >='A' && x <= 'Z') ? 1 : 0)


D'une part, tu devrais savoir qu'on protège avec des parenthèses le paramètre (ici x) d'une macro. D'autre part, tu n'a pas beaucoup réfléchi à utiliser l'opérateur ternaire dans ce contexte : d'une façon générale si p est un expression qui prend pour valeurs 0 ou 1, écrire comme tu l'as fait

p ? 1 : 0


N'a AUCUN intéret puisque ça a la même valeur que p.

  • Partager sur Facebook
  • Partager sur Twitter
19 janvier 2009 à 20:45:12

Rien à dire, cette page de fight m'a beaucoup fait progressé dans le langage C, beaucoup...
  • Partager sur Facebook
  • Partager sur Twitter
19 janvier 2009 à 21:09:05

Il serait bien d'arrêter les gueguerres...

Candide, tu es sûrement très calé dans ce domaine, mais j'avoue être un peu lassé de te retrouver régulièrement dans ce genre de conflits, car même si techniquement tu as visiblement une base très solide, je rejoins mota sur le fait que tu t'exprimes d'une manière hautaine assez agaçante!

Tout ça pour dire qu'il est bien que vous échangiez vos points de vue, mais par pitié, arrêtez de vous tirer dans les pattes.

EDIT: j'oubliais que c'est valable aussi pour mota, il faudrait aussi repositionner ton discours.

A +
  • Partager sur Facebook
  • Partager sur Twitter
20 janvier 2009 à 9:26:00

Citation : sebi

je rejoins mota sur le fait que tu t'exprimes d'une manière hautaine assez agaçante!



En effet, je suis désolé de l'effet que cela peut donner. Toutefois, ma manière de m'exprimer vis-à-vis de mota est tout-à-fait volontaire. Si je suis depuis 3 ans bientot sur le forum C c'est que j'apprécie qu'on fournisse aux DÉBUTANTS une aide de qualité, exactement le contraire de ce qu'à fait mota qui pour se faire prendre pour un pro renvoie les débutant vers les pages man sans autre forme d'accompagnement (ni commentaire ni code) alors qu'il sait pertinemment qu'il répond dans un fil intitulé Exercices pour débutants en C et en les traitant de fainéants s'ils considèrent que son conseil n'est pas avisé (je n'ai rien inventé, c'est ICI et ). Et comme souvent dans ces cas-là, on se rend compte que le ramage de l'oiseau ne se rapporte pas à son plumage ... En lui répondant comme je l'ai fait, j'ai essayé de lui faire prendre conscience de l'arrogance dont il fait preuve face aux débutants.

Ceci clos pour moi cette discussion qui n'a que trop duré.
  • Partager sur Facebook
  • Partager sur Twitter
21 janvier 2009 à 22:17:21

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

//Define Difficultée
#define MIN_HAS 1
#define MAX_HAS 10
#define TAILLE_EXO 10


/*
Exercice proposé par crys' sur le siteduzero.com
Avec l'aide et une fonction proposée par guimers8 dans son tuto sur les couleurs dans la console windows
Codé par moi Birdroun'oob
*/

//Fonctions
void menu();                                            //Menu principal
void jeux();                                            //Jeux general
long hasard(long MIN, long MAX);                        //Donne nombre au hasard
void Color(int couleurDuTexte,int couleurDeFond);       //Changement couleur texte
void regles();


int main(void)
{
    //initialisation variables
    srand(time(NULL));              //Variable temps pour rand
    //-------------------------------
    printf ("-----zGame----\nBienvenue dans le jeu code par Birdroun'oob en C avec l'aide de tout le site du zero :)\n\n");

    menu();
    return 0;
}

void jeux()
{
    long a = 0, b = 0, resultat = 0, compteur = 0, replay = 0, i;
    clock_t t1, t2;
    t1 = clock();
    system("pause");
    printf ("\n");
    for (i = 0 ; i < TAILLE_EXO ; i++)
    {

        a = hasard(MIN_HAS, MAX_HAS);
        b = hasard(MIN_HAS, MAX_HAS);
        printf ("%2ld * %2ld = ", a, b);
        scanf ("%3ld", &resultat);
            if ((a*b) == resultat)
            {
                compteur ++;
                Color (2, 0);
                printf (" Juste\n\n");
                Color (7, 0);
            }
            else
            {
                Color (4, 0);
                printf(" Faux");
                Color (2, 0);
                printf("     %ld\n\n", (a*b));
                Color (7, 0);
            }


    }
    t2 = clock();
    printf ("\nVous avez mis %.3lf secondes et vous avez fait %ld faute(s)\n", (double)(t2-t1)/CLOCKS_PER_SEC, (10 - compteur));
    printf ("\nQue voulez vous faire ? [1 - Rejouer] [2 - Menu principal] [3 - Quitter]\n");
    scanf("%ld", &replay);
    printf ("\n\n");
    switch (replay)
    {
        case 1 :
            jeux();
            break;
        case 2 :
            menu();
            break;
        case 3 :
            system("exit");
            break;
    }

}



long hasard(long MIN, long MAX)
{
return (rand() % (MAX - MIN + 1)) + MIN;
}


void Color(int couleurDuTexte,int couleurDeFond) // fonction d'affichage de couleurs
{
        HANDLE H = GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleTextAttribute(H,couleurDeFond*16+couleurDuTexte);
}


void menu()
{
    long menu = 0;
    while (menu < 1 || menu > 3)
    {
    printf ("1. Jouer\n");                      //Menu
    printf ("2. Regles\n");
    printf ("3. Quitter\n\n");
    scanf ("%ld", &menu);
    printf ("\n\n");
    }

    switch (menu)
    {
        case 1 :
            jeux();
            break;
        case 2 :
            regles();
            break;
        case 3 :
            system("exit");
            break;
    }

}

void regles()
{
    printf("Ce jeu consiste en une serie de 10 multiplications aleatoires que vous devez \nresoudre le plus rapidement possible ...\n");
    printf("HL&GF :)\n\n");
    menu();
}

Voila ma reponse a moi
Ouvert a tout commentaire constructif je suis un debutant d'ailleur c'est pour sa que je poste mon code
Un peu long par rapport au probleme mais j'avais envie de bien séparer les fonctions etc histoire de m'entrainer
  • Partager sur Facebook
  • Partager sur Twitter
21 janvier 2009 à 22:40:43

Citation : birdroun


Voila ma reponse a moi
Ouvert a tout commentaire constructif



Je ne peux pas tester car ton code ne fonctionne que pour Windows :


candide@candide-desktop:~$candide@candide-desktop:~$ gcc -Wall -Wextra crys.c 
crys.c:4:21: erreur: windows.h : Aucun fichier ou dossier de ce type
crys.c: Dans la fonction «Color» :
crys.c:99: erreur: «HANDLE» undeclared (first use in this function)
#etc

Je trouve ça dommage. Si c'est juste pour la couleur, franchement je vois pas ce que ça apporte.
  • Partager sur Facebook
  • Partager sur Twitter
22 janvier 2009 à 20:51:32

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//#include <windows.h>

//Define Difficultée
#define MIN_HAS 1
#define MAX_HAS 10
#define TAILLE_EXO 10


/*
Exercice proposé par crys' sur le siteduzero.com
Avec l'aide du SDZ et une fonction proposée par guimers8 dans son tuto sur les couleurs dans la console windows
Codé par moi Birdroun'oob
*/

//Fonctions
void menu();                                            //Menu principal
void jeux();                                            //Jeux general
long hasard(long MIN, long MAX);                        //Donne nombre au hasard
void Color(int couleurDuTexte,int couleurDeFond);       //Changement couleur texte
void regles();


int main(void)
{
    //initialisation variables
    srand(time(NULL));              //Variable temps pour rand
    //-------------------------------
    printf ("-----zGame----\nBienvenue dans le jeu code par Birdroun'oob en C avec l'aide de tout le site du zero :)\n\n");

    menu();
    return 0;
}

void jeux()
{
    long a = 0, b = 0, resultat = 0, compteur = 0, replay = 0, i;
    clock_t t1, t2;
    t1 = clock();
    system("pause");
    printf ("\n");
    for (i = 0 ; i < TAILLE_EXO ; i++)
    {

        a = hasard(MIN_HAS, MAX_HAS);
        b = hasard(MIN_HAS, MAX_HAS);
        printf ("%2ld * %2ld = ", a, b);
        scanf ("%3ld", &resultat);
            if ((a*b) == resultat)
            {
                compteur ++;
                //Color (2, 0);
                printf (" Juste\n\n");
                //Color (7, 0);
            }
            else
            {
                //Color (4, 0);
                printf(" Faux");
                //Color (2, 0);
                printf("     %ld\n\n", (a*b));
                //Color (7, 0);
            }


    }
    t2 = clock();
    printf ("\nVous avez mis %.3lf secondes et vous avez fait %ld faute(s)\n", (double)(t2-t1)/CLOCKS_PER_SEC, (10 - compteur));
    printf ("\nQue voulez vous faire ? [1 - Rejouer] [2 - Menu principal] [3 - Quitter]\n");
    scanf("%ld", &replay);
    printf ("\n\n");
    switch (replay)
    {
        case 1 :
            jeux();
            break;
        case 2 :
            menu();
            break;
        case 3 :
            system("exit");
            break;
    }

}



long hasard(long MIN, long MAX)
{
return (rand() % (MAX - MIN + 1)) + MIN;
}


/*
void Color(int couleurDuTexte,int couleurDeFond) // fonction d'affichage de couleurs
{
        HANDLE H = GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleTextAttribute(H,couleurDeFond*16+couleurDuTexte);
}
*/

void menu()
{
    long menu = 0;
    while (menu < 1 || menu > 3)
    {
    printf ("1. Jouer\n");                      //Menu
    printf ("2. Regles\n");
    printf ("3. Quitter\n\n");
    scanf ("%ld", &menu);
    printf ("\n\n");
    }

    switch (menu)
    {
        case 1 :
            jeux();
            break;
        case 2 :
            regles();
            break;
        case 3 :
            system("exit");
            break;
    }

}

void regles()
{
    printf("Ce jeu consiste en une serie de 10 multiplications aleatoires que vous devez \nresoudre le plus rapidement possible ...\n");
    printf("HL&GF :)\n\n");
    menu();
}

Mais je crois que y'aura un probleme avec system("pause"); et system("quit");
Non ?
  • Partager sur Facebook
  • Partager sur Twitter
22 janvier 2009 à 21:57:42

Citation : birdroun

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//#include <windows.h>

//Define Difficultée
#define MIN_HAS 1
#define MAX_HAS 10
#define TAILLE_EXO 10


/*
Exercice proposé par crys' sur le siteduzero.com
Avec l'aide du SDZ et une fonction proposée par guimers8 dans son tuto sur les couleurs dans la console windows
Codé par moi Birdroun'oob
*/

//Fonctions
void menu();                                            //Menu principal
void jeux();                                            //Jeux general
long hasard(long MIN, long MAX);                        //Donne nombre au hasard
void Color(int couleurDuTexte,int couleurDeFond);       //Changement couleur texte
void regles();


int main(void)
{
    //initialisation variables
    srand(time(NULL));              //Variable temps pour rand
    //-------------------------------
    printf ("-----zGame----\nBienvenue dans le jeu code par Birdroun'oob en C avec l'aide de tout le site du zero :)\n\n");

    menu();
    return 0;
}

void jeux()
{
    long a = 0, b = 0, resultat = 0, compteur = 0, replay = 0, i;
    clock_t t1, t2;
    t1 = clock();
    system("pause");
    printf ("\n");
    for (i = 0 ; i < TAILLE_EXO ; i++)
    {

        a = hasard(MIN_HAS, MAX_HAS);
        b = hasard(MIN_HAS, MAX_HAS);
        printf ("%2ld * %2ld = ", a, b);
        scanf ("%3ld", &resultat);
            if ((a*b) == resultat)
            {
                compteur ++;
                //Color (2, 0);
                printf (" Juste\n\n");
                //Color (7, 0);
            }
            else
            {
                //Color (4, 0);
                printf(" Faux");
                //Color (2, 0);
                printf("     %ld\n\n", (a*b));
                //Color (7, 0);
            }


    }
    t2 = clock();
    printf ("\nVous avez mis %.3lf secondes et vous avez fait %ld faute(s)\n", (double)(t2-t1)/CLOCKS_PER_SEC, (10 - compteur));
    printf ("\nQue voulez vous faire ? [1 - Rejouer] [2 - Menu principal] [3 - Quitter]\n");
    scanf("%ld", &replay);
    printf ("\n\n");
    switch (replay)
    {
        case 1 :
            jeux();
            break;
        case 2 :
            menu();
            break;
        case 3 :
            system("exit");
            break;
    }

}



long hasard(long MIN, long MAX)
{
return (rand() % (MAX - MIN + 1)) + MIN;
}


/*
void Color(int couleurDuTexte,int couleurDeFond) // fonction d'affichage de couleurs
{
        HANDLE H = GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleTextAttribute(H,couleurDeFond*16+couleurDuTexte);
}
*/

void menu()
{
    long menu = 0;
    while (menu < 1 || menu > 3)
    {
    printf ("1. Jouer\n");                      //Menu
    printf ("2. Regles\n");
    printf ("3. Quitter\n\n");
    scanf ("%ld", &menu);
    printf ("\n\n");
    }

    switch (menu)
    {
        case 1 :
            jeux();
            break;
        case 2 :
            regles();
            break;
        case 3 :
            system("exit");
            break;
    }

}

void regles()
{
    printf("Ce jeu consiste en une serie de 10 multiplications aleatoires que vous devez \nresoudre le plus rapidement possible ...\n");
    printf("HL&GF :)\n\n");
    menu();
}


Mais je crois que y'aura un probleme avec system("pause"); et system("quit");
Non ?



J'ai pas regardé le code, j'ai juste testé le jeu. C'est assez bien.

Il y a un problème d'entrées sécurisées : si tu tapes par exemple
2.

(avec le point) au lieu de 2 ton jeu par en vrille (il se termine tout seul).

Sinon, il y a aussi un problème de mesure du chrono (le mets toujours 0.0000 seconde).
  • Partager sur Facebook
  • Partager sur Twitter
22 janvier 2009 à 22:24:03

Chez moi le chrono marchait bien :/
Sinon faut que je me relise quelques tutos avec des notes comme fgets a la place de scanf je pense que sa devrait arranger les quelques problemes
  • Partager sur Facebook
  • Partager sur Twitter
22 janvier 2009 à 22:26:49

Citation : birdroun

Chez moi le chrono marchait bien :/


Chez moi :
candide@candide-desktop:~$ ./x
-----zGame----
Bienvenue dans le jeu code par Birdroun'oob en C avec l'aide de tout le site du zero :)

1. Jouer
2. Regles
3. Quitter

1


sh: pause: not found

 9 * 10 = 90
 Juste

 9 *  5 = 33
 Faux     45

 4 *  9 = 55
 Faux     36

 8 *  2 = 16
 Juste

 6 *  4 = 24
 Juste

10 *  7 = 70
 Juste

 8 *  3 = 24
 Juste

 4 *  5 = 20
 Juste

 9 *  5 = 45
 Juste

 2 * 10 = 22
 Faux     20


Vous avez mis 0.000 secondes et vous avez fait 3 faute(s)

Que voulez vous faire ? [1 - Rejouer] [2 - Menu principal] [3 - Quitter]


Citation : birdroun


Sinon faut que je me relise quelques tutos avec des notes comme fgets a la place de scanf je pense que sa devrait arranger les quelques problemes


Très probablement.
  • Partager sur Facebook
  • Partager sur Twitter
22 janvier 2009 à 22:54:46

Bonjour,

Citation : Mysth-R

bon sinon à part ça ...

Très bonne initiative de Crys' que de nous donner des petits exercices. Rien de telle que la pratique. MERCI !!!

J'ai quasiement fini le programme mais la fonction clock() ne fonctionne pas chez moi. elle me revnoi toujour 0 (zero).
En gros je me suis inspiré du lien donné dans l'énnoncé pour écrire un truc du genre :

clock_t tempsDebut = 0, tempsFin = 0;
double tempsTotal = 0;
tempsDebut = clock();
jeu(); // déroulement du jeu

tempsFin = clock ();
tempsTotal = (double)((tempsFin-tempsDebut)/CLOCKS_PER_SEC);

printf("Vous avez fini en %.3lf secondes\n", tempsTotal);



le printf m'affiche "Vous avez fini en 0,000 secondes.
J'ai bien fait un #include <time.h> ... y aurait-il un truc que je n'ai pas compris ?

Merci



clock() est censée renvoyer le temps processeur. Si tu veux le temps « réel » sous Unix, tu peux utiliser gettimeofday().
  • Partager sur Facebook
  • Partager sur Twitter
23 janvier 2009 à 0:25:55

Inutilement compliqué à mon avis.

Je propose une explication et une solution ici.

Néanmoins gettimeofday() emploie des struct timeval et timezone. La struct timeval permet effectivement d'avoir une précision de l'ordre de la microseconde, mais pour une telle application je trouve (et ça n'est que mon point de vue) que c'est compliquer les choses; une telle précision ne rime à rien ici.

De plus, je ne sais pas si c'est portable.
  • Partager sur Facebook
  • Partager sur Twitter
23 janvier 2009 à 21:40:40

en tout cas le clock() n'a pas l'air de marcher sous linux.
Mais bon le fait d'avoir la micro seconde c'est plus pour le fun. Parce que ton jeu de 10 calcul tu a toujours mettre plus ou moins le meme temps pour le faire. Alors d'avoir au moins le dixième de seconde peut permettre de départager... surtout si tu veux implémenter un petit tableau de record ... (je sais c'est pas demandé).
Bon sinon voici ma solution découpé en 3 fichiers. J'ai aussi fait un Makefile.

main.c :
int main(int argc, char** argv)
{

	printf("..::ZGame::.. Entraînez votre cerveau au calcul mental !\n\n");
	int choixMenu = 0;
	do
	{
		choixMenu = menuDebut();

		switch (choixMenu)
		{
			case 1: /* je lance le jeu */

				jeu();
				break;
			case 2: /* j'affiche les règles du jeu */
				regles();
				break;
			case 3: /* j'affiche les crédits */
				credits();
				break;
			case 4: /* je quite le jeu */
				printf("\n\n Merci d'avoir joué ! Bye !\n");
				exit(EXIT_SUCCESS);

			default:
				choixMenu = menuDebut(); /* si le choix ne correspond à rien je relance le menu. */
		}

	}while(choixMenu != 4);

	return 0;
}


le menu.c qui contient le jeu. :

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

#define NB_MAX 11

/* permet de saisir un charactère et un seul. */
char saisirChar()
{
	char lettre = 0;

	lettre = getchar();
	while(getchar() != '\n');

	return lettre;
}


/* fonction permettant de générer le menu du jeu. */
int menuDebut()
{
	char lettre = 0;
	int choixMenu = 0;
	/* afficher le menu tant que le choix du joueur n'est pas valide. */
	do
	{
		printf("***  Menu  ***\n\n");
		printf("1. Commencer la partie\n");
		printf("2. Comment jouer\n");
		printf("3. Credits\n");
		printf("4. Quitter le jeu\n\n");
		printf("Quel est votre choix ? (1/2/3/4)");

		/*
		 * Je considère le choix entré par le joueur comme un caractère
		 * pour le cas ou il entrerait une lettre au lieu d'un chiffre
		 * sinon ça plante
		 */
		lettre = saisirChar();
		/* je converti le charactère en chiffre avec la fonction atoi() de stdlib.h */
		choixMenu = atoi(&lettre);

	}while(choixMenu != 1 && choixMenu != 2 && choixMenu != 3 && choixMenu != 4);

	return choixMenu;
}


/* fonction qui permet de lancer le jeu. */
void jeu()
{
	srand(time(NULL));
	char continuer = 'o';
	do
	{
		int nombre1 = 0, nombre2 = 0;
		int resultatOperation = 0, resultatJoueur = 0;
		int nombreErreur = 0;
		int tempsDebut = 0, tempsFin = 0, tempsTotal = 0;

		printf("\n\n\nPrêt ? appuyez sur une touche pour commencer...");
		getchar();
		printf("\n\n");

		tempsDebut = time(NULL);

		for(int i = 0 ; i < 10 ; i++)
		{
			nombre1 = rand() % NB_MAX; // génération du premier nombre
			nombre2 = rand() % NB_MAX; // génération du deuxième nombre
			resultatOperation = nombre1*nombre2; // calcul du résultat
			// on demande au joueur de calculer
			printf("%d x %d = ", nombre1, nombre2);
			scanf("%d", &resultatJoueur);

			// test pour savoir si la réponse estfausse
			if(resultatJoueur != resultatOperation)
			{
				printf("la réponse était %d\n", resultatOperation);// j'affiche la bonne réponse
				nombreErreur++; // j'incrémente le compteur d'erreurs.
			}
		}

		tempsFin = time(NULL);
		tempsTotal = tempsFin-tempsDebut;

		// on affiche le message de fin en fonction des erreurs
		if(nombreErreur)
		{
			if(nombreErreur > 1)
			{
				printf("Vous avez fini en %d secondes\n", tempsTotal);
				printf("et vous avez fait %d erreurs\n\n\n", nombreErreur);
			}
			else
			{
				printf("Vous avez fini en %d secondes\n", tempsTotal);
				printf("et vous avez fait une erreur\n\n\n");
			}
		}
		else
		{
			printf("Vous avez fini en %d secondes\n", tempsTotal);
			printf("et sans aucune faute !!\n\n\n");
		}


		printf("Voulez vous recommencer ? o/n : ");
		while(getchar()!='\n');
		continuer = saisirChar();
	}while(continuer != 'n');

	printf("\n\n\n\n");
}

/* fonction qui affiche les règles du jeu */
void regles()
{
	printf("\n\n\n\n..::  Règles du jeu  ::..\n\n");
	printf("Le programme vous tire une série de dix calculs mathématiques sur\n");
	printf("les tables de multiplication. Le but du jeu est de trouver la bonne\n");
	printf("réponse à ces calculs le plus rapidement possible et en faisant le\n");
	printf("moins d'erreurs possibles.\n\n");
	printf("Bonne chance ... \n");
	getchar();
	printf("\n\n\n\n");
}

/* fonction qui affiche les crédits du jeu */
void credits()
{
	printf("\n\n\n\n..::  Crédits  ::..\n\n");
	printf("Ce jeu à été réalisé par Mysth-R pour s'entrainer à coder en C le 18 Janvier 2009\n");
	printf("C'est un exercice proposé sur le site du zero par Crys' ... merci à lui\n\n");
	printf("Retrouvez cet exercice et bien d'autres sur le forum du site du Zéro : \n");
	printf("http://www.siteduzero.com/forum-83-329113-p1-exercices-pour-debutants-en-c.html\n\n");
	getchar();
	printf("\n\n\n\n");
}


le menu.h (bon ça sert un peu à rien mais on va dire que c'est de l'entrainement...)
char saisirChar();
int menuDebut();
void jeu();
void regles();
void credits();


et la Makefile :
CC=gcc
CFLAGS=-W -Wall -ansi -std=c99 -pedantic
LDFLAGS=
EXEC=zGame
SRC= $(wildcard *.c)
OBJ= $(SRC:.c=.o)

all: $(EXEC)

zGame: $(OBJ)
	@$(CC) -o $@ $^ $(LDFLAGS)

main.o: menu.h

%.o: %.c
	@$(CC) -o $@ -c $< $(CFLAGS)

.PHONY: clean mrproper

clean:
	@rm -rf *.o

mrproper: clean
	@rm -rf $(EXEC)
  • Partager sur Facebook
  • Partager sur Twitter
23 janvier 2009 à 22:25:00

Citation : Mysth-R


Bon sinon voici ma solution découpé en 3 fichiers. J'ai aussi fait un Makefile.



Merci pour ton code qui devrait en intéresser plus d'un.

Néanmoins, n'oublie pas qu'il s'agit d'exercices pour débutants et que pour un débutant, il est beaucoup plus difficile de manipuler plusieurs fichiers (.c et/ou .h) qu'un unique fichier .c. Or, si je me mets à la place du débutant que j'étais il y a deux ou trois ans, j'aurais été bien en peine d'exploiter tes fichiers. Quant au Makefile, même pas la peine d'en parler, c'est la cerise sur le gâteau et donc on ne s'en occupe que lorsque le gâteau est au point (et en plus c'est vraiment pas pour les débutants en C, je dis bien en C).

Je trouve curieux que ton main.c (au passage, d'une façon générale, je n'aime pas donner ce nom à un fichier c, je préfère un nom avec moins de risque de collision comme zJeu_main.c) n'inclue pas les headers indispensables, je trouve curieux que le fichier menu.c n'appelle pas le header correspondant. Quant aux variables globales dans ton menu.h, elles me laissent assez sceptique.
Sinon, au premier coup d'oeil, le travail semble assez sobre, assez pensé et soucieux du détail.

Te serait-il possible à l'intention des débutants de donner des fichiers complets prêts à compiler et de t'assurer que le tout compile convenablement ?


  • Partager sur Facebook
  • Partager sur Twitter