DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

Інформація про навчальний заклад

ВУЗ:
Національний технічний університет України Київський політехнічний інститут
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2023
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Алгоритмізація та програмування

Частина тексту файла (без зображень, графіків і формул):

Національний технічний університет України «Київський політехнічний інститут імені Ігоря Сікорського» Кафедра АПЕПС Алгоритмізація та програмування - 2. Процедурне програмування ЗВІТ до лабораторної роботи № 4 «Списки» Варіант № 15 Дата «2» червня 2022 Завдання: 1. Дослідити особливості створення одно- та дво-направлених списків. 2. Вивчити і реалізувати механізми додавання нових записів у список,  пошуку записів у списку за певними полями, видалення записів зі списку та редагування знайдених записів, а також збереження всього списку у файлі та зчитування списку із файлу до пам’яті з відновленням всіх зв’язків. 3. Розробити Блок-схему програмного алгоритму. 4. Оформити ЗВІТ до лабораторної роботи згідно вимог та методичних рекомендацій. Завдання за варіантом: / Результат роботи: 1. Роздрукувати (вивести на екран) попередньо сформовані та підготовлені для запису в файл дані. 2. Роздрукувати (вивести на екран) результат виконання операції читання даних із файлу. 3. ЗВІТ до комп’ютерного практикуму для перевірки додати в Клас. 4. Програмний код (відкритий для редагування) розмістити на сайті Repl.it (посилання виключно через кнопку «+Invite »). Теорія та опис виконання: Однозв'язний список — вид зв’язного списку, який складається з вузлів, кожен з яких містить у собі дані (інформаційну частину) та посилання на наступний вузол. / Двобічно зв'язаний список — вид зв’язного списку, у якому посилання в кожному вузлі вказують на попередній і на подальший вузол у списку. Якщо в списку після останнього елемента йде перший, то такий список називається кільцевим двобічно зв'язаним списком. Тобто, поле prev голови списку вказує на хвіст списку, а поле next хвоста списку вказує на голову списку. По двобічно зв'язаному списку можна пересуватися в будь-якому напрямку — як від початку до кінця, так і навпаки. Для нього простіше проводити видалення і перестановку елементів, оскільки завжди відомі адреси тих елементів списку, вказівник яких спрямований на змінюваний елемент. / Найчастіше вузлом списку вважають структурний тип (структуру), який зберігає у собі певну інформаційну частину (іншу структуру або тип даних) та посилання (вказівник) на наступний вузол у списку. Список має «голову», тобто вказівник на початок списку та інколи має кінець, проте найчастіше його не використовують. Мабуть найголовнішою перевагою списку є набагато зручніша робота із динамікою. Наприклад, при створенні динамічного масиву, коли місце у ньому кінчається приходиться копіювати всі елементи, свторювати новий, більший за розміром, а старий видаляти. У спискам набагато зручніше додавати нові елементи. Але в той же час, його набагато складніше контролювати у порівнянні із звичайним масивом. У самому завданні було створено клас List. У цьому класі реалізовано різні функції для повної реалізації списку. На початку самої програми користувач задає к-сть елементів списку(к-сть кінофільмів які він хоче додати) і заповнює кожен елемент даними. Кожен елемент записується в окремий файл. І далі по запиту користувача виводиться окремий файл, під тим ID, який ввів користувач. Результат виконання: / / Вигляд файлів: / / Висновок: Під час виконання даної лабораторної роботи було досліджено роботу одно- та дво-напрямлених списків. Виконано завдання, вказане відповідно до номеру варіанту(створенно однозв’язний список кінофільмів, та реалізовано функціонал роботи з ним). Дану роботу було реалізовано на мові програмування С++. Силка на Replit: https://replit.com/join/cxptucdcgi-tr-15fundamient Копія коду: // Лабораторна робота №4 // Виконав Фундамент Даніїл ТР-15 // 01.06.2022 #include <iostream> #include <fstream> #include <iostream> using namespace std; template<class T> class Node { public: Node *pNext; T data; Node(T data = T(), Node *pNext = nullptr) { this->data = data; this->pNext = pNext; } }; template<class T> class List { public: ~List(); List(); int GetSize() { return listSize; } void pushBack(T data); T& operator[](const int ind); void removeList(int ind); void printToFile(std::string kinosFile); void getFromFile(std::string kinosFile); private: int listSize; Node<T> *pHead; }; template<class T> List<T>::List() { listSize = 0; pHead = nullptr; } template<class T> void List<T>::pushBack(T data){ if(pHead == nullptr) { pHead = new Node<T>(data); } else { Node<T> *current = this->pHead; while(current->pNext != nullptr) { current = current->pNext; } current->pNext = new Node<T>(data); } listSize++; } template<class T> T & List<T>::operator[](const int ind) { int count = 0; Node<T> *current = this->pHead; while(current != nullptr) { if(count == ind) { return current->data; } current = current->pNext; count++; } } template<class T> void List<T>::removeList(int ind) { if(ind == 0) { Node<T> *first = this->pHead; pHead = first->pNext; delete first; listSize--; } else { Node<T> *prev = this->pHead; for(int i = 0;i < ind - 1;i++) { prev = prev->pNext; } Node<T> *next = prev->pNext; prev->pNext = next->pNext; delete next; listSize--; } } template<class T> List<T>::~List() { for(int i = 0; i < listSize; i++) { removeList(i); } } template<class T> void List<T>::printToFile(std::string kinosFile){ std::ofstream file; file.open(kinosFile); if(listSize != 0) { Node<T> *current = this->pHead; while(current->pNext != nullptr) { file << current->data << std::endl; current = current->pNext; } file << current->data; } file.close(); } template<class T> void List<T>::getFromFile(std::string kinosFile){ std::ifstream file; file.open(kinosFile); if(listSize != 0) { while(listSize != 0) { this->removeList(0); } } std::string input; while(file >> input) { this->pushBack(input); } file.close(); } int main() { int size; cout << "---- К-сть фільмів(елементів списку) ----"; cout << endl; cin >> size; cout << endl; List<string> kinos[size]; string str; for(int i = 0; i < size; i++){ cout << "---- Фільм під ID " << i << " ----"; cout << endl; cout << "Введіть назву фільма: "; cin >> str; kinos[i].pushBack(str); cout << "Введіть прізвище режисера: "; cin >> str; kinos[i].pushBack(str); cout << "Введіть час сеансу: "; cin >> str; kinos[i].pushBack(str); cout << "Введіть тривалість фільму (у хв): "; cin >> str; kinos[i].pushBack(str); cout << "Введіть ціну на квиток: "; cin >> str; kinos[i].pushBack(str); cout << "Введіть к-сть глядачів: "; cin >> str; kinos[i].pushBack(str); cout << endl; } string kinosFile[size]; for(int i = 0; i < size; i++){ kinosFile[i] = to_string(i) + ".txt"; kinos[i].printToFile(kinosFile[i]); } int number = 1; List<string> result; cout << endl; while(true) { switch(number) { case 1 : { cout << "---- Вкажіть ID фільму для зчитування ----"; cout << endl; cin >> number; cout << endl; result.getFromFile(kinosFile[number]); cout << "---- Фільм № " << number << " ----" << endl; cout << "Назва фільму: " << result[0] << endl; cout << "Прізвище режисера: " << result[1] << endl; cout << "Час сеанс: " << result[2] << endl; cout << "Тривалість фільму (у хв): " << result[3] << endl; cout << "Ціна квитка: " << result[4] << endl; cout << "К-сть глядачів: " << result[5] << endl; cout << endl; cout << "---- Оберіть функцію для виконання ----" << endl; cout << "1. Вивести кіно під певним ID" << endl; cout << "2. Вийти із програми" << endl; cin >> number; cout << endl; } break; default : { return 0; } } } }
Антиботан аватар за замовчуванням

03.05.2023 19:07

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!