Partage
  • Partager sur Facebook
  • Partager sur Twitter

Typedef sur array(tableau) avec pointeur

Créer un tableau de mots(si bonne compréhension)

    4 septembre 2022 à 21:58:34

    Bonjour/ Bonsoir à vous. J’ai rencontré un problème . c’est un exercice qui est censé être fait en C mais j’ai préféré le réaliser en C++ . Je l’ai trou sur le site de Paris Dauphine. Donc voilà l’enoncé

    Exercice:

    on utilisera les types suivant :

    - typedef char* mot; /* adresse d’une chaîne de caractère de longueur maximale MOTMAX = 50 */

    - typedef mot *langage  /* tableau de mots contenant au plus LANGMAX = 100 . Éléments dont le dernier a pour valeur NULL

    -écrire une fonction void(afficher langage l) affichant à l’écran les mots du langage l

    - bool appartient(mot m, langage l) dit si m appartient ou non au langage l

    - int ajouter(mot m, langage l) ajoute le mot au langage et retourne la position de ce mot dans langage(ou -1 si mot m = null)

    Il y a d’autres fonctions mais je me suis limité à celles ci. Déjà pour l’initialisation, j’ai procédé comme suit :

    // Exercice 18
    
    #include <iostream> 
    
    #include<string>
    
    #define MOTMAX 50 // nombre max de mots
    
    #define LANGMAX 100
    
    using namespace std;
    
    typedef char* mot[MOTMAX]; // premier typedef
    
    typedef mot* langage[LANGMAX]; // deuxième typedef


    mais je ne suis pas très sûr pour la première partie . Si je n’arrive pas à bien faire le typedef, j’aurai du mal pour établir ces fonctions. Mais déjà si quelqu’un peut me guider avec la première fonction pour me donner une idée des paramètres même si le contenu de La fonction n’est pas développée.

    Merci

    -
    Edité par Karlnelsonsomo 5 septembre 2022 à 14:05:11

    • Partager sur Facebook
    • Partager sur Twitter
      5 septembre 2022 à 0:48:19

      Hello.
      Tout d'abord il y a un bouton exprès pour insérer du code, c'est l'avant dernier au dessus de la boité d'édition, et il ressemble à "</>".

      Ensuite? Veux-tu vraiment réaliser cet exercice en C++?

      Si oui, je t'invite alors à supprimer toutes les contraintes pédagogiques imposées par le C, c'est à dire tous les pointeurs vers séquences de caractères, les tailles max pour ces tableaux etc.

      Une chaine de caractères en C++ sera std::string. Et un tableau de chaine de caractère sera std::vector<std::string>. Nul besoin de contraindre le nombre d'élements maximal. Etc. Pour apprendre les bases du C++, les vraies qui reposent sur ces types que nous utilisons professionnellement au quotidien, je t'invite à consulter un cours modernisé du C++ comme celui que tu pourras trouver sur Zeste de Savoir: https://zestedesavoir.com/contenus/beta/822/la-programmation-en-c-moderne/

      Ca va te demander de la remise à plat de tes connaissances C++, mais tu verras, au final les difficultés techniques vont vite disparaitre pour ne laisser place qu'à ce qui est véritablement important dans l'exercice.

      using mot = std::string;
      using langage = std::vector<std::string>; // le nom est mal choisi AMA, mais admettons
      
      void afficher(langage const& mots);
      bool appartient(mot const& m, langage const& mots);
      void ajouter(mot const& m, langage & mots); // hint: push_back



      • 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.
        5 septembre 2022 à 0:56:32

        Bonjour,

        L'énoncé indique les deux typedef, toi tu en donnes une définition différente! Les typedef sont:

        typedef char  *mot;
        typedef mot  *langage;

        De même les types des paramètres des fonctions sont clairement indiqués.
        Il te faut juste écrire les fonctions.

        Et l'exercice est en C, tu devrais plutôt le faire en C.

        • Partager sur Facebook
        • Partager sur Twitter

        En recherche d'emploi.

          5 septembre 2022 à 2:50:36

          Karlnelsonsomo a écrit:
          [...] J’ai rencontré un problème . c’est un exercice qui est censé être fait en C mais j’ai préféré le réaliser en C++ .
          Comme l'ont dit mes prédécesseurs, ou bien tu fais du C à la façon du C, ou bien tu fais du C++ à la façon du C++.

          J'ai déjà utilisé des typedef en C++, ça pourrait ressembler à ceci:
          typedef std::string mots;
          typedef std::vector<mots> langages;
          Est-ce un usage accepté?

          -
          Edité par PierrotLeFou 5 septembre 2022 à 3:06:44

          • Partager sur Facebook
          • Partager sur Twitter

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

            5 septembre 2022 à 13:35:21

            PierrotLeFou a écrit:

            Karlnelsonsomo a écrit:
            [...] J’ai rencontré un problème . c’est un exercice qui est censé être fait en C mais j’ai préféré le réaliser en C++ .
            Comme l'ont dit mes prédécesseurs, ou bien tu fais du C à la façon du C, ou bien tu fais du C++ à la façon du C++.

            J'ai déjà utilisé des typedef en C++, ça pourrait ressembler à ceci:
            typedef std::string mots;
            typedef std::vector<mots> langages;
            Est-ce un usage accepté?

            -
            Edité par PierrotLeFou il y a environ 10 heures

            Je pense que oui c’est tout à fait possible de le faire. Je voulais specifiquement Le faire en C++. mon problème se trouve principalement au niveau des pointeurs avec le type char.

            Dalfab a écrit:

            Bonjour,

            L'énoncé indique les deux typedef, toi tu en donnes une définition différente! Les typedef sont:

            typedef char  *mot;
            typedef mot  *langage;

            De même les types des paramètres des fonctions sont clairement indiqués.
            Il te faut juste écrire les fonctions.

            Et l'exercice est en C, tu devrais plutôt le faire en C.


            Merci pour la suggestion. En réalité j’ai hesité lorsque j’ai vu la taille maximale à définir. Je pensais qu’il fallait l’ajouter au typedef de manière à avoir Typedef char *mot[taillemax]

            lmghs a écrit:

            Hello.
            Tout d'abord il y a un bouton exprès pour insérer du code, c'est l'avant dernier au dessus de la boité d'édition, et il ressemble à "</>".

            Ensuite? Veux-tu vraiment réaliser cet exercice en C++?

            Si oui, je t'invite alors à supprimer toutes les contraintes pédagogiques imposées par le C, c'est à dire tous les pointeurs vers séquences de caractères, les tailles max pour ces tableaux etc.

            Une chaine de caractères en C++ sera std::string. Et un tableau de chaine de caractère sera std::vector<std::string>. Nul besoin de contraindre le nombre d'élements maximal. Etc. Pour apprendre les bases du C++, les vraies qui reposent sur ces types que nous utilisons professionnellement au quotidien, je t'invite à consulter un cours modernisé du C++ comme celui que tu pourras trouver sur Zeste de Savoir: https://zestedesavoir.com/contenus/beta/822/la-programmation-en-c-moderne/

            Ca va te demander de la remise à plat de tes connaissances C++, mais tu verras, au final les difficultés techniques vont vite disparaitre pour ne laisser place qu'à ce qui est véritablement important dans l'exercice.

            using mot = std::string;
            using langage = std::vector<std::string>; // le nom est mal choisi AMA, mais admettons
            
            void afficher(langage const& mots);
            bool appartient(mot const& m, langage const& mots);
            void ajouter(mot const& m, langage & mots); // hint: push_back



            lmghs a écrit:

            Hello.
            Tout d'abord il y a un bouton exprès pour insérer du code, c'est l'avant dernier au dessus de la boité d'édition, et il ressemble à "</>".

            Ensuite? Veux-tu vraiment réaliser cet exercice en C++?

            Si oui, je t'invite alors à supprimer toutes les contraintes pédagogiques imposées par le C, c'est à dire tous les pointeurs vers séquences de caractères, les tailles max pour ces tableaux etc.

            Une chaine de caractères en C++ sera std::string. Et un tableau de chaine de caractère sera std::vector<std::string>. Nul besoin de contraindre le nombre d'élements maximal. Etc. Pour apprendre les bases du C++, les vraies qui reposent sur ces types que nous utilisons professionnellement au quotidien, je t'invite à consulter un cours modernisé du C++ comme celui que tu pourras trouver sur Zeste de Savoir: https://zestedesavoir.com/contenus/beta/822/la-programmation-en-c-moderne/

            Ca va te demander de la remise à plat de tes connaissances C++, mais tu verras, au final les difficultés techniques vont vite disparaitre pour ne laisser place qu'à ce qui est véritablement important dans l'exercice.

            using mot = std::string;
            using langage = std::vector<std::string>; // le nom est mal choisi AMA, mais admettons
            
            void afficher(langage const& mots);
            bool appartient(mot const& m, langage const& mots);
            void ajouter(mot const& m, langage & mots); // hint: push_back



            Merci beaucoup. Je vais le faire à ta façon. Je suis sut telephone en fait, difficile de voir les box avec les balises pour colorer le code, desolé

            Edit :  Pour ceux que ca interesse, voici ce que j'ai fait, mis a part le choix des typedef resolu grace aux conseils, l'implementation n'etait pas complexe

            Voice le code :

            //Note:The template file will be copied to a new file. When you change the content of the template file you can create new file with this base content. 
            #include <iostream> 
            #include<string>
            #include<vector>
            #define code 26
            #define max 50
            
            using namespace std;
            
            
            using mot = string;
            using langage = vector<string>;
            
            void afficher(langage const& mots); // OK
            bool appartient(mot const& m, langage const& mots); // OK
            int ajouter(mot const& m,langage& mots); // OK
            void reunir(langage& l1, langage& l2);
            void enlever(mot const& m, langage& mots);
            
            
            void afficher(langage const& mots){ //Fonctionnel
                
                for(int i = 0; i < mots.size(); i++){
                    cout << mots[i] << " ";
                }
                cout << endl;
            }
            
            bool appartient(mot const& m, langage const& mots){
                bool existe = false;
                
                for(int i = 0 ; i < mots.size();i++){
                    if(m == mots[i]){
                        existe = true;
                        break;
                    }
                }
                return existe;
            }
            
            int ajouter(mot const& m,langage& mots){
                bool continuer {true};
                int trouve {-1};
                
                if(m == ""){
                    continuer= false;
                    return trouve;
                }
                else{
                        mots.push_back(m);
                        trouve = mots.size();
                    }
                
                return trouve;
            }
            
            int main(){
                
                int nombre_caracteres  {0};
                
                langage phrase = {"Ceci","est","une","phrase"};
                phrase.push_back("complete");
                mot terminal = "complete";
                mot article {"est"};
                afficher(phrase);
                cout << appartient(terminal,phrase) << endl; 
                cout << appartient(article,phrase) << endl; 
                string ajout {"."};
                int position = ajouter(ajout,phrase);
                
                cout  << endl << "Nouvelle phrase : " ;
                afficher(phrase);
                cout << "Le " << ajout << " se trouve a la position " << position << endl;
                
                string suite {"Apres,"};
                position = ajouter(suite,phrase);
                
                cout  << endl << "Nouvelle phrase : " ;
                afficher(phrase);
                cout << "Le " << suite << " se trouve a la position " << position << endl;
                
                return 0;
            }

            J'ai pu les tester jusqu'ici pour voir le resultat

            Ceci est une phrase complete
            1
            1

            Nouvelle phrase : Ceci est une phrase complete .
            Le . se trouve a la position 6

            Nouvelle phrase : Ceci est une phrase complete . Apres,
            Le Apres, se trouve a la position 7


            ...Program finished with exit code 0
            Press ENTER to exit console.






            -
            Edité par Karlnelsonsomo 5 septembre 2022 à 16:00:49

            • Partager sur Facebook
            • Partager sur Twitter

            Typedef sur array(tableau) avec pointeur

            × 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