Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <iostream>
- #include <algorithm>
- #include <cmath>
- #include <string>
- #include <set>
- #include <map>
- #include <iomanip>
- using namespace std;
- #define re return
- #define pb push_back
- #define eb emplace_back
- #define all(x) (x).begin(), (x).end()
- #define fi first
- #define se second
- #define sqrt(x) sqrt(abs(x))
- #define pi (3.14159265358979323846264338327950288419716939937510)
- #define unique(v) v.resize(unique(all(v)) - v.begin())
- #define bipbup ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0)
- typedef vector<int> vi;
- typedef vector<vi> vvi;
- typedef pair<int, int> ii;
- typedef vector<ii> vii;
- typedef vector<string> vs;
- typedef double D;
- typedef long double ld;
- typedef long long ll;
- typedef pair<ll, ll> pll;
- typedef vector<ll> vll;
- typedef unsigned long long ull;
- //Задача: на основе односвязного списка книг вывести все книги, в названии которых больше трёх слов, далее
- //вывести все книги определённого автора в порядке возрастания даты выхода книги
- struct element
- {
- string fio;
- string title;
- int date, cc = 1;
- element* next;
- };
- element* beg, * help, * last;
- element* beg1, * last1, * help1;
- int main()
- {
- setlocale(LC_ALL, "Russian");
- cout << "Введите количество книг: ";
- int n;
- cin >> n;
- string trash;
- getline(cin, trash);
- int mx_fio(0), mx_title(0);
- cout << "Введите автора, название и год выпуска книг (каждый пункт через enter):\n1)\n";
- beg = new element;
- getline(cin, beg->fio);
- getline(cin, beg->title);
- cin >> beg->date;
- bool f(0);
- int sz = beg->title.size();
- for (int j = 0; j < sz; ++j)
- if (beg->title[j] == ' ')
- beg->cc++;
- if (beg->cc > 3)
- f = 1;
- int szf(beg->fio.size()), szt(beg->title.size());
- mx_fio = max(mx_fio, szf);
- mx_title = max(mx_title, szt);
- last = beg;
- for (int i = 1; i < n; ++i)
- {
- help = new element;
- cout << i + 1 << ")\n";
- getline(cin, trash);
- getline(cin, help->fio);
- getline(cin, help->title);
- cin >> help->date;
- int sz = help->title.size();
- for (int j = 0; j < sz; ++j)
- if (help->title[j] == ' ')
- help->cc++;
- if (help->cc > 3)
- f = 1;
- szf = help->fio.size();
- szt = help->title.size();
- mx_fio = max(mx_fio, szf);
- mx_title = max(mx_title, szt);
- last->next = help;
- last = help;
- }
- last->next = NULL;
- cout << '\n';
- last = beg;
- help = beg;
- int k = 1;
- while (help)
- {
- cout << k++ << ") " << setw(mx_fio) << help->fio << ' ';
- cout << setw(mx_title) << help->title << ' ';
- cout << help->date << '\n';
- help = help->next;
- }
- cout << "\n\n";
- if (f)
- {
- cout << "В этой(их) книге(ах) содержится более 3 слов:\n";
- help = beg;
- k = 1;
- while (help)
- {
- if (help->cc > 3)
- {
- cout << k++ << ") " << setw(mx_fio) << help->fio << ' ';
- cout << setw(mx_title) << help->title << '\n';
- }
- help = help->next;
- }
- }
- else
- cout << "Названия книг не содержат более 3 слов\n";
- cout << "Вы хотите вывести все книги определённого автора в порядке возрастания годов издания? (+/-): ";
- char ans;
- cin >> ans;
- while (ans == '+')
- {
- string f;
- cin >> f;
- help = beg;
- k = 0;
- while (help)
- {
- sz = help->fio.size();
- if (help->fio.find(f) < sz)
- {
- if (k == 0)
- {
- beg1 = new element;
- beg1->fio = help->fio;
- beg1->title = help->title;
- beg1->date = help->date;
- last1 = beg1;
- }
- else
- {
- help1 = new element;
- help1->fio = help->fio;
- help1->title = help->title;
- help1->date = help->date;
- last1->next = help1;
- last1 = help1;
- }
- k++;
- }
- help = help->next;
- }
- if(k == 0)
- {
- cout << "Такого автора не существует в введёном Вами списке!\n";
- goto ask;
- }
- if(k == 1)
- {
- cout << k++ << ") " << setw(mx_fio) << beg1->fio << ' ';
- cout << setw(mx_title) << beg1->title << ' ';
- cout << beg1->date << '\n';
- goto ask;
- }
- help1->next = NULL;
- help1 = beg1;
- for (int j = 0; j < k - 1; ++j)
- {
- int cnt = 0;
- help1 = beg1;
- for (int cnt = 0; cnt < k - j - 1; ++cnt)
- {
- if (help1->date > help1->next->date)
- {
- swap(help1->date, help1->next->date);
- swap(help1->cc, help1->next->cc);
- swap(help1->title, help1->next->title);
- }
- help1 = help1->next;
- }
- }
- k = 1;
- help1 = beg1;
- while (help1)
- {
- cout << k++ << ") " << setw(mx_fio) << help1->fio << ' ';
- cout << setw(mx_title) << help1->title << ' ';
- cout << help1->date << '\n';
- help1 = help1->next;
- }
- ask:
- cout << "Вы хотите вывести все книги определённого автора в порядке возрастания годов издания ещё раз? (+/-): ";
- cin >> ans;
- }
- re 0;
- }
- /**
- 10
- Gogol N.V.
- Vechera na hytore bliz Dikanki
- 1832
- Tolstoi L.N.
- Voina i Mir
- 1805
- Griboedov A.S.
- Gore ot Yma
- 1822
- Gogol N.V.
- Revizor
- 1836
- Glykhovskii D.
- Metro 2033
- 2009
- Jules Verne
- 80 dnei vokryg sveta
- 1872
- Gogol N.V.
- Mertive Dyshi
- 1842
- Dostoevskii F.M.
- Prestyplenie i Nakazanie
- 1866
- Tyrgenev A.S.
- Otci i Deti
- 1861
- Gogol N.V.
- Peterburgskie povesti
- 1835
- +
- Gogol
- -
- **/
- /**
- 8
- Tolstoi L.N.
- Voina i Mir
- 1805
- Griboedov A.S.
- Gore ot Yma
- 1822
- Gogol N.V.
- Revizor
- 1836
- Glykhovskii D.
- Metro 2033
- 2009
- Gogol N.V.
- Mertive Dyshi
- 1842
- Dostoevskii F.M.
- Prestyplenie i Nakazanie
- 1866
- Tyrgenev A.S.
- Otci i Deti
- 1861
- Gogol N.V.
- Peterburgskie povesti
- 1835
- **/
Advertisement
Add Comment
Please, Sign In to add comment