Advertisement
wojtas626

[C] Dane o osobach i dzieciach

Jan 16th, 2015
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.74 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define SIZE 4
  6.  
  7.  
  8. struct person
  9. {
  10.     char *name;
  11.     int yearOfBirth;
  12.     int numberOfChildren;
  13.     struct child *firstChild;
  14. };
  15.  
  16.  
  17. struct child
  18. {
  19.     struct person data;
  20.     struct child *next;
  21. };
  22.  
  23.  
  24. void loadChildData(struct person *personPointer)
  25. {
  26.     int i;
  27.     struct child *childPointer;
  28.  
  29.     childPointer = personPointer->firstChild;
  30.  
  31.     for(i = 0; i < personPointer->numberOfChildren; i++)
  32.     {
  33.         if (i == 0)
  34.         {
  35.             childPointer = (struct child*)malloc(sizeof(struct child));
  36.             childPointer->data.name = (char*)malloc(sizeof(char)*(strlen(personPointer->name) + 1));
  37.             strcpy((childPointer->data.name), personPointer->name);
  38.             childPointer->data.numberOfChildren = 0;
  39.             childPointer->data.firstChild = NULL;
  40.             printf("Wprowadz date urodzenia %i dziecka dla: %s: ", (i+1), personPointer->name);
  41.             scanf("%i", &(childPointer->data.yearOfBirth));
  42.             childPointer->next = NULL;
  43.  
  44.             personPointer->firstChild = childPointer;
  45.         }
  46.         else
  47.         {
  48.             childPointer->next = (struct child*)malloc(sizeof(struct child));
  49.             childPointer = childPointer->next;
  50.             childPointer->data.name = (char*)malloc(sizeof(char)*(strlen(personPointer->name) + 1));
  51.             strcpy((childPointer->data.name), personPointer->name);
  52.             childPointer->data.numberOfChildren = 0;
  53.             childPointer->data.firstChild = NULL;
  54.             printf("Wprowadz date urodzenia %i dziecka dla: %s: ", (i+1), personPointer->name);
  55.             scanf("%i", &(childPointer->data.yearOfBirth));
  56.             childPointer->next = NULL;
  57.         }
  58.     }
  59.     printf("%p", childPointer);
  60. }
  61.  
  62.  
  63. void showPerson(struct person *personPointer)
  64. {
  65.     struct child *childPointer;
  66.  
  67.     printf("Nazwisko: %s\n", personPointer->name);
  68.     printf("Rok urodzenia: %i\n", personPointer->yearOfBirth);
  69.     printf("Liczba dzieci: %i\n\n", personPointer->numberOfChildren);
  70.  
  71.     childPointer = personPointer->firstChild;
  72.  
  73.     if (childPointer != NULL)
  74.     {
  75.         showPerson(&(childPointer->data));
  76.  
  77.         while(childPointer->next != NULL)
  78.         {
  79.             childPointer = childPointer->next;
  80.             showPerson(&(childPointer->data));
  81.         }
  82.     }
  83. }
  84.  
  85.  
  86. void showAll(struct person personArray[], int size)
  87. {
  88.     int i;
  89.  
  90.     for(i = 0; i < size; i++)
  91.     {
  92.         showPerson(&personArray[i]);
  93.     }
  94. }
  95.  
  96.  
  97. char *findChildrenStatus(struct person personArray[], int size, char **maxChildrenParent)
  98. {
  99.     int i;
  100.     int noChildren;
  101.     int maxChildren;
  102.     char *noChildrenAnswer;
  103.  
  104.     noChildren = 0;
  105.     if (size >= 1)
  106.     {
  107.         maxChildren = personArray[0].numberOfChildren;
  108.         *maxChildrenParent = personArray[0].name;
  109.         if (personArray[0].numberOfChildren == 0)
  110.         {
  111.             noChildren = 1;
  112.         }
  113.     }
  114.  
  115.     for(i = 1; i < size; i++)
  116.     {
  117.         if(personArray[i].numberOfChildren > maxChildren)
  118.         {
  119.             maxChildren = personArray[i].numberOfChildren;
  120.             *maxChildrenParent = personArray[i].name;
  121.         }
  122.         if (personArray[i].numberOfChildren == 0)
  123.         {
  124.             noChildren = 1;
  125.         }
  126.     }
  127.  
  128.     noChildrenAnswer = (char*)malloc(sizeof(char)*3);
  129.     if (noChildren == 1)
  130.     {
  131.         noChildrenAnswer = "tak";
  132.     }
  133.     else
  134.     {
  135.         noChildrenAnswer = "nie";
  136.     }
  137.     return noChildrenAnswer;
  138. }
  139.  
  140.  
  141. int main()
  142. {
  143.     struct person personArray[SIZE];
  144.     char *parent;
  145.     int i;
  146.  
  147.     personArray[0].name = (char*)malloc(sizeof(char)*3);
  148.     personArray[0].name = "Ala";
  149.     personArray[0].yearOfBirth = 1990;
  150.     personArray[0].numberOfChildren = 0;
  151.     personArray[0].firstChild = NULL;
  152.  
  153.     personArray[1].name = (char*)malloc(sizeof(char)*7);
  154.     personArray[1].name = "Andrzej";
  155.     personArray[1].yearOfBirth = 1991;
  156.     personArray[1].numberOfChildren = 1;
  157.     personArray[1].firstChild = NULL;
  158.  
  159.     personArray[2].name = (char*)malloc(sizeof(char)*6);
  160.     personArray[2].name = "Marcin";
  161.     personArray[2].yearOfBirth = 1992;
  162.     personArray[2].numberOfChildren = 2;
  163.     personArray[2].firstChild = NULL;
  164.  
  165.     personArray[3].name = (char*)malloc(sizeof(char)*5);
  166.     personArray[3].name = "Troll";
  167.     personArray[3].yearOfBirth = 1993;
  168.     personArray[3].numberOfChildren = 3;
  169.     personArray[3].firstChild = NULL;
  170.  
  171.     for(i = 0; i < SIZE; i++)
  172.     {
  173.         loadChildData(&personArray[i]);
  174.     }
  175.  
  176.     showAll(personArray, SIZE);
  177.  
  178.     printf("Czy jest ktos bezdzietny: %s\n", findChildrenStatus(personArray, SIZE, &parent));
  179.     printf("Nazwisko osoby majacej najwiecej dzieci: %s\n", parent);
  180.  
  181.     return 0;
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement