IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

[C++] Évaluer mon programme


Sujet :

C++

  1. #41
    Membre habitué
    Avatar de Glân von Brylân
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2014
    Messages : 133
    Points : 186
    Points
    186
    Par défaut
    Alors pour lower_bound et rotate ça commence mal, ça utilise les itérateurs et je sais même pas encore ce que c'est.
    Rah, je n'ai pas le droit d'afficher les records et d'en profiter pour les enregistrer ? Et si je l'appelle enregETafficherRecords ? Je trouve pas ça optimisé de s'embêter à créer deux fonctions différentes quand une seule peut remplir le boulot.
    Les structures, oui, on m'a déjà fait cette remarque...Pour mes prochains programmes j'y penserais mais là j'ai la flemme, vous m'excuserez. Ou pas, ça ne change rien.
    Enfin effectivement je n'ai pas pensé à la possibilité de perdre ! Alors déjà j'ai mis la limite d'essais à 10 (c'est beau, c'est rond, c'est pas à des kilomètres du nombre d'essais moyen) et quand on atteint cette limite, si on n'a toujours pas trouvé le nombre, on a perdu. Voici le morceau de code modifié de la fonction jeu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    cout<<endl<<"Quel est le nombre ? ";
        while(nbDonne!=nbSecret && nbEssais<10)//ici, on compare le nombre donne par le joueur et on compte son nomre d'essais. max d'essais : 127. pourquoi ? parce que.
        {
            if (nbDonne<nbSecret)
            {
                cout<<endl<<endl<<"Plus grand. ";
            }
            else
            {
                cout<<endl<<endl<<"Plus petit. ";
            }
            cin>>nbDonne;
            nbEssais++;
        }
        if(nbEssais==10 && nbDonne!=nbSecret)
        {
            cout<<"Vous avez atteint la limite d'essais. Vous avez perdu ! Le nombre etait "<<nbSecret<<"."<<endl;
            nbEssais++;//pour ne pas lancer la fonction newScore
        }
        return nbEssais;
    Et de la fonction main() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    score=jeu(diff);//on lance la fonction jeu() qui est dans jeu.cpp et retourne de nb d'essais du joueur
            /* D'ici au prochain commentaire, le code sert à rentrer les records dans des variables pour les comparer au score
               qui vient d'etre fait. */
            cout<<"Records acutels :";
            enregRecords(champions,records);
            if(score<=10){cout<<"Vous avez fait "<<score<<" essais."<<endl;}//et on affiche son score au joueur, s'il n'a pas perdu
            if (score==11){}
            else if(diff!=1)
            {
                newscore(champions,records,score); //cette fonction est dans jeu.cpp
            }
            else
            {
                cout<<"Comme vous etes en Facile, votre score ne compte pas. Jouez en normal pour"<<endl<<"enregistrer vos records !"<<endl;
            }
    Sinon si on met de côté ces histoires de structures et cette fichue fonction afficherRecords/enregRecords, il est comment mon programme ?

    (note d'utilité limitée : si on met des lettres au lieu d'un nombre quand il demande "Quel est le nombre ?" le programme passe en mode boucle infinie, je trouve ça assez drôle. enfin, j'imagine que ce sera moins drôle si ça m'arrive sur de plus gros programmes.)
    Les pointeurs intelligents, c'est mignon mais trop long à écrire.

  2. #42
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Je trouve pas ça optimisé de s'embêter à créer deux fonctions différentes quand une seule peut remplir le boulot.
    L'optimisation ça marche pas comme ça. Quand tu trouveras que ton programme sera lent tu y penseras. Il y a des techniques qui n'enlèvent rien à la beauté du code et tu auras le temps de les apprendre en temps voulu, en attendant tu ne t'occupes pas de l'optimisation et tu penses découpage maximale (en fonction).

    note d'utilité limitée : si on met des lettres au lieu d'un nombre quand il demande "Quel est le nombre ?" le programme passe en mode boucle infinie, je trouve ça assez drôle. enfin, j'imagine que ce sera moins drôle si ça m'arrive sur de plus gros programmes.
    Lire la FAQ.

    Sinon si on met de côté ces histoires de structures et cette fichue fonction afficherRecords/enregRecords, il est comment mon programme ?
    On ne connait pas ton niveau et ton cursus, impossible de dire quelque chose d'objectif, seul ton professeur le pourra. D'un point de vue de programmeur en fin d'étude (moi), ça transpire le code de débutant, mais c'est normal ne t'en fait pas. Si tu es en première année, à mon avis c'est déjà bien, et très bien pour la démarche de venir demander des avis ici (par contre c'est mal si tu n'as pas corrigé tes boucles et que tu as encore du code redondant).

  3. #43
    Membre habitué
    Avatar de Glân von Brylân
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2014
    Messages : 133
    Points : 186
    Points
    186
    Par défaut
    Niveau, cursus, professeur : aucun. Pour l'instant je suis encore au lycée et j'apprend le C++ en suivant un tuto depuis près de 2 mois, j'en suis à "Classes et pointeurs", dans la partie 2. j'hésite un peu avant de m'y attaquer car il indique que c'est très dur, je préfère être sûr d'être dans un moment où je serais totalement disposé à ça.
    Pour la boucle infinie je suis en train de voir ça, je ne suis pas encore sûr de bien comprendre comment cela fonctionne, mais ça va venir.
    Les pointeurs intelligents, c'est mignon mais trop long à écrire.

  4. #44
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    OK, il faut que tu fasses d'autant plus attention et que tu suives à la lettre nos indications car malheureusement, lorsqu'on apprend seul et dans notre coin, on se retrouve souvent avec des mauvaises pratiques.

    En C++ il n'y a pas besoin de pointeur (sauf dans de cas assez rares auxquels tu ne seras pas exposé pour le moment).

    À mon avis, la meilleure chose que tu puisses faire avant de passer à autre chose c'est de fignoler ce programme, c'est peut-être un peu embêtant mais au moins ça te servira de modèle et de base pour la suite.

  5. #45
    Membre habitué
    Avatar de Glân von Brylân
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2014
    Messages : 133
    Points : 186
    Points
    186
    Par défaut
    Bon. Je vais donc me décider à utiliser une structure.
    Pour la fonction enregRecords...Je dois vraiment la séparer en deux ?
    Les pointeurs intelligents, c'est mignon mais trop long à écrire.

  6. #46
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Pour la dixième fois, oui.

  7. #47
    Membre habitué
    Avatar de Glân von Brylân
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2014
    Messages : 133
    Points : 186
    Points
    186
    Par défaut
    Bon. Je maintiens que je trouve ça idiot, mais j'imagine que vous savez mieux que moi.
    Du coup je ne crée pas de structure puisque tout l'intérêt de mettre records[] et champions[] en paramètre était de les modifier en même temps que de les afficher. Je ne les crée même pas dans main() puisqu'ils n'y étaient utilisés qu'en tant que paramètres pour afficherRecords et newscore.
    Bon, autre modification, pour la fonction jeu, je me suis aperçu que le paramètre diff n'était pas mis en référence constante, chose faite.
    Le nouvel exe est 2ko plus grand et j'avoue que ça ne me plaît pas beaucoup, mais comme je le disais plus tôt, je pense que vous savez mieux que moi.
    Voici le nouveau code, enfin :
    jeu.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #ifndef JEU_H_INCLUDED
    #define JEU_H_INCLUDED
     
    #include <vector>
     
    void regles();
    void afficherRecords();
    int jeu(int const& diff);
    void newscore(int const& score);
     
    #endif // Bonjour, je suis un commentaire
    jeu.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    #include <iostream>
    #include <limits>
    #include <string>
    #include <fstream>
    #include <ctime>
    #include <vector>
    #include <cstdlib>
    using namespace std;
    #include"jeu.h"
     
    void regles()
    {
        cout<<"Un nombre compris entre 0 et 100 va etre genere aleatoirement. Vous devez le"<<endl<<"trouver."<<endl;
        cout<<"Moins il vous faut d'essais pour le trouver, mieux c'est."<<endl;
        cout<<"Ne vous inquietez pas, a chaque coup manque, il vous sera dit si le nombre a"<<endl;
        cout<<"trouver est plus grand ou plus petit que celui que vous avez donne."<<endl;
        cout<<"En mode Facile, le nombre n'est compris qu'entre 0 et 50, mais votre score ne"<<endl<<"sera pas enregistre."<<endl;
        cout<<"Vous avez une limite de 10 essais. Au dela, si vous n'avez pas trouve le"<<endl<<"nombre, vous avez perdu."<<endl;
    }
     
    void afficherRecords()
    {
        ifstream Records("scoresJeuDuNombre.glan");
        vector<string> champions(5);
        vector<int> records(5);
        cout<<endl;
        for (int i=0;i<(int)champions.size();i++)//cette boucle enregistre au fur et a mesure les champions...
        {
            getline(Records,champions[i]);
        }
        for (int i=0; i<(int)records.size(); i++)//...et celle-ci, leurs scores respectifs...
        {
            Records>>records[i];
            cout<<champions[i]<<" : "<<records[i]<<endl;//...pour afficher tout le bazard.
            //j'aurais bien tout mis dans la meme boucle en alternant champions et records, mais ça ne marche pas et j'ignore pourquoi...
        }
    }
     
     
    int jeu(int const& diff)
    {
        srand(time(0));
        int nbEssais(1);
        int nbSecret;
        if (diff==1)//si on est en facile...
        {
            nbSecret=rand()%51;//...on fait un nombre compris entre 0 et 50. le score n'est pas enregistre en facile.
        }
        else
        {
            nbSecret=rand()%101;//entre 0 et 100 en mode normal. le jeu est en mode normal s'il n'est pas en mode facile.
        }
        /* la seule difference entre le mode normal et le mode facile est l'intervelle a laquelle appartient le nombre a trouver, qui est entier */
        int nbDonne(110);
        cout<<endl<<"Quel est le nombre ? ";
        while(nbDonne!=nbSecret && nbEssais<10)//ici, on compare le nombre donne par le joueur et on compte son nomre d'essais. max d'essais : 127. pourquoi ? parce que.
        {
            while(!(cin>>nbDonne))//on verifie que le joueur n'a pas mis n'importe quoi
            {
                if(cin.fail())
                {
                    cout<<"Erreur ; entrez un nombre (le programme va peut-etre planter par votre faute !) ";
                    cin.clear();
                    cin.ignore( numeric_limits<streamsize>::max(), '\n' );
                }
            }
            if (nbDonne<nbSecret)
            {
                cout<<endl<<"Plus grand. ";
            }
            else
            {
                cout<<endl<<"Plus petit. ";
            }
            nbEssais++;
        }
        if(nbEssais==10 && nbDonne!=nbSecret)
        {
            cout<<"Vous avez atteint la limite d'essais. Vous avez perdu ! Le nombre etait "<<nbSecret<<"."<<endl;
            nbEssais++;//pour ne pas lancer la fonction newScore
        }
        return nbEssais;
     
    }
     
    void newscore(int const& score)
    {
        //cette fonction sert a verifier si le joueur a battu un des 5 records enregistres. si oui il sera enregistre a son tour
        int nouvellePlace(6);
        ifstream Records("scoresJeuDuNombre.glan");
        vector<string> champions(5);
        vector<int> records(5);
        cout<<endl;
        for (int i=0;i<(int)champions.size();i++)//cette boucle enregistre au fur et a mesure les champions...
        {
            getline(Records,champions[i]);
        }
        for (int i=0; i<(int)records.size(); i++)//...et celle-ci, leurs scores respectifs, en affichant tout le bazar
        {
            Records>>records[i];
        }
        for(int i(0);i<5;i++){if(score<records[i]){nouvellePlace--;}}//on compte le nombre de records plus petits que le score, et en détermine la nouvelle place du joueur
        if(nouvellePlace<6)
            {
               for(int i(nouvellePlace);i!=0;i--)
                {
                    champions[i]=champions[i-1];
                    records[i]=records[i-1];
                }
                records[nouvellePlace-1]=score;//-1 car c'est un tableau, donc numerote de 0 a 4 et non de 1 a 5 !
            }
        else if (nouvellePlace>=6){cout<<"Vous n'avez battu aucun record...Desole !"<<endl;}//...tant pis !
     
            if(nouvellePlace<6)
            {
                if(nouvellePlace==1){cout<<"Felicitation, vous venez de decrocher la 1re place !"<<endl;}//GG !
                else{cout<<"Felicitation, vous venez de decrocher la "<<nouvellePlace<<"e place !"<<endl;}//bien aussi !
                cout<<"Sous quel nom enregistrer votre score ? (pas d'espaces !) ";//et enfin on lui demande son p'tit nom !
                cin>>champions[nouvellePlace-1];
            }
            ofstream flx_env("scoresJeuDuNombre.glan");//et on reecrit le fichier des scores avec tout ce bazar.
            for(int i(0);i<(int)champions.size();i++)
            {
                flx_env<<champions[i]<<endl;
            }
            for(int i(0);i<(int)records.size();i++)
            {
                flx_env<<records[i]<<endl;
            }
    }
    main.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    #include <iostream>
    #include <string>
    #include <fstream>
    #include <ctime>
    #include <vector>
    #include<cstdlib>
    using namespace std;
    #include "jeu.h"
     
     
    int main()
    {
        cout<<"Jeu du Nombre v2.1 par Glan (avec un accent circonflexe sur le a !)"<<endl<<endl;
     
        ifstream flx_rec("scoresJeuDuNombre.glan"); //oui je cree des fichiers dont l'extension est mon pseudo :D
        if(!flx_rec)
        {
            ofstream flx_env("scoresJeuDuNombre.glan");
            flx_env<<"XXXXX"<<endl<<"XXXXX"<<endl<<"XXXXX"<<endl<<"XXXXX"<<endl<<"XXXXX"<<endl<<127<<endl<<127<<endl<<127<<endl<<127<<endl<<127;
            flx_env.close(); //là, il verifiait s'il y avait deja un fichier de meilleurs scores, et si non, il vient de le creer
        }
        flx_rec.close();
        int score(127),diff(1);
        string reponse;
        bool rejouer(true);
        cout<<"Menu"<<endl<<"1 : Regles"<<endl<<"2 : Meilleurs scores"<<endl<<"3 : Historique"<<endl<<"Autre reponse : jouer"<<endl;
        cin>>reponse;
        if(reponse=="1")
        {
            regles();
        }
        else if(reponse=="2")
        {
            afficherRecords();// se trouve dans jeu.cpp. Comme sont nom l'indique, affiche les records...
        }
        else if(reponse=="3")
        {
            cout<<"13/03/2014 : 1.0 : Creation du jeu"<<endl;
            cout<<"08/04/2014 : 2.0 : Optimisation du code"<<endl;
            cout<<"14/04/2014 : 2.1 : Ajout de la possibilite de perdre et passage de la limite"<<endl<<"d'essais a 10"<<endl;
        }
     
        while(rejouer) //rejouer est un bool, qui est modifie apres chaque partie selon que le joueur veuille rejouer ou non. vous l'aviez vu, rejouer vaut true au moment ou il est cree
        {
            if (diff==1 || diff==2)//c'est-a-dire si le joueur a demande a ne plus etre embeter avec ca, voir plus bas
                {
                    cout<<endl<<"Difficulte ?"<<endl<<"1 : Facile"<<endl<<"2 : Normal"<<endl;
                    cout<<"Autre reponse : Normal et ne plus demander"<<endl;//c'est de ça que je parlais. diff peut valoir n'importe quoi.
                    cin>>diff;
                }
            score=jeu(diff);//on lance la fonction jeu() qui est dans jeu.cpp et retourne de nb d'essais du joueur
            /* D'ici au prochain commentaire, le code sert à rentrer les records dans des variables pour les comparer au score
               qui vient d'etre fait. */
            cout<<"Records acutels :";
            afficherRecords();
            if(score<=10){cout<<"Vous avez fait "<<score<<" essais."<<endl;}//et on affiche son score au joueur, s'il n'a pas perdu
            if (score==11){}
            else if(diff!=1)
            {
                newscore(score); //cette fonction est dans jeu.cpp
            }
            else
            {
                cout<<"Comme vous etes en Facile, votre score ne compte pas. Jouez en normal pour"<<endl<<"enregistrer vos records !"<<endl;
            }
            /*yolo*/
            cout<<endl<<endl<<"Rejouer ? ";
            cin>>reponse;
            if(reponse=="oui" || reponse=="OUI" || reponse=="Oui")
            {
                rejouer=true;
            }
            else
            {
                rejouer=false;
            }//je vous avait parle de bool rejouer precedemment, non ?
        }
     
        cout<<endl<<endl<<"Jeu du Nombre v2.1 par Glan (avec un accent circonflexe sur le a !)"<<endl<<endl;
        return 0;
    }
    //j'aime mon travail.
    Mais bon, j'imagine que ça ne va toujours pas.
    Les pointeurs intelligents, c'est mignon mais trop long à écrire.

  8. #48
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Bon. Je maintiens que je trouve ça idiot, mais j'imagine que vous savez mieux que moi.

    ...

    Mais bon, j'imagine que ça ne va toujours pas.
    Si tu souhaites de tout ton coeur qu'on te dise 'c'est bien' malgré le fait qu'on n'en pense pas un mot, alors je me lance : "c'est bien".

    J'avais pensé que tu voulais qu'on te donne notre opinion, pas qu'on t'encense. Mais bon, j'ai du me tromper.

    Tu m'excuseras, j'ai des personnes à adier - des personnes qui écoutent ce qui leur est dit et qui font des efforts pour le comprendre et l'appliquer.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  9. #49
    Membre habitué
    Avatar de Glân von Brylân
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2014
    Messages : 133
    Points : 186
    Points
    186
    Par défaut
    Tu plaisantes. Je suis ici pour progresser, moi.
    Je te demande pas de me dire que c'est bien, je te demande de me dire ce qui ne va pas, justement. D'un air un peu agacé parce que j'ai l'impression qu'il y a toujours autant de problèmes dans mon programme alors que ça fait plus d'une semaine que je l'améliore en suivant vos conseils, mais je veux VRAIMENT savoir ce qui ne va pas.
    Après si ton post est un excuse pour te débarrasser de moi parce que tu penses que je n'apprendrais jamais, dis-le carrément mais n'insinue pas que je suis un petit péteux venu faire dire de lui qu'il est un génie. Je ne suis probablement pas le meilleur apprenti en C++ que tu aies connu mais je pense que je mérite quand même un peu plus de respect que ça.
    Les pointeurs intelligents, c'est mignon mais trop long à écrire.

  10. #50
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Si t'avais fait tout ce qu'on t'as dit depuis le début, le thread serait clôt depuis au moins 15 messages. Quand tu dis que "tu trouves ça idiot" ou "ça ne te plait pas beaucoup" et bien libre à toi de coder comme ça te plait mais faut pas venir demander des conseils. On est pas tes profs, on est pas payé pour te répondre, alors tu ferais mieux de faire l'effort de garder tes réflexions pour toi.

    Cela étant dit, je t'invite à relire la conversation en entier et de corriger ce qu'on a déjà dit, puis si tu veux encore savoir ce qui ne va pas, de reposter ton code en entier ici.

  11. #51
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par Neoflash Okashi Voir le message
    Bon. Je maintiens que je trouve ça idiot, mais j'imagine que vous savez mieux que moi.
    Le truc c'est que tu nous montres ici un code "miniature" : quelques dizaines de lignes.
    Alors oui, ça semble idiot de devoir diviser une fonction qui fait 10 lignes en deux.

    Mais la manière de faire ne change pas en fonction de la taille du code, si une fonction (ou une classe, tu verras ça plus tard) à deux rôles, alors elle doit être divisée en 2.

    Comme dit @Trademark, ça n'a rien à voir avec l'optimisation: tu n'as de toutes façons aucune contraintes ici, tu pourrai avoir un algo de comparaison de int en O(n²) que ça ne changerai rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    bool areEquals(int lhs, int rhs) {
        for(int i=0; i<101; ++i) {
           for(int j=0; j<101; ++j) {
              if(i == lhs && j == rhs && i == j) {
                 return true;
              }
           }
        }
        return false;
    }
    Si la taille de l'exe généré te dérange regarde du coté des options de génération (compilo et linker), tu as certainement énormément à gagner de ce coté là.
    En tout cas, niveau temps d'exec, ça ne changera rien, que tu ai 1 ou 2 fonctions, elle seront de toutes façons très certainement inline.

    Mais comme le dit aussi @Trademark, l'optimisation vient après : dans un premier temps, le but est d'avoir un code propre, compréhensible et fonctionnel. Si par la suite le code est trop lent alors il faut identifier le goulot d’étranglement (comme toujours : 5% du code prennent 95% du temps d'exec) et le réimplémenter de manière plus efficace.

    Citation Envoyé par Neoflash Okashi Voir le message
    Du coup je ne crée pas de structure puisque tout l'intérêt de mettre records[] et champions[] en paramètre était de les modifier en même temps que de les afficher.
    L'intérêt est toujours là.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct Record {
        std::string name;
        int score;
    };
     
    void loadRecordsFromFile(const std::string& file, std::vector<Record>& records);
    void saveRecordsToFile(const std::string& file, const std::vector<Record>& records);
    void displayRecords(const std::vector<Record>& records);
    Et de toute façons :
    //cette boucle enregistre au fur et a mesure les champions...
    //...et celle-ci, leurs scores respectifs, en affichant tout le bazar
    Tu ne faisais pas les 2 opérations en même temps, mais bien l'une à la suite de l'autre : ce qui se traduira maintenant par 2 appels de fonctions.

  12. #52
    Membre habitué
    Avatar de Glân von Brylân
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2014
    Messages : 133
    Points : 186
    Points
    186
    Par défaut
    Bon, objectif n°1 de la programmation : faire quelque chose de lisible. Objectif secondaire : faire quelque chose de rapide. Bien reçu.
    Pour les structures oui, je comprends bien que c'est plus pratique pour le passage en paramètre, mais je dis justement que je ne crée plus quoi que ce soit dans main() pour les records. Rien à mettre donc.

    Autres trucs que j'ai retenus :
    Éviter le using namespace std; et plutôt mettre des std:: partout pour permettre à un éventuel utilisateur de mon code de savoir facilement ce qui vient de la bibliothèque standart et ce que j'ai créé.
    Pas de var1, var2 etc. Crée un tableau, dummy.
    Regrouper dans une structure tous les éléments directement liés, pour qu'un éventuel utilisateur de mon code n'aie pas à réfléchir pour savoir qu'ils vont ensemble, et pouvoir ainsi réfléchir au reste.
    Créer une fonction pour le moindre morceau de code utilisé plusieurs fois.
    Ne pas créer une fonction pour plusieurs utilités différentes, mais bien plusieurs fonctions avec une utilité chacune. LI-SI-BI-LI-TÉ avant tout.

    J'ai oublié quelque chose ? Si non alors je vais enfin pouvoir passer ce sujet en [Résolu], je pense que ça soulagera tout le monde.

    Je tiens aussi à m'excuser auprès de Trademark et des autres, c'est vrai que vous n'êtes pas mes profs et que rien ne vous oblige à m'aider sinon votre bonne volonté, j'ai eu tord de ne pas en avoir eu autant (de bonne volonté).
    J'ai tendance à oublier que je viens résoudre mes problèmes, pas en créer !
    Les pointeurs intelligents, c'est mignon mais trop long à écrire.

  13. #53
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    C'est plus ou moins ça ! On fait qql chose de rapide quand on a la preuve que c'est lent et dérangeant pour des raisons X ou Y. Pour le using namespace, il y a différentes écoles, pour ma part j'ai tendance à tout préfixer avec le namespace ou à utiliser des using locals (dans les fonctions). Dans tous les cas ça ne s'utilise jamais dans un .hpp pour les raisons citées avant. Si tu fais tout ce que t'as dit t'as compris la plus grosse partie de la programmation dans n'importe quel langage Excuses acceptées et bon courage pour la suite.

  14. #54
    Membre habitué
    Avatar de Glân von Brylân
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2014
    Messages : 133
    Points : 186
    Points
    186
    Par défaut
    D'accord ! Donc si on utilise un using namespace dans une fonction il prend fin avec celle-ci ? C'est logique cela dit mais je ne le savais pas.
    Merci et bonne continuation à vous !
    Les pointeurs intelligents, c'est mignon mais trop long à écrire.

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. envoyer un mail avec mon programme
    Par shrek dans le forum C++Builder
    Réponses: 8
    Dernier message: 06/12/2006, 12h27
  2. [JAR] Lancer mon programme
    Par Nico66 dans le forum Général Java
    Réponses: 6
    Dernier message: 08/12/2004, 15h29
  3. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59
  4. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 14h52
  5. Réponses: 11
    Dernier message: 17/03/2003, 10h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo