Немодифікуючі алгоритми в послідовних контейнерах
Ознайомлення з контейнерами бібліотеки STL, освоєння немодифікуючі алгоритми. Лістинг програми. Використання алгоритма for each. Знаходження першого елемента в другій половині послідовності. Заповнення елементів масива. Основні характеристики комп’ютера.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | украинский |
Дата добавления | 24.03.2021 |
Размер файла | 902,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ДЕРЖАВНИЙ ВИЩИЙ НАВЧАЛЬНИЙ ЗАКЛАД «УЖГОРОДСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ»
ІНЖЕНЕРНО-ТЕХНІЧНИЙ ФАКУЛЬТЕТ КАФЕДРА КОМП'ЮТЕРНИХ СИСТЕМ ТА МЕРЕЖ
Лабораторна робота №1
з дисципліни «Системне програмне забезпечення»
«Немодифікуючі алгоритми в послідовних контейнерах»
студента
Рикавця Едуарда Васильовича
Ужгород - 2021 р.
Етап 1
Вивчив теорію, проробив і осмислив приклади 1-16 з лекції та даної лабораторної роботи.
Етап 2
1. Створити масив a з n=10 елементів, та масив b з m=10 елементів. Заповнити масив випадковими числами у діапазоні [0;10].
Рис.1. Завдання 1
2. Переписати масив у контейнер 1.
Рис.2. Завдання 2
3. Виконати задачі варіанту над контейнером 1.
Задача
Елементи першої половини послідовності зменшити на 2, а парні елементи другої половини послідовності збільшити на 2. Використати алгоритм for_each.
Лістинг програми:
Рис.3. Лістинг програми №6
Рис.4. Тестування часу №6
Задача №7
Перевірити чи присутній у першій п'ятірці послідовності елемент рівний 4. Використати алгоритм find.
Лістинг програми:
Рис.5. Лістинг програми №7
Рис.6. Тестування часу №7
Рис.7. Тестування часу №7
4. Переписати контейнер 1 у контейнер 2.
Рис.8. Завдання 4.
5. Виконати задачі варіанту над контейнером 2.
Задача
Знайти номер початку останнього входження другої половини послідовності 2 в першу половину послідовності 1. Використати алгоритм find_end.
Лістинг програми:
Рис.9. Лістинг програми №8
Рис.10. Тестування часу №8.
Задача
Знайти перший елемент в другій половині послідовності v, який співпадає із одним з елементів другої половини послідовності t. Використати алгоритм find_first_of.
Лістинг програми:
Рис.11. Лістинг програми №9
Рис.12. Тестування №9
6. Переписати контейнер 2 у контейнер 3.
Рис.13.
7. Виконати задачі варіанту над контейнером 3.
Задача
Знайти перший елемент в другій половині послідовності, що задовольняє умову 5<a<9. Використати алгоритм find_if.
Лістинг програми:
Рис.14. Лістинг програми №10
Рис.15. Тестування №10
Задача
Знайти номер початку першого входження першої половини послідовності y, у другу половину послідовності x. Використати алгоритм search.
Лістинг програми:
Рис.16. Лістинг програми №11
Рис.17. Тестування часу №11
Етап 3
Дослідницька частина роботи. Дослідити час виконання задач варіанту для n,m = 10,10; 100,10; 1000,10; 10000,100; 100000,100; 1000000,1000; 10000000,1000. Заповнити таблицю з результатами дослідження.
Діапазон функції rand() |
Час виконання задач варіанту у сек. |
||||||||
Контейнер 1 |
Контейнер 2 |
Контейнер 3 |
|||||||
n |
m |
6 |
7 |
8 |
9 |
10 |
11 |
||
10 |
10 |
[0;10] |
0.0001802 |
0.0002846 |
0.0010414 |
0.0004143 |
0.0002455 |
0.0003539 |
|
100 |
10 |
[0;10] |
0.0001699 |
0.000198 |
0.0003504 |
0.0004884 |
0.0002249 |
0.0002436 |
|
1000 |
10 |
[0;10] |
0.0001673 |
0.00015 |
0.0011681 |
0.0009209 |
0.0002091 |
0.0018318 |
|
10000 |
100 |
[0;100] |
0.0045757 |
0.0002044 |
0.0131264 |
0.0069402 |
0.0001907 |
0.0012408 |
|
100000 |
100 |
[0;100] |
0.0425807 |
0.0002002 |
0.089782 |
0.057441 |
0.0002186 |
0.0107561 |
|
1000000 |
1000 |
[0;1000] |
0.418706 |
0.0001781 |
0.871678 |
0.506226 |
0.0001979 |
0.103881 |
|
10000000 |
1000 |
[0;1000] |
4.9924 |
0.0001544 |
10.6923 |
6.00428 |
0.0002514 |
1.19082 |
|
Висновок: під час роботи даної лабораторної роботи я знайомився з послідовними контейнерами бібліотеки STL, освоїв немодифікуючі алгоритми, та зіткнувся з такою проблемою:
Дивного виведення часу в Задачі №6, вона виникає при заповнені елементів масива
n, m = (10,10); (100,10); (1000, 100).
Рис.18. Виведення часу
Причиною такого виводу часу скоріше за все являється швидке опрацювання даної програми.
З іншими задачами проблем не виникло, все було зроблено чітко за інструкціями, весь матеріал було переглянуто та виконано за шаблонами прикладів задач наведених в теорії.
бібліотека контейнер алгоритм лістинг
Основні характеристики комп'ютера:
Лістинг програми:
#include <iostream>
#include <vector>
#include <algorithm>
#include <list>
#include <deque>
#include <omp.h>
using namespace std;
const long int n = 10;
const int m = 10;
int maxD = 10;
int a[n];
int b[m];
int main()
{
//Етап 2. Завдання 1.
for (int i = 0; i < n; i++) a[i] = rand() % maxD;
for (int i = 0; i < m; i++) b[i] = rand() % maxD;
//Етап 2. Завдання 2. Переписати масив в deque
deque<int> dq1;
deque<int> dq2;
for (int i = 0; i < n; i++) dq1.push_back(a[i]);
for (int i = 0; i < m; i++) dq2.push_back(b[i]);
// Етап 2. Завдання 3.
// 6 Задача
cout << endl << "Task 6" << endl;
//dq1 = { 2, 3, 4, 2, 5, 4, 7, 1, 6, 5 };
double t1 = omp_get_wtime();
for_each(dq1.begin(), dq1.begin() + dq1.size() / 2, [](int& a) { a -= 2; });
for_each(dq1.begin() + dq1.size() / 2, dq1.end(), [](int& a) { if (a % 2 == 0) a *= 2; });
double t2 = omp_get_wtime();
//for_each(dq1.begin(), dq1.end(), [](int& a) { cout << a << " "; });
cout << endl << "Time: " << t2 - t1 << endl;
// 7 задача
cout << endl << "Task 7" << endl;
t1 = omp_get_wtime();
//dq1 = { 3, 5, 4, 13, 2, 14, 7, 10, 6, 5 };
//dq1 = { 3, 15, 14, 13, 2, 14, 7, 10, 6, 5, 1 };
deque <int>::iterator idq = find(dq1.begin(), dq1.begin() + 5, 4);
if (idq == dq1.begin() + 5) cout << '-' << endl;
else cout << '+' << endl;
t2 = omp_get_wtime();
cout << "Time: " << t2 - t1 << endl;
// Етап 2. Завдання 4.
list<int> l1;
list<int> l2;
for (int i = 0; i < dq1.size(); i++) {
l1.push_back(dq1[i]);
}
for (int i = 0; i < dq2.size(); i++) {
l2.push_back(dq2[i]);
}
// Етап 2. Завдання 5.
// 8 задача
cout << endl << "Task 8" << endl;
t1 = omp_get_wtime();
//l1 = { 2, 1, 4, 2, 1, 5, 7, 1, 2, 1, 5, 2, 1, 0 };
//l2 = { 4, 3, 2, 1 };
list<int>::iterator il1 = l1.begin();
list<int>::iterator il2 = l2.begin();
std::advance(il1, distance(l1.begin(), l1.end()) / 2);
std::advance(il2, distance(l2.begin(), l2.end()) / 2);
list<int>::iterator r = find_end(l1.begin(), il1, il2, l2.end());
if (r == il1)
cout << '-' << endl;
else cout << '+' << std::distance(l1.begin(), r) << endl;
t2 = omp_get_wtime();
cout << "Time: " << t2 - t1 << endl;
// 9 Задача
cout << endl << "Task 9" << endl;
t1 = omp_get_wtime();
//l1 = { 2, 1, 4, 2, 1, 5, 7, 1, 2, 1, 5, 2, 1, 0 };
//l2 = { 4, 3, 2, 1 };
list<int>::iterator iil1 = l1.begin();
list<int>::iterator iil2 = l2.begin();
std::advance(iil1, distance(l1.begin(), l1.end()) / 2);
std::advance(iil2, distance(l2.begin(), l2.end()) / 2);
list<int>::iterator ffo = find_first_of(iil1, l1.end(), iil2, l2.end());
if (ffo == l1.end())
cout << '-' << endl;
else cout << '+' << *ffo << endl;
t2 = omp_get_wtime();
cout << "Time: " << t2 - t1 << endl;
//Етап 2. Завдання 6
vector<int> v1;
vector<int> v2;
list<int>::iterator ilv1 = l1.begin();
list<int>::iterator ilv2 = l2.begin();
for (ilv1; ilv1 != l1.end(); ilv1++) v1.push_back(*ilv1);
for (ilv2; ilv2 != l2.end(); ilv2++) v2.push_back(*ilv2);
//Етап 2. Завдання 7
//Задача 10
cout << endl << "Task 10" << endl;
t1 = omp_get_wtime();
//v1 = { 2, 2, 4, 2, 2, 4, 7, 1, 2, 5, 5, 1, 8, 0, 7, 1 };
vector<int>::iterator vi = find_if(v1.begin() + v1.size() / 2, v1.end(), [](int a) { return a > 5 && a < 9; });
if (vi == v1.end())
cout << "Not found!" << endl;
else
cout << *vi << endl;
t2 = omp_get_wtime();
cout << "Time: " << t2 - t1 << endl;
//Задача 11
cout << endl << "Task 11" << endl;
t1 = omp_get_wtime();
//v1 = { 2, 1, 4, 2, 1, 5, 7, 1, 2, 1, 5, 2, 1, 0 };
//v2 = { 2, 1, 4, 3 };
auto iiv = search(v1.begin() + v1.size() / 2, v1.end(), v2.begin(), v2.begin() + v2.size() / 2);
if (iiv != v1.end())
cout << '+' << (iiv - v1.begin()) << endl;
else
cout << '-' << endl;
t2 = omp_get_wtime();
cout << "Time: " << t2 - t1 << endl;
return 0;}
Размещено на Allbest.ru
...Подобные документы
Циклічний зсув на одну позицію елементів першої половини послідовності. Вилучення з послідовності елементів кратних заданій величині. Обмін між собою елементів двох послідовностей та слідуючих за ними елементів. Копіювання однієї послідовності в іншу.
лабораторная работа [1,7 M], добавлен 26.04.2021Програми, які виводять на екран характеристики комп'ютера. Розробка програми "Монітор використання ресурсів комп’ютера" на мові програмування ASM-86. Алгоритм програми та її реалізація. Системні вимоги, інструкція для користувача, лістинг програми.
курсовая работа [22,2 K], добавлен 08.08.2009Визначення та способи представлення графів. Основні алгоритми на графах. Побудова мінімального остового дерева. Алгоритми Прима та Дейкстри. Модель Флойда-Уоршалла. Огляд можливостей мови програмування. Опис функцій програмної моделі, інтерфейс програми.
дипломная работа [563,7 K], добавлен 03.08.2014Дослідження особливостей роботи графічної бібліотеки OpenGL з метою використання її в комп'ютерному моделюванні. Розгляд синтаксису команд та програмного коду команд. Методи максимально реалістичного моделювання горіння вогню. Лістинг програми на мові С.
курсовая работа [182,0 K], добавлен 22.12.2010Основні принципи дії та архітектура прототипних варіантів CISC-комп'ютера. Інструкції асемблерної мови і принцип трансляції асемблерної програми у машинний код. Розробка тестової програми. Перевірка правильності роботи реалізованих команд у прикладах.
курсовая работа [446,1 K], добавлен 03.02.2011Програмування масиву і сукупність елементів одного типу даних, впорядкованих за індексами, які зазвичай репрезентовані натуральними числами, що визначають положення елемента в масиві. Лістинг програми та блок-схема алгоритму і результат виконання.
курсовая работа [453,1 K], добавлен 06.06.2012Алгоритм побудови лінії та використання графічної бібліотеки DirectX. Способи побудови довільної кількості довільного розміру точок на поверхні форми. Можливості комп'ютера виконувати мультимедійні програми під управлінням операційної системи Windows.
контрольная работа [416,9 K], добавлен 22.10.2009Визначення двовимірних масивів. Розміщення елементів на головній та бічній діагоналі. Алгоритми обробки двовимірних масивів. Двовимірні масиви в задачах лінійної алгебри. Ініціалізація елементів матриці за допомогою генератора псевдовипадкових чисел.
контрольная работа [162,8 K], добавлен 02.12.2014Історія появи перших обчислювальних машин. Пам'ять як один із основних елементів комп'ютера, що дозволяє йому нормально функціонувати. Значення внутрішньої пам'яті комп'ютера з позиції зберігання інформації. Аналіз зовнішньої пам’яті та її модернізація.
реферат [24,4 K], добавлен 27.12.2011Створення зображення (візуалізація) як завдання комп'ютерної графіки. Методи та алгоритми візуалізації. Трансформація об’єктів в бібліотеці OpengL. Побудова довільної кількості довільного розміру точок на поверхні форми засобами бібліотеки OpengL.
контрольная работа [2,3 M], добавлен 10.09.2009Основні блоки персонального комп'ютера та їх значення. Варіанти організації внутрішньомашиного інтерфейсу. Функціональна схема мікропроцесору. Види запам'ятовуючих пристроїв. Послідовність роботи блоків комп'ютера. Основні зовнішні та внутрішні пристрої.
курсовая работа [346,8 K], добавлен 05.01.2014Призначення програми BurnInTest та її функціональні можливості. Конфігурація тестового стенду. Тестування жорсткого диску комп’ютера з використанням програми HD TunePro. Рекомендації по підвищенню продуктивності та оптимізації комп’ютера, що тестується.
курсовая работа [4,8 M], добавлен 27.02.2013Ведення протоколу роботи комп’ютера. Розробка програми для створення списку розширень файлів і занесення часу і дати доступу до них на мові програмування Асемблер. Виклик переривання 21h код-функції та занесення до регістрів. Алгоритм та лістинг програми.
курсовая работа [14,1 K], добавлен 08.08.2009Подання чисел у нормальній формі. Порядок нормалізації чисел з рухомою комою. Правила додавання двійкових чисел з рухомою комою. Алгоритми і програми додавання чисел в арифметиці з рухомою комою в інструкціях навчального комп'ютера-симулятора DeComp.
лабораторная работа [31,7 K], добавлен 13.03.2011Актуальність розробки програми для відновлення помилково вилучених з диску комп'ютера файлів. Програма-аналог програми Dос Undelete на мові програмування ASM-86. Елементи каталогу, що стосуються відновлення стертих файлів. Алгоритм програми та її лістинг.
курсовая работа [33,2 K], добавлен 08.08.2009Методика використання інформаційних технологій на уроках музики. Комп’ютерний практикум в системі початкової музичної освіти. Використання музичного редактора. Програми для DOS та Windows. Формування готовності особистості до творчої діяльності.
курсовая работа [28,9 K], добавлен 11.06.2009Експонентний розвиток комп'ютерної техніки. Будова сучасного комп'ютера, призначення основних елементів. Будова центрального процесора. Оперативная пам'ять та материнська плата. Будова звукової карти. Характеристика жорсткого диска. Склад чипсету.
презентация [1,4 M], добавлен 25.02.2010Поняття комп'ютеру як універсальної технічної системи, спроможної виконувати визначену послідовність операцій певної програми. Програмні засоби, за допомогою яких визначають основні характеристики ПК. Утіліта EVEREST Home Edition 1.51, її призначення.
контрольная работа [403,0 K], добавлен 01.12.2009Задача на пошук найкоротшої відстані, маршруту і шляху холостого пробігу машин. Обгрунтування вибору методу та алгоритм розв'язання задачі. Опис математичної моделі задачі. Інтерфейс та лістинг программи. Заповнення таблиці суміжності для заданого графу.
курсовая работа [315,5 K], добавлен 26.05.2015Аналіз предметної галузі задачі моделювання пострілу балісти через стіну по мішені. Структури даних та діаграми класів для розв'язання задачі. Схеми взаємодії об’єктів та алгоритми виконання їх методів. Опис розробленої програми, інструкція користувача.
курсовая работа [1,0 M], добавлен 18.05.2014