Partage
  • Partager sur Facebook
  • Partager sur Twitter

Optimiser

Besoin d'idées

    13 août 2008 à 22:43:08

    Bien le bonjour

    Comme le titre l'indique j'aurais besoin de votre aide pour optimiser un programme sachant que je n'ai vu que la partie I du tutoriel. (donc PAS de prototypes, pointeurs ou trucs du genres) ^^

    Je pensais à creer des fonctions pour éviter de tout mettre dans la main, mais j'avoue ne pas avoir d'idées qui conviandrait au programme. (Il s'agit d'un Quizz).
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main(int argc, char *argv[])
    {
        long nombreVie=3, reponse=0, juste=0, nombreAleatoire=0, i;
        char difficulte=0, choix=0;//choix sert a dire si on continue ou non.
        const long MAX=20, MIN=1;//Pour les 20 questions aléatoire
        srand(time(NULL));//préparer le système de choix aléatoire
    
        printf("\t\t*********************************\n\t\t*          Bienvenue            *\n\t\t*              a                *\n");
        printf("\t\t* Qui veut gagner des Galions!! *\n\t\t*                               *\n\t\t*********************************\n\n\n");
        printf("Regles du jeu: Sur une serie de 10 questions, seules 3 erreurs sont permises, au-dela c'est la defaite assuree. Auriez vous l'audace d'affronter l'effroyable Quizz?!\n\n\n\n");
        do
        {
            choix=0, nombreVie=3, juste=0;//juste sert à connaître le nombre de bonnes réponses.
            printf("\t\t\t========\n\t\t\t=      =\n\t\t\t= Menu =\n\t\t\t=      =\n\t\t\t========\n\n\n");
            printf("Choix du niveau de difficulte:\n\t\t1. Facile\n\t\t2. Moyen\n\t\t3. Difficil\n\n\t\t4. Exit\n\n");
            scanf("%ld", &difficulte);//faire choisir la difficulté
    
    
            if(difficulte==1)//Si l'on choisit la difficulté de niveau 1
            {
                printf("\nRepondez aux questions par le numero correspondant a la reponse de votre choix, parmi les differentes reponses proposees\n");
                printf("\n\t!!! Que le grand quizz commence !!!\n\n");
    
                for(i=0; i<10; i++)// Permet de ne pas dépasser 10questions
                {
                    nombreAleatoire = (rand() % (MAX - MIN + 1)) + MIN;//génère un nombre aléatoire
    
                    if(nombreAleatoire==1 && nombreVie>0)//A lieu si le nombre généré vaut 1. De plus la question ne peut être posée que si le joueur a encore de la vie.
                    {
                        printf("Question : Comment se nomme le chien de Mickey Mouse ?\n\t");
                        printf("1. Dingo\n\t2. Pluto\n\t3. Minnie\n\t4. Rocky\n");//Les différentes réponses proposées.
    
                        do
                        {
                        scanf("%ld", &reponse);
    
                            if(reponse==2)//Si bonne réponse
                            {
                                juste++;//Ajouter une bonne réponse au compteur
                                printf("Bravo! Mais rien n'est encore joue, coco(te)!\n ");
                            }
                             else if(reponse==1 || reponse==3 || reponse==4)//Si la réponse est fausse
                             {
                                 nombreVie--;//Faire perdre au joueur 1pt de vie
                                 printf("C'est bien ! Vous etes sur la voie du looser! Vous perdez 1 point de vie.\n");
                             }
                             printf("Vos points de vie: %ld\nVos bonnes reponses: %ld\n\n", nombreVie, juste);
                        } while(reponse<0 || reponse>4);//Si le joueur n'a pas répondu par un chiffre valide, relancer la réponse.
    
                        if(nombreVie==0)//Si le joueur n'a plus de vie.
                        {
                            printf("T'as perdu, t'es nul, t'es naze, rentre chez toi t'entrainer!\n\n");
                            choix=2;
    
                        }
                    }
    
    
                    else if(nombreAleatoire==2 && nombreVie>0)
                    {
                        printf("Question : Quel est le nombre de centaines dans 2740 ?\n\t");
                        printf("1. 740\n\t2. 7\n\t3. 2\n\t4. 27\n");
    
                        do
                        {
                        scanf("%ld", &reponse);
    
                             if(reponse==4)
                             {
                                 juste++;
                                 printf("Bien joue!Une bonne reponse en plus!\n ");
                             }
                             else if(reponse==1 || reponse==2 || reponse==3)
                             {
                                 nombreVie--;
                                 printf("Va falloir songer a remettre les neurones en place.\n Vous perdez 1 point de vie.\n");
                             }
                             printf("Vos points de vie: %ld\nVos bonnes reponses: %ld\n\n", nombreVie, juste);
                        } while(reponse<0 || reponse>4);
    
                        if(nombreVie==0)
                        {
                            printf("T'as perdu, t'es nul, t'es naze, rentre chez toi t'entrainer!\n\n");
                            choix=2;
    
                        }
                    }
    
                    else if(nombreAleatoire==3 && nombreVie>0)
                    {
                        printf("Question : Quelle fut la fameuse invention des freres Lumiere ?\n\t");
                        printf("1. le machine a coudre\n\t2. la lumiere\n\t3. l'ordinateur\n\t4. le cinema\n");
    
                        do
                        {
                        scanf("%ld", &reponse);
    
                             if(reponse==4)
                             {
                                 juste++;
                                 printf("Bien joue!Une bonne reponse en plus!\n ");
                             }
                             else if(reponse==1 || reponse==2 || reponse==3)
                             {
                                 nombreVie--;
                                 printf("Catastrophe vous avez tout faux!\n Vous perdez 1 point de vie.\n");
                             }
                             printf("Vos points de vie: %ld\nVos bonnes reponses: %ld\n\n", nombreVie, juste);
                        } while(reponse<0 || reponse>4);
    
                        if(nombreVie==0)
                        {
                            printf("T'as perdu, t'es naze, rentre chez toi t'entrainer!\n\n");
                            choix=2;
    
    
                        }
                    }
    
                    else if(nombreAleatoire==4 && nombreVie>0)
                    {
                        printf("Question : Quel est le nom des freres Lumiere ?\n\t");
                        printf("1. Auguste et Louis\n\t2. Pierre et Gustave\n\t3. Pierre et Jean\n\t4. Paul et Louis\n");
    
                        do
                        {
                        scanf("%ld", &reponse);
    
                             if(reponse==1)
                             {
                                 juste++;
                                 printf("Bien joue!Une bonne reponse en plus!\n ");
                             }
                             else if(reponse==2 || reponse==3 || reponse==4)
                             {
                                 nombreVie--;
                                 printf("Catastrophe vous avez tout faux!\n Vous perdez 1 point de vie.\n");
                             }
                             printf("Vos points de vie: %ld\nVos bonnes reponses: %ld\n\n", nombreVie, juste);
                        } while(reponse<0 || reponse>4);
    
                        if(nombreVie==0)
                        {
                            printf("T'as perdu, t'es naze, rentre chez toi t'entrainer!\n\n");
                            choix=2;
                        }
                    }
    
                    else if(nombreAleatoire==5 && nombreVie>0)
                    {
                        printf("Question : Qu'est-ce qu'un langage dit intelligent ?\n\t");
                        printf("1. Un langage proche de celui d'un animal\n\t2. Un langage proche de celui de l'homme\n\t3. Un langage informatique\n\t4. Le verlan\n");
    
                        do
                        {
                        scanf("%ld", &reponse);
    
                             if(reponse==2)
                             {
                                 juste++;
                                 printf("Bien joue!Vous etes sur la voix du champion!\n ");
                             }
                             else if(reponse==1 || reponse==3 || reponse==4)
                             {
                                 nombreVie--;
                                 printf("Catastrophe qu'allez vous devenir?!\n Vous perdez 1 point de vie.\n");
                             }
                             printf("Vos points de vie: %ld\nVos bonnes reponses: %ld\n\n", nombreVie, juste);
                        } while(reponse<0 || reponse>4);
    
                        if(nombreVie==0)
                        {
                            printf("T'as perdu, t'es naze, rentre chez toi t'entrainer!\n\n");
                            choix=2;
                        }
                    }
    
                    else if(nombreAleatoire==6 && nombreVie>0)
                    {
                        printf("Question : En quelle annee le grand commendant J.Y Coustaud est mort ?\n\t");
                        printf("1. 1862\n\t2. 1919\n\t3. 1997\n\t4. 2001\n");
    
                        do
                        {
                        scanf("%ld", &reponse);
    
                             if(reponse==3)
                             {
                                 juste++;
                                 printf("Coustaud est fier de vous!!!\n ");
                             }
                             else if(reponse==1 || reponse==2 || reponse==4)
                             {
                                 nombreVie--;
                                 printf("Pauvre Coustaud, que va-t-il penser?!\n Vous perdez 1 point de vie.\n");
                             }
                             printf("Vos points de vie: %ld\nVos bonnes reponses: %ld\n\n", nombreVie, juste);
                        } while(reponse<0 || reponse>4);
    
                        if(nombreVie==0)
                        {
                            printf("T'as perdu, t'es naze, rentre chez toi t'entrainer!\n\n");
                            choix=2;
                        }
                    }
    
                    else if(nombreAleatoire==7 && nombreVie>0)
                    {
                        printf("Question : Quel est l'intru ?\n\t");
                        printf("1. Salade\n\t2. Pomme\n\t3. Concombre\n\t4. Aubergine\n");
    
                        do
                        {
                        scanf("%ld", &reponse);
    
                             if(reponse==2)
                             {
                                 juste++;
                                 printf("Grand pot au feu aujourd'hui!\n ");
                             }
                             else if(reponse==1 || reponse==3 || reponse==4)
                             {
                                 nombreVie--;
                                 printf("Etes vous un legume?!\n Vous perdez 1 point de vie.\n");
                             }
                             printf("Vos points de vie: %ld\nVos bonnes reponses: %ld\n\n", nombreVie, juste);
                        } while(reponse<0 || reponse>4);
    
                        if(nombreVie==0)
                        {
                            printf("T'as perdu, t'es naze, rentre chez toi t'entrainer!\n\n");
                            choix=2;
                        }
                    }
    
                    else if(nombreAleatoire==8 && nombreVie>0)
                    {
                        printf("Question : Dans les jeux video en ligne, que signifie OSEF ?\n\t");
                        printf("1. On siffle ensemble follement\n\t2. On s'en fout\n\t3. On suce les element federaux\n\t4. On siffle les frimeurs\n");
    
                        do
                        {
                        scanf("%ld", &reponse);
    
                             if(reponse==2)
                             {
                                 juste++;
                                 printf("Vous etes en grand joueur a ce que je vois.\n ");
                             }
                             else if(reponse==1 || reponse==3 || reponse==4)
                             {
                                 nombreVie--;
                                 printf("Les jeux ne sont pas vos amis.\n");
                             }
                             printf("Vos points de vie: %ld\nVos bonnes reponses: %ld\n\n", nombreVie, juste);
                        } while(reponse<0 || reponse>4);
    
                        if(nombreVie==0)
                        {
                            printf("T'as perdu, t'es naze, rentre chez toi t'entrainer!\n\n");
                            choix=2;
                        }
                    }
    
                    else if(nombreAleatoire==9 && nombreVie>0)
                    {
                        printf("Question : Quelle est la traduction francaise de Library ?\n\t");
                        printf("1. Librairie\n\t2. Etagere\n\t3. Libraire\n\t4. bibliothèque\n");
    
                        do
                        {
                        scanf("%ld", &reponse);
    
                             if(reponse==4)
                             {
                                 juste++;
                                 printf("Bientot belingue!\n ");
                             }
                             else if(reponse==1 || reponse==2 || reponse==3)
                             {
                                 nombreVie--;
                                 printf("Aller! Retour a l'ecole!!!!\n");
                             }
                             printf("Vos points de vie: %ld\nVos bonnes reponses: %ld\n\n", nombreVie, juste);
                        } while(reponse<0 || reponse>4);
    
                        if(nombreVie==0)
                        {
                            printf("T'as perdu, t'es nul, t'es naze, rentre chez toi t'entrainer!\n\n");
                            choix=2;
                        }
                    }
    
                    else if(nombreAleatoire==10 && nombreVie>0)
                    {
                        printf("Question : Quelle est a grande echelle la force la plus grande ?\n\t");
                        printf("1. La gravite\n\t2. le magnetisme\n\t3. l'interaction forte\n\t4. La force humaine\n\t5. La force des elephants\n\t6. l'interaction faible\n\t7. Moi\n");
    
                        do
                        {
                        scanf("%ld", &reponse);
    
                             if(reponse==3)
                             {
                                 juste++;
                                 printf("Que la force soit avec toi\n ");
                             }
                             else if(reponse==1 || reponse==2 || reponse==4 || reponse==5 || reponse==6 || reponse==7)
                             {
                                 nombreVie--;
                                 printf("La force t'as abandonne\n");
                             }
                             printf("Vos points de vie: %ld\nVos bonnes reponses: %ld\n\n", nombreVie, juste);
                        } while(reponse<0 || reponse>7);
    
                        if(nombreVie==0)
                        {
                            printf("T'as perdu, t'es nul, t'es naze, rentre chez toi t'entrainer!\n\n");
                            choix=2;
                        }
                    }
    
                    else if(nombreAleatoire==11 && nombreVie>0)
                    {
                        printf("Question : Dans la serie, les Simpson, quelle est la couleur de peau des personnes ?\n\t");
                        printf("1. Orange\n\t2. Rouge\n\t3. Jaune\n\t4. Verte\n");
    
                        do
                        {
                        scanf("%ld", &reponse);
    
                            if(reponse==3)
                            {
                                juste++;
                                printf("Bravo! Mais rien n'est encore joue, coco(te)!\n ");
                            }
                             else if(reponse==1 || reponse==2 || reponse==4)
                             {
                                 nombreVie--;
                                 printf("La perception des couleurs est relative n'est pas une excuse valable! Vous perdez 1 point de vie.\n");
                             }
                             printf("Vos points de vie: %ld\nVos bonnes reponses: %ld\n\n", nombreVie, juste);
                        } while(reponse<0 || reponse>4);
    
                        if(nombreVie==0)
                        {
                            printf("T'as perdu, t'es nul, t'es naze, rentre chez toi t'entrainer!\n\n");
                            choix=2;
                        }
                    }
    
                    else if(nombreAleatoire==12 && nombreVie>0)
                    {
                        printf("Question : Quelle est la valeur de ce nombre binaire 100111000101 en hexadecimal ?\n\t");
                        printf("1. 9C5\n\t2. 100101\n\t3. 4705\n\t4. A97\n");
    
                        do
                        {
                        scanf("%ld", &reponse);
    
                            if(reponse==1)
                            {
                                juste++;
                                printf("Bravo! Tu as une sacree logique combinatoire!\n ");
                            }
                             else if(reponse==2 || reponse==3 || reponse==4)
                             {
                                 nombreVie--;
                                 printf("L'informatique n'est votre fort, n'est-ce pas? Vous perdez 1 point de vie.\n");
                             }
                             printf("Vos points de vie: %ld\nVos bonnes reponses: %ld\n\n", nombreVie, juste);
                        } while(reponse<0 || reponse>4);
    
                        if(nombreVie==0)
                        {
                            printf("T'as perdu, t'es nul, t'es naze, rentre chez toi t'entrainer!\n\n");
                            choix=2;
                        }
                    }
    
                    else if(nombreAleatoire==13 && nombreVie>0)
                    {
                        printf("Question : Quelle est la capitale du Perou ?\n\t");
                        printf("1. Luxembourg\n\t2. Lima\n\t3. Caracas\n\t4. Cuzco\n");
    
                        do
                        {
                        scanf("%ld", &reponse);
    
                            if(reponse==2)
                            {
                                juste++;
                                printf("Bravo! Mais rien n'est encore joue, coco(te)!\n ");
                            }
                             else if(reponse==1 || reponse==3 || reponse==4)
                             {
                                 nombreVie--;
                                 printf("C'est bien ! Vous etes sur la voix du looser! Vous perdez 1 point de vie.\n");
                             }
                             printf("Vos points de vie: %ld\nVos bonnes reponses: %ld\n\n", nombreVie, juste);
                        } while(reponse<0 || reponse>4);
    
                        if(nombreVie==0)
                        {
                            printf("T'as perdu, t'es nul, t'es naze, rentre chez toi t'entrainer!\n\n");
                            choix=2;
                        }
                    }
    
                    else if(nombreAleatoire==14 && nombreVie>0)
                    {
                        printf("Question : Ou se situe la Mer des iles ?\n\t");
                        printf("1. En Asie\n\t2. En Amerique\n\t3. En Afrique\n\t4. Sur la Lune\n\t5.En Europe\n\t6. En Antartique\n\t7. Sur Mars\n\t8. Au pole Nord\n\n");
    
                        do
                        {
                        scanf("%ld", &reponse);
    
                            if(reponse==4)
                            {
                                juste++;
                                printf("Bravo! La terre et la lune n'ont plus de secret pour vous!\n ");
                            }
                             else if(reponse!=4 && reponse>0 && reponse<=8)
                             {
                                 nombreVie--;
                                 printf("Et beh alors? Vous ne connaissez pas la lune? Vous perdez 1 point de vie.\n");
                             }
                             printf("Vos points de vie: %ld\nVos bonnes reponses: %ld\n\n", nombreVie, juste);
                        } while(reponse<0 || reponse>8);
    
                        if(nombreVie==0)
                        {
                            printf("T'as perdu, t'es nul, t'es naze, rentre chez toi t'entrainer!\n\n");
                            choix=2;
                        }
                    }
    
                    else if(nombreAleatoire==15 && nombreVie>0)
                    {
                        printf("Question : Qui remporta la titre de champion du monde de football en 2002 ?\n\t");
                        printf("1. L'Italie\n\t2. La France\n\t3. Le Bresil\n\t4. L'Allemagne\n");
    
                        do
                        {
                        scanf("%ld", &reponse);
    
                            if(reponse==3)
                            {
                                juste++;
                                printf("Bravo! Mais rien n'est encore joue, coco(te)!\n ");
                            }
                             else if(reponse==1 || reponse==2 || reponse==4)
                             {
                                 nombreVie--;
                                 printf("C'est bien ! Vous etes sur la voie du looser! Vous perdez 1 point de vie.\n");
                             }
                             printf("Vos points de vie: %ld\nVos bonnes reponses: %ld\n\n", nombreVie, juste);
                        } while(reponse<0 || reponse>4);
    
                        if(nombreVie==0)
                        {
                            printf("T'as perdu, t'es nul, t'es naze, rentre chez toi t'entrainer!\n\n");
                            choix=2;
                        }
                    }
    
                    else if(nombreAleatoire==16 && nombreVie>0)
                    {
                        printf("Question : Qu'est-ce que le Serval ?\n\t");
                        printf("1. Un felin\n\t2. Un animal préhistorique\n\t3. Un oiseau\n\t4. Un rongeur\n");
    
                        do
                        {
                        scanf("%ld", &reponse);
    
                            if(reponse==1)
                            {
                                juste++;
                                printf("Bravo! Bien joue! You're the best!\n ");
                            }
                             else if(reponse==2 || reponse==3 || reponse==4)
                             {
                                 nombreVie--;
                                 printf("Quoi vous ne connaissez pas le Serval O.O ! Vous perdez 1 point de vie.\n");
                             }
                             printf("Vos points de vie: %ld\nVos bonnes reponses: %ld\n\n", nombreVie, juste);
                        } while(reponse<0 || reponse>4);
    
                        if(nombreVie==0)
                        {
                            printf("T'as perdu, t'es nul, t'es naze, rentre chez toi t'entrainer!\n\n");
                            choix=2;
                        }
                    }
    
                    else if(nombreAleatoire==17 && nombreVie>0)
                    {
                        printf("Question : Ou reside le president des Etats-Unis ?\n\t");
                        printf("1. Au pentagone\n\t2. A la tour Eiffel\n\t3. Dans les hotel Paris\n\t4. A la maison blanche\n");
    
                        do
                        {
                        scanf("%ld", &reponse);
    
                            if(reponse==4)
                            {
                                juste++;
                                printf("Bien joue! MVous etes sur la bonne voie!\n ");
                            }
                             else if(reponse==1 || reponse==3 || reponse==2)
                             {
                                 nombreVie--;
                                 printf("C'est bien ! Vous etes sur la voie du looser! Vous perdez 1 point de vie.\n");
                             }
                             printf("Vos points de vie: %ld\nVos bonnes reponses: %ld\n\n", nombreVie, juste);
                        } while(reponse<0 || reponse>4);
    
                        if(nombreVie==0)
                        {
                            printf("T'as perdu, t'es nul, t'es naze, rentre chez toi t'entrainer!\n\n");
                            choix=2;
                        }
                    }
    
                    else if(nombreAleatoire==18 && nombreVie>0)
                    {
                        printf("Question : En quelle annee Jacques Chirac fut-il elu president ?\n\t");
                        printf("1. 2002\n\t2. 1995\n\t3. 1990\n\t4. 1998\n");
    
                        do
                        {
                        scanf("%ld", &reponse);
    
                            if(reponse==2)
                            {
                                juste++;
                                printf("Bravo! Quelle culture hors du commun!\n ");
                            }
                             else if(reponse==1 || reponse==3 || reponse==4)
                             {
                                 nombreVie--;
                                 printf("Perdu, try again. Vous perdez 1 point de vie.\n");
                             }
                             printf("Vos points de vie: %ld\nVos bonnes reponses: %ld\n\n", nombreVie, juste);
                        } while(reponse<0 || reponse>4);
    
                        if(nombreVie==0)
                        {
                            printf("T'as perdu, t'es nul, t'es naze, rentre chez toi t'entrainer!\n\n");
                            choix=2;
                        }
                    }
    
                    else if(nombreAleatoire==19 && nombreVie>0)
                    {
                        printf("Question : Quel est le numero de la Gironde ?\n\t");
                        printf("1. 33\n\t2. 64\n\t3. 67\n\t4. 93\n");
    
                        do
                        {
                        scanf("%ld", &reponse);
    
                            if(reponse==1)
                            {
                                juste++;
                                printf("Bravo! Quel savoir!\n ");
                            }
                             else if(reponse==2 || reponse==3 || reponse==4)
                             {
                                 nombreVie--;
                                 printf(" Vous etes mauvais! Vous perdez 1 point de vie.\n");
                             }
                             printf("Vos points de vie: %ld\nVos bonnes reponses: %ld\n\n", nombreVie, juste);
                        } while(reponse<0 || reponse>4);
    
                        if(nombreVie==0)
                        {
                            printf("T'as perdu, t'es nul, t'es naze, rentre chez toi t'entrainer!\n\n");
                            choix=2;
                        }
                    }
    
                    else if(nombreAleatoire==20 && nombreVie>0)
                    {
                        printf("Question : Durant la guerre 1914-1918, qu'appellait-on un poilu ?\n\t");
                        printf("1. Un homme velu\n\t2. Une arme\n\t3. Un rat\n\t4. Un homme dans les tranchees\n");
    
                        do
                        {
                        scanf("%ld", &reponse);
    
                            if(reponse==4)
                            {
                                juste++;
                                printf("Bravo! Vous connaissez votre histoire!\n ");
                            }
                             else if(reponse==1 || reponse==3 || reponse==2)
                             {
                                 nombreVie--;
                                 printf("Retour a l'ecole! Vous perdez 1 point de vie.\n");
                             }
                             printf("Vos points de vie: %ld\nVos bonnes reponses: %ld\n\n", nombreVie, juste);
                        } while(reponse<0 || reponse>4);
    
                        if(nombreVie==0)
                        {
                            printf("T'as perdu, t'es nul, t'es naze, rentre chez toi t'entrainer!\n\n");
                            choix=2;
                        }
                    }
                }
                    if(juste==10)
                    {
                        printf("Vous avez effectue un sans fautes!!!\nVous etes DIEU tout puissant, nous vous venerons tous !\n");
                    }
                    else if(nombreVie>0)
                    {
                        printf("Bravo vous avez gagne!!!!!!!!\n");
                    }
                        choix=2;//Ramener au menu
    
    
            }
            else if(difficulte==4)//Si le joueur veut quitter
            {
                do
                {
                    choix=0;
                    printf("\n\n Etes-vous certain de vouloir quitter?\n\t1. Oui\n\t2. Pas question ce Quizz dechire!\n");
                    scanf("%ld", &choix);
                }while(choix<1 || choix>2);
    
                if(choix==1)//Quitter
                {
                    return 0;
                }
            }
            else
            {
                return 0;
            }
        }while(choix==2);//retour au menu
    }
    


    Comme vous pouvez le voir plus de 600lignes pour ça me semble beaucoup. :p
    Sinon, pour l'instant je n'ai réalisé que le niveau de difficulté facile, car je voudrais optimiser ceci et apprendre d'autres trucs avant de passer aux niveaux plus compliqué du quizz.
    • Partager sur Facebook
    • Partager sur Twitter
      13 août 2008 à 23:25:39

      Tu veux optimiser (c'est à dire que ton code s'exécute en utilisant moins de ressources mémoires et/ou plus vite), réécrire le code de manière plus élégante et lisible ou écrire le moins de lignes possibles ?
      • Partager sur Facebook
      • Partager sur Twitter
        13 août 2008 à 23:29:44

        Citation : Bladelight

        Bien le bonjour

        Comme le titre l'indique j'aurais besoin de votre aide pour optimiser un programme sachant que je n'ai vu que la partie I du tutoriel. (donc PAS de prototypes, pointeurs ou trucs du genres) ^^

        Je pensais à creer des fonctions pour éviter de tout mettre dans la main, mais j'avoue ne pas avoir d'idées qui conviandrait au programme. (Il s'agit d'un Quizz).


        Un quizz est un bon sujet de TP un peu avancé qui donne l'occasion de travailler sur un principe fondamental qui est la séparation du code et des données.

        Le principe est de définir un format de fichier texte qui contient

        - Une série de question (par thème, par exemple) organisée en

        -- Question 1
        -- Reponse 1.1
        -- Reponse 1.2
        -- Reponse 1.3 OK
        -- Reponse 1.4

        -- Question 2
        -- Reponse 2.1 OK
        -- Reponse 2.2
        -- Reponse 2.3

        Il y a déjà un intéressant travail de définition de format de ficher, pour qu'il soit:

        - Facile à modifier avec un simple éditeur de texte
        - Compréhensible par l'homme
        - Compréhensible par la machine

        Il faut prévoir une syntaxe, une vérification de cohérence (au mois 2 réponses avant une nouvelle question, au moins (au plus ?) une bonne réponse etc.

        Une fois que ceci est défini, il faut réaliser un 'moteur de quizz' qui charge le fichier, le lit et présent à l'écran les question et les réponses possibles, en faisant la présentation automatiquement en fonction des informations lues.

        Ça sera à mon avis plus intéressant et plus instructif (voire même utile) que de faire du copié collé...

        Les notions utilisées sont

        - Saisie de texte et de nombres
        - Traitement de chaines
        - Lecture d'un fichier
        - Un peu de logique séquentielle
        - Affichage simples
        - Compteurs

        Rien de compliqué.

        Une maquette vite faite (pas de gestion des erreurs du fichier de données) ...

        #include <stdio.h>
        #include <string.h>
        #include <stdlib.h>
        
        /*
        
        File spec
        
        t = theme
        q = question
        r = reponse fausse
        o = reponse juste
        
        Exemple de fichier :
        
        t=programmation en C
        
        q=Combien y'a-t-il de bits dans un long
        r=16
        r=32
        o=au moins 32
        
        q=Sachant que sur une machine donnee, un char fait 8 bit, quelle est la valeur max d'un char
        o=ca dépend de l'implementation
        r=127
        r=256
        
        
        */
        
        static void fclean (char *s, FILE * fp)
        {
           /* search ... */
           char *p = strchr (s, '\n');
           if (p != NULL)
           {
              /* ... and kill */
              *p = 0;
           }
           else
           {
              /* ... or purge */
              int c;
              while ((c = fgetc (fp)) != '\n' && c != EOF)
              {
              }
           }
        }
        
        int reponse (int nb_rep, int rep_ok)
        {
           long n;
           int err;
           printf ("\n");
           do
           {
              char ligne[4];
        
              printf ("Votre reponse ? ");
        
              fgets (ligne, sizeof ligne, stdin);
              fclean (ligne, stdin);
        
              n = strtol (ligne, NULL, 10);
              err = n < 1 || n > nb_rep;
           }
           while (err);
        
           return n == rep_ok;
        }
        
        static void quizz (char const *fichier)
        {
           FILE *fp = fopen (fichier, "r");
           if (fp != NULL)
           {
              int reponses_ok = 0;
              int questions = 0;
        
              int count = 0;
              int ok = 0;
        
              char ligne[256];
              while (fgets (ligne, sizeof ligne, fp) != NULL)
              {
                 fclean (ligne, fp);
                 if (strlen (ligne) > 2 && ligne[1] == '=')
                 {
                    switch (ligne[0])
                    {
                    case 't':
                       printf ("\n%s\n\n", ligne + 2);
        
                       break;
        
                    case 'q':
                       if (count != 0)
                       {
                          if (reponse (count - 1, ok))
                          {
                             reponses_ok++;
                          }
                          questions++;
                       }
                       count = 1;
                       ok = 0;
                       printf ("\n%s ?\n\n", ligne + 2);
                       break;
        
                    case 'r':
                       printf ("%d - %s\n", count, ligne + 2);
                       count++;
                       break;
        
                    case 'o':
                       ok = count;
                       printf ("%d - %s\n", count, ligne + 2);
                       count++;
                       break;
                       break;
        
                    }
                 }
              }
              fclose (fp), fp = NULL;
        
              if (reponse (count - 1, ok))
              {
                 reponses_ok++;
              }
              questions++;
              printf ("\n%d bonne%s reponse%s sur %d\n", reponses_ok,
                      reponses_ok > 1 ? "s" : "", reponses_ok > 1 ? "s" : "",
                      questions);
           }
           else
           {
              perror (fichier);
           }
        
        }
        
        int main (void)
        {
           char fichier[128];
           printf ("Nom du fichier : ");
           fgets (fichier, sizeof fichier, stdin);
           fclean (fichier, stdin);
        
           quizz (fichier);
           return 0;
        }
        

        Nom du fichier : c.qiz
        
        programmation en C
        
        
        Combien y'a-t-il de bits dans un long ?
        
        1 - 16
        2 - 32
        3 - au moins 32
        
        Votre reponse ? 2
        
        Sachant que sur une machine donnee, un char fait 8 bit, quelle est la valeur max
         d'un char ?
        
        1 - ca depend de l'implementation
        2 - 127
        3 - 256
        
        Votre reponse ? 1
        
        1 bonne reponse sur 2
        
        Process returned 0 (0x0)   execution time : 13.862 s
        Press any key to continue.
        • Partager sur Facebook
        • Partager sur Twitter
        Music only !
          13 août 2008 à 23:41:50

          Citation : Léna

          Tu veux optimiser (c'est à dire que ton code s'exécute en utilisant moins de ressources mémoires et/ou plus vite), réécrire le code de manière plus élégante et lisible ou écrire le moins de lignes possibles ?



          Jpensais essayer de raccourcir le nombre de lignes tout en restant lisible. Car je trouve certaines action répétitives sans pour autant trouver de fonction qui conviendraient. :(


          Sinon -ed- merci pour ta réponse. Par contre, je pense que j'ai besoin de plus de savoir en langage C, car là ce que tu me dis n'est pas très clair pour moi ^^. Allé, jpasse au II du tuto. Jcomprendrais peut être mieux. :p
          • Partager sur Facebook
          • Partager sur Twitter
            14 août 2008 à 0:31:50

            Citation : Bladelight

            Sinon -ed- merci pour ta réponse. Par contre, je pense que j'ai besoin de plus de savoir en langage C,


            En fait, non. Niveau langage C, c'est simple. Par contre, c'est sur la logique séquentielle qu'il faut travailler.

            En gros, on décode en séquence des lignes qui signifient :

            'theme'
            'question'
            'bonne réponse'
            'mauvaise réponse'

            comment, à partir de ces évènements, on fait

            Affichage du thème (pas trop dur)

            Affichage de la question (facile)
            Affichage des réponses numérotées (faut savoir compter...)
            Saisie de la réponse et analyse du résultat (go/nogo). (legèrement plus rusé...)

            et ce tant qu'il y a des questions dans le fichier...

            • Partager sur Facebook
            • Partager sur Twitter
            Music only !
              14 août 2008 à 1:27:03

              Citation : -ed-

              Citation : Bladelight

              Sinon -ed- merci pour ta réponse. Par contre, je pense que j'ai besoin de plus de savoir en langage C,


              En fait, non. Niveau langage C, c'est simple.


              Quand on a pas commencé la partie II du tuto de M@teo, c'est moins facile :

              Citation : Bladelight

              Allé, jpasse au II du tuto. Jcomprendrais peut être mieux. :p


              S'il ne connait ni chaine de caractère, ni gestion de fichier, il risque d'avoir du mal à le faire.
              • Partager sur Facebook
              • Partager sur Twitter
                14 août 2008 à 3:57:11

                Premierement : Un switch serait beaucoup plus lisible qu'une serie de if / else if

                deuxiemement, pour rendre ton code plus flexible tu pourrait:

                1 - Creer une structure "question" dont les deux attributs sont:
                const char[] enonce //enonce de la question
                et
                int reponse //Numero de la bonne reponse

                Tu pourrais aussi creer un fichier contenant les questions et leurs reponses, ainsi il sera plus facile de modifier les questions et reponses, il sera meme facile de le faire sans le code

                Ces deux suggestions demandent la lecture du chapitre 2, ce que je te suggere plus que fortement si tu veux pouvoir realiser des codes interessant.

                Si tu ne comprends pas les pointeurs, ce n'est pas grave, beaucoup plantent a ce stade, relis le tutoriel plusieurs fois et meme si tu ne le comprend pas a 100%, continue le chapitre et quand tu a absolument besoin d'utiliser les pointeurs, retourne voir le tutoriel (il n'y a rien de mal a utiliser les tuto comme reference, je le fais toujours dans les cas d'incertitude)
                • Partager sur Facebook
                • Partager sur Twitter
                  14 août 2008 à 6:17:48

                  Comme -ed-, je pense que le problème ne vient pas de lacunes en C mais d'une manière de penser. Il faut penser de manière un peu plus haute, plus éloignée du déroulement linéaire du programme. Ce qu'il faut faire, c'est écrire une fonction pour chaque chose que tu fais plusieurs fois, par exemple une fonction "poser question" (qui peut aussi gérer la réponse :))

                  C'est en décomposant les différentes fonctions ou missions qu'effectue ton programme que tu auras un code propre, compréhensible et facile à faire évoluer.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 août 2008 à 9:20:27

                    9h11:

                    Merci à tous pour vos réponses.

                    Si j'ai bien compris pour clarifier le tout, je pourrais ajouter des ficihiers par theme de questions, faire une fonction pour les bonnes réponses, une autre pour les mauvaises et encore une autre pour poser la question.

                    Et avant cela avancer unpeu dans mon apprentissage :p.
                    Merci encore. ^^


                    14h12:
                    Euh au fait, comment je fais pour mettre un fichier sur le forum ? s'il vous plait.

                    Car là j'ai divisé mon programme en plusieurs fonctions. Cependant j'ai un soucis concernant le compte du nombre de bonnes et mauvaises réponses.
                    Parce que dans une fonction si j'incrémente une variable, celle-ci sera effacée une fois la fonction finie. (du moins, c'est ce que j'ai compris :o )

                    19h:

                    C'est bon j'ai trouvé la solution. :D
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Optimiser

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown