Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #pragma warning (disable : 4996)
- #define MAXTOURS 10 // Nombre maximum de tours
- #define MAXEPREUVES 16 // Nombre maximal d'epreuves
- #define MAXEQUIPE 32 // Nombre d'equipe maximale
- #define NBPATINEURSPAREQUIPES 3 // Nombre de patineurs par equipes
- #define NBEQUIPEPAREPREUVES 2 // Nombre d'equipes par epreuves
- #define LGMOT 30 // Nombre maximal de mot
- #define NUMDOSSARD 101 // Numero dossard
- #define NBCARMAX 80 // Nombre maximal de caracteres
- typedef struct {
- unsigned int nbTours;
- float temps;
- } Mesure;
- typedef struct {
- char nom[LGMOT + 1];
- unsigned int dossard;
- Mesure tableauMesure[MAXTOURS];
- } Patineur;
- typedef struct {
- char pays[LGMOT + 1];
- Patineur data[NBPATINEURSPAREQUIPES];
- float MaxTemps;
- } Equipe;
- typedef struct {
- Equipe tableauEquipe[MAXEQUIPE];
- } Competition;
- void definir_parcours(int* nbTours) {
- scanf("%d", nbTours);
- }
- void definir_nombre_epreuves(int* NbEpreuves) {
- scanf("%d", NbEpreuves);
- }
- void inscrire_equipe(Competition* competition, int* cptEquipesInscrites, int* cptNbPatineurs) {
- Equipe equipe;
- char mot[LGMOT + 1];
- scanf("%s", mot);
- strcpy(equipe.pays, mot);
- //Dans une equipe, on inscrit les patineurs
- for (int i = 0; i < NBPATINEURSPAREQUIPES; i++) {
- Patineur p;
- char mot[NBCARMAX + 1];
- p.dossard = NUMDOSSARD + *cptNbPatineurs;
- scanf("%s", mot);
- strcpy(p.nom, mot);
- printf("inscription dossard %d\n", p.dossard);
- equipe.data[i] = p;
- (*cptNbPatineurs)++;
- }
- //On enregistre l'equipe dans la competition
- competition->tableauEquipe[*cptEquipesInscrites] = equipe;
- (*cptEquipesInscrites)++;
- }
- void afficher_equipes(const Competition* competition, int* cptEquipesInscrites) {
- int i = 0;
- for (int i = 0; i < *cptEquipesInscrites; i++) {
- printf("%s ", competition->tableauEquipe[i].pays);
- for (int j = 0; j < NBPATINEURSPAREQUIPES; j++) {
- printf("%s %d ", competition->tableauEquipe[i].data[j].nom,
- competition->tableauEquipe[i].data[j].dossard);
- }
- printf("\n");
- }
- }
- void detection_fin_competition(const Competition* competition, int* cptEquipesInscrites, int* nbTours, int* cptClassement) {
- printf("detection_fin_competition\n");
- for (int i = 0; i < (*cptEquipesInscrites); i++) {
- float minTemps = competition->tableauEquipe[i].MaxTemps;
- for (int j = *cptClassement; j < *cptEquipesInscrites; j++) {
- if (minTemps > competition->tableauEquipe[j].MaxTemps) {
- minTemps = competition->tableauEquipe[j].MaxTemps;
- }
- }
- for (int z = 0; z < *cptEquipesInscrites; z++) {
- if (competition->tableauEquipe[z].MaxTemps == minTemps) {
- printf("%s %.1f\n", competition->tableauEquipe[z].pays, minTemps);
- }
- (*cptClassement)++;
- }
- }
- }
- void detection_fin_poursuite(Competition* competition, int* cptEquipesInscrites, int* nbTours, int* cptDetection, int* cptClassement, int* nbEpreuves) {
- printf("detection_fin_poursuite\n");
- int i = (*cptDetection) * NBEQUIPEPAREPREUVES;
- for (i = (*cptDetection) * NBEQUIPEPAREPREUVES; i < (*cptEquipesInscrites); i++) {
- Equipe e = competition->tableauEquipe[i];
- float maxTemps = 0.0;
- for (int j = 0; j < NBPATINEURSPAREQUIPES; j++) {
- Patineur p = e.data[j];
- if (maxTemps < p.tableauMesure[*nbTours - 1].temps) {
- maxTemps = p.tableauMesure[*nbTours - 1].temps;
- }
- competition->tableauEquipe[i].MaxTemps = maxTemps;
- }
- if ((i + 1) % NBEQUIPEPAREPREUVES == 0) {
- if (competition->tableauEquipe[i].MaxTemps != 0) {
- if (competition->tableauEquipe[i - 1].MaxTemps < competition->tableauEquipe[i].MaxTemps) {
- printf("%s %.1f\n", competition->tableauEquipe[i - 1].pays, competition->tableauEquipe[i - 1].MaxTemps);
- printf("%s %.1f\n", competition->tableauEquipe[i].pays, competition->tableauEquipe[i].MaxTemps);
- }
- else {
- printf("%s %.1f\n", competition->tableauEquipe[i].pays, competition->tableauEquipe[i].MaxTemps);
- printf("%s %.1f\n", competition->tableauEquipe[i - 1].pays, competition->tableauEquipe[i - 1].MaxTemps);
- }
- }
- }
- }
- if ((*cptDetection + 1) == (*nbEpreuves)) {
- detection_fin_competition(competition, cptEquipesInscrites, nbTours, cptClassement);
- }
- }
- void enregistrer_temps(Competition* competition, int* cptEquipesInscrites, int* cptMesure, int* nbTours, int* cptDetection, int* cptClassement, int* nbEpreuves) {
- int dossard = 0;
- int tour = 0;
- float temps = 0;
- scanf("%d %d %f", &dossard, &tour, &temps);
- int numInscrit = dossard - NUMDOSSARD;
- int indiceEquipe = numInscrit / 3;
- int indicePatineur = (dossard + 1) % 3;
- Mesure m;
- m.nbTours = tour;
- m.temps = temps;
- competition->tableauEquipe[indiceEquipe].data[indicePatineur].tableauMesure[m.nbTours - 1] = m;
- (*cptMesure)++;
- if ((*cptMesure) % (NBEQUIPEPAREPREUVES * NBPATINEURSPAREQUIPES *(*nbTours)) == 0) {
- detection_fin_poursuite(competition, cptEquipesInscrites, nbTours, cptDetection, cptClassement, nbEpreuves);
- (*cptDetection)++;
- }
- }
- void afficher_temps(const Competition* competition) {
- int dossard = 0;
- scanf("%d", &dossard);
- int numInscrit = dossard - NUMDOSSARD;
- int indiceEquipe = (numInscrit / 3);
- int indicePatineur = (dossard + 1) % 3;
- Patineur p = competition->tableauEquipe[indiceEquipe].data[indicePatineur];
- Equipe e = competition->tableauEquipe[indiceEquipe];
- for (int i = 0; i < (sizeof(p.tableauMesure) / sizeof(Mesure)); i++) {
- if (p.tableauMesure[i].temps > 0.0)
- printf("%s %d %s %.1f\n", e.pays, p.tableauMesure[i].nbTours, p.nom, p.tableauMesure[i].temps);
- }
- }
- void afficher_temps_equipes(const Competition* competition, int* cptEquipesInscrites) {
- int nbTours = 0;
- scanf("%d", &nbTours);
- for (int i = 0; i < *cptEquipesInscrites; i++) {
- Equipe e = competition->tableauEquipe[i];
- float maxTemps = 0.0;
- for (int j = 0; j < NBPATINEURSPAREQUIPES; j++) {
- Patineur p = e.data[j];
- if (maxTemps < p.tableauMesure[nbTours - 1].temps) {
- maxTemps = p.tableauMesure[nbTours - 1].temps;
- }
- }
- if (maxTemps > 0.0) {
- printf("%s %.1f\n", e.pays, maxTemps);
- }
- else {
- printf("%s indisponible\n", e.pays);
- }
- }
- }
- int main() {
- Competition c;
- int indiceEquipe = 0;
- int indicePatineur = 0;
- int cptEquipesInscrites = 0;
- int cptNbPatineurs = 0;
- int cptMesure = 0;
- int nbTours = 0;
- int nbEpreuves = 0;
- int cptDetection = 0;
- int cptClassement = 0;
- char mot[LGMOT + 1];
- while (1) {
- scanf("%s", mot);
- // si la commande est "definir_parcours"
- if (strcmp(mot, "definir_parcours") == 0) {
- definir_parcours(&nbTours);
- }
- if (strcmp(mot, "definir_nombre_epreuves") == 0) {
- definir_nombre_epreuves(&nbEpreuves);
- }
- if (strcmp(mot, "inscrire_equipe") == 0) {
- inscrire_equipe(&c, &cptEquipesInscrites, &cptNbPatineurs);
- }
- if (strcmp(mot, "afficher_equipes") == 0) {
- afficher_equipes(&c, &cptEquipesInscrites);
- }
- if (strcmp(mot, "enregistrer_temps") == 0) {
- enregistrer_temps(&c, &cptEquipesInscrites, &cptMesure, &nbTours, &cptDetection, &cptClassement, &nbEpreuves);
- }
- if (strcmp(mot, "afficher_temps") == 0) {
- afficher_temps(&c);
- }
- if (strcmp(mot, "afficher_temps_equipes") == 0) {
- afficher_temps_equipes(&c, &cptEquipesInscrites);
- }
- if (strcmp(mot, "exit") == 0) {
- exit(0);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement