Advertisement
wojtas626

[C] Sedziowie do rozgrywek

Feb 3rd, 2015
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.06 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5.  
  6.  
  7. struct Referee
  8. {
  9.     int ID;
  10.     char* name;
  11.     struct Referee *next;
  12. };
  13.  
  14. struct Match
  15. {
  16.     struct Match *next;
  17.     struct Referee *firstReferee;
  18.     struct Referee *secondReferee;
  19.     struct Referee *thirdReferee;
  20. };
  21.  
  22.  
  23. void loadMatchData(struct Match **matchPointer)
  24. {
  25.     (*matchPointer)->next = NULL;
  26.     (*matchPointer)->firstReferee = NULL;
  27.     (*matchPointer)->secondReferee = NULL;
  28.     (*matchPointer)->thirdReferee = NULL;
  29. }
  30.  
  31. void makeMatchList(struct Match **matchHead, int numberOfTeams)
  32. {
  33.     int i, numberOfMatches;
  34.     struct Match *pointer;
  35.  
  36.     pointer = *matchHead;
  37.     if (numberOfTeams <= 1)
  38.     {
  39.         numberOfMatches = 0;
  40.     }
  41.     else
  42.     {
  43.         numberOfMatches = numberOfTeams * (numberOfTeams - 1) / 2;
  44.     }
  45.  
  46.  
  47.     if (numberOfMatches > 0)
  48.     {
  49.         pointer = (struct Match*)malloc(sizeof(struct Match));
  50.         loadMatchData(&pointer);
  51.         *matchHead = pointer;
  52.  
  53.         for (i = 1; i < numberOfMatches; i++)
  54.         {
  55.             pointer->next = (struct Match*)malloc(sizeof(struct Match));
  56.             pointer = pointer->next;
  57.             loadMatchData(&pointer);
  58.         }
  59.     }
  60. }
  61.  
  62. void loadRefereeData(struct Referee **refereePointer)
  63. {
  64.     char refereeName[80];
  65.     int length;
  66.  
  67.  
  68.     (*refereePointer)->next = NULL;
  69.  
  70.     printf("Wprowadz ID: ");
  71.     scanf("%d", &((*refereePointer)->ID));
  72.  
  73.  
  74.     printf("Wprowadz nazwisko sedziego: ");
  75.     scanf("%s", refereeName);
  76.  
  77.     length = strlen(refereeName);
  78.     (*refereePointer)->name = (char*)malloc(sizeof(char)*(length + 1));
  79.     strcpy((*refereePointer)->name, refereeName);
  80.  
  81.  
  82.     printf("\n");
  83. }
  84.  
  85.  
  86. void addNewReferee(struct Referee **refereeHead)
  87. {
  88.     struct Referee *pointer;
  89.  
  90.     pointer = *refereeHead;
  91.     if (pointer == NULL)
  92.     {
  93.         pointer = (struct Referee*)malloc(sizeof(struct Referee));
  94.         loadRefereeData(&pointer);
  95.         *refereeHead = pointer;
  96.     }
  97.     else
  98.     {
  99.         while(pointer->next != NULL)
  100.         {
  101.             pointer = pointer->next;
  102.         }
  103.         pointer->next = (struct Referee*)malloc(sizeof(struct Referee));
  104.         pointer = pointer->next;
  105.         loadRefereeData(&pointer);
  106.     }
  107. }
  108.  
  109.  
  110. void loadReferees(struct Referee **refereeHead)
  111. {
  112.     int choose;
  113.  
  114.     printf("Wprowadz pierwszego sedziego.\n");
  115.     addNewReferee(refereeHead);
  116.  
  117.  
  118.     printf("1. Wprowadz kolejnego sedziego.\n");
  119.     printf("2. Zakoncz wprowadzanie\n");
  120.     scanf("%d", &choose);
  121.  
  122.     while(choose == 1)
  123.     {
  124.         addNewReferee(refereeHead);
  125.  
  126.         printf("1. Wprowadz kolejnego sedziego.\n");
  127.         printf("2. Zakoncz wprowadzanie\n");
  128.         scanf("%d", &choose);
  129.     }
  130. }
  131.  
  132. void addRefereesToMatches(struct Match **matchHead, struct Referee *refereeHead)
  133. {
  134.     struct Match *matchPointer;
  135.     struct Referee *refereePointer;
  136.  
  137.     matchPointer = *matchHead;
  138.     refereePointer = refereeHead;
  139.  
  140.     while (matchPointer != NULL)
  141.     {
  142.         if (refereePointer != NULL)
  143.         {
  144.             matchPointer->firstReferee = refereePointer;
  145.             refereePointer = refereePointer->next;
  146.         }
  147.         else
  148.         {
  149.             refereePointer = refereeHead;
  150.             matchPointer->firstReferee = refereePointer;
  151.             refereePointer = refereePointer->next;
  152.         }
  153.  
  154.  
  155.         if (refereePointer != NULL)
  156.         {
  157.             matchPointer->secondReferee = refereePointer;
  158.             refereePointer = refereePointer->next;
  159.         }
  160.         else
  161.         {
  162.             refereePointer = refereeHead;
  163.             matchPointer->secondReferee = refereePointer;
  164.             refereePointer = refereePointer->next;
  165.         }
  166.  
  167.  
  168.         if (refereePointer != NULL)
  169.         {
  170.             matchPointer->thirdReferee = refereePointer;
  171.             refereePointer = refereePointer->next;
  172.         }
  173.         else
  174.         {
  175.             refereePointer = refereeHead;
  176.             matchPointer->thirdReferee = refereePointer;
  177.             refereePointer = refereePointer->next;
  178.         }
  179.  
  180.         matchPointer = matchPointer->next;
  181.     }
  182.  
  183. }
  184.  
  185. void showAll(struct Match *matchHead)
  186. {
  187.     int matchNumber;
  188.  
  189.     matchNumber = 1;
  190.     while(matchHead != NULL)
  191.     {
  192.         printf("Mecz numer: %d\n", matchNumber);
  193.         printf("Sedzia 1 - ID: %d, nazwisko: %s\n", matchHead->firstReferee->ID, matchHead->firstReferee->name);
  194.         printf("Sedzia 2 - ID: %d, nazwisko: %s\n", matchHead->secondReferee->ID, matchHead->secondReferee->name);
  195.         printf("Sedzia 3 - ID: %d, nazwisko: %s\n\n", matchHead->thirdReferee->ID, matchHead->thirdReferee->name);
  196.         matchHead = matchHead->next;
  197.         matchNumber++;
  198.     }
  199. }
  200.  
  201. int main()
  202. {
  203.     struct Match *matchHead;
  204.     struct Referee *refereeHead;
  205.     int nd;
  206.  
  207.  
  208.     matchHead = NULL;
  209.     refereeHead = NULL;
  210.  
  211.  
  212.     printf("Podaj liczbe druzyn: ");
  213.     scanf("%d", &nd);
  214.  
  215.  
  216.     makeMatchList(&matchHead, nd);
  217.  
  218.     loadReferees(&refereeHead);
  219.  
  220.     addRefereesToMatches(&matchHead, refereeHead);
  221.  
  222.     showAll(matchHead);
  223.  
  224.     return 0;
  225. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement