Emmanuel Delahaye C is a sharp tool | [Merci de lire les règles du forum et d'apprendre à utiliser les balises pour le code]
Zoltan87 a écrit :
je fais un code pour rentrer des resultats de competitions a l'arrivée de candidats d'un course.
des qu'un candidat arrive, j'entre son numero de dossard, et si celui ci est bon, une invite se presente pour entrer le temps (la performance).
Ce que je voudrais faire apres avoir renseigner le nom et le temps, c'est que cela se classe dans un tableau par temps croissant, de ce fait ensuite je n'aurais qu'a afficher ce tableau par ordre d'indice pour que s'affiche les candidats par ordre d'arrivée du premier au dernier.
Seulement ce que j'ai fait ne fonctionne pas.. j'utilise Visual Studio 2005, voici mon code
|
Pour trier un tableau, je recommande qsort(). Pour les saisies je recommande de tout baser sur fgets() . scanf() est beaucoup trop complexe à mettre en oeuvre de façon fiable.
Ton code est incomplet et ne compile pas. On ne peut pas le tester.
J'arrive à compiler ça, mais je ne sais pas trop ce que je fais... C'est toi le patron
Code :
- #include <stdio.h>
- #include <stdlib.h>
- struct arrive
- {
- int doss;
- double tps;
- };
- struct candi
- {
- char nom[32];
- char nat[32];
- };
- int main (void)
- {
- int nbarriv = 10;
- struct arrive Arrive[20];
- struct candi Candi[20];
- int nbcandi = 20;
- int dossardlu;
- system ("cls" );
- printf
- ("/---------------- S U I V I D E L A C O M P E T I T I O N ----------------/\n\n" );
- printf ("ENTREZ LE NUMERO DE DOSSARD\n" );
- scanf ("%d", &dossardlu);
- do
- {
- if (dossardlu > nbarriv || dossardlu < 1)
- {
- printf ("INEXISTANT\n\n" );
- }
- else
- {
- int i;
- // dossard déjà inscrit ou inexistant ?
- for (i = 0;
- i < nbcandi && (dossardlu - 1 < nbarriv)
- && (Arrive[i].doss != dossardlu); i = i + 1);
- if (i == nbcandi)
- {
- double tpslu;
- int j;
- printf ("ENTREZ LE TEMPS REALISE\n" );
- scanf ("%lf", &tpslu);
- for (j = nbarriv - 1; j >= 0 && tpslu < Arrive[j].tps; j = j - 1) // Tri par insertion !
- {
- Arrive[j + 1] = Arrive[j];
- }
- j = j + 1;
- Arrive[j].doss = dossardlu - 1;
- if (tpslu == 0)
- printf ("%-2d %-20s %-2s DISQUALIFIE\n", dossardlu,
- Candi[dossardlu - 1].nom, Candi[dossardlu - 1].nat);
- else
- printf ("%-2d %-20s %-2s %.2f\n", dossardlu,
- Candi[dossardlu - 1].nom, Candi[dossardlu - 1].nat,
- tpslu);
- }
- else
- {
- printf ("DEJA INSCRIT\n" );
- }
- printf
- (" ----------------------------------------------------------------------\n" );
- printf
- ("| CLASSEMENT PROVISOIRE |\n" );
- printf
- (" ----------------------------------------------------------------------\n" );
- printf
- ("| Rang|Numero de dossard| Nom |Nationalite| Temps |\n" );
- printf
- (" ----------------------------------------------------------------------\n" );
- }
- {
- int i;
- for (i = 0; i < nbarriv; i = i + 1)
- printf ("%d %f\n", Arrive[i].doss, Arrive[i].tps);
- }
- printf ("ENTREZ LE NUMERO DE DOSSARD\n" );
- scanf ("%d", &dossardlu);
- }
- while (dossardlu != 0);
- return 0;
- }
|
En tout cas, ce genre d'application mérite plus qu'un bricolage de coin de table. La séquence habituelle
1 - définition (Quoi ?)
2 - conception (Comment ?)
3 - réalisation (codage et tests)
doit plus que jamais être appliquée et respectée, sinon ça va partir en vrille au milieu de la compétition et tu n'auras rien gagné du tout sur un classement fait à la main... Il sera alors trop facile et injuste de dire comme on l'entend souvent "c'est la faute de l'ordinateur"... Message édité par Emmanuel Delahaye le 30-10-2006 à 09:00:35 ---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
|