[projet C] besoin d'aide

Fermé
nanouschka573 Messages postés 2 Date d'inscription lundi 31 mars 2008 Statut Membre Dernière intervention 16 avril 2008 - 3 avril 2008 à 22:35
 Lise - 14 août 2008 à 13:13
Bonjour,

Voici mon projet de C à réaliser:

« On souhaite gérer à l’aide d’un programme C les résultats de compétitions sportives variées. Nous considérons 2 types de compétitions :
- Celles où les sportifs accomplissent une épreuve en un temps donné (Vainqueur = + petit temps)
- Celles où les sportifs obtiennent un score (Vainqueur = + haut score)

Objectifs :
· Au fur et à mesure que les résultats des compétiteurs sont connus, enregistrer pour chacun son numéro (dossard), son nom, et son temps/score. Le nombre de participants varie d’une épreuve à l’autre. Il n’est ni prévisible, ni limité. Certains participants à une compétition peuvent abandonner en cours de route. Il faut néanmoins les prendre en compte.
· Après l’épreuve, il faut lister les participants du meilleur au moins bon en leur attribuant un rang (1er, 2ème,3ème,…) tout en gérant les ex aequo. Il faut également lister à part les participants qui ont abandonné.
· En cas d’erreur de saisie ou de déclassement d’un participant, les temps/scores devront pouvoir être modifiés à posteriori et le classement automatiquement recalculé.

Indications :
· Mettre en œuvre une liste doublement chaînée
· Lors de la saisie des résultats, s’assurer que la liste demeure toujours triée dans l’ordre croissant de temps/score, quel que soit le type de compétition (temps ou score)
· A l’affichage du classement, parcourir la liste du début à la fin pour les compétitions à temps et dans l’ordre inverse pour les compétitions à score. »


Pour commencer, j'ai les idées suivantes :

Le but de l'exercice est de gérer les résultats d'un certain nombre de sportifs dans certaines compétitions. Il ya deux types de compétitions (Score et Temps) !
Chaque sportif est identifié par un NumDossard, en plus de son nom et surtout son résultat (Temps ou Score).

Personnellement, je pense que l’on doit procéder de la manière suivante :

- Il faut enregistrer, et pour chaque sportif, son numéro, nom et son résultat (temps ou score), et toute autre information, dans une liste chaînée

- Faire une boucle for et pr chaque sportif, comparer ses résultats avec les autres. Si son score/temps est le meilleur, il demeure le premier sur ses concurrents.

Pour comparer les sportifs, une boucle for , et a l'intérieur il y aura un If (pour comparer les temps ou les scores), par exemple

Pour les gens qui n'ont pas fini (abandons), il faut les mettre à part.

Apres, et pour chaque enregistrement, dans les 2 cas (sportifs qui ont des résultats+qui se sont retirés), dans une liste à part. A la fin, on aura deux liste : une pour les sportifs qui ont fait des résultats, et une pour les autres

Apres, à la saisie d'un nouveau sportif, il faut le comparer avec tt les autres avec la même méthode, et selon son résultat, il sera classé ! Les autres derrière lui changeront de classement automatiquement.

Remarque Importante : les gens qui ont fait des compétitions "a temps" seront traités à part par rapport les autres "score". Pour cela, il faut faire une boucle IF au début de programme

IF (score)

------ Traitement correspondant

Else // Pr Temps normalement

------ Traitement correspondant


Pouvez-vous me dire si je suis sur la bonne voie et peut-être me donner quelques pistes supplémentaires, ne m'y connaissant pas du tout en langage C, j'avoue que je suis complètement perdue...

Merci d'avance
A voir également:

3 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
4 avril 2008 à 08:49
Salut.
Il me semble que tu es sur la bonne voi, tu semble avoir compris la logique du programme (l'algorithme).
Il faut donc que tu utilise une liste chainé, une struct. Pour commencer, je te conseil de bien réfléchir à la forme que tu va donner à cette struct.
Dans ton énoncé, il est préciser qu'il faut que tu classes des la saisi tes concurrents, je verrai bien une liste chainé, avec un precedetn et un suivent.
Ensuite, il faudra faire les fonctions de tri etc. Par contre, traité à par les abandon ??? ça veux dire quoi exactement ? C'est une partie pas clair de l'énoncer.
0
nanouschka573 Messages postés 2 Date d'inscription lundi 31 mars 2008 Statut Membre Dernière intervention 16 avril 2008
16 avril 2008 à 12:21
En fait il faut traiter à part les abandons ça veut dire qu'au début il faut dire si le joueur a abandonné ou pas je pense...
Mais mon gros problème n'est pas tant l'algorithme que la transposition en C...
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
16 avril 2008 à 14:54
pour commencer, défini une structure de données. Par exemple :
struct competiteur
{
         char * nom,*prenom;
         int dossart,temps,score;
         competiteur *precedent,*suivant;
}

ensuite, tu fais une fonction qui permet de saisir un nouveau compétieur en lui attribuant tout les champ, puis une fonction le classant dans la liste des autres compétiteur. La suite tu verra plus tard quand au moins ça fonctionnera.
u crée une liste de compétiteurs
competiteur sportifs;

tu rentre les champs du premier à saisir, puis tu créé un competiteur temporaire que tu classera après, du genre :
competiteur *tmp;
while(/* tant que tu as des compétiteur à rentrer */){
tmp=malloc(sizeof(competiteur));
remplit(tmp);
met(tmp,sportif);/* mettre le nouveau compétiteurdans la liste en fonction de son score */
}
0
Bonjour,

Je dois rendre le même genre de projet dans 15 jours et je crains de ne pas avoir fini. As-tu réussi? Peux-tu m'aider à ton tour stp?
0