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 :

Soucis, tableau de tri


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 83
    Par défaut Soucis, tableau de tri
    Bonjour,

    j'ai réussi a mettre un petit programme au point pour qu'il permette de créer un tableau de 9 chiffre, qu il organise par ordre croissant.
    Par la suite la saisie d'un 10 eme chiffre est sollicité, le programme va l insérer en décalant les élément ayant une valeur supérieur vers la droite, pour l insérer au bonne endroit

    Par la suite j'ai essayé de creer un autre programme qui lui devrait organisé les nombre dans le tableau au fur et a mesure qu'il soient saisie, en décalant les nombre superieur a ma derniere saisie vers la droite
    Il trie bien les nombre lorsque je les rentre par ordre décroissant, cependant si je les saisie de façon aleatoire il les organise mal.
    Par exemple si je rentre 9 8 7 4 5 6 1 2 3 10 il me trie de cette façon : 2 1 3 5 4 6 7 8 9 10.

    Pourriez vous m'aider a corriger mon 2eme programme.

    Voici le 1er programme fonctionnant bien :
    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
     
     
    // Ecrire un prog qui permet de stocker dans un tableau de 9 elements et qui le 
    // tri en ordre croissant. Puis il demande une valeur et il l inser dans le 
    // tableau
     
    #include <stdlib.h>
    #include <stdio.h>
     
    int main(){
        // Déclaration des valeurs et du tableau
        int i, j, temp,nouveau, tab[10];
        bool ok;
        // Entrer valeurs dans le tableau
        for(i=0; i<9 ;i++)
           {
            printf("Donner un element  %d : ", i);
            scanf("%d", &tab[i]);
            }
     
        // Recherche avec tri par permutation
        for(i=0; i<8; i++)
          {
           for(j=i+1; j<9; j++)
             {
               if(tab[i]>tab[j]){
                                 temp=tab[i];
                                 tab[i]=tab[j];
                                 tab[j]=temp;
                      }}}
     
        printf("Voici le 1er classement\n");
        for(i=0; i<9 ;i++){
                           printf("la case %d a pour valeur %d\n",i,tab[i]);
                           }
     
        printf("\nDonner un element a inserer :");
        scanf("%d",&nouveau);              
        printf("\nVoici le 2eme classement\n");    
        ok=false;
     
        for(i=8;ok==false && i>=0;i--)
           {    
           if(i==0){
                   tab[i+1]=tab[i];
                   tab[0]=nouveau;
                   ok=true;
                   }
           // on decale vers la droite les valeurs superieur a mon nouveau elements 
           else if(tab[i]>nouveau){ tab[i+1]=tab[i]; }
           else {
                 tab[i+1]=nouveau;
                 ok=true;
                 }                     
           }
        for(i=0; i<10 ;i++){ printf("la case %d a pour valeur %d\n",i,tab[i]); }
        system("pause");
        return 0;                
    }

    et le second fonctionnant mal
    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
     
     
    #include <stdlib.h>
    #include <stdio.h>
     
    int main(){
        // Déclaration des valeurs et du tableau
        int nouveau, a, i, tab[11];
        bool ok;
        // Entrer valeurs dans le tableau
     
        for(i=0; i<10 ;i++)
           {
            printf("Donner un element  %d : ", i);
            scanf("%d", &nouveau);
            ok=false;
     
            if(i>0)
              {
               for(a=i; a>=0 && ok==false ;a--)
                 {
                  if(a==0){
                   tab[a+1]=tab[a];
                   tab[0]=nouveau;
                   ok=true;
                   }
           // on decale vers la droite les valeurs superieur a mon nouveau elements 
                   else if(tab[a]>nouveau){ tab[a+1]=tab[a]; }
                   else {
                        tab[a+1]=nouveau;
                        ok=true;
                        }                     
           }}
           else {tab[0]=nouveau;}}
     
     
     
        for(i=0; i<10 ;i++){
                            printf("la case %d a pour valeur %d\n",i,tab[i]);
                            }           
        system("pause");
        return 0;                
    }
    Je sais que sa fait beaucoup de lignes de code mais je ne peux pas citer qu'une partie, n'arrivant pas a comprendre d ou vient mon erreur.

    Je vous remercie d'avance pour votre aide

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Moe,

    Retour aux bases : papier + crayon, et tu suis l'évolution des données pas à pas (ce que fait réellement le programme, pas ce que tu penses qu'il fait).

  3. #3
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    Bravo, c'est avec des exercices comme ça qu'on apprend à gérer la mémoire.

    L'erreur dans ton code est assez subtile, et je pense que tu risque de passer pas mal de temps à la chercher. J'hésite un peu à te la donner, parce que tu fais un exercice et que ça n'a de valeur que si tu cherches.

    Aussi, je vais m'inscrire dans la logique de droggo et te donner non-pas la réponse, mais t'expliciter le moyen d'y arriver qu'il suggère (et qui est le bon).

    Allons-y :
    -------------------
    - Premier passage dans le for (i..
    -> i vaut 0
    -> tab contient 11 valeur aléatoires
    --> on demande un chiffre à l'utilisateur
    --> on passe dans le (i>0) qui doit renvoyer FAUX
    --> on assigne tab[0] = le chiffre

    - Second passage dans le for (i..
    -> i vaut 1
    -> tab[0] contrient le premier chiffre
    -> tab contient 10 autres valeur aléatoires
    --> on passe dans le (i>0) qui doit renvoyer VRAI

    ...
    -------------------
    Normalement si tu continue à faire cet exercice jusqu'à mettons i==2 tu devrais trouver le problème.

    Si ce n'est pas le cas : poste nous ton raisonnement jusqu'à i==2 et on te dira où tu te trompes.

    Courage !

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 83
    Par défaut
    Merci de m'avoir aiguillé Feriaman j'ai trouvé mon erreur
    j'étais en décalage d'une cellule

    Voici ma modification
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
           // on decale vers la droite les valeurs superieur a mon nouveau elements 
                   else if(tab[a-1]>nouveau){ tab[a]=tab[a-1]; }
                   else {
                        tab[a]=nouveau;
                        ok=true;
                        }

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

Discussions similaires

  1. Recherche élément médian dans tableau non trié
    Par chicorico dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 27/05/2009, 17h39
  2. [MySQL] souci tableau et mysql
    Par fey dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 02/12/2008, 15h46
  3. Soucis tableau dynamique
    Par Darksnakes dans le forum Débuter
    Réponses: 8
    Dernier message: 14/11/2008, 20h41
  4. Afficher un tableau associatif trié
    Par peuf23 dans le forum Langage
    Réponses: 2
    Dernier message: 05/07/2006, 17h14
  5. Réponses: 3
    Dernier message: 16/12/2002, 16h12

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