Advertisement
m4ly

Lab3 | Dynamiczna tablica | Struktura | malloc

Mar 23rd, 2013
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.04 KB | None | 0 0
  1. /*
  2. Author: Dawid Mocek
  3. Stwórz strukturę przechowującą informacje o studencie (np. imię, nazwisko, numer).
  4. Następnie powolaj dynamiczną tablicę która będzie przechowywała 2 elementy.
  5. Następnie wpisuj wartości do tej tablicy, a gdy zabraknie miejsca na kolejny wpis powiększ tablicę o jeden element
  6. (poprzez realloc albo malloc nowwej tablicy i ręczne kopiowanie).
  7. Następnie stwórz drugą tablicę wskaźników na te struktury i wypełnij ją tak,
  8. by kolejne elementy wskazywały na struktury z pierwszej tabeli posortowane zgodnie z numerem
  9. */
  10. #include "stdio.h"
  11. #include "stdlib.h"
  12. #include "string.h"
  13.  
  14.  
  15. struct person
  16. {
  17.     char name[255];
  18.     char surname[255];
  19.     unsigned int number;
  20. }osoba;
  21.  
  22.  
  23. int compare_values (const void *a, const void *b) {
  24.   struct person **ia = (struct person **) a;
  25.   struct person **ib = (struct person **) b;
  26.  
  27.   return ((*ia)->number - (*ib)->number);
  28. }
  29.  
  30.  
  31. int main()
  32. {
  33.    
  34.  
  35. size_t size = 2;
  36.  
  37. int choice = 0;
  38. int cnt = 0;
  39.  
  40. person *tabPerson;
  41. person **tabPersonTmp;
  42. tabPerson = (person* )malloc(size * sizeof(person));
  43.  
  44. person *osoba;
  45.    
  46. while(cnt < 3)
  47. {
  48.     if(cnt == size )
  49.     {
  50.        
  51.         person *ptr = (person *)realloc(tabPerson, (size + 1)   * sizeof(person));
  52.         if(!ptr)
  53.         {
  54.            free(tabPerson);
  55.            perror("realloc");
  56.            return 1;
  57.         }
  58.         tabPerson = ptr;
  59.     }
  60.     osoba = (person *)malloc(sizeof(person));
  61.  
  62.     printf("Name: ");
  63.     scanf("%s", osoba->name);
  64.     printf("Surname: ");
  65.     scanf("%s", osoba->surname);
  66.     printf("Num: ");
  67.     scanf("%d", &osoba->number);
  68.    
  69.     tabPerson[cnt] = *osoba;
  70.     cnt++;
  71.  
  72. }
  73.  
  74. size  += cnt;
  75.          
  76. tabPersonTmp = (person**)malloc(size * sizeof(person *));
  77.  
  78. // kopiowanie
  79. for(int c = 0; c < size; c++)
  80. {
  81.     tabPersonTmp[c] = &tabPerson[c];
  82. }
  83.  
  84. // sortowanie
  85. qsort(tabPersonTmp, size, sizeof(person *), compare_values);
  86.  
  87. //print
  88. for(int c = 0; c < size; c++)
  89. {
  90.     printf("%s\t%s\t%i\n", tabPersonTmp[c]->name, tabPersonTmp[c]->surname,  tabPersonTmp[c]->number);
  91. }
  92.  
  93. // free
  94. free(tabPerson);
  95. free(tabPersonTmp);
  96.  
  97. getchar();
  98. return 0;
  99.  
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement