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 :

Fonction de tri qui plante


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 62
    Points : 36
    Points
    36
    Par défaut Fonction de tri qui plante
    Bonjour,

    j'apprend actuellement le C, et pour m'exercer, j'ai tenté de faire l'exercice suivant:
    créer une fonction ordonnerTableau qui classe les valeurs d'un tableau dans l'ordre croissant.

    Voici mon code:
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    #include <stdio.h>
    #include <stdlib.h>
     
    void ordonnerTableau(int tableau[], int tailleTableau);
     
    int main()
    {
        int tableau[8] = {4, 9, 7, 2, 13, 12, 21, 3};
        int i = 0;
        for(i = 0; i<8; i++)
        {
            printf("%d\n", tableau[i]);
        }
     
        ordonnerTableau(tableau, 8);
     
        for(i = 0; i<8; i++)
        {
            printf("%d\n", tableau[i]);
        }
     
    }
     
    void ordonnerTableau(int tableau[], int tailleTableau)
    {
        int sup = 0, i=0, n=0, temp=0;
        while(i<tailleTableau)
        {
            for(n=0;n<tailleTableau;n++)
            {
                if(tableau[i]>tableau[n])
                {
                    sup++; // Définit la position de l'élément
                }
            }
     
            //Echange des valeurs
            temp=tableau[sup];
            tableau[sup]=tableau[i];
            tableau[i]=temp;
     
            /*
            Si la valeur de tableau[i] change, reproduire l'opération sans déplacer le curseur i
            Si la valeur de tableau[i] ne change pas, déplacer le curseur
            */
            if(tableau[i] == tableau[sup])
            {
                i++;
            }
     
        }
    }
    Lorsque j’exécute ce code, la console m'affiche l'ordre initial du tableau, puis windows m'indique que le programme a cessé de fonctionner, mais je n'arrive pas à trouver ce qui ne va pas..

    Cordialement.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 90
    Points : 214
    Points
    214
    Par défaut
    Exécute le code en pas à pas et surveille les index d'accès au tableau, à mon avis le pb vient de là.

  3. #3
    Membre éclairé Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Points : 791
    Points
    791
    Par défaut
    Quelques pistes à première vue:

    Déjà, à certains moments, i et n valent la même valeur (est-ce qu'on doit incrémenter sup?)

    Affiche les valeurs successives de sup.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    sup signifie le nombre de chiffre auquel l'élément concerné est supérieur, donc si n et i sont égaux, les valeurs sont les même, donc sup n'est pas incrémenté.
    Cependant, j'ai rajouté un printf pour voir ce que donnait tableau[i] et tableau[n]:
    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
    void ordonnerTableau(int tableau[], int tailleTableau)
    {
        int sup = 0, i=0, n=0, temp=0;
        while(i<tailleTableau)
        {
            for(n=0; n<tailleTableau; n++)
            {
                printf("tableau[i] vaut %d et tableau[n] vaut %d\n", tableau[i], tableau[n]);
                if(tableau[i] > tableau[n])
                {
                    sup++; // Définit la position de l'élément
                }
            }
     
            printf("%d", sup);
            //Echange des valeurs
            temp = tableau[sup];
            tableau[sup] = tableau[i];
            tableau[i] = temp;
     
            /*
            Si la valeur de tableau[i] change, reproduire l'opération sans déplacer le curseur i
            Si la valeur de tableau[i] ne change pas, déplacer le curseur
            */
            if(tableau[i] == tableau[sup])
            {
                i++;
            }
     
        }
    }
    Et j'obtiens:
    4
    9
    7
    2
    13
    12
    21
    3
    tableau[i] vaut 4 et tableau[n] vaut 4
    tableau[i] vaut 4 et tableau[n] vaut 9
    tableau[i] vaut 4 et tableau[n] vaut 7
    tableau[i] vaut 4 et tableau[n] vaut 2
    tableau[i] vaut 4 et tableau[n] vaut 13
    tableau[i] vaut 4 et tableau[n] vaut 12
    tableau[i] vaut 4 et tableau[n] vaut 21
    tableau[i] vaut 4 et tableau[n] vaut 3
    2tableau[i] vaut 7 et tableau[n] vaut 7
    tableau[i] vaut 7 et tableau[n] vaut 9
    tableau[i] vaut 7 et tableau[n] vaut 4
    tableau[i] vaut 7 et tableau[n] vaut 2
    tableau[i] vaut 7 et tableau[n] vaut 13
    tableau[i] vaut 7 et tableau[n] vaut 12
    tableau[i] vaut 7 et tableau[n] vaut 21
    tableau[i] vaut 7 et tableau[n] vaut 3
    5tableau[i] vaut 12 et tableau[n] vaut 12
    tableau[i] vaut 12 et tableau[n] vaut 9
    tableau[i] vaut 12 et tableau[n] vaut 4
    tableau[i] vaut 12 et tableau[n] vaut 2
    tableau[i] vaut 12 et tableau[n] vaut 13
    tableau[i] vaut 12 et tableau[n] vaut 7
    tableau[i] vaut 12 et tableau[n] vaut 21
    tableau[i] vaut 12 et tableau[n] vaut 3
    10tableau[i] vaut 2130567168 et tableau[n] vaut 2130567168
    tableau[i] vaut 2130567168 et tableau[n] vaut 9
    tableau[i] vaut 2130567168 et tableau[n] vaut 4
    tableau[i] vaut 2130567168 et tableau[n] vaut 2
    tableau[i] vaut 2130567168 et tableau[n] vaut 13
    tableau[i] vaut 2130567168 et tableau[n] vaut 7
    tableau[i] vaut 2130567168 et tableau[n] vaut 21
    tableau[i] vaut 2130567168 et tableau[n] vaut 3
    17tableau[i] vaut 1 et tableau[n] vaut 1
    tableau[i] vaut 1 et tableau[n] vaut 9
    tableau[i] vaut 1 et tableau[n] vaut 4
    tableau[i] vaut 1 et tableau[n] vaut 2
    tableau[i] vaut 1 et tableau[n] vaut 13
    tableau[i] vaut 1 et tableau[n] vaut 7
    tableau[i] vaut 1 et tableau[n] vaut 21
    tableau[i] vaut 1 et tableau[n] vaut 3
    17tableau[i] vaut 2130567168 et tableau[n] vaut 2130567168
    tableau[i] vaut 2130567168 et tableau[n] vaut 9
    tableau[i] vaut 2130567168 et tableau[n] vaut 4
    tableau[i] vaut 2130567168 et tableau[n] vaut 2
    tableau[i] vaut 2130567168 et tableau[n] vaut 13
    tableau[i] vaut 2130567168 et tableau[n] vaut 7
    tableau[i] vaut 2130567168 et tableau[n] vaut 21
    tableau[i] vaut 2130567168 et tableau[n] vaut 3
    24tableau[i] vaut -2 et tableau[n] vaut -2
    tableau[i] vaut -2 et tableau[n] vaut 9
    tableau[i] vaut -2 et tableau[n] vaut 4
    tableau[i] vaut -2 et tableau[n] vaut 2
    tableau[i] vaut -2 et tableau[n] vaut 13
    tableau[i] vaut -2 et tableau[n] vaut 7
    tableau[i] vaut -2 et tableau[n] vaut 21
    tableau[i] vaut -2 et tableau[n] vaut 3
    24tableau[i] vaut 2130567168 et tableau[n] vaut 2130567168
    tableau[i] vaut 2130567168 et tableau[n] vaut 9
    tableau[i] vaut 2130567168 et tableau[n] vaut 4
    tableau[i] vaut 2130567168 et tableau[n] vaut 2
    tableau[i] vaut 2130567168 et tableau[n] vaut 13
    tableau[i] vaut 2130567168 et tableau[n] vaut 7
    tableau[i] vaut 2130567168 et tableau[n] vaut 21
    tableau[i] vaut 2130567168 et tableau[n] vaut 3
    31tableau[i] vaut 2686856 et tableau[n] vaut 2686856
    tableau[i] vaut 2686856 et tableau[n] vaut 9
    tableau[i] vaut 2686856 et tableau[n] vaut 4
    tableau[i] vaut 2686856 et tableau[n] vaut 2
    tableau[i] vaut 2686856 et tableau[n] vaut 13
    tableau[i] vaut 2686856 et tableau[n] vaut 7
    tableau[i] vaut 2686856 et tableau[n] vaut 21
    tableau[i] vaut 2686856 et tableau[n] vaut 3
    38tableau[i] vaut 0 et tableau[n] vaut 0
    tableau[i] vaut 0 et tableau[n] vaut 9
    tableau[i] vaut 0 et tableau[n] vaut 4
    tableau[i] vaut 0 et tableau[n] vaut 2
    tableau[i] vaut 0 et tableau[n] vaut 13
    tableau[i] vaut 0 et tableau[n] vaut 7
    tableau[i] vaut 0 et tableau[n] vaut 21
    tableau[i] vaut 0 et tableau[n] vaut 3
    38tableau[i] vaut 2686856 et tableau[n] vaut 2686856
    tableau[i] vaut 2686856 et tableau[n] vaut 9
    tableau[i] vaut 2686856 et tableau[n] vaut 4
    tableau[i] vaut 2686856 et tableau[n] vaut 2
    tableau[i] vaut 2686856 et tableau[n] vaut 13
    tableau[i] vaut 2686856 et tableau[n] vaut 7
    tableau[i] vaut 2686856 et tableau[n] vaut 21
    tableau[i] vaut 2686856 et tableau[n] vaut 3
    45tableau[i] vaut 1986527561 et tableau[n] vaut 1986527561
    tableau[i] vaut 1986527561 et tableau[n] vaut 9
    tableau[i] vaut 1986527561 et tableau[n] vaut 4
    tableau[i] vaut 1986527561 et tableau[n] vaut 2
    tableau[i] vaut 1986527561 et tableau[n] vaut 13
    tableau[i] vaut 1986527561 et tableau[n] vaut 7
    tableau[i] vaut 1986527561 et tableau[n] vaut 21
    tableau[i] vaut 1986527561 et tableau[n] vaut 3
    52tableau[i] vaut 2686880 et tableau[n] vaut 2686880
    tableau[i] vaut 2686880 et tableau[n] vaut 9
    tableau[i] vaut 2686880 et tableau[n] vaut 4
    tableau[i] vaut 2686880 et tableau[n] vaut 2
    tableau[i] vaut 2686880 et tableau[n] vaut 13
    tableau[i] vaut 2686880 et tableau[n] vaut 7
    tableau[i] vaut 2686880 et tableau[n] vaut 21
    tableau[i] vaut 2686880 et tableau[n] vaut 3
    59tableau[i] vaut 1998363925 et tableau[n] vaut 1998363925
    tableau[i] vaut 1998363925 et tableau[n] vaut 9
    tableau[i] vaut 1998363925 et tableau[n] vaut 4
    tableau[i] vaut 1998363925 et tableau[n] vaut 2
    tableau[i] vaut 1998363925 et tableau[n] vaut 13
    tableau[i] vaut 1998363925 et tableau[n] vaut 7
    tableau[i] vaut 1998363925 et tableau[n] vaut 21
    tableau[i] vaut 1998363925 et tableau[n] vaut 3
    66tableau[i] vaut 4198704 et tableau[n] vaut 4198704
    tableau[i] vaut 4198704 et tableau[n] vaut 9
    tableau[i] vaut 4198704 et tableau[n] vaut 4
    tableau[i] vaut 4198704 et tableau[n] vaut 2
    tableau[i] vaut 4198704 et tableau[n] vaut 13
    tableau[i] vaut 4198704 et tableau[n] vaut 7
    tableau[i] vaut 4198704 et tableau[n] vaut 21
    tableau[i] vaut 4198704 et tableau[n] vaut 3
    73
    Si je retire la ligne qui m'indique les valeurs de tableau[i] et tableau[n] pour savoir combien vaut sup, j'obtiens:
    4
    9
    7
    2
    13
    12
    21
    3
    2510171724243138384552596673
    Donc ça a bien l'air d’être un problème d'index, mais je vois pas ou..

  5. #5
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    10tableau[i] vaut 2130567168 et tableau[n] vaut 2130567168
    Ca ne te choque pas d'avoir sup = 10 pour un tableau de 8 éléments ?
    Tu as oublié de remettre sup à 0 pour chaque nouveau i...

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    Ça marche, merci !

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

Discussions similaires

  1. [GD] fonction createimagefromjpeg qui plante mon site
    Par dimainfo dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 13/07/2010, 13h10
  2. Réponses: 15
    Dernier message: 29/11/2008, 11h56
  3. fonction qui plante
    Par étoile de mer dans le forum Débuter
    Réponses: 3
    Dernier message: 19/09/2008, 09h42
  4. fonction qui plante mon programme
    Par étoile de mer dans le forum Débuter
    Réponses: 21
    Dernier message: 22/08/2008, 15h08
  5. [Upload] Upload qui plante en fonction de la taille
    Par jeyce dans le forum Langage
    Réponses: 5
    Dernier message: 10/07/2006, 10h19

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