You are on page 1of 12

КИЇВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ

ІМЕНІ ТАРАСА ШЕВЧЕНКA


ФАКУЛЬТЕТ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ
Кафедра інтелектуальних технологій

Лабораторна робота №4
з дисципліни «Алгоритмізація та програмування»
з теми : «Масиви STL»

Виконала студентка
групи КН-12
Пхайко Софія Дмитрівна
Перевірила:
Гамоцька Сніжана Леонідівна

Київ – 2020
Array37. Дан массив размера N. Найти количество участков, на которых его
элементы монотонно возрастают.
Таблиця 1 -МПЗ
Вхідні Дії Вихідні
дані дані
a-масив 1.Для i=2: якщо ((a[i - 2] < a[i - 1]) && ! num-
(a[i - 1] < a[i])) ,то ++num; ціле
2. Якщо (a[n - 2] < a[n - 1]),то ++num;

Рисунок 1-Схема алгоритму


Текст програми мовою С++ :
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector <int> a{ 3,4,5,9,2,6,7,0,8 };
int i, num = 0;
for (i = 2; i < a.size(); ++i) {
if ((a[i - 2] < a[i - 1]) && !(a[i - 1] < a[i])) ++num;
}
if (a[a.size() - 2] < a[a.size() - 1]) ++num;
cout << "num=" << num;
return 0;
}
Результат роботи програми:

Рисунок 2 – Результат виконання програми


Array45. Дан массив размера N. Найти номера двух ближайших элементов из
этого массива (то есть элементов с наименьшим модулем разности) и ввести
эти номера в порядке возрастания.
Таблиця 1 -МПЗ
Вхідні Дії Вихідні
дані дані
a- 1.Для і=0 : якщо abs(a[i] - a[i2]) < k,k1-ціле
масив abs(a[k] - a[k2]) ,то k = i,k2 = i2;
2.Вивести k + 1 та k2 + 1

Рисунок 1-Схема алгоритму


Текст програми мовою С++ :
#include <iostream>
#include <cmath>
#include<vector>
using namespace std;
int main()
{
vector <int> a{ 6,2,4,3 };
int i2, k = 0, k2 = 1, i;
for (i = 0; i < a.size() - 1; ++i) {
for (i2 = i + 1; i2 < a.size(); ++i2) {
if (abs(a[i] - a[i2]) < abs(a[k] - a[k2])) {
k = i;
k2 = i2;
}
}
}
cout << k + 1 << " " << k2 + 1 << endl;
return 0;
}
Результат роботи програми:

Рисунок 2 – Результат виконання програми


Array54. Дан целочисленный массив A размера N. Переписать в новый цело
численный массив B все четные числа из исходного массива (в том же
порядке) и вывести размер полученного массива B и его содержимое.
Таблиця 1 -МПЗ
Вхідні Дії Вихідні
дані дані
a-масив 1.Для k=0 :якщо a[k] % 2 == 0, то b[k]-
вставити в вектор b числа з вектору масив
а та i++;
2.Для k = 0 : вивести b[k]

Рисунок 1-Схема алгоритму


Текст програми мовою С++ :
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
int main()
{
vector <int> a{ 23,4,12,6,3 };
vector<int>b;
int i = 0, k;
for (k = 0; k < a.size(); ++k) {
if (a[k] % 2 == 0) {
b.insert(b.end(), a[k]);
i++;
}
}
cout << "B:\n size=" << i << endl;
for (k = 0; k < i; ++k) cout << "" << k + 1 << ":" << b[k] << endl;
return 0;
}
Результат роботи програми:

Рисунок 2 – Результат виконання програми

Array64. Даны три целочисленных массива A, B и C размера NA, NB, NC


соответственно, элементы которых упорядочены по убыванию. Объединить
эти массивы так, чтобы результирующий целочисленный массив D (размера
NA + NB + NC) остался упорядоченным по убыванию.
Таблиця 1 -МПЗ
Вхідні Дії Вихідні
дані дані
a,b- 1.na=a.size(),nb=b.size(),nc=c.size(), b[kd]
масив nd=a.size()+b.size()+c.size();
2.kd=0: якщо (ka<na)&&(a[ka]>=b[kb]),
якщо (kc < nc) && (c[kc] >= a[ka]) ,то
d[kd] = c[kc++];
3.Інакше d[kd] = a[ka++];
4.Інакше : якщо ((kb < nb) && (b[kb]
>= c[kc]) , то d[kd] = b[kb++].
5.Інакше d[kd] = c[kc++];
6. Для kd =0 : вивести b[kd]
Рисунок 1-Схема алгоритму
Текст програми мовою С++ :
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector <int> a{ 76,65,7 };
vector <int> b{ 9,8 };
vector <int> c{ 65,24,5 };
vector <int> d(vector <int> a, vector <int> b, vector <int> c);
int ka = 0, kb = 0, kc = 0, kd, na=a.size(),nb=b.size(),nc=c.size();
int nd = a.size() + b.size() + c.size();
for (kd=0; kd < nd; kd++) {
if ((ka<na)&&(a[ka]>=b[kb])) {
if ((kc < nc) && (c[kc] >= a[ka])) {
d[kd] = c[kc++];
}
else {
d[kd] = a[ka++];
}
}
else {
if ((kb < nb) && (b[kb] >= c[kc])) {
d[kd] = b[kb++];
}
else {
d[kd] = c[kc++];
}
}
}
for (kd = 0; kd < nd; ++kd) cout << "" << kd + 1 << ":" << b[k] << endl;
return 0;
}
Результат роботи програми:

