Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Author: Dawid Mocek
- Stwórz strukturę przechowującą informacje o studencie (np. imię, nazwisko, numer).
- Następnie powolaj dynamiczną tablicę która będzie przechowywała 2 elementy.
- Następnie wpisuj wartości do tej tablicy, a gdy zabraknie miejsca na kolejny wpis powiększ tablicę o jeden element
- (poprzez realloc albo malloc nowwej tablicy i ręczne kopiowanie).
- Następnie stwórz drugą tablicę wskaźników na te struktury i wypełnij ją tak,
- by kolejne elementy wskazywały na struktury z pierwszej tabeli posortowane zgodnie z numerem
- */
- #include "stdio.h"
- #include "stdlib.h"
- #include "string.h"
- struct person
- {
- char name[255];
- char surname[255];
- unsigned int number;
- }osoba;
- int compare_values (const void *a, const void *b) {
- struct person **ia = (struct person **) a;
- struct person **ib = (struct person **) b;
- return ((*ia)->number - (*ib)->number);
- }
- int main()
- {
- size_t size = 2;
- int choice = 0;
- int cnt = 0;
- person *tabPerson;
- person **tabPersonTmp;
- tabPerson = (person* )malloc(size * sizeof(person));
- person *osoba;
- while(cnt < 3)
- {
- if(cnt == size )
- {
- person *ptr = (person *)realloc(tabPerson, (size + 1) * sizeof(person));
- if(!ptr)
- {
- free(tabPerson);
- perror("realloc");
- return 1;
- }
- tabPerson = ptr;
- }
- osoba = (person *)malloc(sizeof(person));
- printf("Name: ");
- scanf("%s", osoba->name);
- printf("Surname: ");
- scanf("%s", osoba->surname);
- printf("Num: ");
- scanf("%d", &osoba->number);
- tabPerson[cnt] = *osoba;
- cnt++;
- }
- size += cnt;
- tabPersonTmp = (person**)malloc(size * sizeof(person *));
- // kopiowanie
- for(int c = 0; c < size; c++)
- {
- tabPersonTmp[c] = &tabPerson[c];
- }
- // sortowanie
- qsort(tabPersonTmp, size, sizeof(person *), compare_values);
- //print
- for(int c = 0; c < size; c++)
- {
- printf("%s\t%s\t%i\n", tabPersonTmp[c]->name, tabPersonTmp[c]->surname, tabPersonTmp[c]->number);
- }
- // free
- free(tabPerson);
- free(tabPersonTmp);
- getchar();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement