Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercice tableau 5, ordonner le tableau

    18 septembre 2021 à 15:37:24

    Bonjour à tous,

    Je suis actuellement en train de faire l'ensemble du cours de OCR concernant le C dans le but d'avoir quelques bases dans ce langage. Voilà 2 jours que je suis complètement bloqué concernant l'exercice 5 où l'on nous demande d'ordonner un tableau. 

    Voici le code que j'ai produis, je souhaiterai votre avis et vos conseils pour que se dernier soit effectif lors du rendu. Merci d'avance pour les conseils que vous m'apporterez :)

    #include <stdio.h>
    #include <stdlib.h>
    
    void ordonner_tableau(int tableau[], int taille_tableau)
    {
    	int i = 0;
    	int j = i;
    	int swap;
    	while( i < taille_tableau )
    	{ 
    		while( j < taille_tableau)
    		{
    			if(tableau[i] > tableau[j])
    			{
    				swap = tableau[i];
    				tableau[i] = tableau[j];
    				tableau[j] = swap;
    			}
    			j++;
    		}
    		printf("%d\n", tableau[i]);
    		i++;
    	}
    }
    int main()
    {
    	int tab[8] = {51, 38, 67, 54, 83, 50, 62, 25};
    	ordonner_tableau(tab, 8);
    	return(0);
    }
    • Partager sur Facebook
    • Partager sur Twitter
      18 septembre 2021 à 16:17:58

      Tu y es presque ! C'est juste comme la boucle while ligne 11 doit être relancé plusieurs fois (pour chaque valeur de i) il faut penser à réinitialiser j !
      • Partager sur Facebook
      • Partager sur Twitter
        18 septembre 2021 à 16:28:50

        #include <stdio.h>
        #include <stdlib.h>
        
        void ordonner_tableau(int tableau[], int taille_tableau)
        {
        	int i = 0;
        	int j = i;
        	int swap = 0;
        	while( i < taille_tableau )
        	{ 
        		while( j < taille_tableau)
        		{
        			if(tableau[i] > tableau[j])
        			{
        				swap = tableau[i];
        				tableau[i] = tableau[j];
        				tableau[j] = swap;
        			}
        			j++;
        		}
        		printf("%d\n", tableau[i]);
        		i++;
        		j = i;
        	}
        }
        int main()
        {
        	int tab[8] = {51, 38, 67, 54, 83, 50, 62, 25};
        	ordonner_tableau(tab, 8);
        	return(0);
        }
        --------------

        Merci beaucoup pour ton indication qui à force d'essaie fonctionne, principalement concernant le positionnant de la réinitialisation de J. 
        Néanmoins, je ne comprends pas pourquoi mon j doit être égal à i, et pas à 0? Possible d'avoir une explication sur le pourquoi du comment ? :3 
        Merci d'avance :)
        • Partager sur Facebook
        • Partager sur Twitter
          18 septembre 2021 à 16:43:30

          Hello,

          j peut valoir à chaque fois zéro, mais on sait que les éléments de 0 à i ont déjà été triés. Inutile de les parcourir à nouveau.

          2 conseils:

          • remplace tes boucles while par des boucles for
          • si tu veux absolument conserver tes boucles while, déplace la ligne 7 juste avant la 11, et supprime la ligne 23. Tu devrais aussi supprimer la ligne 8 et mettre int devant swap ligne 15

          -
          Edité par edgarjacobs 18 septembre 2021 à 16:45:44

          • Partager sur Facebook
          • Partager sur Twitter

          Il y a ceux qui font des sauvegardes, et ceux qui n'ont pas encore eu d'incident....

            18 septembre 2021 à 17:38:53

            Bonjour Edgar,

            Je fais les exercices OCR en vu d'une mini préparation personnel pour la piscine de l'école 42. De ce fait, je m'oblige à utiliser while, même si for me semble plus simple.

            Merci pour les conseils de syntaxes qui permettent de gagner un peu de lisibilité. J'ai tendance à annoncer mes variables dès le début de ma fonction afin de savoir ce que je peux utiliser durant la fonction, et ne pas en sortir une du chapeau sans l'avoir énoncée.  

            Agréable journée, :)

            • Partager sur Facebook
            • Partager sur Twitter
              18 septembre 2021 à 17:43:43

              En complément de ce qu'a dit edgarjacoobs, si tu démarres j à i, tu compares une valeur avec elle-même. Donc il fautt commencer avec j=i+1
              Si tu laisses aller i jusqu'à taille_tableau - 1 (i < taille_tableau) tu vas encore comparer la dernière position avec elle-même. Il faut i < taille_tableau-1
              Finalement, il n'est pas souhaitabled'afficher dans la fonction de tri. Elle devrait être faite pour trier seulement.
              Tu pourrais t'écrire une fonction qui ne fait qu'afficher.
              Dans d'autres circonstances, ce serait utile d'afficher avant et après le tri pour comparer.

              edit: Pour l'école 42 je n'ose dire ce que j'en pense ...

              Définis les variables au moment où tu en as besoin. C'est du vieux C que de tout définir au début.

              Les for t'auraient évité de faire l'erreur sur l'initialisation de j

              -
              Edité par PierrotLeFou 18 septembre 2021 à 17:49:23

              • Partager sur Facebook
              • Partager sur Twitter

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

                19 septembre 2021 à 11:42:12

                Exodeus a écrit:

                Bonjour Edgar,

                Je fais les exercices OCR en vu d'une mini préparation personnel pour la piscine de l'école 42. De ce fait, je m'oblige à utiliser while, même si for me semble plus simple.

                Merci pour les conseils de syntaxes qui permettent de gagner un peu de lisibilité. J'ai tendance à annoncer mes variables dès le début de ma fonction afin de savoir ce que je peux utiliser durant la fonction, et ne pas en sortir une du chapeau sans l'avoir énoncée.  

                Agréable journée, :)

                Si tu fais la piscine, on t'imposera d'avoir tes variables en début de fonction et pour doubler l'aberration, les variables devront rester sans initialisation. Si un reviens au C après la piscine, il te faudra désapprendre toutes les mauvaises pratiques apprises.

                • Partager sur Facebook
                • Partager sur Twitter

                En recherche d'emploi.

                  19 septembre 2021 à 16:31:39

                  Ce cours et celui de 42/epitech, ça montre qu'il y a plusieurs façons de mal programmer en C.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 septembre 2021 à 19:34:42

                    Un mal qui répand la terreur,
                    Mal que le Ciel en sa fureur
                    Inventa pour punir les crimes de la terre
                    Jean de La Fontaine
                    La Piscine 42 est même rendue en Amérique ...
                    • Partager sur Facebook
                    • Partager sur Twitter

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

                    Exercice tableau 5, ordonner le tableau

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