Partage
  • Partager sur Facebook
  • Partager sur Twitter

probleme avec std::qsort

    13 octobre 2018 à 18:44:53

    bonjour a tous comme marqué dans le tire j'ai un probleme avec le std::qsort.

    Dans le main je déclare un int *array; puis je passe ce pointeur a la fonction int initVectorArray(int *& tabVec)

    int initArray(int *& tabVec)
    {
    	int size;
    	do
    	{
    		std::cout << "size of vector array :";
    		std::cin >> size;
    		if (size > 500)
    		{
    			std::cout << "too big" << std::endl;
    		}
    	} while (size > 500);
    
    	tabVec = new int[size]();
    	return size;
    }

    puis je passe le passe dans cette fonction pour set les valeurs

    void initValuesArray(int *&tabVec, int size)
    {
    	for (int i = 0; i < size; i++)
    	{
    		std::cout << "vector " << i << " x" << std::endl;
    		std::cin >> tabVec[i];
    	}
    }

    Pour l'instant ca fonctionne mais apres j'aimerai trier mon tableau, et c'est le drame

    int compare(const void *a, const void *b)
    {
    
    	const int* x = (int*)a;
    	const int* y = (int*)b;
    
    
    	if (*x > *y)
    	{
    		return 1;
    	}
    	else if (*x < *y)
    	{
    		return -1;
    	}
    	return 0;
    }
    
    void sortArray(int *tabVec, int size)
    {
    	std::qsort(tabVec, size,sizeof(int), compare);
    }


    le tableau n'est pas trié

    • Partager sur Facebook
    • Partager sur Twitter
      13 octobre 2018 à 19:50:04

      Melange de pointeurs et references, un tableau dynamique en C, des void*... j'ai presque envie de dire que tu cherches a avoir des problèmes.

      Le code semble correct, il faudrait voir le code appelant.

      • Partager sur Facebook
      • Partager sur Twitter
        14 octobre 2018 à 10:24:58

        C'est vraisemblablement un exercice pour montrer qu'utiliser void*, des tableaux bruts, qsort() ou new en C++ ne peut produire que des monceaux de bugs.
        Oublie vite qsort() il est complexe, source d'erreurs et n'est pas utilisable sur la plupart des objets C++, il y a std::sort() à la place. Ton dernier bloc s'écrit alors :

        void sortArray( int *tabVec, int size )
        {
            std::sort( tabVec, tabVec+size );
        }

        Mais comme l'a dit gbdivers, l'erreur n'est pas dans ta fonction sortArray(), il faut chercher ailleurs.

        • Partager sur Facebook
        • Partager sur Twitter

        En recherche d'emploi.

          14 octobre 2018 à 12:10:05

          Dalfab a écrit:

          C'est vraisemblablement un exercice pour montrer qu'utiliser void*, des tableaux bruts, qsort() ou new en C++ ne peut produire que des monceaux de bugs.

          Un exercice pour montrer que certaines syntaxe sont problématiques, tu y crois vraiement ?

          Je vais faire le cynique, mais on voit plus souvent du mauvais code parce que le cours est mauvais que du mauvais code pour apprendre a ne pas faire du mauvais code.

          • Partager sur Facebook
          • Partager sur Twitter
            15 octobre 2018 à 19:11:15

            Je rejoins gbdivers, c'est complètement shizophrène. Un moniteur d'auto-école qui forcerait ses élèves à griller les feux pour qu'ils comprennent que c'est mal ne restera pas longtemps moniteur d'auto-école, ça devrait être pareil pour un prof de c++... Je pense que l'apprentissage est plus simple avec des exercices qui mettent en place des bonnes pratiques, l'élève acquiert ainsi directement les bons réflexes et de fait, progresse plus vite.

            -
            Edité par int21h 15 octobre 2018 à 19:16:13

            • Partager sur Facebook
            • Partager sur Twitter
            Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
              16 octobre 2018 à 17:06:00

              :lol: dès que je vois du code C++ crado comme ça, je sais qui va intervenir rapidement ! Mais il en manque un ! :lol:
              Cela dit, je suis moi même assez effaré de voir cela. Hélas, beaucoup de profs sont médiocres et enseignent de vieux trucs périmés, même encore en 2018.
              Le C++ 98, pire, le "C with class" a encore de beaux jours devant lui ! C'est moche, je vous l'accorde !
              • Partager sur Facebook
              • Partager sur Twitter

              Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                17 octobre 2018 à 5:18:00

                On peut tout à fait faire du C++ moderne avec C++98, c'est juste un peu plus compliqué. Si tu n'es pas convaincu, jette donc un coup d’œil à Modern C++ Design, d'Alexandrescu, il me semble que ça date de 2003 et quasiment tous les gros concepts du C++ moderne sont dedans, pourtant c'est 100% C++98 ^^

                boost est très antérieur à 2011 (les premières release datent de 2003 ou 2004 si je me souviens bien), et même ses parties les plus anciennes suivent strictement les principes de design du C++ moderne, pourtant, ça compile sur des compilateurs assez peu "compliant" comme les vieux MSVC ou les antiques GCC. Les shared_ptr(il y a même une émulation de la move semantic et de unique_ptr pour les vieux tromblons), filesystem, asio... tout ça vient de boost. boost est LA PREUVE qu'on peut programmer proprement même avec C++98. Le gros changement intervenu avec C++11, c'est que tout ce qui manquait pour pouvoir le faire facilement à été intégré à la norme (C++ 14  et C++17 ont encore étendus la palette), du coup, on n'a plus aucune excuse pour faire du crado.

                Et les concepts de base comme le RAII sont encore plus vieux, la SL les a intégrés dès ses premières implémentations au début des années 90, mais bon, avant l'arrivée des premiers compilateurs intégrant une SL à peut près conforme au standard à la fin des années 90 / début des années 2000, c'est vrai que c'était plus compliqué, parce qu'il fallait quasiment tout faire à la main, avec une garantie de portabilité d'une version à une autre d'un compilateur plutôt du genre loterie. Le changement de compilateur ou d'OS, c'était le grand saut dans l'inconnu ...

                -
                Edité par int21h 17 octobre 2018 à 5:45:34

                • Partager sur Facebook
                • Partager sur Twitter
                Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
                  18 octobre 2018 à 9:36:40

                  Je reviens je vais vomir, ensuite je vais voir pourquoi le code ne fonctionne pas.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  git is great because Linus did it, mercurial is better because he didn't.

                  probleme avec std::qsort

                  × 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