Partage
  • Partager sur Facebook
  • Partager sur Twitter

tri par insertion ( chaines de caractères )

aide SVP

    20 décembre 2006 à 19:11:37

    bonjour à tous,

    Voilà: l'encodage de mes chaines de caractères fonctionne bien, l'affichage aussi, mais je no comprend pas pourquoi le tri par insertion ne va pas...

    enfait, lorsque l'affichage des nom trié se fait, il affiche des petit coeur etc...

    je ne comprend aps pourquoi??
    pouvez vous m'aider au plus vite svp merci beaucoup à tous.

    le tri se fait à l'aide d'un vecteur d'indexation.

    Cordialement jérome Cester

    Voici le code
    /* ******************************************************
     * Nom : Cester                                         *
     * Prénom : Jérôme                                      *
     * Groupe : 2126                                        *
     * Dossier : lc30                                       *
     * Programme : tri par insersion avec fonctions         *
     * Dernière date de modification : 14/12/2006           *
     ********************************************************/


    #include <stdio.h>
    #include <string.h>
    #define MAX 50
    #define MAX2 20

    void encodage(intint*‚ char*);
    void affichage(intint*‚ char*);
    void tri(char*‚ int*‚ int);
    void inser(char*‚ int*‚ intint);

    void main()
    {
            int nbel‚ index[MAX];
            char vec[MAX][MAX2];

            /* condition pour le nombres de noms entré par l'utilisateur*/
            /* pas plus de 50 noms et pas en dessous de 0 */

            do
            {
                    printf("entrez le nombre de nom que vous souhaitez encoder!!! \t");
                    fflush(stdin);
                    scanf("%d"‚&nbel);
            }while(nbel < 0 || nbel > MAX);

            printf("\n");
            printf("\n");

            /* encodage des noms */

            printf("ENTREZ LES NOMS DESIRES");

        printf("\n");
            printf("\n");

            /* appelle de la fonction ENCODAGE */
       
            encodage(nbel‚ &index[0]‚ &vec[0][0]);

            printf("\n");
           
            /* affichage des noms encodés */

            printf("AFFICHAGE DES NOMS");

        printf("\n");
            printf("\n");

            /* appelle de la fonction AFFICHAGE */

            affichage(nbel‚ &index[0]‚ &vec[0][0]);

            printf("\n");
            printf("\n");

            /* appelle de la fonction TRI */
           
        tri(&vec[0][0]‚ &index[0]‚ nbel);

        /* affichage des noms triés */     

            printf("AFFICHAGE DES NOMS TRIE");

        printf("\n");
            printf("\n");

            /* appelle de la fonction affichage */

            affichage(nbel‚ &index[0]‚ &vec[0][0]);

            printf("\n");
            printf("\n")
    }

    /*****************************************************
     * input : nbel ( nombre d'élements )                *
     *               index ( vecteur d'indexation )            *
     *         vec ( adresse de debut de la chaîne de    *
     *               caractère                           *
     *                                                   *
     * process : encodage des noms                       *
     *                                                   *
     * output : /                                        *
     *****************************************************/


    void encodage(int nbel‚ int *index‚ char *vec)
    {
            int i = 0;
            char buf[128];
           
            for(i = 0; i < nbel ; i++)
            {
                    printf("veuillez entrer le nom [%d] \t"‚i + 1);
                    fflush(stdin);
                    gets(buf);

                    printf("\n");
           
                    while(strlen (buf) > 20)
                    {
                            printf("entrez un nombre de maximum 20 caractères.");
                            printf("\n");
                    printf("\n");
                            printf("veuillez entrer le nom [%d] \t"‚i + 1);
                            fflush(stdin);
                            gets(buf);
                            printf("\n");
                    }
                    strcpy(vec‚ buf);
                    vec = vec +  MAX2 ;
                    *index = i;
                    index++;
            }
           
    }

    /*****************************************************
     * input : nbel ( nombre d'élements )                *
     *               index ( vecteur d'indexation )            *
     *         vec ( adresse de debut de la chaîne de    *
     *               caractère                           *
     *                                                   *
     * process : affichage des noms encodé               *
     *                                                   *
     * output : /                                        *
     *****************************************************/


    void affichage(int nbel‚ int *index‚ char *vec)
    {
            int i;
            char *pvec;

            pvec = vec;

            for(i = 0; i < nbel; i++)
            {
                    printf("[%d] \t"‚ *index);
                    pvec = vec + *index * MAX2;
                    puts(pvec);
                    index++;
                    printf(" \n ");               
            }
    }

    /*****************************************************
     * input : nbel ( nombre d'élements )                *
     *               index ( vecteur d'indexation )            *
     *         vec ( adresse de debut de la chaîne de    *
     *               caractère                           *
     *                                                   *
     * process : trie les valeurs envoyées par           *
     *           la fonction INSER.                      *
     *                                                   *
     * output : /                                        *
     *****************************************************/


    void tri(char *vec‚ int *index‚ int nbel)
    {
            int i = 0;

            for (i = 0; i < nbel – 1; i++)
            {                                                                      
                    inser(vec‚ index‚ i‚ *(vec+i+1));
            }
    }

    /*****************************************************
     * input : insert ( valeur à insérer )               *
     *               index ( vecteur d'indexation )            *
     *         vec ( adresse de debut de la chaîne de    *
     *               caractère                           *
     *                                                   *
     * process : insert les valeur à la bonne place en   *
     *           renvoyant à la fonction TRI             *
     *                                                   *
     * output : /                                        *
     *****************************************************/


    void inser(char *vec‚ int *index‚ int i‚ int insert)
    {
            while(strcmp (vec + insert * (MAX2) ‚ vec + *( index + i ) * (MAX2)) < 0 && i >= 0)
            {
                    *( index + i + 1 ) = *( index + i );
                    i––;
            }
            *( index + i + 1) = insert;
    }
    • Partager sur Facebook
    • Partager sur Twitter
      20 décembre 2006 à 20:06:25

      Citation : jitalia

      Voilà: l'encodage de mes chaines de caractères fonctionne bien, l'affichage aussi, mais je no comprend pas pourquoi le tri par insertion ne va pas...


      - Présentation erratique.
      - main() retourne int. Toujours.

      http://mapage.noos.fr/emdel/notes.htm#typemain

      - usage de gets().
      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        20 décembre 2006 à 22:26:04

        eeeeeeeeeeeee non, void main() ne retourne rine ;) mais tracasse j'ai trouvé
        • Partager sur Facebook
        • Partager sur Twitter
          21 décembre 2006 à 1:36:06

          Citation : jitalia

          eeeeeeeeeeeee non, void main() ne retourne rine ;) mais tracasse j'ai trouvé


          void main() est une extension non portable. La version portable c'est int main() avec 2 variantes :

          int main (void)
          et
          int main (int argc, char **argv)

          Et c'est comme ça depuis les origines du C :
          main() et équivalent à int main()
          • Partager sur Facebook
          • Partager sur Twitter
          Music only !

          tri par insertion ( chaines de caractères )

          × 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