IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

tri croissant d'un tableau


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 128
    Points : 46
    Points
    46
    Par défaut tri croissant d'un tableau
    Bonsoir tout le monde;
    je suis un débutant en C++, je suis en cours d'apprendre à programmer en c++, pour cet effet, j'ai fait un petit fichier .cpp pour trier des élément d'un tableau;
    voila le contenu du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #include <iostream>
     
    using namespace std;
     
    void echange(int &val1, int &val2);
     
    int main()
    {
        int tab[4]={9,8,3,1} ; // 2 valeurs à échanger
        for(int i=0;i<4;i++){
              if(tab[i]>tab[i+1])
                 echange(tab[i],tab[i+1]);
        }    
        cout<<"les valeur de tab en ordre croissant vaut : "<<endl;
        for(int i=0;i<4;i++){
              cout<<tab[i]<<" ";
        } 
        system("pause");
    }
     
    void echange(int &val1, int &val2) 
    {
        if(val1>val2){
            swap(val1,val2);
        }
     
    }
    je ne sais pas où elle est l'erreur.le résultat affiché n'est pas triée.
    Merci d'avance de m'aider.

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Ce n'est pas tant un problème de C++ qu'un problème d'algorithme : Essaye par exemple d'exécuter ton algorithme à la main, tu verra que ça ne marche pas !

    Trie n'est pas une opération si simple. Il existe moult algorithmes pour y parvenir, certains meilleurs que d'autre. Un qui est intéressant est nommé quicksort.

    A part ça, il existe déjà une fonction toute faire pour trier des données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <iostream>
    #include <algorithm>
     
    using namespace std;
     
    void echange(int &val1, int &val2);
     
    int main()
    {
        int tab[4]={9,8,3,1} ; // 2 valeurs à échanger
        sort(&tab[0], &tab[0] + 4);
        cout<<"les valeur de tab en ordre croissant vaut : "<<endl;
        for(int i=0;i<4;i++){
              cout<<tab[i]<<" ";
        } 
        system("pause");
    }
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre éprouvé Avatar de cs_ntd
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2006
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 598
    Points : 1 214
    Points
    1 214
    Par défaut
    Ou alors ya le std::set

    C'est quand même plus propre que des tableaux bas niveau en c++...

    The magic of Opera, La magie de l'Opera
    The mysteries of Space Opera, Les mystères de l'Opera Spatial
    Mr. Know-it-all, M. Je-Sais-Tout
    Prelude in C sharp minor, the most beautiful piano song and the best C sharp prelude ever, Prélude en do dièse mineur, le plus beau morceau de piano et le meilleur prélude au C#
    The Mesmerizing Saphir Division for Nerds, L'Hypnotisante Division Saphire pour les Nerds (HDSN)

  4. #4
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 128
    Points : 46
    Points
    46
    Par défaut
    oui effectivement; il y ont a plusieurs solutions; mais je me base sur mon code sur le tri Bulle. donc j'ai initialisé un tableau de 4 éléments; ensuite j'ai fait une boocle pour comparer 2 premières cases ainsi de suite ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(int i=0;i<4;i++){
              if(tab[i]>tab[i+1])
                 echange(tab[i],tab[i+1]);
        }
    j'ai utilisé la même fontion "echange" pour 2 valeurs : x et y et ca marche bien.
    mais lorsque j'ai envoyé comme paramêtre les "i et i+1" case. ca ne marche pas!
    est ce que vous avez une idée sur ce dis-fonctionnement?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 36
    Points : 33
    Points
    33
    Par défaut
    C'est effectivement un problème d'algo :
    1) Le tri à bulles nécessite deux passes.
    2) tab[3+1] n'est pas défini !
    3) Tu vérifies deux fois la même chose.
    4) Utilité de la fonction échange ?

    Essaies plutôt çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #include <iostream>
     
    void echange(int& val1, int& val2);
     
    int main()
    {
        int tab[4] = {9, 8, 3, 1}; // 2 valeurs à échanger
     
        for(int i = 0; i < 3; i++)        // on va jusqu'a taille du tableau - 1 (3)
            for(int i = 0; i < 3; i++)    // car tab[3 + 1] = tab[4] n'est pas défini !
                if(tab[i] > tab[i+1])
                    echange(tab[i], tab[i+1]);
     
        std::cout << "les valeur de tab en ordre croissant vaut : " << std::endl;
        for(int i=0; i < 4; i++)
              std::cout << tab[i] << " ";
    }
     
    void echange(int& val1, int& val2)
    {
     //   if(val1>val2){       Tu verifies 2 fois la meme chose !
            std::swap(val1, val2);
     //   }
    }

  6. #6
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 128
    Points : 46
    Points
    46
    Par défaut
    OK;
    merci bcp pour l'aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tri croissant d'un tableau
    Par sali2801 dans le forum x86 16-bits
    Réponses: 1
    Dernier message: 18/06/2011, 13h22
  2. Tri croissant d'un tableau
    Par menyarito dans le forum VB.NET
    Réponses: 9
    Dernier message: 18/05/2010, 16h44
  3. Tri par ordre croissant dans variable tableau
    Par jojo86 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 27/11/2009, 16h51
  4. tri croissant avec tableau d'indices
    Par salseropom dans le forum C++
    Réponses: 2
    Dernier message: 11/09/2009, 07h39
  5. Réponses: 2
    Dernier message: 08/04/2004, 16h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo