Partage
  • Partager sur Facebook
  • Partager sur Twitter

C++ débutant - Afficher menu restaurant + facture

tableau de structure, pointeur et lecture de fichier

    7 novembre 2021 à 20:30:42

    Je débute vraiment depuis quelques semaines en langage C++ (et en programmation en général) à l'université de Montréal, malheureusement à cause du covid j'ai raté les trois premières semaines de cours et je me retrouve à la ramasse. Il me reste jusqu'à vendredi pour faire mon tp et j'ai énormément de mal à m'y retrouvé meme apres avoir fais de nombreuses recherches etc..si je suis la c'est vraiment en dernier recours ^^'. Alors voila vous me sauveriez la vie si quelqu'un pouvait m'aider via discord sur comment je peux avancer dans ce tp quelqu'un qui s'y connait en c++ et avec un minmum de patience et de pédagogie si possible xD voici le tp en question 

    en soi il n'est pas compliqué et séparément je comprend plus ou moins comment le tout fonctionne et j'ai une vague idée de comment m'y prendre mais dans la pratique je suis complètement paumé. Evidemment c'est un cours pour débutant et donc la manière de faire ce qui est demandé pourrait paraitre une hérésie pour les plus avancés d'entre vous j'en suis bien conscient ^^ mais ce sont les consignes qui l'exige afin de se familiariser avec le langage.

    En tout ca voila merci à vous d'avoir lu et merci d'avance à ceux qui voudrons bien m'aider Smiley smile

    -
    Edité par QuentinAllano 9 novembre 2021 à 22:57:07

    • Partager sur Facebook
    • Partager sur Twitter
      8 novembre 2021 à 2:31:48

      Tu es a l'Université de Montréal? J'y ai travaillé il y a un million d'années. :)
      Postes sur ce sujet le code que tu as déjà écrit. On essaiera de t'aider.
      Il faut se rappeler que nos interventions se font sur une base volontaire.
      Tu aurais dû poster avant. Une semaine c'est bien peu pour tout régler.

      Voici un cours intéressant en C++

      https://zestedesavoir.com/tutoriels/822/la-programmation-en-c-moderne/

      -
      Edité par PierrotLeFou 8 novembre 2021 à 4:01:43

      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        8 novembre 2021 à 13:51:19

        Pareil on veut bien t'aider, mais poste ce que tu as deja fais et ce sur quoi tu buttes. Sinon on va tout faire a notre suace et ça ne te servira a rien :D

        et dit nous aussi ce que tu es sensé avoir vu car si tu nous laisse faire (avec ton code de depart) tu va te retrouver avec un truc un peu hors de ce que sera censé savoir faire).

        perso avec ton suget mon main ressemble à ça :

        #include <iostream>
        #include <string>
        #include <vector>
        #include <fstream>
        
        #include "Plat.h"
        #include "Menu.h"
        #include "Commande.h"
        
        using namespace std;
        
        int main ( void )
        {
        	// pour fixer l'arrondi a deux decimales
        	cout.setf ( ios_base::fixed, ios_base::floatfield );
        	cout.precision ( 2 );
        
        
        	Menu menu( "MenuRestoIF1166.txt" ); // chargerMenu
        
        	Commande cmd;
        
        	do
        	{
        		cout << menu; // afficherMenu
        
        		cout << menu.size() << " : ok " << endl;
        		cout << "que vouez vous ? ";
        
        		unsigned int selected = 0;
        		cin >> selected;
        
        		if ( selected == menu.size ( ) )
        		{
        			break;
        		}
        		else if ( selected > menu.size ( ) )
        		{
        			continue;
        		}
        
        		cmd.add ( menu.getItem( selected ) );
        	}
        	while ( true );
        
        	double total = 0.;
        
        	cout << cmd; // affihcerFacture
        
        	return 0 ;
        }


        -
        Edité par ox223252 8 novembre 2021 à 17:15:27

        • Partager sur Facebook
        • Partager sur Twitter

        la connaissance est une chose qui ne nous appauvrit pas quand on la partage.

        Un tuto sur les makefile et mon GitHub

          9 novembre 2021 à 1:16:44 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


            9 novembre 2021 à 9:22:21

            pour commencer dans ta fonction charger menu, tu fais 6 initialisation, alors que tu peux faire un tableau :)

            string produits[6]

            ensuite, tu charge le menu dans la fonction, mais comment la fonction afficher menu va avoir acces aux données ?
            il faut donc que ta fonction renvoie des données, mais pour rappel une fonction ne peut pas retourner de tableau static, encore moin 12 variables.

            -> deux solutions soit tu passe dans le parametres de la fonction un tableau que tu va remplir, soit tu retourne un tableau dynamique

            // tu retourne un tableau dynamique (avec des mallocs)
            string * chargerMenu ( );
            
            // tu passe dans les parametres un tableau (ou pointeur initialisé) et tu le rempli
            int chargerMenu ( string *table );




            • Partager sur Facebook
            • Partager sur Twitter

            la connaissance est une chose qui ne nous appauvrit pas quand on la partage.

            Un tuto sur les makefile et mon GitHub

              9 novembre 2021 à 9:32:46

              Bonjour, Merci d'indiquer un titre de sujet en rapport avec votre problématique.

              Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
              Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

              Pour plus d'informations, nous vous invitons à lire les règles générales du forum

              Merci de colorer votre code à l'aide du bouton Code

              Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: cpp;">Votre code ici</pre>.

              Merci de modifier votre message d'origine en fonction.

              Mauvais titre

              Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

              Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

              De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

              Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

              Pour modifier votre titre, éditez le premier message de votre sujet.

              (titre originel : besoin d'aide tp c++ pour débutant)

              Liens conseillés

              • Partager sur Facebook
              • Partager sur Twitter
                9 novembre 2021 à 12:26:06

                ox223252 a écrit:

                // tu retourne un tableau dynamique (avec des mallocs)

                string * chargerMenu ( );
                
                // tu passe dans les parametres un tableau (ou pointeur initialisé) et tu le rempli
                int chargerMenu ( string *table );

                Certainement pas non. malloc n'est pas compatible avec des types non POD (je simplifie) comme std::string. Pour renvoyer un tableau de chaines, std::vector<std::string>. C'est la version simple que tout cours de C++ non désuet proposera en premier.

                (Le message ayant été édité je ne sais pas à quoi ressemblait le code du départ.)

                • Partager sur Facebook
                • Partager sur Twitter
                C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                  9 novembre 2021 à 12:37:05

                  lmghs a écrit:

                  ox223252 a écrit:

                  // tu retourne un tableau dynamique (avec des mallocs)

                  string * chargerMenu ( );
                  
                  // tu passe dans les parametres un tableau (ou pointeur initialisé) et tu le rempli
                  int chargerMenu ( string *table );

                  Certainement pas non. malloc n'est pas compatible avec des types non POD (je simplifie) comme std::string. Pour renvoyer un tableau de chaines, std::vector<std::string>. C'est la version simple que tout cours de C++ non désuet proposera en premier.

                  (Le message ayant été édité je ne sais pas à quoi ressemblait le code du départ.)


                  On peut utiliser malloc pour allouer des objets non POD, il suffit de les initialiser manuellement après :

                  #include <string>
                  #include <cstdlib>
                  
                  int main() {
                    int nbStrings = 10;
                    std::string *strings = static_cast<std::string *>(std::malloc(sizeof(std::string) * nbStrings));
                    new (strings) std::string[nbStrings];
                  } 



                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 novembre 2021 à 14:45:52

                    JadeSalina a écrit:

                    On peut utiliser malloc pour allouer des objets non POD, il suffit de les initialiser manuellement après :

                    #include <string>
                    #include <cstdlib>
                    
                    int main() {
                      int nbStrings = 10;
                      std::string *strings = static_cast<std::string *>(std::malloc(sizeof(std::string) * nbStrings));
                      new (strings) std::string[nbStrings];
                    } 

                    C'est clairement un undefined behavior dans la norme. Tout objet doit être construit, y compris un objet POD pour lequel la construction reviendrait à ne rien faire. Mais en plus ici in n'est pas du tout dans ce cas. std::string est très loin d'être un POD!

                    un std::vector<std::string>>  fait correctement le boulot sans les énormités ci-dessus!!

                    • Partager sur Facebook
                    • Partager sur Twitter

                    En recherche d'emploi.

                      9 novembre 2021 à 15:09:56

                      Les constructions placées, ce ne sont pas des choses que l'on montre à des débutants.

                      Accessoirement, je ne sais pas si une construction placée de tableau suffit ou s'il faut boucler, et ... je ne veux pas le savoir.

                      Ah m*d*, maintenant je sais, il y a eu un overhead à prendre en compte, mais entre temps defect report rétro actif (pour les compilos récents évidemment) https://stackoverflow.com/questions/8720425/array-placement-new-requires-unspecified-overhead-in-the-buffer

                      Bref. Non!!!

                      -
                      Edité par lmghs 9 novembre 2021 à 16:17:00

                      • Partager sur Facebook
                      • Partager sur Twitter
                      C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                        9 novembre 2021 à 18:24:28

                        Je travaille en C et C++ et j'utilise souvent les malloc en C.
                        Mais quand j'ai découvert les vector en C++, j'ai décidé d'oublier les malloc dans ce mangage.
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Le Tout est souvent plus grand que la somme de ses parties.

                          9 novembre 2021 à 21:33:43

                          hahaha je savais bien que le sujet des std vector allait venir sur le plateau xD me demandez pas pourquoi mais les prof nous en ont absolument pas parlé même si ça à l'air d'être la base d'après ce que vois partout, mais du coup j'ai pas vraiment le droit de les utiliser pour l'instant, mais je garde en tête que ce qui est demandé c'est pas du tout la norme ^^'
                          • Partager sur Facebook
                          • Partager sur Twitter
                            9 novembre 2021 à 22:03:58

                            @QuentinAllano Bonsoir, merci de modifier le titre de votre sujet comme demandé.

                            La modération

                            • Partager sur Facebook
                            • Partager sur Twitter
                              9 novembre 2021 à 23:03:26

                              AbcAbc6 a écrit:

                              @QuentinAllano Bonsoir, merci de modifier le titre de votre sujet comme demandé.

                              La modération

                              Pourquoi vous ne le changez pas vous même ? Si ce que vous voulez c'est un titre qui vous convient, alors le changer vous même c'est le meilleur moyen d'être sûr qu'il vous conviendra. D'ailleurs la personne qui poste un message elle s'en fiche au final du titre, elle veut juste expliquer son problème. On pourrait aussi imaginer un système qui analyse le message et qui en déduit un titre adapté et pertinent, comme ça ni l'OP ni les modérateurs ne perdent de temps

                              • Partager sur Facebook
                              • Partager sur Twitter
                                9 novembre 2021 à 23:16:39

                                @JadeSalina

                                >> Pourquoi vous ne le changez pas vous même ?

                                Je le fait quand cela est évident.  Dans ce cas si cela me demandais de lire tout le sujet et d'en analyser le contenu pour en synthétiser le titre, je passe mon temps à autre chose....

                                >> Si ce que vous voulez c'est un titre qui vous convient,

                                Ce n'est pas un titre qu'il me convienne qu'il faut écrire mais un titre qui respecte les règles du forum.

                                >> On pourrait aussi imaginer un système qui analyse le message et qui en déduit un titre adapté et pertinent, comme ça ni l'OP ni les modérateurs ne perdent de temps

                                +1 pour cette solution, vous pouvez la soumettre à OC via hello@openclassrooms.com

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  9 novembre 2021 à 23:23:21

                                  AbcAbc6 a écrit:

                                  >> On pourrait aussi imaginer un système qui analyse le message et qui en déduit un titre adapté et pertinent, comme ça ni l'OP ni les modérateurs ne perdent de temps

                                  +1 pour cette solution, vous pouvez la soumettre à OC via hello@openclassrooms.com


                                  OC refuse d'allouer des ressources pour mettre à jours ses cours (qui je precise sont le coeur de son activité) et toi tu veux qu'ils en allouent pour développer une IA pour faire des titres? LOL. Le mantra d'OC et de la plupart des entreprises : "if it ain't broke don't fix it". 

                                  Bon courage.

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Eug

                                    9 novembre 2021 à 23:30:12

                                    eugchriss a écrit:

                                    OC refuse d'allouer des ressources pour mettre à jours ses cours (qui je precise sont le coeur de son activité) et toi tu veux qu'ils en allouent pour développer une IA pour faire des titres? LOL. Le mantra d'OC et de la plupart des entreprises : "if it ain't broke don't fix it". 

                                    Bon courage.

                                    Par contre, rien n'empêche JadeSalina -- qui semble décidément tout savoir mieux que tout le monde -- d'essayer de développer ce système et de le soumettre à OC.

                                    Nulle doute qu'ils l'accepteront à bras ouverts :D

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                                      10 novembre 2021 à 0:43:16

                                      On pourrait élire JadeSalina comme volontaire pour envoyer des MP aux gens pour leur suggérer le meilleur titre.
                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Le Tout est souvent plus grand que la somme de ses parties.

                                      C++ débutant - Afficher menu restaurant + facture

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