Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercice 5, ordonner le tableau

    20 avril 2022 à 2:31:15

    #include <stdio.h>
    #include <stdlib.h>
    
    void ordre(int*, int);
    
    int main()
    {
        int lst[4] = {15,81,22,13};
    
        ordre(lst, 4);
    
        return 0;
    }
    
    void ordre(int *lst, int taille)
    {
        int i=0, a=0;
    
        for(i=0; i<taille; i++)
        {
    
            if(lst[i] > lst[i+1])
            {
                a = lst[i];
                lst[i] = lst[i+1];
                lst[i+1] = a;
            }
        }
    
        for(i=0; i<taille; i++)
        {
            printf("%d\n", lst[i]);
        }
    }
    

    Sans boucle, j'ai un tableau qui est ordonné une seule fois (ici, {15,22,13,81})

    #include <stdio.h>
    #include <stdlib.h>
    
    void ordre(int*, int);
    
    int main()
    {
        int lst[4] = {15,81,22,13};
    
        ordre(lst, 4);
    
        return 0;
    }
    
    void ordre(int *lst, int taille)
    {
        int i=0, a=0;
    
        for(i=0; i<taille; i++)
        {
            do
            {
                if(lst[i] > lst[i+1])
                {
                    a = lst[i];
                    lst[i] = lst[i+1];
                    lst[i+1] = a;
                }
            }while(lst[i] < lst[i+1]);
        }
    
        for(i=0; i<taille; i++)
        {
            printf("%d\n", lst[i]);
        }
    }
    

    Et avec boucle, le code ne fonctionne pas.

    -
    Edité par KitaeSEO 20 avril 2022 à 2:38:43

    • Partager sur Facebook
    • Partager sur Twitter
      20 avril 2022 à 4:23:29

      i va de 0 à taille-1 mais tu accèdes à la position i+1, donc hors du tableau.

      Que crois-tu faire dans ta boucle do ... while? Tu revérifies toujours le même élément.

      Je suppose que tu boucles indéfiniment parce que le test est à l'envers.
      Tu le fais une fois, c'est suffisant.
      Mais tu dois recommencer du début jusqu'à l'avant dernière position.
      Si tu affiches à la fin de la fonction (mauvaise pratique) tu verras que seul le plus grand est à sa place.
      Donc il faut recommencer pour les N-1 première positions, etc ...

      Par exemple:

      while(taille > 1) {

          for(int i=0; i<taille-1; i++) {

              ...

          }

          taille--;

      }

      -
      Edité par PierrotLeFou 20 avril 2022 à 7:30:45

      • Partager sur Facebook
      • Partager sur Twitter

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

        20 avril 2022 à 10:12:34

        Pour ce genre de petit programme, je recommande fortement de mettre des 'printf' partout (par exemple afficher tout le tableau) pour comprendre ce qu'il fait. Il suffit d'écrire une petite fonction de ce genre :

        void affichetableau(int tab[], int n)
        {
            printf("[ ") ;
            for (int i = 0 ; i < n ; i++) printf("%d ", tab[i]);
            printf("]\n") ;
        }

        et de l'appeler un peu partout. Exemple :

            printf("Avant le for : "); affichetableau(lst, taille);
            for(i=0; i<taille; i++)
            {
                printf("Avant le do, i = %d : ", i); affichetableau(lst, taille);
                do
                {
                    if(lst[i] > lst[i+1])
                    {
                        a = lst[i];
                        lst[i] = lst[i+1];
                        lst[i+1] = a;
                    }
                }while(lst[i] < lst[i+1]);
                printf("Après le do, i = %d : ", i); affichetableau(lst, taille);
            }

        -
        Edité par robun 20 avril 2022 à 10:12:45

        • Partager sur Facebook
        • Partager sur Twitter
          20 avril 2022 à 18:00:24

          L'utilisation d'une fonction simplifie en effet le code et est plus facile à enlever quand le programme fonctionne.
          KitaeSEO a déjà compris qu'après le premier tour de boucle, seul le dernier est bien placés.
          • Partager sur Facebook
          • Partager sur Twitter

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

          Exercice 5, ordonner le tableau

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