Advertisement
Guest User

Untitled

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