Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.25 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #pragma warning (disable : 4996)
  5.  
  6. #define MAXTOURS 10 // Nombre maximum de tours
  7. #define MAXEPREUVES 16 // Nombre maximal d'epreuves
  8. #define MAXEQUIPE 32 // Nombre d'equipe maximale
  9. #define NBPATINEURSPAREQUIPES 3 // Nombre de patineurs par equipes
  10. #define NBEQUIPEPAREPREUVES 2 // Nombre d'equipes par epreuves
  11. #define LGMOT 30 // Nombre maximal de mot
  12. #define NUMDOSSARD 101 // Numero dossard
  13. #define NBCARMAX 80 // Nombre maximal de caracteres
  14.  
  15. typedef struct {
  16.     unsigned int nbTours;
  17.     float temps;
  18. } Mesure;
  19.  
  20. typedef struct {
  21.     char nom[LGMOT + 1];
  22.     unsigned int dossard;
  23.     Mesure tableauMesure[MAXTOURS];
  24. } Patineur;
  25.  
  26. typedef struct {
  27.     char pays[LGMOT + 1];
  28.     Patineur data[NBPATINEURSPAREQUIPES];
  29.     float MaxTemps;
  30. } Equipe;
  31.  
  32. typedef struct {
  33.     Equipe tableauEquipe[MAXEQUIPE];
  34. } Competition;
  35.  
  36. void definir_parcours(int* nbTours) {
  37.     scanf("%d", nbTours);
  38. }
  39.  
  40. void definir_nombre_epreuves(int* NbEpreuves) {
  41.     scanf("%d", NbEpreuves);
  42. }
  43.  
  44. void inscrire_equipe(Competition* competition, int* cptEquipesInscrites, int* cptNbPatineurs) {
  45.  
  46.     Equipe equipe;
  47.     char mot[LGMOT + 1];
  48.     scanf("%s", mot);
  49.     strcpy(equipe.pays, mot);
  50.  
  51.     //Dans une equipe, on inscrit les patineurs
  52.     for (int i = 0; i < NBPATINEURSPAREQUIPES; i++) {
  53.         Patineur p;
  54.         char mot[NBCARMAX + 1];
  55.         p.dossard = NUMDOSSARD + *cptNbPatineurs;
  56.         scanf("%s", mot);
  57.         strcpy(p.nom, mot);
  58.         printf("inscription dossard %d\n", p.dossard);
  59.         equipe.data[i] = p;
  60.         (*cptNbPatineurs)++;
  61.     }
  62.  
  63.     //On enregistre l'equipe dans la competition
  64.     competition->tableauEquipe[*cptEquipesInscrites] = equipe;
  65.     (*cptEquipesInscrites)++;
  66. }
  67.  
  68. void afficher_equipes(const Competition* competition, int* cptEquipesInscrites) {
  69.  
  70.     int i = 0;
  71.     for (int i = 0; i < *cptEquipesInscrites; i++) {
  72.         printf("%s ", competition->tableauEquipe[i].pays);
  73.         for (int j = 0; j < NBPATINEURSPAREQUIPES; j++) {
  74.             printf("%s %d ", competition->tableauEquipe[i].data[j].nom,
  75.                 competition->tableauEquipe[i].data[j].dossard);
  76.         }
  77.         printf("\n");
  78.     }
  79. }
  80.  
  81. void detection_fin_competition(const Competition* competition, int* cptEquipesInscrites, int* nbTours, int* cptClassement) {
  82.  
  83.     printf("detection_fin_competition\n");
  84.  
  85.     for (int i = 0; i < (*cptEquipesInscrites); i++) {
  86.         float minTemps = competition->tableauEquipe[i].MaxTemps;
  87.         for (int j = *cptClassement; j < *cptEquipesInscrites; j++) {
  88.             if (minTemps > competition->tableauEquipe[j].MaxTemps) {
  89.                 minTemps = competition->tableauEquipe[j].MaxTemps;
  90.             }
  91.         }
  92.         for (int z = 0; z < *cptEquipesInscrites; z++) {
  93.             if (competition->tableauEquipe[z].MaxTemps == minTemps) {
  94.                 printf("%s %.1f\n", competition->tableauEquipe[z].pays, minTemps);
  95.             }
  96.             (*cptClassement)++;
  97.         }
  98.     }
  99. }
  100.  
  101. void detection_fin_poursuite(Competition* competition, int* cptEquipesInscrites, int* nbTours, int* cptDetection, int* cptClassement, int* nbEpreuves) {
  102.  
  103.     printf("detection_fin_poursuite\n");
  104.  
  105.     int i = (*cptDetection) * NBEQUIPEPAREPREUVES;
  106.     for (i = (*cptDetection) * NBEQUIPEPAREPREUVES; i < (*cptEquipesInscrites); i++) {
  107.         Equipe e = competition->tableauEquipe[i];
  108.         float maxTemps = 0.0;
  109.         for (int j = 0; j < NBPATINEURSPAREQUIPES; j++) {
  110.             Patineur p = e.data[j];
  111.             if (maxTemps < p.tableauMesure[*nbTours - 1].temps) {
  112.                 maxTemps = p.tableauMesure[*nbTours - 1].temps;
  113.             }
  114.             competition->tableauEquipe[i].MaxTemps = maxTemps;
  115.         }
  116.         if ((i + 1) % NBEQUIPEPAREPREUVES == 0) {
  117.             if (competition->tableauEquipe[i].MaxTemps != 0) {
  118.                 if (competition->tableauEquipe[i - 1].MaxTemps < competition->tableauEquipe[i].MaxTemps) {
  119.                     printf("%s %.1f\n", competition->tableauEquipe[i - 1].pays, competition->tableauEquipe[i - 1].MaxTemps);
  120.                     printf("%s %.1f\n", competition->tableauEquipe[i].pays, competition->tableauEquipe[i].MaxTemps);
  121.                 }
  122.                 else {
  123.                     printf("%s %.1f\n", competition->tableauEquipe[i].pays, competition->tableauEquipe[i].MaxTemps);
  124.                     printf("%s %.1f\n", competition->tableauEquipe[i - 1].pays, competition->tableauEquipe[i - 1].MaxTemps);
  125.                 }
  126.             }
  127.         }
  128.     }
  129.     if ((*cptDetection + 1) == (*nbEpreuves)) {
  130.         detection_fin_competition(competition, cptEquipesInscrites, nbTours, cptClassement);
  131.     }
  132. }
  133.  
  134. void enregistrer_temps(Competition* competition, int* cptEquipesInscrites, int* cptMesure, int* nbTours, int* cptDetection, int* cptClassement, int* nbEpreuves) {
  135.  
  136.     int dossard = 0;
  137.     int tour = 0;
  138.     float temps = 0;
  139.     scanf("%d %d %f", &dossard, &tour, &temps);
  140.     int numInscrit = dossard - NUMDOSSARD;
  141.     int indiceEquipe = numInscrit / 3;
  142.     int indicePatineur = (dossard + 1) % 3;
  143.     Mesure m;
  144.     m.nbTours = tour;
  145.     m.temps = temps;
  146.  
  147.     competition->tableauEquipe[indiceEquipe].data[indicePatineur].tableauMesure[m.nbTours - 1] = m;
  148.  
  149.     (*cptMesure)++;
  150.     if ((*cptMesure) % (NBEQUIPEPAREPREUVES * NBPATINEURSPAREQUIPES *(*nbTours)) == 0) {
  151.  
  152.         detection_fin_poursuite(competition, cptEquipesInscrites, nbTours, cptDetection, cptClassement, nbEpreuves);
  153.         (*cptDetection)++;
  154.     }
  155. }
  156.  
  157. void afficher_temps(const Competition* competition) {
  158.  
  159.     int dossard = 0;
  160.     scanf("%d", &dossard);
  161.     int numInscrit = dossard - NUMDOSSARD;
  162.     int indiceEquipe = (numInscrit / 3);
  163.     int indicePatineur = (dossard + 1) % 3;
  164.     Patineur p = competition->tableauEquipe[indiceEquipe].data[indicePatineur];
  165.     Equipe e = competition->tableauEquipe[indiceEquipe];
  166.  
  167.     for (int i = 0; i < (sizeof(p.tableauMesure) / sizeof(Mesure)); i++) {
  168.         if (p.tableauMesure[i].temps > 0.0)
  169.             printf("%s %d %s %.1f\n", e.pays, p.tableauMesure[i].nbTours, p.nom, p.tableauMesure[i].temps);
  170.     }
  171. }
  172.  
  173. void afficher_temps_equipes(const Competition* competition, int* cptEquipesInscrites) {
  174.  
  175.     int nbTours = 0;
  176.     scanf("%d", &nbTours);
  177.  
  178.     for (int i = 0; i < *cptEquipesInscrites; i++) {
  179.         Equipe e = competition->tableauEquipe[i];
  180.         float maxTemps = 0.0;
  181.         for (int j = 0; j < NBPATINEURSPAREQUIPES; j++) {
  182.             Patineur p = e.data[j];
  183.             if (maxTemps < p.tableauMesure[nbTours - 1].temps) {
  184.                 maxTemps = p.tableauMesure[nbTours - 1].temps;
  185.             }
  186.         }
  187.         if (maxTemps > 0.0) {
  188.             printf("%s %.1f\n", e.pays, maxTemps);
  189.         }
  190.         else {
  191.             printf("%s indisponible\n", e.pays);
  192.         }
  193.     }
  194. }
  195.  
  196. int main() {
  197.  
  198.     Competition c;
  199.     int indiceEquipe = 0;
  200.     int indicePatineur = 0;
  201.     int cptEquipesInscrites = 0;
  202.     int cptNbPatineurs = 0;
  203.     int cptMesure = 0;
  204.     int nbTours = 0;
  205.     int nbEpreuves = 0;
  206.     int cptDetection = 0;
  207.     int cptClassement = 0;
  208.  
  209.     char mot[LGMOT + 1];
  210.     while (1) {
  211.         scanf("%s", mot);
  212.         // si la commande est "definir_parcours"
  213.         if (strcmp(mot, "definir_parcours") == 0) {
  214.             definir_parcours(&nbTours);
  215.         }
  216.         if (strcmp(mot, "definir_nombre_epreuves") == 0) {
  217.             definir_nombre_epreuves(&nbEpreuves);
  218.         }
  219.         if (strcmp(mot, "inscrire_equipe") == 0) {
  220.             inscrire_equipe(&c, &cptEquipesInscrites, &cptNbPatineurs);
  221.         }
  222.         if (strcmp(mot, "afficher_equipes") == 0) {
  223.             afficher_equipes(&c, &cptEquipesInscrites);
  224.         }
  225.         if (strcmp(mot, "enregistrer_temps") == 0) {
  226.             enregistrer_temps(&c, &cptEquipesInscrites, &cptMesure, &nbTours, &cptDetection, &cptClassement, &nbEpreuves);
  227.         }
  228.         if (strcmp(mot, "afficher_temps") == 0) {
  229.             afficher_temps(&c);
  230.         }
  231.         if (strcmp(mot, "afficher_temps_equipes") == 0) {
  232.             afficher_temps_equipes(&c, &cptEquipesInscrites);
  233.         }
  234.         if (strcmp(mot, "exit") == 0) {
  235.             exit(0);
  236.         }
  237.     }
  238.     return 0;
  239. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement