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 :

Problème tri à bulle d'un tableau


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 67
    Points : 108
    Points
    108
    Par défaut Problème tri à bulle d'un tableau
    Bonjour, j'essaie de trier un tableau avec des valeurs aléatoires mais ça ne marche pas complètement, à chaque fois un 0 (à la place du plus grand nombre) apparait, j'obtiens cela :

    Nom : t.JPG
Affichages : 129
Taille : 24,4 Ko

    Pouvez-vous m'aider à trouver l'erreur Merci

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
     
    #include <ctype.h> /* pour tolower */
    #include <math.h>
    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
     
    #define NMAX 400
     
    void gen_aleat( double v[], int n)
    {
        int i;
        for (i=0; i<n; i++) v[i]=(rand()-rand())%32768;
    }
     
    void  aff( double v[], int  n )
    {
        int i;
     
      for( i = 0; i < n; i++ )
      {
            printf( "%7.0f ", v[i]);
      }
        printf("\n");
    }
     
    void tri_bulle(double v[], int n)
    {
        int i;
        int j;
        int temp;
        for (i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                if (v[j+1]<v[j])
                {
                 temp=v[j];
                 v[j]=v[j+1];
                 v[j+1]=temp;
                }
            }
        }
    }
     
    int main()
    {
        double v[NMAX];
        srand( time(NULL) );
        int n;
        int ok;
        int choix;
     
        do
     
        {
            printf("Entrer le nb elements compris entre 0 et %d :", NMAX);
            ok=scanf("%d",&n);
            while (getchar()!='\n');
     
        }while (!ok || n<0);
     
            gen_aleat(v,n);
            aff(v,n);
     
            tri_bulle(v, n);
            aff(v,n);
     
        return 0;
     
    }

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 631
    Points : 10 558
    Points
    10 558
    Par défaut
    Réfléchis l'ami

    Un bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    L35        for(j=0;j<n;j++)
    L36        {
    L37            if (v[j+1]<v[j])

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 67
    Points : 108
    Points
    108
    Par défaut
    Ca marche avec j<n-1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            for(j=0;j<n-1;j++)
            {
                if (v[j+1]<v[j])
    Sans le n-1 et pour j=4 v[4+1]<j[4] car v[4+1] = 0 vu qu'il n'est pas dans le tableau, j'ai juste ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 631
    Points : 10 558
    Points
    10 558
    Par défaut
    Citation Envoyé par kopbuc Voir le message
    Sans le n-1 et pour j=4 v[4+1]<j[4] car v[4+1] = 0 vu qu'il n'est pas dans le tableau, j'ai juste ?
    Non c'est un UB (Undefined Behaviour) puisque tu ne peux jamais savoir la valeur d'une valeur non initialisée.

    Même dans ton code, tu n'initialises pas les NMAX cases de ton tableau v.
    Cela limiterai les erreurs de débordements seulement si ton tableau n'est pas rempli complétement.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 67
    Points : 108
    Points
    108
    Par défaut
    Ok, merci et bonne soirée

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

Discussions similaires

  1. Tri à bulles d'un tableau
    Par Dr walid dans le forum Débuter
    Réponses: 5
    Dernier message: 18/11/2009, 16h06
  2. [DEBUTANT] Tri à bulle d'un tableau
    Par erigoal dans le forum C#
    Réponses: 8
    Dernier message: 08/01/2009, 14h07
  3. Problème de tri à bulles et d'affichage - débutant
    Par Joliefleur4ever dans le forum Langage
    Réponses: 6
    Dernier message: 04/12/2007, 21h13
  4. [Tableaux] Problème tri de tableau à deux dimensions
    Par squall62 dans le forum Langage
    Réponses: 21
    Dernier message: 24/05/2006, 18h18
  5. [PERL] problème tri de tableau
    Par LE NEINDRE dans le forum Langage
    Réponses: 2
    Dernier message: 31/08/2005, 15h42

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