Partage
  • Partager sur Facebook
  • Partager sur Twitter

Trier une liste chaînée par ordre alphabétique

    19 mai 2018 à 23:38:42

    Bonsoir, je suis censé coder un dictionnaire français -> anglais pour mon examen de programmation en C, le dictionnaire est OK mais il me manque juste une chose, c'est de devoir trier tout cela par ordre alphabétique et je ne vois absolument pas comment le faire (on a essayé de m'expliquer sur un autre topic mais vu que le topic principal ne parle pas de cela a la base, je créé celui-ci pour avoir + de visibilité et peut être des conseils plus précis)
    • Partager sur Facebook
    • Partager sur Twitter
      19 mai 2018 à 23:54:26

      Bonsoir ! Si j'ai bien compris l'autre sujet, tu as un fichier contenant les mots du dictionnaire en vrac, et tu dois le trier en utilisant une liste chaînée, c'est bien ça ?

      Dans ce cas, toute la difficulté est de créer cette liste en triant les mots au fur et à mesure. Lorsqu'on crée la liste, on ne doit pas ajouter les mots en fin de liste mais à leur place précise par rapport à l'ordre alphabétique. Est-ce que tu sait insérer un élément à l'intérieur d'une liste (et non pas à la fin) ?

      Au fait, peux-tu poster des exemples de ligne du dictionnaire et préciser si les mots à trier sont les mots français ou les mots anglais ?

      • Partager sur Facebook
      • Partager sur Twitter
        20 mai 2018 à 0:03:20

        Et bien enfaite, le dictionnaire fonctionne de tel manière: Les 2 premières ligne de mon fichier texte contienne un mot en français et sa traduction a la suivante et ainsi de suite.

        Pour ce qui est de les insérer dans ma structure, je procède de tel manière:

        void LireDico(FILE *fin)
        {
            Nouveau = malloc(sizeof(struct vocable));
            while((fscanf(fin, "%s %s", Nouveau->Lang1, Nouveau->Lang2))!= EOF)
            {
                Nouveau->pSuivantLang1=pTeteLang1;
                Nouveau->pSuivantLang2=pTeteLang2;
                pTeteLang1=Nouveau;
                pTeteLang2=Nouveau;
                Nouveau = malloc(sizeof(struct vocable));
            }
        }

        Le but est de, lors de l'affichage, avoir les mots trier dans l'ordre alphabétique (le mot en français suivi de sa traduction ou inversément)

        • Partager sur Facebook
        • Partager sur Twitter
          20 mai 2018 à 2:04:12

          Hello,

          Une petite aide en modifiant légèrement ta structure:

          enum {FR,EN};
          
          struct vocable {
           char word[2][MAXLEN];
           struct vocable *next[2];
          };
          
          struct vocable *insertNewWord(struct vocable *head[2],struct vocable *new,int langage) {
          	if(head[langage]==NULL) {			// list empty
          		return new;
          	}
          	....	// insérer dans la liste ou en fin de liste
          	return(....);
          }
          
          void ReadFile(struct vocable *head[2]) {
          	char word_fr[MAXLEN],word_en[MAXLEN];
          	
          	head[0]=head[1]=NULL;
          	while(fscanf(file,"%s %s",word_fr,word_en)==2) {
          		struct vocable *new;
          		new=malloc(sizeof(struct vocable))
          		strcpy(new->word[FR],word_fr);
          		strcpy(new->word[EN],word_en);
          		new->next[0]=new->next[1]=NULL;
          		head[FR]=insertNewWord(head,new,FR);
          		head[EN]=insertNewWord(head,new,EN);
          	}
          }
          

          Là, je te montre comment insérer lorsque la liste est vide, à toi de faire le reste....

          -
          Edité par edgarjacobs 20 mai 2018 à 2:07:01

          • Partager sur Facebook
          • Partager sur Twitter

          On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

            20 mai 2018 à 7:57:52

            Le but est de, lors de l'affichage, avoir les mots trier dans l'ordre alphabétique (le mot en français suivi de sa traduction ou inversément)


            Comment ça « inversement » ? Faut-il trier les mots en français ou leurs traductions en anglais ? Ça ne peut pas être les deux ! Ou bien tu dois effectuer deux tris : un tri des mots en français et un tri des mots en anglais ? (Pour avoir un double dictionnaire.) Dans ce cas j'imagine qu'il faut deux listes.

            -
            Edité par robun 20 mai 2018 à 7:58:33

            • Partager sur Facebook
            • Partager sur Twitter
              20 mai 2018 à 11:54:04

              A mon avis le Le inversément, c'est: j'affiche les mots en français dans l'ordre alphabétique + leur traduction, et / ou j'affiche les mots en anglais dans l'ordre alphabétique + leur traduction. Il faut donc deux pointeurs head et next, mais une seule structure.

              -
              Edité par edgarjacobs 20 mai 2018 à 11:55:41

              • Partager sur Facebook
              • Partager sur Twitter

              On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                20 mai 2018 à 12:40:31

                Si c'est ça qu'il faut faire, je dirais plutôt qu'il faut deux pointeurs "next_fr" et "next-eng'.
                • Partager sur Facebook
                • Partager sur Twitter
                  20 mai 2018 à 15:49:26

                  robun a écrit:

                  Si c'est ça qu'il faut faire, je dirais plutôt qu'il faut deux pointeurs "next_fr" et "next-eng'.

                  Je change la priorité des opérateurs (mais c'est ce que je voulais dire dès le départ)

                  edgarjacobs a écrit:

                  ....Il faut donc deux pointeurs (head et next)....

                  C'est d'ailleurs ce qu'indique le bout de code que j'ai montré.



                  • Partager sur Facebook
                  • Partager sur Twitter

                  On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                  Trier une liste chaînée par ordre alphabétique

                  × 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