Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct Book
- {
- char* author;
- char* name;
- int year;
- };
- void menu()
- {
- printf("\n1: Добавить книгу\n");
- printf("2: Сортировать библиотеку\n");
- printf("3: Выход\n");
- }
- int init_str(char * &s) {
- int i = 0;
- while ((s[i] = getchar()) != '\n') {
- s = (char *)realloc(s, sizeof(char)*(i + 2));
- if (!s)
- exit(-1);
- i++;
- }
- s[i] = '\0';
- return i;
- }
- void add_book(Book* &books, int &count)
- {
- if (books == NULL)
- books = (Book*)malloc(sizeof(Book));
- else
- {
- books = (Book*)realloc(books, count + 1);
- }
- count++;
- printf("Введите название книги\n");
- rewind(stdin);
- books[count - 1].name = (char*)malloc(sizeof(char));
- init_str(books[count - 1].name);
- printf("Введите автора книги\n");
- rewind(stdin);
- books[count - 1].author = (char*)malloc(sizeof(char));
- init_str(books[count - 1].author);
- printf("Введите год\n");
- while (!scanf("%d", &books[count - 1].year) || books[count - 1].year > 2020 || books[count - 1].year < 0)
- rewind(stdin);
- }
- void sort_books(Book* &books, int b, int e)
- {
- int l = b, r = e;
- int piv = books[(l + r) / 2].year;
- while (l <= r)
- {
- while (books[l].year < piv)
- l++;
- while (books[r].year > piv)
- r--;
- if (l <= r)
- {
- Book tmp = books[l];
- books[l] = books[r];
- books[r] = tmp;
- l++;
- r--;
- }
- }
- if (b < r)
- sort_books(books, b, r);
- if (e > l)
- sort_books(books, l, e);
- }
- int main()
- {
- int choice;
- Book* books = NULL;
- int books_c = 0;
- while (true)
- {
- system("CLS");
- menu();
- scanf("%d", &choice);
- switch (choice)
- {
- case 1: add_book(books, books_c);
- break;
- case 2:
- sort_books(books,0,books_c-1);
- break;
- default:
- printf("Неправильный выбор\n");
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement