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 :

Trier un tableau par ordre décroissant


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Février 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : chercheur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2011
    Messages : 78
    Par défaut Trier un tableau par ordre décroissant
    Bonjour,

    Je sollicite votre aide pour me corriger un code qui retourne une liste de clients triée par ordre décroissant en fonction de leurs demandes.

    Le tableau : (n° clients -- demandes)

    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
    4	12	
    5	8	
    6	16	
    7	5	
    8	12	
    9	5	
    10	13	
    11	20	
    12	13	
    13	18	
    14	7	
    15	6	
    16	9	
    17	9	
    18	4	
    19	25	
    20	5	
    21	17	
    22	3	
    23	16	
    24	25	
    25	21	
    26	14	
    27	19	
    28	14	
    29	6	
    30	16	
    31	9	
    32	20	
    33	13	
    34	10	
    35	16	
    36	19	
    37	22	
    38	14	
    39	10	
    40	11	
    41	15	
    42	13	
    43	15	
    44	8	
    45	22	
    46	24	
    47	3	
    48	25	
    49	19	
    50	21	
    51	10
    le code que j'ai crée :

    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
    void ordonnerTableau(donnee *data, client *cust, JOURS *days) {
         int i; 
         int j;
         int tampon;
     
                 for (i = 1; i <= data->nbr_clients; i++)
                 {  
                        for (j = i + 1; j <= data->nbr_clients ; j++)   
                            {    
                     	      if (cust[i].demande <= cust[j].demande)
                                {
                                    tampon=cust[i].demande;
                                    cust[i].demande=cust[j].demande;
                                    cust[j].demande=tampon;
                                }
                            }
                            printf("Le client %d a la quantite suivante %d\n",i, tampon);          
                 }
    }
    Le résultat que j'ai eu retourne le trie que sur les demandes mais je souhaiterai afficher le trie des demandes avec leurs clients par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    le client 16 à la quantité 25
    le client 45 à la quantité 25
    ...
    le résultat de la compilation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    le client 1 à la quantité 25
    le client 2 à la quantité 25
    ...
    Je ne sais pas comment parvenir à trier les demandes avec leurs clients en même temps

    Merci pour vos réponses.

    RQ : la numérotation des clients commence par n°4--->51. (48clients).

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 487
    Par défaut
    Citation Envoyé par Student_Master Voir le message
    Le résultat que j'ai eu retourne le trie que sur les demandes mais je souhaiterai afficher le trie des demandes avec leurs clients par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    le client 16 à la quantité 25
    le client 45 à la quantité 25
    ...
    Dans le cas présent, c'est le client 19 qui a la quantité 25. Client 19 qui se trouve à la seizième ligne de ton fichier…

    Il faut distinguer deux choses : d'un côté l'algorithme de tri, qui est un cas d'étude à part entière en informatique (demande à ton professeur si c'est ce qu'il veut que tu fasses ou non) et l'application de cet algorithme à un programme chargé d'organiser des données.

    Si tu n'as pas besoin d'écrire l'algo, tu peux directement utiliser qsort(). C'est dans la norme, mais ça te demandera d'écrire une petite fonction de callback, très simple mais un peu déroutante si tu n'as pas l'habitude du C.

    Ce qu'il est important de poser dès le départ, c'est que le numéro du client et la quantité qu'il a commandée forment un tuple et sont indissociables, quoi qu'il arrive. Il faut donc écrire une structure « ClientQuantite » qui contiendra deux int : un pour le numéro du client, un pour la quantité commandée.

    De là, tu fais un tableau de structures « ClientQuantite » comme tu ferais un tableau de int ordinaire, par exemple de 100 entrées, si tu n'as pas envie de te palucher les listes chaînées dès le départ.

    Enfin, tu tries les éléments de ton tableau. Chaque « case » est une structure ClientQuantite, et ce sont ces cases entières que tu vas déplacer au sein de ton tableau en fonction du critère de ton choix.

  3. #3
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Février 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : chercheur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2011
    Messages : 78
    Par défaut rep
    Il faut distinguer deux choses : d'un côté l'algorithme de tri, qui est un cas d'étude à part entière en informatique (demande à ton professeur si c'est ce qu'il veut que tu fasses ou non) et l'application de cet algorithme à un programme chargé d'organiser des données.
    ==> c'est le deuxième cas : application de cet algorithme à un programme chargé d'organiser des données.

    Ce qu'il est important de poser dès le départ, c'est que le numéro du client et la quantité qu'il a commandée forment un tuple et sont indissociables, quoi qu'il arrive. Il faut donc écrire une structure « ClientQuantite » qui contiendra deux int : un pour le numéro du client, un pour la quantité commandée.
    C'est déjà crée.

    étant donné que le code ne retourne aucune erreur, je pense que le souci vient d'ici : printf("Le client %d a la quantite suivante %d\n",i, tampon);

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 487
    Par défaut
    Citation Envoyé par Student_Master Voir le message
    C'est déjà crée.
    Mais comme tu ne nous a pas montré la définition de ta structure, on ne peut que supposer ce qu'il y a dedans. Ce n'est pas bien grave, cela dit.

    étant donné que le code ne retourne aucune erreur, je pense que le souci vient d'ici : printf("Le client %d a la quantite suivante %d\n",i, tampon);
    Relis mon commentaire, et ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                     	      if (cust[i].demande <= cust[j].demande)
                                {
                                    tampon=cust[i].demande;
                                    cust[i].demande=cust[j].demande;
                                    cust[j].demande=tampon;

    Tu es en train de permuter les quantités à l'intérieur des structures plutôt que permuter les structures elles-mêmes ! Tu es en fait en train de trier une colonne en particulier plutôt que trier la liste selon un critère donné. Si tu inverses cust[i].demande et cust[j].demande, tu associes des quantités aux clients qui ne sont pas les bons.

  5. #5
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Février 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : chercheur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2011
    Messages : 78
    Par défaut rep
    Je te remercie pour tes remarques. le problème est résolu.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/02/2014, 13h30
  2. Réponses: 3
    Dernier message: 11/01/2011, 10h44
  3. Corriger cet Algo et trier les éléments du tableau en ordre décroissant
    Par PIMPMAX dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 07/01/2007, 19h25
  4. Trier les données dans 1 tableau par ordre décroissant
    Par Blunet dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 23/11/2005, 09h56
  5. Trier un tableau par ordre croissant
    Par Halleck dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 01/11/2004, 00h04

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