Рисунок 2 – Результат виконання програми

Array82. Дан массив размера N и целое число K (1 ≤ K < N). Осуществить


сдвиг элементов массива влево на K позиций (при этом AN перейдет в AN-K,
AN–1 — в AN–K–1, ..., AK+1 — в A1, а исходное значение K первых
элементов будет потеряно). Последние K элементов полученного массива
положить равными 0.
Таблиця 1 -МПЗ
Вхідні Дії Вихідні
дані дані
a-масив 1.Поки i = 0: a[i] = a[i + k]; a[i] -
2.a[i] = 0; масив
3.Поки i = 0 : вивести a[i] .
Рисунок 1-Схема алгоритму
Текст програми мовою С++ :
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector <int> a{ 1,6,2,8,3,8 };
int i, k;
cout << "K="; cin >> k;
for (i = 0; i < a.size() - k; ++i) a[i] = a[i + k];
for (; i < a.size(); ++i) a[i] = 0;
for (i = 0; i < a.size(); ++i) cout << "a[" << i + 1 << "]=" << a[i] << endl;
return 0;
}
Результат роботи програми:

Рисунок 2 – Результат виконання програми


Array85. Дан массив A размера N и целое число K (1 ≤ K ≤ 4, K < N).
Осуществить циклический сдвиг элементов массива вправо на K позиций
(при этом A1 перейдет в AK+1, A2 — в AK+2, ..., AN — в AK). Допускается
использовать вспомогательный массив из 4 элементов.
Таблиця 1 -МПЗ
Вхідні Дії Вихідні
дані дані
arr-масив 1. Ввести к; arr[i] -
2. Виконати зсув вправо на к масив
елементів масиву;
3.Для i=0 : вивести arr[i].

Рисунок 1-Схема алгоритму


Текст програми мовою С++ :
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector <int> arr{3,7,4,9,4,12,6,3};
int k;
cout<<"k=";cin>>k;
rotate(arr.begin(), arr.begin() + k, arr.end());
cout << "\nArray after the applied operation:\n";
for (int i = 0; i < arr.size(); i++) {
cout << arr[i] << " ";
}
system("pause");
return 0;
}
Результат роботи програми:

Рисунок 2 – Результат виконання програми


Array97. Дан целочисленный массив размера N. Удалить из массива все
одинаковые элементы, оставив их последние вхождения.
Таблиця 1 -МПЗ
Вхідні Дії Вихідні
дані дані
a-масив 1.Для і=0 : a[i]-масив
Вивести масив а;
2.Сортуємо масив та видаляємо
елементи, які повторюються;
3.Для і=0:
Виводимо масив а.
k+
+;

Рисунок 1-Схема алгоритму


Текст програми мовою С++ :
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector <int> a{ 1,4,8,3,7,3,8 };
vector<int> :: iterator it;
int i;
int j, k = 0;
for ( i = 0; i < a.size(); i++)
cout <<"a["<<i+1<<"]="<< a[i] << " ";
cout << endl;
sort(a.begin(), a.end());
it = unique(a.begin(), a.end());
a.resize(it - a.begin());
for ( i = 0; i < a.size(); i++) // выводим
cout <<"a["<<i+1<<"]="<< a[i] << " ";
cout << endl;
return 0;
}
Результат роботи програми:

Рисунок 2 – Результат виконання програми

Array109. Дан массив размера N. После каждого отрицательного элемента


массива вставить элемент с нулевым значением.
Таблиця 1 -МПЗ
Вхідні Дії Вихідні
дані дані
a-масив 1.Для i = a.size() – 1: якщо a[i] < a[i]-масив
0 ,то а.size() + 1 та вставити 0;
2.Для і=0 : вивести a[i]

Рисунок 1-Схема алгоритму


Текст програми мовою С++ :
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector <int> a{ 1,6,-8,3,-2,8,4 };
int i;
for (i = a.size() - 1; i >= 0; --i) {
if (a[i] < 0) {
a.size() + 1;
a.insert(a.begin()+i+1,0);
}
}
for (i = 0; i < a.size(); ++i) cout << "a[" << i << "]=" << a[i] << endl;
return 0;
}
Результат роботи програми:

Рисунок 2 – Результат виконання програми

You might also like