Partage
  • Partager sur Facebook
  • Partager sur Twitter

arbres binaires

    3 janvier 2023 à 16:00:12

    svp jài un projet a faire mais je me sens perdue 

    le projet :

    - un fichier dont une phrase puis je stock cette phrase dans un  tableau

    - je doit remplire l`arbre par un tableau 

    - les elements de tableau sont des mots 

    - quant j`affiche les mots , il faut donner avec chaque mot sa positios dans la phrase

    avec le langage c++ 

    • Partager sur Facebook
    • Partager sur Twitter
      3 janvier 2023 à 22:09:17

      Salut,

      Déjà, tu es mal tombé, car on ne fera pas tes devoirs à ta place.

      Ensuite, tu n'as pas forcément besoin d'un arbre binaire pour y arriver

      Enfin que se passera-t-il si un mot apparait plusieurs fois dans la phrase?

      Si tu veux un coup de main (car on peut quand même t'aider un tout petit peu), fais déjà l'effort de coder toi-même une solution "plausible" et de nous la présenter, car je doute fort que ton prof ai pu te donner cet exercice sans avoir donné ne serait-ce que quelques bases pour y arriver.

      A partir de là, nous pourrons commencer à dialoguer en t'expliquant ce qui est bien et, surtout ce qui est moins bien ;)

      • 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
        4 janvier 2023 à 2:17:53

        Pourquoi ne pas fournir l'énoncé tel qu'on te l'a donné, car ce que tu mentionnes peut porter à confusion.
        • Partager sur Facebook
        • Partager sur Twitter

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

          4 janvier 2023 à 15:14:38 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


            4 janvier 2023 à 15:23:44

            Bonjour,

            Le message qui suit est une réponse automatique activée par un membre de l'équipe de modération. 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.

            Liens conseillés

            • Partager sur Facebook
            • Partager sur Twitter
              4 janvier 2023 à 15:31:12

              voila ce qui j`ai fait.

              ca fait une semaine que je fais des recherches mais j`ai rien trouver vrmnt

              je suis en 2 emme année donc je sus débutante

              et est-ce-que la fonction de creation je la fait normale ou je dois la modifier car il y`a un fichier !

              #include<stdio.h>
              #include<stdlib.h>
              #include<stdbool.h>
              
              typedef struct tnoeud{
              	int info;
              	struct tnoeud *fg,*fd;
              }tnoeud;
              
              typedef tnoeud *arbre;
              
              /**********************************************************************************/
              
              void creation (arbre *R){
              }
              		
              /**********************************************************************************/
              
              void inorder(arbre R){
              	if(R!=NULL){ inorder (R->fg);printf("%d;",R->info);inorder(R->fd); }
              }	
              
              /*********************************************************************************/
              
              int search(arbre *R, unsigned int key){
              	
              	char key;
                  while(R){
                  
                      if(key == R->info) return 1;
                      else { return (search(R->fg,key)||search(R->fd));
              			  }
                  }
                      	
              	
                  return 0;
              }
              
              /*****************************************************************************************/
              int main(){
              	char cle;
              	arbre R,R2;
              	
                  FILE *f, *g;
                  f=fopen("entrer.text","r");
                  f=fopen("sortie.text","x");
                  
                  if(f=NULL){
                  	printf("fichier vide");
                  	else{ fputs("donner des phrases ");
              		}
              	}
              	
              	printf("donner le mot a chercher ");
              	scanf("%s",&cle);
              	
              	
              	if(search(R,cle)){
              		printf("le mot %s existe .\ n",cle);
              		fprintf(g,"%s \n" ,cle);
              	}
              	else{printf("le mot %s n`existe pas .\ n",cle);
              	}
              	
              	creation(&R);
              	inorder(R);
              }

              -
              Edité par AyaKo1 4 janvier 2023 à 15:33:28

              • Partager sur Facebook
              • Partager sur Twitter
                4 janvier 2023 à 15:41:36

                @AyaKo1 Bonjour, PierrotLeFou  qui participe à ce sujet est aveugle, sa synthèse vocale ne sais pas lire l'énoncer qui ce trouve dans l'image que vous avez posté. Pourriez vous poster du texte à la place de l'image. Merci pour lui.

                La modération

                • Partager sur Facebook
                • Partager sur Twitter
                  4 janvier 2023 à 16:16:18

                  AyaKo1 a écrit:

                  avec le langage c++ 

                  Vous dites avec le langage C++, alors pourquoi vous postez un code en C ?

                  De plus il y a énormément d'erreurs dans votre code exemple :

                  int search(arbre *R, unsigned int key)
                  {
                      char key;

                  Pourquoi créer une variable locale à la fonction du même nom que l'un de ses paramètre ?

                  -
                  Edité par rouIoude 4 janvier 2023 à 16:25:12

                  • Partager sur Facebook
                  • Partager sur Twitter
                  ...
                    4 janvier 2023 à 17:37:51

                    @AbcAbc6: j'ai compris qu'il s'agit d'un arbre binair de recherche. :)
                    Puisque AyaKo1 dit être d ébutante, il ne s'agit sûrement pas d'un arbre balancé ...
                    En C, c'est un sujet idéal pour la récursivité. En C++, on pourrait sans doute tricher avec des map().
                    On n'a pas vraiment besoin de fonction pour créer un arbre. Il suffit d'avoir une fonction qui crée un noeud.
                    Pour la création:
                    + si le noeud est vide, on cré le noeud et on retourne son pointeur vers l'appelant.
                    + sinon, si l'info à placer vient avant l'info courante, on insère sur le fils gauche, sinon on insère sur le fils droit.
                    Pour la recherche, c'est presque identique, sauf que si on arrive à un noeud nul, c'est que ça n'existe pas.
                    Pour l'affichage, on affiche le gauche, puis le courant, puis le droit.

                    • Partager sur Facebook
                    • Partager sur Twitter

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

                      4 janvier 2023 à 18:08:19

                      Projet  : Mais l'objet de ce projet est d'utiliser les arbres binaires de recherches pour indexer un fichier texte donné.  Cet arbre contient les différents mots du fichier texte avec les occurrences du mots dans le fichier (position du mot dans les phrases du fichier).  C'est-à-dire, ces mots du texte seront les index, et pour chaque mot on lui associe la liste des occurrences du mot dans le fichier (le nombre de phrases où ces mots apparaissent).  Si un mot est présent plus d'un mot dans cette phrase, sur le compte qu'une seule mot, on considère une seule fois la phrase.  La recherche d'une phrase dans un texte (dans le fichier texte) revient à faire l'intersection de la liste des positions des mots de la phrase dans l'arbre binaire de recherche . 

                      1. Créer cette structure ,

                      2. Construire l'arbre de recherche , ( chercher un mot , insérer un mot s'il n'existe pas , ...)

                      3.- Créer la liste des positions , pouvoir y ajouter des positions , - faire l'intersection de deux liste (liste en commun), qui vérifie qu'un élément existe dans cette liste, ...

                      4.- Chérir une phrase dans le texte..

                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 janvier 2023 à 19:34:05

                        Ce que je comprend est que l'info est constituée de deux parties:
                        + le mot lui-même
                        + la liste de ses occurences dans le texte (liste des indices de ligne)
                        Dans la fonction de création et/ou de recherche, la clé majeure est le mot.
                        S'il n'est pas  trouvé, on crée un nouveau noeud avec le mot et une liste contenant la position donnée en paramètre
                        S'il est trouvé, on met à jour la liste en vérifiant si la ligne n'est pas dans la liste et on met à jour cette liste.
                        Ça devrait être facile si les indices de lignes sont consécutifs. On n'a qu'à vérifier si le dernier élément est identique à celui qu'on vient de fournir.
                        Sinon, on ajoute à la fin.
                        • Partager sur Facebook
                        • Partager sur Twitter

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

                          4 janvier 2023 à 21:06:33

                          j`ai aucune idée comment faire la deuxiemme partie

                          svp voulliez-vous m`aider

                          voila ce que j`ai écrais jusqu`a maintenant :

                          #include <stdio.h>
                          #include <stdlib.h>
                          
                          typedef struct node
                          {
                              char key[10];
                              struct node *left;
                              struct node *right;
                          } node ;
                          
                          
                          void addNode(node **tree, char key[10])
                          {
                          
                              node *elem =(node*)malloc(sizeof(node));
                              elem->key[10] = key[10];
                              elem->left = NULL;
                              elem->right = NULL;
                          
                          }
                          
                          /***************************************************************************/
                          
                          int searchNode(node *tree, char key[10]){
                          	
                              while(tree)
                          	{
                                  if(key[10] == tree->key[10]) return 1;
                          
                                  if(key[10] > tree->key[10] ) {tree = tree->right;}
                               
                          	    else {tree = tree->left;}
                          	}
                              return 0;
                          }
                          
                          /***************************************************************************/
                          
                          
                          
                          /***************************************************************************/
                          
                          void clearTree(node **tree)
                          {
                              node *tmpTree = *tree;
                          
                              if(!tree) return;
                          
                              if(tmpTree->left)  clearTree(&tmpTree->left);
                          
                              if(tmpTree->right) clearTree(&tmpTree->right);
                                  
                              free(tmpTree);
                          
                              *tree = NULL;
                          }
                          
                          
                          int main()
                          {
                             
                              int n=6;
                              char t[n];
                              int i;
                          	char key[10];
                          	char mot[10];
                              node *Arbre = NULL;
                              
                              printf("veuiller entrer les elements du tableau :\n");
                          	for(i=0;i<n;i++){
                          		printf("\n la valeur de t[%d] est :",i);
                          		scanf("%s",&t[i]);
                          		printf("\n");
                          	}
                              
                              for(i=0;i<n;i++) { addNode(&Arbre, &key[10]);}
                          
                          
                              puts("-------------------------------");  
                          
                              
                              printf("veuiller entrer l`element a chercher :\n");
                              scanf("%s",&mot[10]);
                              
                              if( searchNode(Arbre,&mot[10]) ) { printf("La cle %s existe.\n",mot[10]);}
                          	
                              else { printf("La cle %s n'existe pas.\n",mot[10]); }
                          
                          
                              puts("-------------------------------");
                          
                              clearTree(&Arbre);
                          
                              return 0;
                          }



                          • Partager sur Facebook
                          • Partager sur Twitter
                            5 janvier 2023 à 2:05:18

                            Est-ce que tu as essayé de compiler ton code? Et tu n'as pas d'erreur de compilation?
                            As-tu essayé de l'exécuter? J'en doute.
                            Tu génère bien un nouveau noeud pour chaque mot mais tu ne le places pas du tout dans ton arbre.
                            Tu ne sembles pas savoir comment recopier une chaîne de caractères ni comparer deux chaînes.
                            Je te donne du code qui fait le principal. Je comprend tout de même que ça n'est pas évident de jouer avec les pointeurs.
                            -
                            #include <stdio.h>
                            #include <stdlib.h>
                            #include <string.h>
                             
                            typedef struct Node Node;
                            struct Node {
                                char info[10];
                                Node *left;
                                Node *right;
                            };
                             
                            void addNode(Node **tree, char info[]) {
                                if(*tree==NULL) {
                                    Node *node = malloc(sizeof(Node));
                                    strcpy(node->info, info);
                                    node->left = NULL;
                                    node->right = NULL;
                                    *tree = node;
                                }
                                int cmp = strcmp((*tree)->info, info);
                                if(cmp==0) return;   // C'est ici qu'on pourrait ajouter à la liste
                                if(cmp > 0) addNode(&(*tree)->left, info);
                                else addNode(&(*tree)->right, info);
                            }
                             
                            int search(Node *tree, char info[]) {
                                if(tree==NULL) return 0;
                                int cmp = strcmp(tree->info, info);
                                if(cmp==0) return 1;
                                if(cmp > 0) return search(tree->left, info);
                                return search(tree->right, info);
                            }
                             
                            void freeTree(Node *tree) {
                                if(tree) {
                                    freeTree(tree->left);
                                    freeTree(tree->right);
                                    free(tree);
                                }
                            }
                             
                            void display(Node *tree) {
                                if(tree != NULL) {
                                    display(tree->left);
                                    printf("%s ", tree->info);
                                    display(tree->right);
                                }
                            }
                             
                            int main(void) {
                                Node *tree = NULL;
                                char mot[10];
                                for(int i = 0; i < 6; i++) {
                                    puts("Entrez un mot ");
                                    scanf("%s", mot);
                                    addNode(&tree, mot);
                                }
                                display(tree);
                                for(int i = 0; i < 7; i++) {
                                    puts("Entrez un mot à chercher ");
                                    scanf("%s", mot);
                                    if(search(tree, mot))
                                        printf("Trouvé\n");
                                    else
                                        printf("Pas trouvé\n");
                                }
                                freeTree(tree);
                                return 0;
                            }
                            • Partager sur Facebook
                            • Partager sur Twitter

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

                              5 janvier 2023 à 6:57:52

                              Pourquoi limiter les mots à dix lettres et les représenter sous la forme d'un chaine "C style"?

                              Sais tu que std::string permet de représenter des chaines d'un nombre quelconque de caractères et que, en plus, elle permet la comparaison d'un simple if (str1 == str2) ?

                              • 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
                                5 janvier 2023 à 7:21:45

                                Et ça n'est même pas du C++ ...

                                Le PO pourrait au moins regarder ceci:

                                https://www.delftstack.com/fr/howto/cpp/binary-tree-in-cpp/#impl%25C3%25A9menter-larbre-binaire-%25C3%25A0-laide-du-mot-cl%25C3%25A9-struct-en-c%2b%2b

                                -
                                Edité par PierrotLeFou 5 janvier 2023 à 7:25:33

                                • Partager sur Facebook
                                • Partager sur Twitter

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

                                  5 janvier 2023 à 9:52:39

                                  Avant de faire des arbres binaire, il faudrait revoir les bases ( du C car ton code est du C pas du C++). Si je prend la première fonction :

                                  void addNode(node **tree, char key[10])
                                  {
                                      node *elem = (node*)malloc(sizeof(node));
                                      elem->key[10] = key[10];
                                      elem->left = NULL;
                                      elem->right = NULL;
                                  }

                                  Tu veux ajouter un élément à ton arbre tree or tu ne fais que créer un élément sans l'ajouter (je ne vois aucune référence à tree dans le corps de la fonction).

                                  Aussi, tu affectes elem->key[10] qui est hors tableau (un tableau de 10 éléments à ses indices qui vont de 0 à 9). Idem pour le paramètre key.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  ...
                                    5 janvier 2023 à 12:44:51

                                    merci énormément de m`avoir aider .

                                    vous etes les meilleurs .

                                    je vais essayier maintenant de trouver une facon pour faire la liste des position

                                    -
                                    Edité par AyaKo1 5 janvier 2023 à 12:46:34

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    arbres binaires

                                    × 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