Tri de tableaux de structure
Résolu
ProgCnew
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je viens de me lancer, un peu par curiosité, dans l'apprentissage de la programmation en C. J'ai donc acheté un livre, dont certains exercices n'ont pas de correction. Dans un de ces exercices, on me demande de déclarer un tableau de quatre structures scores nommé joueurs. Jusque là, tout va bien. Ensuite on me demande de trier les scores dans l'ordre décroissant, en utilisant ce que j'ai appris dans les leçons précédentes. Le tri des scores fonctionne, mais je n'arrive pas à faire correspondre les noms qui vont avec les scores.
on me donne un petit indice, l'auteur du livre indique qu'en ligne 27, il a écrit joureurs[a] = joueurs[b];
Ci-dessous, le code que j'ai utilisé.
#include <stdio.h>
#include <stdlib.h>
#define TAILLE 4
int main()
{ struct scores
{
char nomJoueur[32];
int score;
};
struct scores joueurs[4];
int x;
for (x = 0; x<TAILLE; x++)
{
printf("Indiquer le joueur %d : ", x+1 );
scanf("%s", joueurs[x].nomJoueur);
printf("Indiquer le son score : ");
scanf("%d", &joueurs[x].score);
}
puts("Infos du joueur");
printf("#\tNom\tScore\n");
for(x = 0; x<TAILLE; x++)
{
printf("%d\t%s\t%5d\n", x+1, joueurs[x].nomJoueur, joueurs[x].score);
}
int interne, externe, temp;
for(externe=0; externe<TAILLE-1; externe++)
{
for( interne=externe+1; interne<TAILLE; interne++)
{
if( joueurs[externe].score < joueurs[interne].score)
{
temp=joueurs[externe].score;
joueurs[externe].score = joueurs[interne].score;
joueurs[interne].score = temp;
}
}
}
puts("Tableau apres tri: ");
for(x=0; x<TAILLE; x++)
printf("%d\t%s\t%5d\n", x+1, joueurs[x].nomJoueur, joueurs[x].score);
putchar('\n');
return 0;
}
Merci d'avance.
Je viens de me lancer, un peu par curiosité, dans l'apprentissage de la programmation en C. J'ai donc acheté un livre, dont certains exercices n'ont pas de correction. Dans un de ces exercices, on me demande de déclarer un tableau de quatre structures scores nommé joueurs. Jusque là, tout va bien. Ensuite on me demande de trier les scores dans l'ordre décroissant, en utilisant ce que j'ai appris dans les leçons précédentes. Le tri des scores fonctionne, mais je n'arrive pas à faire correspondre les noms qui vont avec les scores.
on me donne un petit indice, l'auteur du livre indique qu'en ligne 27, il a écrit joureurs[a] = joueurs[b];
Ci-dessous, le code que j'ai utilisé.
#include <stdio.h>
#include <stdlib.h>
#define TAILLE 4
int main()
{ struct scores
{
char nomJoueur[32];
int score;
};
struct scores joueurs[4];
int x;
for (x = 0; x<TAILLE; x++)
{
printf("Indiquer le joueur %d : ", x+1 );
scanf("%s", joueurs[x].nomJoueur);
printf("Indiquer le son score : ");
scanf("%d", &joueurs[x].score);
}
puts("Infos du joueur");
printf("#\tNom\tScore\n");
for(x = 0; x<TAILLE; x++)
{
printf("%d\t%s\t%5d\n", x+1, joueurs[x].nomJoueur, joueurs[x].score);
}
int interne, externe, temp;
for(externe=0; externe<TAILLE-1; externe++)
{
for( interne=externe+1; interne<TAILLE; interne++)
{
if( joueurs[externe].score < joueurs[interne].score)
{
temp=joueurs[externe].score;
joueurs[externe].score = joueurs[interne].score;
joueurs[interne].score = temp;
}
}
}
puts("Tableau apres tri: ");
for(x=0; x<TAILLE; x++)
printf("%d\t%s\t%5d\n", x+1, joueurs[x].nomJoueur, joueurs[x].score);
putchar('\n');
return 0;
}
Merci d'avance.
A voir également:
- Tri de tableaux de structure
- Comment faire un tri personnalisé sur excel - Guide
- Logiciel tri photo - Guide
- Logiciel calcul structure bois gratuit - Télécharger - Architecture & Déco
- Structure d'un rapport de stage - Guide
- Tableaux croisés dynamiques - Guide
4 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
merci d'utiliser les balises de code quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
il me semble que tu tries les scores, alors que tu souhaites sans doute trier les joueurs en fonction de leur score.
pour mieux comprendre ce que fais ton programme, pourquoi n'affiches-tu pas le tableau à chaque étape du tri?
merci d'utiliser les balises de code quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
il me semble que tu tries les scores, alors que tu souhaites sans doute trier les joueurs en fonction de leur score.
pour mieux comprendre ce que fais ton programme, pourquoi n'affiches-tu pas le tableau à chaque étape du tri?
Bonjour,
Désolé pour les balises de code , je ne connaissais pas, c'est la première fois que je m'inscrit dans un forum.
Dans un premier temps, on demande de créer le code pour faire un tableau en saisissant un nom puis un score. Ensuite, il est demandé de faire le tri décroissant des scores. Là le tri se fait mais les noms n'ont pas changer d'ordre. Donc l'auteur donne comme indice que dans son code à lui, il a rajouté joueurs[a] = joueurs[b]; mais je ne trouve pas le reste de l'astuce.
Désolé pour les balises de code , je ne connaissais pas, c'est la première fois que je m'inscrit dans un forum.
Dans un premier temps, on demande de créer le code pour faire un tableau en saisissant un nom puis un score. Ensuite, il est demandé de faire le tri décroissant des scores. Là le tri se fait mais les noms n'ont pas changer d'ordre. Donc l'auteur donne comme indice que dans son code à lui, il a rajouté joueurs[a] = joueurs[b]; mais je ne trouve pas le reste de l'astuce.
#include <stdio.h> #include <stdlib.h> #define TAILLE 4 int main() { struct scores { char nomJoueur[32]; int score; }; struct scores joueurs[4]; int x; for (x = 0; x<TAILLE; x++) { printf("Indiquer le joueur %d : ", x+1 ); scanf("%s", joueurs[x].nomJoueur); printf("Indiquer le son score : "); scanf("%d", &joueurs[x].score); } puts("Infos du joueur"); printf("#\tNom\tScore\n"); for(x = 0; x<TAILLE; x++) { printf("%d\t%s\t%5d\n", x+1, joueurs[x].nomJoueur, joueurs[x].score); } int interne, externe, temp; for(externe=0; externe<TAILLE-1; externe++) { for( interne=externe+1; interne<TAILLE; interne++) { if( joueurs[externe].score < joueurs[interne].score) { temp=joueurs[externe].score; joueurs[externe].score = joueurs[interne].score; joueurs[interne].score = temp; } } } puts("Tableau apres tri: "); for(x=0; x<TAILLE; x++) printf("%d\t%s\t%5d\n", x+1, joueurs[x].nomJoueur, joueurs[x].score); putchar('\n'); return 0; }
Bonjour,
J'ai réussi à faire apparaître les différentes étapes du tri, mais je n'ai toujours pas réussi à déplacer les noms de joueur qui correspondent au score. Je ne connais que le tri de tableau sur une colonne ou une ligne. Je suppose que joueurs[a] = joueurs[b] sert à convertir le tableau, mais je ne sais pas comment.
J'ai réussi à faire apparaître les différentes étapes du tri, mais je n'ai toujours pas réussi à déplacer les noms de joueur qui correspondent au score. Je ne connais que le tri de tableau sur une colonne ou une ligne. Je suppose que joueurs[a] = joueurs[b] sert à convertir le tableau, mais je ne sais pas comment.
Pour commencer, j'ai essayé avec un tableau plus simple à deux colonnes comprenant déjà les prenoms et les scores. J'ai fais toutes sortes de modifs dans le "if" et dans le "temp" en rajoutant "prenom[TAILLE][x]".
Voici le tableau utilisé.
Voici le tableau utilisé.
#include <stdio.h> #include <stdlib.h> #define TAILLE 4 int main() {char joueurs[4]; char prenom[TAILLE][25] = {"Georges", "john", "Thomas ", "James"}; int score[TAILLE]= {1, 2, 3, 4}; int x, index; putchar('\n'); for(x=0; x<TAILLE; x++) { printf("%s\t%5d\n",prenom[x], score[x]); index++; } putchar('\n'); int interne, externe, temp; for(externe=0; externe<TAILLE-1; externe++) { for( interne=externe+1; interne<TAILLE; interne++) { for(x=0; x<TAILLE; x++) printf("%s\t%5d\n",prenom[x], score[x]); if(score[externe]<score[interne]) { temp= score[externe]; score[externe]= score[interne]; score[interne]=temp; } } } /* Affiche tableau après tri*/ puts("Tableau apres tri: \n"); for(x=0; x<TAILLE; x++) printf("%s\t%5d\n", prenom[x], score[x]); putchar('\n'); return 0; }
Je ne comprends pas trop bien comment le tri fonctionne. J'ai mis un "printf" avant le "if" et pourtant, je vois bien comment se placent le différents chiffres au fur et à mesure du tri. Je croyais que le programme évoluait ligne par ligne. Je me suis surtout axé à placer les noms après le "if" de différentes manières ou dans les accolades du "temp". Je ne vois vraiment pas comment lier les noms avec les scores. Je suis pas fait pour la programmation apparemment.
Bonsoir,
J'ai enfin trouvé une solution qui fonctionne, j'étais vraiment mal parti, ça demande encore de l'entraînement.
J'ai enfin trouvé une solution qui fonctionne, j'étais vraiment mal parti, ça demande encore de l'entraînement.
#define TAILLE 4 int main() { struct scores { char nomJoueur[32]; int score; }; struct scores joueurs[4]; struct scores temp; int x, ex, in; for (x = 0; x<TAILLE; x++) { printf(" Indiquer le joueur %d : ", x+1 ); scanf(" %s", joueurs[x].nomJoueur); printf(" Indiquer le son score : "); scanf("%d", &joueurs[x].score); } putchar('\n'); puts(" Infos du joueur\n"); printf(" #\tNom\tScore\n"); for(x = 0; x<TAILLE; x++) { printf(" %d\t%s\t%5d\n", x+1, joueurs[x].nomJoueur, joueurs[x].score); } for(ex=0; ex<TAILLE-1; ex++) { for( in=ex+1; in<TAILLE; in++) { if( joueurs[ex].score < joueurs[in].score) { temp=joueurs[in]; joueurs[in] = joueurs[ex]; joueurs[ex] = temp; } } } puts(" Tableau apres tri: "); for(x=0; x<TAILLE; x++) printf(" %d\t%s\t%5d\n", x+1, joueurs[x].nomJoueur, joueurs[x].score); putchar('\n'); return 0; }