DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Звіт з лабораторної роботи №3 з дисципліни «Програмування ч.3 Структури і алгоритми»: Структура даних стек

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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних наук та інформаційних технологій
Факультет:
Комп’ютерні науки
Кафедра:
Кафедра програмного забезпечення

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

Рік:
2011
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Програмування
Група:
КІ-24
Коротко про документ

Про що ця робота

У звіті досліджено абстрактну структуру даних стек та реалізовано її на базі масиву мовою C++. Наведено програмний код для моделювання трьох стеків та обробки вхідних послідовностей.

У роботі розглядаються

  • Структури даних
  • Стек
  • Мова програмування C++
  • Динамічна пам'ять
  • Алгоритми обробки даних
  • Об'єктно-орієнтоване програмування

Зміст і розділи

  1. Мета роботи
  2. Завдання
  3. Алгоритм розв’язання задачі
  4. Результати виконання програми
  5. Висновки
  6. Додатки
Для кого:Студенти технічних спеціальностей та викладачі програмування
Викладачі:Викладач

Ключові поняття

стеккласмасивpushpopпереповнення стекуunderflowoverflowалгоритмфункція

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

Міністерство освіти та науки України Національний університет «Львівська політехніка»  ЗВІТ З лабораторної роботи №3 З дисципліни: «Програмування ч.3 Структури і алгоритми» " Структура даних СТЕК" Варіант № 21 Варіант=(8+75)%21+1=21 Мета роботи Вивчення фундаментальної абстрактної структури даних стек. Набуття практичних навичок побудови стека, дослідження динаміки його вмісту та використання стеків для розв'язання прикладних задач. Завдання 2.1. Постановка задачі. Змоделювати стек на базі статичного масиву згідно з завданням. Написати основні операції для роботи зі стеком (push, pop, top, empty, full) і продемонструвати правильність їх виконання. Для цього (якщо в завданні не вказано інший спосіб) в програмі на вході задати послідовність з К (К>10) цілих чисел (числа вводити з клавіатури). Всі додатні числа послідовно заносити в стек, а кожне від'ємне число має вилучати зі стеку один елемент. Виводити на екран динаміку вмісту стеку під час обробки заданої послідовності. Вхідну послідовність чисел задати такою, щоб вона демонструвала роботу основних операцій та генерувала виникнення ситуацій "втрати значимості стеку"(stack underflow) і "переповнення стеку" (stack overflow). Примітка: після реалізації стеку працювати з ним як з абстрактним типом даних, а не як з масивом. 21. Написати програму для послiдовного зберiгання трьох стекiв в масивi з N елементiв (стеки розміщуються в масиві рівномірно один за одним). На вході задаються пари цiлих чисел (i,j), де 1 ( і ( 3 , j ( 0. Число j>0 пари (i,j) додається в i-ий стек; число j<0 пари (i,j) не використовується, але один елемент вилучається зі стеку. Після обробки всієї заданої вхідної послідовності знайти в якому стеку сума всіх парних чисел буде найменьшою. 2.2. Алгоритм розв’язання задачі. Стек реалізований на масиві за допомогою класу під назвою Stack. Він містить поля – масив (власне стек), три змінних, які будуть вказувати на останній елемент масиву (перший елемент, який доданий до стеку) три змінні FULL типу bool для перевірки на заповнення стеку та три змінні типу bool EMPTY для перевірки пустоти стеку. Для перевірки в якому стеку найменша кількість парних чисел використовується допоміжна функція getElements(int), яка приймає номер стеку та повертає суму парних елементів. Після отримання трьох сум знаходимо мінімальне і виводимо на екран номер стеку. 3. Результати виконання програми.  4.Висновки: Ознайомився з фундаментальною абстрактною структурою даних стек. Набув практичних навичок побудови стеку, дослідив динаміку його вмісту та використав стек для розв'язання прикладних задач. 5. Додатки: #include "stdafx.h" #include <iostream> #include <string.h> #include <conio.h> using namespace std; class Stack { int data [60]; // стек int tos1, tos2, tos3; // індекс вершини public: Stack (); // конструктор void push (int, int); // додавання елементу void pop (int); // вилучення int top(int); // перегляд елементу в вершині void show(int); // вивід динаміки стеку int empty (int); // перевірка на елементи в стеку int getSize(int); // отримати розмір стеку bool FULL1, FULL2, FULL3; // логічна змінна переповнення bool EMPTY1, EMPTY2, EMPTY3; int getElements(int); }; Stack::Stack(){ tos1 = 0; tos2 = 20; tos3 = 40; FULL1 = false; FULL2 = false; FULL3 = false; EMPTY1 = true; EMPTY2 = true; EMPTY3 = true; } void Stack::push(int i, int s){ if (EMPTY1 && i == 1) EMPTY1 = false; if (EMPTY2 && i == 2) EMPTY2 = false; if (EMPTY3 && i == 3) EMPTY3 = false; if (FULL1 && i == 1) throw "Steck overflow exception"; if (FULL2 && i == 2) throw "Steck overflow exception"; if (FULL3 && i == 3) throw "Steck overflow exception"; cout << "push: " << s << endl; if (i == 1){ data[tos1] = s; tos1++; if (tos1 == 19) FULL1 = true; } if (i == 2){ data[tos2] = s; tos2++; if (tos2 == 39) FULL2 = true; } if (i == 3){ data[tos3] = s; tos3++; if (tos3 == 59) FULL3 = true; } } int Stack::top(int i){ if (i == 1) return data[tos1-1]; if (i == 2) return data[tos2-1]; if (i == 3) return data[tos3-1]; } void Stack::pop(int i){ if (i == 1){ if (tos1 == 0) throw "Steck underflow exception"; cout << "pop - " << data[tos1-1] << endl; if (tos1 == 19) FULL1 = false; tos1--; if (tos1 == 0) EMPTY1 = true; } if (i == 2){ if (tos2 == 20) throw "Steck underflow exception"; cout << "pop - " << data[tos2-1] << endl; if (tos2 == 39) FULL2 = false; tos2--; if (tos2 == 0) EMPTY2 = true; } if (i == 3){ if (tos3 == 40) throw "Steck underflow exception"; cout << "pop - " << data[tos3-1] << endl; if (tos3 == 59) FULL3 = false; tos3--; if (tos3 == 0) EMPTY3 = true; } } void Stack::show(int i){ if (i == 1){ int i=0; while (i<tos1){ cout << data[i] << " "; i++; } cout << endl; } if (i == 2){ int i=20; while (i<tos2){ cout << data[i] << " "; i++; } cout << endl; } if (i == 3){ int i=40; while (i<tos3){ cout << data[i] << " "; i++; } cout << endl; } } int Stack::getSize(int i){ if (i == 1) return tos1; if (i == 2) return tos2; if (i == 3) return tos3; } int Stack::getElements(int i){ int sum1=0, sum2=0, sum3=0; if (i == 1){ for (int i=0; i<tos1; i++){ if (data[i]%2 == 0) sum1++; } return sum1; } if (i == 2){ for (int i=20; i<tos2; i++){ if (data[i]%2 == 0) sum2++; } return sum2; } if (i == 3){ for (int i=40; i<tos3; i++){ if (data[i]%2 == 0) sum3++; } return sum3; } } int _tmain(int argc, _TCHAR* argv[]) { int i, j; Stack s; while (true){ cout << "enter i, j (j==0 - exit): "; cin >> i >> j; if (j != 0){ try{ if (j>0) s.push(i,j); else s.pop(i); } catch (char* ex){ cout << ex << endl; } } if (j == 0) break; } s.show(1); s.show(2); s.show(3); int s1 = s.getElements(1); int s2 = s.getElements(2); int s3 = s.getElements(3); int min = s1, num = 1; if (s2<s1){ min = s2; num = 2; } if (s3<min){ min = s3; num = 3; } cout << "min sum is in stack number " << num << endl; _getch(); return 0; }
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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