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 de tri


Sujet :

C

  1. #1
    Membre éprouvé Avatar de vg-matrix
    Inscrit en
    Février 2007
    Messages
    1 220
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Février 2007
    Messages : 1 220
    Par défaut Problème de tri
    Les 5 nombres ne sont pas triés correctement:

    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
    #include<stdio.h>
    #include<conio.h>
     
    //Proc‚dure Saisie
    void saisie(int nb[5])
    {
      int i;
     
      for (i=0; i<5; i++)
         scanf("%i",&nb[i]);
    }
     
    //Proc‚dure Tri
    void tri(int nb[5])
    {
      int i,j,temp;
     
      for (i=2; i<5; i++)
      {
        temp=nb[i];
        j=i;
        while (nb[j-1]>temp)
        {
          nb[j]=nb[j-1];
          j--;
        }
        nb[j]=temp;
      }
    }
     
    //Proc‚dure r‚sultat
    void result(int nb[5])
    {
      int i;
     
      printf("Nombres tries par ordre croissant\n");
      for (i=0; i<5; i++)
         printf("%i\n",nb[i]);
    }
     
    //Algorithme principal
    main()
    {
      int i,nb[5];
     
      clrscr();
      for (i=0; i<5; i++)
         nb[i]=0;
     
      printf("PROGRAMME DE TRI DE TROIS ENTIER\n");
      printf("Entrez 5 nombres svp\n");
      saisie(nb);
      tri(nb);
      result(nb);
      getch();
      return 0;
    }

  2. #2
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    ton algo est bizarre, il manque une condition dans le while il me semble. Si t'as voulu faire une sorte de tri-bulle c'est pas ça.

  3. #3
    Scorpi0
    Invité(e)
    Par défaut
    Bonjour d'abord.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      printf("PROGRAMME DE TRI DE TROIS ENTIER\n");
      printf("Entrez 5 nombres svp\n");
    I Lol'ed.

    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
    void tri(int nb[5])
    {
      int i,j,temp;
     
      for (i=2; i<5; i++)
      {
        temp=nb[i];
        j=i;
        while (nb[j-1]>temp)
        {
          nb[j]=nb[j-1];
          j--;
        }
        nb[j]=temp;
      }
    }
    Ou as-tu trouvé un tel algorithme ?
    Effectivement, tu actionne cette action "nb[j]=nb[j-1];" autant de fois que de boucle du while, alors que cette action "nb[j]=temp;" une seule fois, ce qui ne parait pas logique à première vue..

  4. #4
    Membre éprouvé Avatar de vg-matrix
    Inscrit en
    Février 2007
    Messages
    1 220
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Février 2007
    Messages : 1 220
    Par défaut
    Je l'ai trouvé dans un bouquin il se nomme "tri par insertion".

  5. #5
    Scorpi0
    Invité(e)
    Par défaut
    Tu as cherché sur google ?

    http://fr.wikipedia.org/wiki/Tri_par_insertion

    Avec un exemple déjà tout fait en C qui t'aidera à mieux comprendre je pense.

    Sinon ton erreur provient de ton indice de départ qui commence à 2.
    Dans ton livre, il doive surement avoir des tableaux qui commence à être indexé à 1. En C, les tableaux commence à 0.

    Tu doit commencé au deuxième élément, à l'indice 1 donc.

    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
    void tri(int nb[5])
    {
      int i,j,temp;
     
      for (i=1; i<5; i++)
      {
        temp=nb[i];
        j=i;
        while (nb[j-1]>temp)
        {
          nb[j]=nb[j-1];
          j--;
        }
        nb[j]=temp;
      }
    }

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    "insertion sort", il manque deux lignes.
    - W
    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
    void tri (int nb[5])
      int i,j,temp;
     
      for (i=1; i<5; i++)        // <- commencer par 1  
      {
        temp=nb[i];          
        j=i;                 
        while (nb[j-1]>temp) 
        {
          nb[j]=nb[j-1];
          j--;
          if (j <= 0)
             break;
        }
        nb[j]=temp;         
      }
    }
    edit: oops, déjà repondu
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre éprouvé Avatar de vg-matrix
    Inscrit en
    Février 2007
    Messages
    1 220
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Février 2007
    Messages : 1 220
    Par défaut
    Merci, j'avais oublié J>1 dans mon while mais néamoins le prémier nombre saisi n'est pas rangé alors que les autres le sont par ordre croissant.

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par vg-matrix Voir le message
    Les 5 nombres ne sont pas triés correctement:

    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
    #include<stdio.h>
    #include<conio.h>
     
    //Proc‚dure Saisie
    void saisie(int nb[5])
    {
      int i;
     
      for (i=0; i<5; i++)
         scanf("%i",&nb[i]);
    }
     
    //Proc‚dure Tri
    void tri(int nb[5])
    {
      int i,j,temp;
     
      for (i=2; i<5; i++)
      {
        temp=nb[i];
        j=i;
        while (nb[j-1]>temp)
        {
          nb[j]=nb[j-1];
          j--;
        }
        nb[j]=temp;
      }
    }
     
    //Proc‚dure r‚sultat
    void result(int nb[5])
    {
      int i;
     
      printf("Nombres tries par ordre croissant\n");
      for (i=0; i<5; i++)
         printf("%i\n",nb[i]);
    }
     
    //Algorithme principal
    main()
    {
      int i,nb[5];
     
      clrscr();
      for (i=0; i<5; i++)
         nb[i]=0;
     
      printf("PROGRAMME DE TRI DE TROIS ENTIER\n");
      printf("Entrez 5 nombres svp\n");
      saisie(nb);
      tri(nb);
      result(nb);
      getch();
      return 0;
    }
    Bonjour,

    Au revoir.

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

Discussions similaires

  1. [MySQL] Problème de tri
    Par pounie dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 22/10/2005, 13h09
  2. Problème de tri avec analyse croisée
    Par drthodt dans le forum Access
    Réponses: 2
    Dernier message: 18/10/2005, 16h23
  3. [TToolBar] Problème de tri
    Par titiyo dans le forum Composants VCL
    Réponses: 6
    Dernier message: 01/09/2004, 09h21
  4. [Collections] Problème de tri
    Par feti2004 dans le forum Collection et Stream
    Réponses: 16
    Dernier message: 03/08/2004, 16h45
  5. problème de tri et optimisatiopn
    Par psyco2604 dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 13/05/2004, 10h44

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