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 :

[DEBUTANT] Tri à bulle d'un tableau


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 70
    Par défaut [DEBUTANT] Tri à bulle d'un tableau
    Bonjour / Bonsoir tous le monde !
    Je commence cette nouvelle année par un petit probleme que je n'arrive pas à surmonter...

    Je vous explique :

    J'ai un fichier classement.txt structuré de la maniere suivante :
    nomCandidat | noteCandidat | PourcentageRepJuste
    qui est dans le désordre j'aimerai classer ce fichier dans l'ordre décroissant par rapport au pourcentage.

    Je met donc le contenu de ce fichier dans un tableau mais j'ai vraiment du mal faire ce fameux tri...

    Voici mon code si quelqu'un souhaite m'éclairer

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    public static void triBulle()
            {
                string lignelue;
                string[] Tclassement = new string[2];
                enformeClassement[] tabClassement = new enformeClassement[100];
                int i = 1;
                int longeur = 0;
                bool permut;
                StreamReader classement = File.OpenText("classement.txt");
                lignelue = classement.ReadLine();
                while (lignelue != null)
                {
                    Tclassement = lignelue.Split('|');
                    tabClassement[i].nomDuCandidat = Tclassement[0];
                    tabClassement[i].noteDuCandidat = Tclassement[1];
                    tabClassement[i].Pourcentage = Tclassement[2];
                    lignelue = classement.ReadLine();
                    i++;
                }
                longeur = i;
     
                do
                {
     
                    permut = false;
                    for (i = 1; i < longeur - 1; i++)
                    {
                        if (Int32.Parse(tabClassement[i].Pourcentage) < Int32.Parse(tabClassement[i++].Pourcentage))
                        {
                            int tmp = tabClassement[i - 1];
                            tabClassement[i - 1] = tabClassement[i];
                            tabClassement[i] = tmp;
     
                            permut = true;
                        }
                    }
                }
                while (permut);

    Je vous remerci par avance.
    Bonne soirée.

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Tu devrais plutôt regarder du côté de la méthode Array.Sort avec IComparable ou IComparer.

    Les différents exemples de la MSDN pour cette méthode devraient suffire pour que tu puisses t'en sortir

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 70
    Par défaut
    Merci de ton aide,
    toutefois dans le cadre d'un projet je ne suis pas autorisé à utiliser des objets tel que icomparer ou autres.
    Le programme doit etre un maximum "procédural"

    C'est pourquoi je fait appel a vous.

    Merci

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par erigoal Voir le message
    Le programme doit etre un maximum "procédural"
    Très logique comme approche pour un langage objet
    Celà dit, c'est toujours intéressant de savoir coder un algo de tri.

    Ton algo me semble correct, à un détail près :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (i = 1; i < longeur - 1; i++)
    {
        if (Int32.Parse(tabClassement[i].Pourcentage) < Int32.Parse(tabClassement[i++].Pourcentage))
    Attention avec l'opérateur ++... "x++" n'est pas équivalent à "x+1" mais à "x = x+1". Quand tu écris "tabClassement[i++]", tu accèdes à l'élément d'index i, puis tu incrémente i. Donc ta comparaison compare le même élément du tableau, et le résultat est donc toujours false. En plus, comme il y a aussi un ++ dans la boucle, tu incrémentes 2 fois à chaque passage dans la boucle, donc tu "sautes" un élément sur 2.

    Il y a quelques problèmes avec les index... Je te conseille de faire varier i de 0 (inclus) à longueur - 1 (exclu), et de faire les comparaisons et les inversions sur les éléments d'index i et i+1

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 217
    Par défaut
    Citation Envoyé par erigoal Voir le message
    [...]
    Le programme doit etre un maximum "procédural"
    [...]
    Huh ?!

    Bon... si c'est pour un exercice "d'école", à la rigueur pourquoi pas, même si c'est un peu curieux...

    Mais si c'est en entreprise ... "ahem !"

    [ EDIT ] Quoiqu'il en soit, "juste au cas où..." :

    http://fr.wikipedia.org/wiki/Tri_à_bulles

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    vu son code il a l'air d'avoir compris le principe

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 70
    Par défaut
    Citation Envoyé par lysiandad Voir le message
    Huh ?!

    Bon... si c'est pour un exercice "d'école", à la rigueur pourquoi pas, même si c'est un peu curieux...

    Mais si c'est en entreprise ... "ahem !"

    [ EDIT ] Quoiqu'il en soit, "juste au cas où..." :

    http://fr.wikipedia.org/wiki/Tri_à_bulles
    Effectivement il s'agit d'un exercice d'école ou seul le procédural est autorisé l'objet étant abordé plus tard.
    Citation Envoyé par tomlev Voir le message
    Très logique comme approche pour un langage objet
    Celà dit, c'est toujours intéressant de savoir coder un algo de tri.

    Ton algo me semble correct, à un détail près :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (i = 1; i < longeur - 1; i++)
    {
        if (Int32.Parse(tabClassement[i].Pourcentage) < Int32.Parse(tabClassement[i++].Pourcentage))
    Attention avec l'opérateur ++... "x++" n'est pas équivalent à "x+1" mais à "x = x+1". Quand tu écris "tabClassement[i++]", tu accèdes à l'élément d'index i, puis tu incrémente i. Donc ta comparaison compare le même élément du tableau, et le résultat est donc toujours false. En plus, comme il y a aussi un ++ dans la boucle, tu incrémentes 2 fois à chaque passage dans la boucle, donc tu "sautes" un élément sur 2.

    Il y a quelques problèmes avec les index... Je te conseille de faire varier i de 0 (inclus) à longueur - 1 (exclu), et de faire les comparaisons et les inversions sur les éléments d'index i et i+1
    Merci de ton aide
    J'ai fait les modifications que tu ma conseillé mais j'ai des erreurs de type que je n'arrive pas a résoudre.

    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
    do
                {
                   
                    permut = false;
                    for (i = 0; i < longeur - 1; i++)
                    {
                       
                        if (Int32.Parse(tabClassement[i].Pourcentage) < Int32.Parse(tabClassement[i+1].Pourcentage))
                        {
                            int tmp = tabClassement[i + 1];
                            tabClassement[i + 1] = tabClassement[i];
                            tabClassement[i] = tmp;
    
                            permut = true;
                        }
                    }
                }
                while (permut);
    voici la structure de mon tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public struct enformeClassement
            {
                public string nomDuCandidat;
                public string noteDuCandidat;
                public string Pourcentage;
            }
    Les parties en rouge sont celles qui posent problemes

    Impossible de convertir implicitement le type 'PTIQCM.Program.enformeClassement' en 'int'

    Impossible de convertir implicitement le type 'int' en 'PTIQCM.Program.enformeClassement'


    Je vous remercie beaucoup de votre aide !

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    tabClassement est un tableau d'objets enformeClassement, pas un tableau de int... il faut donc déclarer tmp comme un enformeClassement

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

Discussions similaires

  1. affichage d'un tableau trié par tri à bulle
    Par bucabuca dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 15/07/2012, 15h52
  2. Affichage tableau trier par le tri à bulle
    Par luclapointe dans le forum C++
    Réponses: 2
    Dernier message: 11/07/2012, 20h13
  3. Tri à bulles d'un tableau
    Par Dr walid dans le forum Débuter
    Réponses: 5
    Dernier message: 18/11/2009, 16h06
  4. tri à bulle - pointeur - tableau
    Par babouoles dans le forum C
    Réponses: 9
    Dernier message: 03/01/2008, 16h25
  5. [langage] [debutant] tri tableau deux dimensions
    Par labbyjoel dans le forum Langage
    Réponses: 4
    Dernier message: 07/11/2006, 18h38

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