Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Exercices] Venez vous entraîner !

(v2)

    8 juillet 2012 à 22:59:53

    Bonjour à tous

    Vous me voyez le plus souvent sur le C ou le forum sur la 3D mais je connais et j'approfondis aussi le C++ et le python. Même si je suis encore loin d'être bon, je me suis fixer un exercice à faire après avoir lu les vectors et compagnies sur le tuto de Mateo et j'ai envi de le faire partagé car cela m'a pris 3/4 jour à raison de 4/5 heures par jour en moyenne vu mon faible niveau.
    Bon, j'arrête de parler de ma vie et je le mets. Je précise que c'est un programme au cas où il serait mis dans la première page

    Moyenne



    Situation initiale



    Luc est un heureux père depuis bientôt 6 ans. Et comme tout les enfants, son fils va aller en CP. Comme son père est très pressé, il n'attend pas les bulletins de notes et conservent précieusement toutes les notes qu'il a eu pendant le trimestre. Et régulièrement, grâce à votre programme, il suit l'évolution de sa moyenne.

    Niveau 1 : le primaire



    A l'école primaire, son fils à des notes /20, sur /5, sur /10... Grâce à votre programme, le père doit pouvoir avoir la moyenne générale de son fils sur 20.

    Voici ce qu'il doit rentrer :
    • La note
    • Sur combien elle est


    Niveau 2 : le collège



    Ca y est, son fils vit un grand jour : il rentre au collège. Mais son père est désemparé car maintenant, les notes ont un coefficient comme 1, 2, 0.5...
    Mais grâce à vous, il aura un nouveau programme où il peut rajouter pour chaque note son coefficient.

    Niveau 3 : le lycée



    Le temps à passer mais vous voilà face à un nouveau défi : les coefficients pour les matières. En effet, son fils est en première et tout les matière ne se valent pas. Le français par exemple pour le bac S vaut 2 et l'histoire 3.
    Modifiez votre programme pour que chaque note soit associé à une matière.

    Idées pour le mettre en place :
    • Vous définissez la matière, son coefficient puis suivent les notes correspondante. Puis on passe à une autre matière.
    • On définit les matière au début puis à chaque note, on dit à quel matière elles appartiennent.


    Et en plus...



    Idées d'améliorations :
    • Faire le compte rendu avant le résultat comme faire un récapitulatif des notes ou des moyennes pour chaque matières.
    • Mettre les notes dans un fichiers avec leurs caractéristiques puis le logiciels se débrouille tout seul.
    • Mettre les matières dans un fichier puis à chaque note, on dit à quel matière présent dans le fichier elle appartient.
    • Pouvoir choisir entre un mode primaire, collège ou lycée afin de ne pas avoir de paramètres superflu.


    Voilà, bonne chance et merci d'avance pour vos retours
    jérémie 14
    • Partager sur Facebook
    • Partager sur Twitter
    Venez découvrir mon site, madgic système.
      9 juillet 2012 à 8:14:32

      je sais pas si c'est trompeur, mais ca m'a l'air relativement simple non ? (enfin je me foure peut être et même probablement un doit dans l'oeil ^^ )
      • Partager sur Facebook
      • Partager sur Twitter
        9 juillet 2012 à 9:58:49

        Bonjour

        On peut le faire en 5 minutes le niveau 2 mais avec les matières en plus, j'ai mis un moment à trouver et moi aussi je me suis dit "Et tiens, si je rajoutais un coefficient pour les matières, je le fait en 5 minutes et hop...".
        Et ben non car c'est soi la moyenne général qui foire, soit les moyennes des matières donc la moyenne générale...

        jérémie 14
        • Partager sur Facebook
        • Partager sur Twitter
        Venez découvrir mon site, madgic système.
          9 juillet 2012 à 10:40:30

          ben ru considère chaque moyenne comme une note, caculé avec les coeff, puis tu calcul la moyenne G pareil non ?
          Du coup c'est la même chose il me semble ?
          Enfin en tout cas, je sais bien que les apparences sont parfois trompeuses, c'est pour ca que je n'était pas sur si c'était simple ou bien juste apparement simple ^^
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            9 juillet 2012 à 11:09:34

            Citation : PITETRE

            ben ru considère chaque moyenne comme une note, caculé avec les coeff, puis tu calcul la moyenne G pareil non ?
            Du coup c'est la même chose il me semble ?
            Enfin en tout cas, je sais bien que les apparences sont parfois trompeuses, c'est pour ca que je n'était pas sur si c'était simple ou bien juste apparement simple ^^



            Bah c'est exactement ça. Il suffit juste de faire une fonction moyenne prenant en paramètre une référence constante sur un tableau statique (ou dynamique si vous le souhaitez) de double et qui renvoie un double (la moyenne des notes du tableau).
            Tu l'appliques d'abord pour les notes de chaque matière afin d'avoir chaque moyenne par matière. Tu crées alors un tableau avec les moyennes obtenues et tu le repasses dans ta fonction et t'as la moyenne générale.
            Après, pour les coefficients, soit tu crées un deuxième tableau contenant les coefficients de chaque note (ou moyenne) et tu le passes aussi en paramètre de ta fonction, soit tu passes en paramètre de ta fonction un tableau à deux dimensions.

            Ca n'empêche que ça reste un exercice plutôt facile, et on devrait le garder, car c'est un peu ce qui manque sur ce topic : des exercices assez faciles pour les débutants qui cherchent un moyen de s'entraîner, sans passer directement par les exos plus ou moins difficiles déjà présents.
            • Partager sur Facebook
            • Partager sur Twitter
              9 juillet 2012 à 11:33:41

              après effectivement j'ai jamais dit u'il ne fallait pas le garder d'ailleur je pense même le faire pour me remmetre dans le bain du C++
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                9 juillet 2012 à 11:37:17

                Citation : PITETRE

                après effectivement j'ai jamais dit u'il ne fallait pas le garder d'ailleur je pense même le faire pour me remmetre dans le bain du C++



                Idem, je le ferais dans l'aprem ou la soirée et je posterais mon code. Et en y réfléchissant légèrement pour l'instant, le plus gros problème que je vois, ça reste l'interaction avec l'utilisateur : combien de matières veut-il prendre en compte ? Combien de notes ? etc...

                Soit on lui demande au lancement, soit il faut lui demander à chaque fois s'il veut rentrer une nouvelle note.


                En fait, cet exercice est sympa comme tout.
                • Partager sur Facebook
                • Partager sur Twitter
                  9 juillet 2012 à 12:12:43

                  Bonjour

                  Citation : Zeene

                  Soit on lui demande au lancement, soit il faut lui demander à chaque fois s'il veut rentrer une nouvelle note.



                  Moi,j'ai appliqué ma première méthode parmi les deux que je donne : vous définissez la matière, son coefficient puis suivent les notes correspondante. Puis on passe à une autre matière.

                  Et pour te donner un exemple, voici un petit exemple de ce que j'ai dans ma console.

                  Image utilisateur

                  Pour te donner un ordre d'idée, j'ai fait mon programme avec 3 fonctions, 2 d'une dizaine de lignes plus le main.c d'une centaine de ligne.

                  Voilà, j'espère que cela t'inspira...
                  jérémie 14
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Venez découvrir mon site, madgic système.
                    9 juillet 2012 à 12:22:50

                    Et bah moi qui ne s'avait pus quoi faire de mes vacances, je vais faire ton petit exo sa m'occupera ;)

                    Le seul petit reproche que j'ai a faire a tout logiciel c'est l'absence d'un menue qui proposerait ajouter une note (puis le niveau, primaire, college, lycee), retirer une note ( car oui l'élève peut parfois mentir a ses parents ;) ) et quitter, c'est juste que sa fait plus propre mais au final sa ne change pas enormement de ton
                    oui => 1
                    non => 2

                    Sa sera plus utile si on le fait passer sur une BDD ce que je ferrais peut être ( j'ai un pitit peu de mal avec sa :p )

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      9 juillet 2012 à 12:26:26

                      Pour retirer une note, il suffit de la rentrer avec un coefficient négatif, non ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 juillet 2012 à 12:35:37

                        Bonjour

                        hackbug, oui car cette bdd là n'est pu mise à jour. Et si t'as un peu de mal, je peux le faire, je l'ai déjà fait avec Blender sur le forum de la 3D (rassemblement de tuto).

                        jérémie 14
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Venez découvrir mon site, madgic système.
                          9 juillet 2012 à 12:40:55

                          On a du mal ce comprendre, je ne vois pas de quelle BDD tu parle :-° Pour ma part je parlais de coder une BDD pour une gestion sur le long terme des notes, et j'ai des difficulté pour ajouter, retirer des mots, caracteres etc... Je pense que c'est mon gros point faible en C++ :p enfin ormis sa je me debrouille mais sa va être l'occasion de m'entrainer dessus ;)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            9 juillet 2012 à 12:46:41

                            Bonjour

                            Oui en effet car moi j'avais compris : BDD = banque de donnée et puisque celle là n'est plus mis à jour, en faire en autre et mettre se tuto dedans.

                            jérémie 14
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Venez découvrir mon site, madgic système.
                              9 juillet 2012 à 13:01:35

                              pourquoi écris tu jémérémie 14 à chaque fois ?
                              c'est déjà dans t'a signature (dont c'est l'utilité ^^ )
                              • Partager sur Facebook
                              • Partager sur Twitter
                                9 juillet 2012 à 13:05:03

                                Bonjour

                                Je c'est pas, c'est une habitude, dans tous les forums je fais ça et certain non pas de signature ou une signature sans le nom et j'ai pas pris le temps de changer .

                                jérémie 14

                                ps : tu me le présente ce jérémie ? :p
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Venez découvrir mon site, madgic système.
                                  9 juillet 2012 à 13:27:29

                                  bah, comme tu veut c'était qu'un flood à 3 balles ^^
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    9 juillet 2012 à 14:07:08

                                    C'est un exercice simple mais qui a l'avantage de pouvoir être modifié de multiples façons ^^
                                    Je pense qu'il a sa place sur ce topic :)
                                    Ferai peut-être une solution vite fait en c++11 pour voir ça.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      9 juillet 2012 à 17:51:28

                                      C'est un des exercices fil conducteur d'AC++ il est très formateur et ils introduisent énormément de notions avec (plus que ce qui est introduit dans ce tuto d'ailleurs).
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        10 juillet 2012 à 0:00:20

                                        Je verrais quelque chose comme : (codé dans la boîte de réponse rapide, donc aucune vérification faite ; et les temps sont moches)

                                        #include <iostream>
                                        #include <map>
                                        #include <string>
                                        
                                        int main() {
                                           std::string tmps;
                                           int tmpi;
                                           double tmpd;
                                        
                                           std::map<std::string, int> matieres;
                                           std::cout << "Matiere (vide pour fin) : ";
                                           std::getline(std::cin, tmps);
                                           while (tmps != "") {
                                              std::cout << "Coeff                   : ";
                                              std::cin >> tmpi; std::cin.ignore();
                                              matieres[tmps] = tmpi;
                                              std::cout << "Matiere (vide pour fin) : ";
                                              std::getline(std::cin, tmps);
                                           }
                                        
                                           std::map<std::string, std::multimap<double, int>> notes;
                                           // Si on veut mettre en place une DB, charger ici et ameliorer l'UI
                                           for (auto matiere : matieres) {
                                              std::cout << matiere.first << " :\n";
                                              std::cout << "  Note (-1 pour fin) : ";
                                              std::cin >> tmpd; std::cin.ignore();
                                              while (tmpd >= 0.1) {
                                                 std::cout << "  Coeff              : ";
                                                 std::cin >> tmpi; std::cin.ignore();
                                                 notes[matiere.first].insert(std::make_pair(tmpd, tmpi));
                                                 std::cout << "  Note (-1 pour fin) : ";
                                                 std::cin >> tmpd; std::cin.ignore();
                                              }
                                           }
                                           // Si on veut mettre en place une DB, sauvegarder ici
                                        
                                           double moyenne = 0.;
                                           int over = 0;
                                           for (auto matiere : matieres) {
                                              double matmoy = 0.;
                                              int matover = 0;
                                              for (auto note : notes[matiere.first]) {
                                                 matmoy += note.second * note.first;
                                                 matover += note.second;
                                              }
                                              matmoy /= matover;
                                              std::cout << "Moyenne de " << matiere.first << " : " << matmoy << "\n";
                                              moyenne += matiere.second * matmoy;
                                              over += matiere.second;
                                           }
                                           moyenne /= over;
                                        
                                           std::cout << "Moyenne generale : " << moyenne << "\n";
                                        }
                                        


                                        [EDIT: En fait, après relecture, on pourrait même mélanger les deux dernières boucles, mais je préfère les garder séparées pour simplifier l'ajout d'une BDD.]

                                        [EDIT 2: Et puis les balises secret, après tout, c'est mieux.]
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          10 juillet 2012 à 20:30:33

                                          Bonjour à tous

                                          Cela fait bientôt 2 jours que l'exercice à été proposé. Je propose maintenant une réponse possible.
                                          Je précise que :
                                          • Fait avec les connaissances du début du tuto sur le C++ (jusqu'au tableaux). Donc pas de structures ou d'objets pour regrouper les tableaux par exemple.
                                          • Défait et refais au fil du temps et des 3 jours donc si sa se trouve, une ou deux variables ne servent plus à grand chose.
                                          • Mal optimisé, il y a surement une solution mieux...


                                          main.cpp

                                          #include <iostream>
                                          #include <vector>
                                          #include "fonction.h"
                                          
                                          using namespace std;
                                          
                                          int main()
                                          {
                                              string prenom;
                                              string nom;
                                              vector<double> note(0);
                                              vector<double> coeff(0);
                                              vector<double> note_max(0);
                                              double var_matiere_coeff=0;
                                              string matiere_nom="0";
                                              int continuer=1;
                                              int case_tableau=0;
                                          
                                              double moyenne_local=0;
                                              double coeff_local=0;
                                          
                                              double moyenne_global=0;
                                              double coeff_global=0;
                                              vector<double> tab_moyenne(0);
                                              vector<double> tab_coeff(0);
                                          
                                          
                                              cout<<"Bonjour et bienvenue !"<<endl<<endl<<"Ici, vous allez pouvoir calculer votre moyenne a partir des notes que vous avez eu. Mais avant, je voudrais vous connaitre un peu plus."<<endl<<"  Prenom : ";
                                              getline(cin,prenom);
                                              cout<<"  Nom : ";
                                              getline(cin,nom);
                                          
                                              while(continuer==1)
                                              {
                                                  cout<<endl<<"  Matiere : ";
                                                  getline(cin,matiere_nom);
                                                  cout<<"  Coefficient : ";
                                                  cin>>var_matiere_coeff;
                                                  cin.ignore();
                                                  tab_coeff.push_back(0);
                                                  tab_coeff[tab_coeff.size()-1]=var_matiere_coeff;
                                          
                                                  while(continuer==1)
                                                  {
                                                      cout<<endl<<"  Note : ";
                                                      ecriture(note);
                                                      cout<<"  Sur : ";
                                                      ecriture(note_max);
                                                      cout<<"  Avec un coefficient de : ";
                                                      ecriture(coeff);
                                                      cout<<endl<<"Voulez vous mettre une autre note ?"<<endl<<"  oui => 1"<<endl<<"  non => 2"<<endl;
                                                      cin>>continuer;
                                                      cin.ignore();
                                                  }
                                          
                                                  while(case_tableau<note.size())
                                                  {
                                                      moyenne_local=moyenne_local+note[case_tableau]/note_max[case_tableau]*20*coeff[case_tableau];
                                                      coeff_local=coeff_local+coeff[case_tableau];
                                                      case_tableau=case_tableau+1;
                                                  }
                                                  moyenne_local=moyenne_local/coeff_local;
                                                  case_tableau=0;
                                                  tab_moyenne.push_back(0);
                                                  tab_moyenne[tab_moyenne.size()-1]=moyenne_local;
                                          
                                                  cout<<endl<<"La moyenne de la matiere "<<matiere_nom<<" est "<<moyenne_local<<"/20."<<endl<<endl<<"Voulez vous mettre une nouvelle matiere ?"<<endl<<"  oui => 1"<<endl<<"  non => 2"<<endl;
                                                  cin>>continuer;
                                                  cin.ignore();
                                          
                                                  supprimer(note);
                                                  supprimer(coeff);
                                                  supprimer(note_max);
                                                  moyenne_local=0;
                                                  coeff_local=0;
                                              }
                                          
                                              while(case_tableau<tab_moyenne.size())
                                              {
                                                  moyenne_global=moyenne_global+tab_moyenne[case_tableau]*tab_coeff[case_tableau];
                                                  coeff_global=coeff_global+tab_coeff[case_tableau];
                                                  case_tableau=case_tableau+1;
                                              }
                                              moyenne_global=moyenne_global/coeff_global;
                                          
                                              cout<<endl<<prenom<<" "<<nom<<", votre moyenne general est de "<<moyenne_global<<"/20.";
                                          
                                              return 0;
                                          }
                                          


                                          fonction.cpp

                                          #include <iostream>
                                          #include <vector>
                                          
                                          using namespace std;
                                          
                                          void ecriture(vector<double> &tableau)
                                          {
                                              tableau.push_back(0);
                                              cin>>tableau[tableau.size()-1];
                                              cin.ignore();
                                          }
                                          
                                          void supprimer(vector<double> &tableau)
                                          {
                                              int case_tableau=0;
                                              int nombre=0;
                                          
                                              nombre=tableau.size();
                                          
                                              while(case_tableau<nombre)
                                              {
                                                  tableau.pop_back();
                                                  case_tableau=case_tableau+1;
                                              }
                                          }
                                          


                                          fonction.h

                                          #ifndef def_fonction
                                          #define def_fonction
                                          
                                          using namespace std;
                                          
                                          void ecriture(vector<double> &tableau);
                                          void supprimer(vector<double> &tableau);
                                          
                                          #endif
                                          


                                          Voilà, dans tout les cas, sa m'aura permis de réutiliser mes connaissances, de m’entraîner et ça servira de base si certains ont des problèmes.
                                          jérémie 14
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Venez découvrir mon site, madgic système.
                                            10 juillet 2012 à 20:56:48

                                            ben en fait, à par pour "hello world", et encore, il y a toujours une solution mieux optimisée ^^
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Anonyme
                                              10 juillet 2012 à 21:05:07

                                              Citation : PITETRE

                                              ben en fait, à par pour "hello world", et encore, il y a toujours une solution mieux optimisée ^^



                                              Non, au bout d'un moment, on ne peut plus rien optimisé (mais généralement ça prend du temps avant d'arriver à ce moment) ^^
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                10 juillet 2012 à 21:49:03

                                                et bien je ne suis pas d'accord, ca ce n'est qu'une limite et on ne peut l’atteindre réellement, il existe toujours d'autr moyens de faire une chose et donc forcément des plus rapides ...
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  10 juillet 2012 à 21:54:33

                                                  Quand tu auras optimisé ton assembleur en fonction de l'OS à la main après le passage du compilo, tu seras bien obligé d'admettre que niveau software, tu peux pas optimiser plus ^^ ! Après libre à toi de modifier ton processeur, m'enfin je doute que tu arrives à faire mieux que les intels :-°
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Anonyme
                                                    10 juillet 2012 à 22:13:33

                                                    Citation : germino

                                                    Quand tu auras optimisé ton assembleur en fonction de l'OS à la main après le passage du compilo, tu seras bien obligé d'admettre que niveau software, tu peux pas optimiser plus ^^ ! Après libre à toi de modifier ton processeur, m'enfin je doute que tu arrives à faire mieux que les intels :-°



                                                    Sans aller jusque là ^^

                                                    On sait bien des fois, que pour faire certaines choses, certains algorithmes connus ont été optimisés à mort, ils ne font vraiment que le strict nécessaire et de la façon la plus simple possible (donc logiquement la plus rapide, mais je dis bien logiquement). L'optimisation de code est d'ailleurs l'activité consistant à enlever le superflu de code (et des fois les résultats sont impressionnants : exemple montrant un gain de 30% à 100% en terme de rapidité juste en nettoyant le code).
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      1 août 2012 à 13:01:51

                                                      Releveur de température du processeur
                                                      difficulté: difficile/expert

                                                      L'exercice consiste a crée un programme capable de nous donner la température de chaque core du processeur.

                                                      Voici le résultat attendu:
                                                      Initialisation reussie :
                                                      ******** Lecture Tj by Thejailbreakman3 ********
                                                      Msr 19C :
                                                              eax1 = -58        eax2 = -58        eax3 = -57        eax4 = 64
                                                              Temp core 0 : 60 degres
                                                              Temp core 1 : 58 degres
                                                              Temp core 2 : 47 degres
                                                              Temp core 3 : 53 degres
                                                      
                                                      Continuer ? (O/N)O
                                                      Msr 19C :
                                                              eax1 = -58        eax2 = -58        eax3 = -57        eax4 = 64
                                                              Temp core 0 : 46 degres
                                                              Temp core 1 : 39 degres
                                                              Temp core 2 : 43 degres
                                                              Temp core 3 : 45 degres
                                                      
                                                      Continuer ? (O/N)N
                                                      Desinitialisation reussie
                                                      Appuyez sur une touche pour continuer...


                                                      Penser a mettre ce bout de code dans le main pour gérer les erreurs:

                                                      if(!IsCpuid())
                                                      		{
                                                      			cout << "CPUID non supporte !" << endl << "Fermeture de l'application !" << endl;
                                                      			DeinitializeOls();
                                                      			return 1;
                                                      		}
                                                      		if(!IsMsr())
                                                      		{
                                                      			cout << "MSR non supporte !" << endl << "Fermeture de l'application !" << endl;
                                                      			DeinitializeOls();
                                                      			return 1;
                                                      		}
                                                      		if(!IsTsc())
                                                      		{
                                                      			cout << "Time stamp counter non supporte !" << endl << "Fermeture de l'application !" << endl;
                                                      			DeinitializeOls();
                                                      			return 1;
                                                      		}
                                                      


                                                      ainsi qu'une boucle:
                                                      do{
                                                                              \\ici le code pour relever la température
                                                                              char valid;
                                                      			cin >> valid;
                                                      			if(valid!=79 && valid!=111)
                                                      				continuer=false;
                                                      		}while(continuer);
                                                      


                                                      Le projet doit contenir:

                                                      -main.cpp
                                                      -OlsApiInit.h
                                                      -OlsApiInitDef.h avec "#pragma once" et "#include <windows.h>"

                                                      -OlsDef.h avec "#pragma once"

                                                      Bon voilà, je vous ai tout dit, a vos clavier!




                                                      Solution:
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        1 août 2012 à 13:59:45

                                                        je n'ai jamais essayé, mais est-ce que cet exercice est bien portable?
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter

                                                        [Exercices] Venez vous entraîner !

                                                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                        • Editeur
                                                        • Markdown