From 42cb45db3273e233fed3662976cd5566ae8c6162 Mon Sep 17 00:00:00 2001 From: Nikolai Papin Date: Thu, 21 Nov 2024 09:38:09 +0300 Subject: [PATCH] Added my works from 2022 --- .gitignore | 3 + main.cpp | 56 ++++++++ task1.h | 135 ++++++++++++++++++ task10.h | 45 ++++++ task2.h | 34 +++++ task3.h | 38 +++++ task4.h | 69 ++++++++++ task5.h | 37 +++++ task6.h | 175 +++++++++++++++++++++++ task7.h | 396 +++++++++++++++++++++++++++++++++++++++++++++++++++++ task8.h | 114 +++++++++++++++ task9.h | 35 +++++ 12 files changed, 1137 insertions(+) create mode 100644 .gitignore create mode 100644 main.cpp create mode 100644 task1.h create mode 100644 task10.h create mode 100644 task2.h create mode 100644 task3.h create mode 100644 task4.h create mode 100644 task5.h create mode 100644 task6.h create mode 100644 task7.h create mode 100644 task8.h create mode 100644 task9.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1000347 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +a.out +.ccls +.ccls-cache diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..2f66210 --- /dev/null +++ b/main.cpp @@ -0,0 +1,56 @@ +#include +#include "task1.h" +#include "task2.h" +#include "task3.h" +#include "task4.h" +#include "task5.h" +#include "task6.h" +#include "task7.h" +#include "task8.h" +#include "task9.h" +#include "task10.h" +using namespace std; + +int main() +{ + int id; + bgn: + cout << "Task id : "; cin >> id; + + switch (id) { + + case 1: + task1::init(); + break; + case 2: + task2::init(); + break; + case 3: + task3::init(); + break; + case 4: + task4::init(); + break; + case 5: + task5::init(); + break; + case 6: + task6::init(); + break; + case 7: + task7::init(); + break; + case 8: + task8::init(); + break; + case 9: + task9::init(); + break; + case 10: + task10::init(); + break; + } + + cout << endl; + goto bgn; +} \ No newline at end of file diff --git a/task1.h b/task1.h new file mode 100644 index 0000000..b19805d --- /dev/null +++ b/task1.h @@ -0,0 +1,135 @@ +#include +#include +using namespace std; +#pragma once + +namespace task1 { + + int F(int num); // + int a(int* m, int size); + int b(int* m, int size); + int v(int* m, int size); + int g(int* m, int size); + int d(int* m, int size); + int e(int* m, int size); + + int init() + { + cout << "TASK #1" << endl; + setlocale(LC_ALL, "Russian"); + int n; + cout << " : "; cin >> n; + + int* m = new int[n]; + cout << " : " << endl; + for (int i = 0; i < n; i++) { cin >> m[i]; } + + cout << ") " << a(m, n) << endl; + cout << ") " << b(m, n) << endl; + cout << ") " << v(m, n) << endl; + cout << ") " << g(m, n) << endl; + cout << ") " << d(m, n) << endl; + cout << ") " << e(m, n) << endl; + + delete[] m; + return 0; + } + + int F(int num) + { + int n = 1; + for (int i = 1; i <= num; i++) + { + n *= i; + } + return n; + } + + int a(int* m, int size) + { + int n = 0; + for (int i = 0; i < size; i++) + { + int num = m[i]; + if (num % 2 != 0) + { + n++; + } + } + return n; + } + + int b(int* m, int size) + { + int n = 0; + for (int i = 0; i < size; i++) + { + int num = m[i]; + int sqrt_num = sqrt(num); + + if ((sqrt_num * sqrt_num) == num && (num % 2 == 0)) + { + n++; + } + } + return n; + } + + int v(int* m, int size) + { + int n = 0; + for (int i = 0; i < size; i++) + { + int num = m[i]; + if (num % 3 == 0 && num % 5 != 0) + { + n++; + } + } + return n; + } + + int g(int* m, int size) + { + int n = 0; + for (int i = 0; i < size; i++) + { + int k = i + 1; + int num = m[i]; + if ((pow(2, k) < num) && (num < F(k))) + { + n++; + } + } + return n; + } + + int d(int* m, int size) + { + int n = 0; + for (int i = 0; i < size; i++) + { + int k = i + 1; + int num = m[i]; + if (i - 1 >= 0 && i + 1 < size && num < ((m[i - 1] + m[i + 1]) / 2)) + { + n++; + } + } + return n; + } + + int e(int* m, int size) + { + int n = 0; + for (int i = 0; i < size; i++) + { + int num = m[i]; + if (i % 2 == 0 && num % 2 != 0) + { + n++; + } + } + return n; + } +} \ No newline at end of file diff --git a/task10.h b/task10.h new file mode 100644 index 0000000..044668a --- /dev/null +++ b/task10.h @@ -0,0 +1,45 @@ +#include +#include +#include +#include +using namespace std; +#pragma once + +namespace task10 { + + int init() + { + + + cout << "TASK #9" << endl; + setlocale(LC_ALL, "Russian"); + + queue dig1; + + ifstream input("C:\\input2.txt"); + string data; + while (getline(input, data)) + { + if (data.size() == 2) + { + dig2.push(n); + } + } + + while (!dig1.empty()) + { + cout << dig1.front() << endl; + dig1.pop(); + } + while (!dig2.empty()) + { + cout << dig2.front() << endl; + dig2.pop(); + } + + cout << ", ))" << endl; + + return 0; + } + +} diff --git a/task2.h b/task2.h new file mode 100644 index 0000000..1e0f41f --- /dev/null +++ b/task2.h @@ -0,0 +1,34 @@ +#include +using namespace std; +#pragma once + +namespace task2 { + + int init() { + + cout << "TASK #2" << endl; + + setlocale(LC_ALL, "Russian"); + int n; cout << " : "; cin >> n; + int amt = 0, sum = 0; + int* m = new int[n]; + + cout << " :" << endl; + + for (int i = 0; i < n; i++) { + + int num; cin >> num; + m[i] = num; // , + if (num % 5 == 0 && num % 7 != 0) + { + amt++; + sum += num; + } + } + + cout << "-: " << amt << endl << ": " << sum; + + delete[] m; + return 0; + } +} diff --git a/task3.h b/task3.h new file mode 100644 index 0000000..01891ae --- /dev/null +++ b/task3.h @@ -0,0 +1,38 @@ +#include +using namespace std; + +#pragma once + +namespace task3 { + + int init() + { + + cout << "TASK #3" << endl; + + setlocale(LC_ALL, "Russian"); + int n; cout << " : "; cin >> n; + int amt = 0; + int* m = new int[n]; + cout << " : " << endl; + for (int i = 0; i < n; i++) + { + cin>>m[i]; + } + + int max = 0, cur = 0; + for (int i = 0; i < n; i++) + { + cur = (cur + 1) * (m[i] == 0); + max = cur > max ? cur : max; + } + + cout << " " << max * (max!=1) << " \n"; + cout << ") " << (max >= 2) << endl; + cout << ") " << (max >= 3) << endl; + + delete[] m; + return 0; + } + +} \ No newline at end of file diff --git a/task4.h b/task4.h new file mode 100644 index 0000000..21d09c7 --- /dev/null +++ b/task4.h @@ -0,0 +1,69 @@ +#include +#pragma once + +namespace task4 { + + struct Node + { + public: + int key; + Node* next; + }; + + Node* newNode(int key); // + Node* list(int size, bool print); // + int sum(Node* head); // + + int init() + { + setlocale(LC_ALL, "Russian"); + int n; cout << " : "; cin >> n; + + Node* array = list(n, true); + cout << ": " << sum(array); + + return 0; + } + + Node* newNode(int key) + { + Node* node = new Node; + node->key = key; + node->next = nullptr; + return node; + } + + Node* list(int size, bool print) + { + Node* head = newNode(1); + Node* last = newNode(2); + head->next = last; + + for (int i = 0; i < size; i++) + { + Node* node = newNode(rand()); + + if (print) { cout << node->key << " "; } + + last->next = node; + last = node; + } + if (print) { cout << endl; } + + return head; + } + + int sum(Node* head) + { + int sum = 0; + Node* ptr = head; + + while (ptr) + { + sum = sum + ptr->key; + ptr = ptr->next; + } + + return sum; + } +} \ No newline at end of file diff --git a/task5.h b/task5.h new file mode 100644 index 0000000..9a53b97 --- /dev/null +++ b/task5.h @@ -0,0 +1,37 @@ +#include +using namespace std; +#pragma once + +namespace task5 { + + int init() + { + cout << "TASK #5" << endl; + setlocale(LC_ALL, "Russian"); + + int n; cout << " : "; cin >> n; + double* m = new double[n]; + cout << " :" << endl; + for (int i = 0; i < n; i++) + { + cin >> m[i]; + } + + double min = m[1]; + for (int i = 1; i < n; i++) + { + double num = m[i]; + if (num > min) + { + cout << " . " << endl; + delete[] m; + return 0; + } + min = num; + } + + cout << " . " << endl; + delete[] m; + return 0; + } +} diff --git a/task6.h b/task6.h new file mode 100644 index 0000000..9b0aa06 --- /dev/null +++ b/task6.h @@ -0,0 +1,175 @@ +#include +using namespace std; +#pragma once + +namespace task6 { + + struct Node + { + public: + int key; + Node* next; + }; + + Node* newNode(int key); //создает узел + Node* rand_list(int size); //создает список + void print_list(Node* head); //пишет элементы списка + + bool is_list_empty(Node* head); //пишет, что список пуст, если подкинуть nullptr + void push_back(Node* head, int key); //поместить в конец + void push_forward(Node*& head, int key); //поместить в начало + void squeeze_in(Node* head, int pos, int key); //"всунуть" после элемента + + int list_size(Node* head); //узнать размер списка + void behead(Node*& head); //получить список без первого элемента + + int init() + { + setlocale(LC_ALL, "Russian"); + int n; cout << "Введите размер: "; cin >> n; + Node* lst = rand_list(n); + + if (is_list_empty(lst)) + { + cout << "Список является пустым." << endl; + return 0; + } + cout << "Список содержит элементы: " << endl; + print_list(lst); + + cout << "\n\nДобавим элемент 11111 в начало:" << endl; + push_forward(lst, 11111); + print_list(lst); + + cout << "\n\nДобавим элемент 22222 в конец:" << endl; + push_back(lst, 22222); + print_list(lst); + + cout << "\n\nДобавим элемент 33333 где-то в середине:" << endl; + squeeze_in(lst, n/2+1, 33333); + print_list(lst); + + cout << "\n\nВсего элементов сейчас: " << list_size(lst) << endl; + + cout << "\n\nПолучим список без первого элемента с помощью функции обезглавливания:" << endl; + behead(lst); + print_list(lst); + + cout << "\n\nДа это жоско"; + + return 0; + } + + Node* newNode(int key) + { + Node* node = new Node; + node->key = key; + node->next = nullptr; + return node; + } + + Node* rand_list(int size) + { + Node* head = newNode(rand()); + Node* last = newNode(rand()); + head->next = last; + + for (int i = 0; i < size-2; i++) + { + Node* node = newNode(rand()); + + last->next = node; + last = node; + } + + return head; + } + + void print_list(Node* head) + { + Node* ptr = head; + while (ptr) + { + cout << ptr->key << " -> "; + ptr = ptr->next; + } + cout << "nullptr" << endl; + } + + bool is_list_empty(Node* head) + { + bool empty = true; + + while (head) + { + empty = false; + break; + } + + return empty; + } + + void push_back(Node* head, int key) + { + Node* last = nullptr; + Node* ptr = head; + while (ptr) + { + last = ptr; + ptr = ptr->next; + } + ptr = newNode(key); + last->next = ptr; + } + + void push_forward(Node*& head, int key) + { + Node* node = newNode(key); + node->next = head; + head = node; + } + + void squeeze_in(Node* head, int pos, int key) + { + Node* node_left=head; + Node* node_right; + Node* node = newNode(key); + + for (int i = 0; i < pos-1; i++) + { + node_left = node_left->next; + } + node_right = node_left->next->next; + node_left->next = node; + node->next = node_right; + } + + int list_size(Node* head) + { + int num=0; + Node* ptr = head; + while (ptr) + { + ptr = ptr->next; + num++; + } + return num; + } + + void behead(Node*& head) + { + /* + ⢿⣿⣿⣿⣭⠹⠛⠛⠛⢿⣿⣿⣿⣿⡿⣿⠷⠶⠿⢻⣿⣛⣦⣙⠻⣿ + ⣿⣿⢿⣿⠏⠀⠀⡀⠀⠈⣿⢛⣽⣜⠯⣽⠀⠀⠀⠀⠙⢿⣷⣻⡀⢿ + ⠐⠛⢿⣾⣖⣤⡀⠀⢀⡰⠿⢷⣶⣿⡇⠻⣖⣒⣒⣶⣿⣿⡟⢙⣶⣮ + ⣤⠀⠀⠛⠻⠗⠿⠿⣯⡆⣿⣛⣿⡿⠿⠮⡶⠼⠟⠙⠊⠁⠀⠸⢣⣿ + ⣿⣷⡀⠀⠀⠀⠀⠠⠭⣍⡉⢩⣥⡤⠥⣤⡶⣒⠀⠀⠀⠀⠀⢰⣿⣿ + ⣿⣿⡽⡄⠀⠀⠀⢿⣿⣆⣿⣧⢡⣾⣿⡇⣾⣿⡇⠀⠀⠀⠀⣿⡇⠃ + ⣿⣿⣷⣻⣆⢄⠀⠈⠉⠉⠛⠛⠘⠛⠛⠛⠙⠛⠁⠀⠀⠀⠀⣿⡇⢸ + ⢞⣿⣿⣷⣝⣷⣝⠦⡀⠀⠀⠀⠀⠀⠀⠀⡀⢀⠀⠀⠀⠀⠀⠛⣿⠈ + ⣦⡑⠛⣟⢿⡿⣿⣷⣝⢧⡀⠀⠀⣶⣸⡇⣿⢸⣧⠀⠀⠀⠀⢸⡿⡆ + ⣿⣿⣷⣮⣭⣍⡛⠻⢿⣷⠿⣶⣶⣬⣬⣁⣉⣀⣀⣁⡤⢴⣺⣾⣽⡇ + */ + head = head->next; + } +} \ No newline at end of file diff --git a/task7.h b/task7.h new file mode 100644 index 0000000..45b3ec1 --- /dev/null +++ b/task7.h @@ -0,0 +1,396 @@ +#include +#include +#include +using namespace std; +#pragma once + +namespace task7 { + + struct Node + { + public: + int key; + Node* next; + }; + + Node* newNode(int key); //создает узел + Node* rand_list(int size); //создает список + void print_list(Node* head); //пишет элементы списка + + bool is_list_empty(Node* head); //пишет, что список пуст, если подкинуть nullptr + void push_back(Node* head, int key); //поместить в конец + void push_forward(Node*& head, int key); //поместить в начало + void squeeze_in(Node* head, int pos, int key); //"всунуть" после элемента + void behead(Node*& head); + int list_size(Node* head); //узнать размер списка + + bool equal(Node* head1, Node* head2); //сравнивает списки + bool all_in(Node* head1, Node* head2); //проверяет, есть ли все элементы первого списка в другом + bool dupes_present(Node* head); //проверка на дубликаты + void head_to_end(Node*& head); //перемещает первый элемент в конец + void end_to_head(Node*& head); //перемещает последний элемент в начало + void merge(Node* head1, Node* head2); //переносит элементы списка 2 в конец списка 1 + void reversed(Node*& head); //возвращает элементы массива в обрат. порядке + bool in_list(Node* head, int key); //ДЛЯ ЗАДАНИЯ ПОД БУКВОЙ З). Определяет, есть ли элемент в списке + void remove_dupes(Node*& head); //not implemented + + int init() + { + cout << "TASK #7" << endl; + setlocale(LC_ALL, "Russian"); + + cout << "В конце задания 6 ничего не предвещало беды\n"; + + int n1; cout << "Введите размер списка 1: "; cin >> n1; + Node* lst1 = newNode(0); + cout << "Введите числа:" << endl; + for (int i = 0; i < n1; i++) + { + int num; cin >> num; + push_back(lst1, num); + } + + int n2; cout << "Введите размер списка 2: "; cin >> n2; + Node* lst2 = newNode(0); + cout << "Введите числа:" << endl; + for (int i = 0; i < n2; i++) + { + int num; cin >> num; + push_back(lst2, num); + } + behead(lst1); + behead(lst2); + cout << "\n\nИмеем два списка: \n"; + print_list(lst1); + print_list(lst2); + cout << "\n\n"; + + if (equal(lst1, lst2)) + { + cout << "Списки совпадают"; + } + else + { + cout << "Списки не равны"; + } + cout << "\n\n"; + + if (all_in(lst1, lst2)) + { + cout << "Все элементы первого списка есть во втором"; + } + else + { + cout << "Первый список имеет элементы, которых нет во втором"; + } + cout << "\n\n"; + + if (dupes_present(lst1)) + { + cout << "В списке есть дубликаты"; + } + else + { + cout << "В списке нет дубликатов"; + } + cout << "\n\n"; + print_list(lst1); + cout << "Перенесем первый элемент списка 1 в конец : \n"; + head_to_end(lst1); + print_list(lst1); + + cout << "\n\n"; + print_list(lst2); + cout << "Перенесем последний элемент списка 2 в начало : \n"; + end_to_head(lst2); + print_list(lst2); + + cout << "\n\n"; + print_list(lst1); + print_list(lst2); + cout << "Соединим два списка: \n"; + merge(lst1, lst2); + print_list(lst1); + cout << "Развернем список: \n"; + reversed(lst1); + print_list(lst1); + cout << "Удалим дубликаты из списка: \n"; + remove_dupes(lst1); + print_list(lst1); + + return 0; + } + + Node* newNode(int key) + { + Node* node = new Node; + node->key = key; + node->next = nullptr; + return node; + } + + Node* rand_list(int size) + { + Node* head = newNode(rand()); + Node* last = newNode(rand()); + head->next = last; + + for (int i = 0; i < size; i++) + { + Node* node = newNode(i); + + last->next = node; + last = node; + } + + return head->next->next; + } + + void print_list(Node* head) + { + Node* ptr = head; + while (ptr) + { + cout << ptr->key << " -> "; + ptr = ptr->next; + } + cout << "nullptr" << endl; + } + + bool is_list_empty(Node* head) + { + bool empty = true; + + while (head) + { + empty = false; + break; + } + + return empty; + } + + void push_back(Node* head, int key) + { + Node* ptr = head; + while (ptr->next) + { + ptr = ptr->next; + } + ptr->next = newNode(key); + } + + void push_forward(Node*& head, int key) + { + Node* node = newNode(key); + node->next = head; + head = node; + } + + void squeeze_in(Node* head, int pos, int key) + { + Node* node_left = head; + Node* node_right; + Node* node = newNode(key); + + for (int i = 0; i < pos - 1; i++) + { + node_left = node_left->next; + } + node_right = node_left->next->next; + node_left->next = node; + node->next = node_right; + } + + void behead(Node*& head) + { + /* + ⢿⣿⣿⣿⣭⠹⠛⠛⠛⢿⣿⣿⣿⣿⡿⣿⠷⠶⠿⢻⣿⣛⣦⣙⠻⣿ + ⣿⣿⢿⣿⠏⠀⠀⡀⠀⠈⣿⢛⣽⣜⠯⣽⠀⠀⠀⠀⠙⢿⣷⣻⡀⢿ + ⠐⠛⢿⣾⣖⣤⡀⠀⢀⡰⠿⢷⣶⣿⡇⠻⣖⣒⣒⣶⣿⣿⡟⢙⣶⣮ + ⣤⠀⠀⠛⠻⠗⠿⠿⣯⡆⣿⣛⣿⡿⠿⠮⡶⠼⠟⠙⠊⠁⠀⠸⢣⣿ + ⣿⣷⡀⠀⠀⠀⠀⠠⠭⣍⡉⢩⣥⡤⠥⣤⡶⣒⠀⠀⠀⠀⠀⢰⣿⣿ + ⣿⣿⡽⡄⠀⠀⠀⢿⣿⣆⣿⣧⢡⣾⣿⡇⣾⣿⡇⠀⠀⠀⠀⣿⡇⠃ + ⣿⣿⣷⣻⣆⢄⠀⠈⠉⠉⠛⠛⠘⠛⠛⠛⠙⠛⠁⠀⠀⠀⠀⣿⡇⢸ + ⢞⣿⣿⣷⣝⣷⣝⠦⡀⠀⠀⠀⠀⠀⠀⠀⡀⢀⠀⠀⠀⠀⠀⠛⣿⠈ + ⣦⡑⠛⣟⢿⡿⣿⣷⣝⢧⡀⠀⠀⣶⣸⡇⣿⢸⣧⠀⠀⠀⠀⢸⡿⡆ + ⣿⣿⣷⣮⣭⣍⡛⠻⢿⣷⠿⣶⣶⣬⣬⣁⣉⣀⣀⣁⡤⢴⣺⣾⣽⡇ + */ + Node* _head = head; + head=head->next; + delete _head; + + } + + int list_size(Node* head) + { + int num = 0; + Node* ptr = head; + while (ptr) + { + ptr = ptr->next; + num++; + } + return num; + } + + bool equal(Node* head1, Node* head2) + { + if (list_size(head1) != list_size(head2)) + { + return false; + } + Node* ptr1 = head1; Node* ptr2 = head2; + while (ptr1) + { + if (ptr1->key != ptr2->key) + { + return false; + } + ptr1 = ptr1->next; + ptr2 = ptr2->next; + } + return true; + } + + bool all_in(Node* head1, Node* head2) + { + Node* ptr1 = head1; + while (ptr1) + { + bool is_in = false; + Node* ptr2 = head2; + + while (ptr2) + { + if (ptr1->key == ptr2->key) + { + is_in = true; + break; + } + + ptr2 = ptr2->next; + } + + if (!is_in) + { + return false; + } + + ptr1 = ptr1->next; + } + return true; + } + + bool dupes_present(Node* head) + { + Node* ptr1 = head; + while (ptr1) + { + int count = -1; + Node* ptr2 = head; + while (ptr2) + { + if (ptr1->key == ptr2->key) + { + count++; + if (count > 1) + { + return true; + } + } + ptr2 = ptr2->next; + } + ptr1 = ptr1->next; + } + return false; + } + + void head_to_end(Node*& head) + { + Node* _head = head; + Node* ptr = head; + while (ptr->next) + { + ptr = ptr->next; + } + ptr->next = _head; + head = head->next; + _head->next = NULL; + + + } + + void end_to_head(Node*& head) + { + Node* ptr = head; + while (ptr->next->next) + { + ptr = ptr->next; + } + ptr->next->next = head; + head = ptr->next; + ptr->next = NULL; + } + + void merge(Node* head1, Node* head2) + { + Node* ptr = head1; + while (ptr->next) + { + ptr = ptr->next; + } + + Node* ptr2 = head2; + while (ptr2) + { + ptr->next = ptr2; + ptr = ptr2; + ptr2 = ptr2->next; + } + } + + void reversed(Node*& head) + { + Node* rev = nullptr; + Node* ptr = head; + while (ptr) + { + push_forward(rev, ptr->key); + ptr = ptr->next; + } + + head = rev; + } + + bool in_list(Node* head, int key) + { + Node* ptr = head; + while (ptr) + { + if (ptr->key == key) + { + return true; + } + ptr = ptr->next; + } + return false; + } + + void remove_dupes(Node*& head) + { + Node* buffer = newNode(head->key); + Node* result = newNode(head->key); + + while (head) + { + if (!in_list(buffer, head->key)) + { + push_back(result, head->key); + push_back(buffer, head->key); + } + head = head->next; + } + head = result; + } +} \ No newline at end of file diff --git a/task8.h b/task8.h new file mode 100644 index 0000000..55bfd32 --- /dev/null +++ b/task8.h @@ -0,0 +1,114 @@ +#include + +using namespace std; +#pragma once + +namespace task8 { + + struct Node + { + public: + int key; + Node* next; + }; + + Node* newNode(int key); // + Node* rand_list(int size); // + void print_list(Node* head); // + void cycle(Node*&head, int offset); // + + int init() + { + int n; cout << "Enter size: "; cin >> n; + Node* lst = rand_list(n); + print_list(lst); + int offset; cout << "Enter offset: "; cin >> offset; + + cycle(lst, offset); + print_list(lst); + + return 0; + } + + Node* newNode(int key) + { + Node* node = new Node; + node->key = key; + node->next = nullptr; + return node; + } + + Node* rand_list(int size) + { + Node* head = newNode(rand()); + Node* last = newNode(rand()); + head->next = last; + + for (int i = 0; i < size; i++) + { + Node* node = newNode(i+1); + + last->next = node; + last = node; + } + + return head->next->next; + } + + void push_back(Node* head, int key) + { + Node* last = nullptr; + Node* ptr = head; + while (ptr) + { + last = ptr; + ptr = ptr->next; + } + ptr = newNode(key); + last->next = ptr; + } + + Node* push_forward(Node* head, int key) + { + Node* node = newNode(key); + node->next = head; + return node; + } + + void print_list(Node* head) + { + Node* ptr = head; + while (ptr) + { + cout << ptr->key << " -> "; + ptr = ptr->next; + } + cout << "nullptr" << endl; + } + + void cycle(Node*& head, int offset) + { + int amt = 0; + Node* ptr = head; + while (ptr->next) + { + ptr = ptr->next; + amt++; + } + ptr->next = head; + Node* prv = ptr; + + if (offset < 0) + { + offset = abs(amt+1 + offset); + } + + for (int i = 0; i < offset; i++) + { + prv = prv->next; + head = head->next; + } + prv->next = nullptr; + + } +} \ No newline at end of file diff --git a/task9.h b/task9.h new file mode 100644 index 0000000..94a098f --- /dev/null +++ b/task9.h @@ -0,0 +1,35 @@ +#include +#include +#include +#include +using namespace std; +#pragma once + +namespace task9 { + + int init() + { + cout << "TASK #9" << endl; + setlocale(LC_ALL, "Russian"); + + stack chars; + ifstream input("C:\\input.txt"); + string data; + while (getline(input, data)) + { + for (char& c : data) + { + chars.push(c); + } + while (!chars.empty()) + { + cout << chars.top(); + chars.pop(); + } + cout << endl; + } + + return 0; + } + +} \ No newline at end of file