У цьому розділі розглядаються приклади складання програм за відомими алгоритмами, але ці алгоритми застосовуються до елементів кожного рядка (стовпця) двовимірного масиву. Працюємо з копією матриці, представленою у вигляді одномірного масиву посилань на початок кожного рядка. Початкова матриця не змінюється.
Причому, якщо потрібно щось знайти в кожному стовпці, то масив переглядають по стовпцях (1-й стовпець, 2-й стовпець …), а якщо потрібно щось знайти в кожному рядку, то масив переглядають по рядках (1-й рядок, 2-й рядок, …).
Під час перегляду масиву по рядках (це звичайний перегляд, так ми вводимо елементи масиву) зовнішній цикл — за номером рядка (перший індекс), а внутрішній — за номером стовпця (другий індекс).
Під час перегляду масиву по стовпцях зовнішній цикл — за номером стовпця (другий індекс), а внутрішній — за номером рядка (перший індекс).
Для простоти будемо працювати з квадратними матрицями.
Дано двовимірний масив цілих чисел розміром nxm. Знайти суму елементів у кожному рядку двовимірного масиву.


Алгоритм, що використовується для кожного рядка, простий — знаходження суми.
Для знаходження суми елементів у кожному рядку потрібно переглядати масив по рядках (зовнішній цикл — за першим індексом). Перед переглядом конкретного рядка (перед внутрішнім циклом) потрібно обнулити суму, а після перегляду цього рядка (після внутрішнього циклу) вивести цю суму на екран.
/***********
Дано двовимірний масив цілих чисел розміром 3x4. Знайти суму елементів
у кожному рядку двовимірного масиву.
***********/
#include <iostream>
#include <ctime>
#include <vector>
using namespace std;
const int ROWS = 3; // Кількість рядків
const int COLS = 4; // Кількість стовпців
void Randmass(int**, int, int, int, int); // Заповнення масиву випадковими числами
void Printmass(int**, int, int); // Виведення масиву на екран
vector<int> SumStr(int**, int, int); // Сума по рядках
int main() {
int first_value, last_value;
setlocale(0, "UKR"); // Українська локаль
cout << "Введіть діапазон значень масиву: " << endl;
cin >> first_value >> last_value;
srand(time(0)); // Ініціалізація генератора випадкових чисел
// Виділення пам'яті для матриці 3x4
int** matrix = new int*[ROWS];
for (int i = 0; i < ROWS; i++) {
matrix[i] = new int[COLS];
}
Randmass(matrix, ROWS, COLS, first_value, last_value);
cout << endl;
Printmass(matrix, ROWS, COLS);
vector<int> v = SumStr(matrix, ROWS, COLS);
cout << endl << "Сумми по рядках матриці:" << endl;
cout << endl;
for (int i = 0; i < ROWS; i++) {
cout << "Сума рядка " << i << " = " << v[i] << endl;
}
// Звільнення пам'яті
for (int i = 0; i < ROWS; i++) {
delete[] matrix[i];
}
delete[] matrix;
return 0;
}
// Функція для заповнення масиву випадковими значеннями
void Randmass(int** mass, int ROWS,int COLS, int first_value, int last_value) {
cout << "Ініціалізація масиву:" << endl;
for (int i = 0; i <ROWS; i++) {
for (int j = 0; j <COLS; j++) {
mass[i][j] = first_value + rand() % (last_value - first_value + 1);
}
}
}
// Функція для виведення масиву
void Printmass(int** mass, int ROWS,int COLS) {
cout << "Друк масиву:" << endl;
for (int i = 0; i <ROWS; i++) {
cout << endl;
for (int j = 0; j < COLS; j++) {
cout << "\t" << mass[i][j];
}
}
}
// Функція для обчислення сум елементів у кожному рядку
vector<int> SumStr(int** x, int m,int n) {
vector<int> v(n, 0); // Ініціалізація вектора нулями
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
v[i] += x[i][j]; // Додавання значення елемента до суми рядка
}
}
return v;
}
}
Дано двовимірний масив цілих чисел розміром nxm. Знайти перше число, яке кратне 3, у кожному стовпці двовимірного масиву. Якщо таких чисел немає — вивести повідомлення.


Алгоритм, що використовується для кожного стовпця — знаходження першого числа, кратного 3.
Для знаходження таких чисел у кожному стовпці потрібно переглядати масив по стовпцях (зовнішній цикл — за другим індексом).
Під час перегляду конкретного стовпця (внутрішній цикл) значення елемента запам’ятовується, якщо воно кратне 3 і раніше таких значень не було (pk3 == -1).
Після перегляду стовпця (після внутрішнього циклу) потрібно перевірити, чи були такі числа, і вивести це значення або повідомлення.
#include <iostream>
#include <ctime>
#include <vector>
using namespace std;
void Randmass(int**, int, int, int); // Заповнення масиву випадковими числами
void Printmass(int**, int); // Виведення масиву на екран
vector<int> Col_3(int**, int); // Перше число, кратне 3, або 0, якщо немає
int main() {
int n, first_value, last_value;
setlocale(0, "UKR"); // Українська локаль
cout << "Введіть діапазон значень масиву: " << endl;
cin >> first_value >> last_value;
srand(time(0)); // Ініціалізація генератора випадкових чисел
cout << "Введіть розмір матриці: " << endl;
cin >> n;
// Виділення пам'яті для матриці
int** matrix = new int*[n];
for (int i = 0; i < n; i++) {
matrix[i] = new int[n];
}
Randmass(matrix, n, first_value, last_value);
cout << endl;
Printmass(matrix, n);
vector<int> v = Col_3(matrix, n);
cout << endl << "Перше число, кратне 3, або 0, якщо немає:" << endl;
cout << endl;
for (int i = 0; i < n; i++) {
if (v[i] != 0) {
cout << "Перше число, кратне 3 у стовпці " << i << ": " << v[i] << endl;
} else {
cout << "Немає чисел, кратних 3 у стовпці " << i << endl;
}
}
// Звільнення пам'яті
for (int i = 0; i < n; i++) {
delete[] matrix[i];
}
delete[] matrix;
return 0;
}
// Функція для заповнення масиву випадковими значеннями
void Randmass(int** mass, int sizematrix, int first_value, int last_value) {
cout << "Ініціалізація масиву:" << endl;
for (int i = 0; i < sizematrix; i++) {
for (int j = 0; j < sizematrix; j++) {
mass[i][j] = first_value + rand() % (last_value - first_value + 1);
}
}
}
// Функція для виведення масиву
void Printmass(int** mass, int sizematrix) {
cout << "Друк масиву:" << endl;
for (int i = 0; i < sizematrix; i++) {
cout << endl;
for (int j = 0; j < sizematrix; j++) {
cout << "\t" << mass[i][j];
}
}
}
// Функція для знаходження першого числа, кратного 3, у кожному стовпці
vector<int> Col_3(int** x, int n) {
vector<int> v(n, 0); // Ініціалізація вектора нулями
for (int j = 0; j < n; j++) {
for (int i = 0; i < n; i++) {
if (x[i][j] % 3 == 0) { // Перевірка на кратність 3
v[j] = x[i][j]; // Збереження першого знайденого числа
break; // Перехід до наступного стовпця
}
}
}
return v;
}
Дано двовимірний масив цілих чисел розміром nxm. Сформувати одномірний масив логічного типу, в якому елемент дорівнює True, якщо у відповідному стовпці масиву є елементи, що закінчуються на 5, і False — якщо таких елементів немає. Вивести сформований масив на екран.

В одномірному масиві стільки елементів, скільки стовпців, тобто m.
#include <iostream>
#include <ctime>
#include <vector>
using namespace std;
void Randmass(int**, int, int, int); // Заповнення масиву випадковими числами
void Printmass(int**, int); // Виведення масиву на екран
vector<bool> Col_5(int**, int); // Перевірка наявності чисел, що закінчуються на 5 у стовпцях
int main() {
int n, first_value, last_value;
setlocale(0, "UKR"); // Українська локаль
cout << "Введіть діапазон значень масиву: " << endl;
cin >> first_value >> last_value;
srand(time(0)); // Ініціалізація генератора випадкових чисел
cout << "Введіть розмір матриці: " << endl;
cin >> n;
// Виділення пам'яті для матриці
int** matrix = new int*[n];
for (int i = 0; i < n; i++) {
matrix[i] = new int[n];
}
Randmass(matrix, n, first_value, last_value);
cout << endl;
Printmass(matrix, n);
vector<bool> v = Col_5(matrix, n);
cout << endl << "Стовпці:" << endl;
cout << endl;
for (int i = 0; i < n; i++) {
if (v[i]) {
cout << "У стовпці " << i << " є числа, що закінчуються на 5." << endl;
} else {
cout << "У стовпці " << i << " немає чисел, що закінчуються на 5." << endl;
}
}
// Звільнення пам'яті
for (int i = 0; i < n; i++) {
delete[] matrix[i];
}
delete[] matrix;
return 0;
}
// Функція для заповнення масиву випадковими значеннями
void Randmass(int** mass, int sizematrix, int first_value, int last_value) {
cout << "Ініціалізація масиву:" << endl;
for (int i = 0; i < sizematrix; i++) {
for (int j = 0; j < sizematrix; j++) {
mass[i][j] = first_value + rand() % (last_value - first_value + 1);
}
}
} // Додано відсутню закриваючу дужку
// Функція для виведення масиву
void Printmass(int** mass, int sizematrix) {
cout << "Друк масиву:" << endl;
for (int i = 0; i < sizematrix; i++) {
cout << endl;
for (int j = 0; j < sizematrix; j++) {
cout << "\t" << mass[i][j];
}
}
} // Додано відсутню закриваючу дужку
// Функція для перевірки наявності чисел, що закінчуються на 5 у стовпцях
vector<bool> Col_5(int** x, int n) {
vector<bool> v(n, false); // Ініціалізація вектора значеннями false
for (int j = 0; j < n; j++) {
for (int i = 0; i < n; i++) {
if (x[i][j] % 10 == 5) { // Перевірка, чи закінчується число на 5
v[j] = true;
break; // Перехід до наступного стовпця
}
}
}
return v;
}
Дано двовимірний масив цілих чисел розміром nxn. Сформувати одномірний масив, кожен елемент якого є максимальним у відповідному рядку двовимірного масиву. Вивести сформований масив на екран.

В одномірному масиві стільки елементів, скільки рядків, тобто n. Як початкове значення для знаходження найбільшого числа в рядку беремо перше число цього рядка: a[i][0].
/***********
Дано двовимірний масив цілих чисел розміром 5x3. Сформувати одновимірний масив,
де кожен елемент є максимальним у відповідному рядку двовимірного масиву.
Вивести сформований масив на екран.
***********/
#include <iostream>
#include <ctime>
#include <vector>
using namespace std;
void Randmass(int**, int, int, int); // Заповнення масиву випадковими числами
void Printmass(int**, int); // Виведення масиву на екран
vector<int> MaxStr(int**, int); // Пошук максимумів у рядках
int main() {
const int rows = 5, cols = 3; // Розмірність матриці 5x3
int first_value, last_value;
setlocale(0, "UKR"); // Українська локаль
cout << "Введіть діапазон значень масиву: " << endl;
cin >> first_value >> last_value;
srand(time(0)); // Ініціалізація генератора випадкових чисел
// Виділення пам'яті для матриці
int** matrix = new int*[rows];
for (int i = 0; i < rows; i++) {
matrix[i] = new int[cols];
}
Randmass(matrix, rows, first_value, last_value);
cout << endl;
Printmass(matrix, rows);
vector<int> v = MaxStr(matrix, rows);
cout << endl << "Максимуми по рядках матриці:" << endl;
for (int i = 0; i < rows; i++) {
cout << "Рядок " << i << ": " << v[i] << endl;
}
// Звільнення пам'яті
for (int i = 0; i < rows; i++) {
delete[] matrix[i];
}
delete[] matrix;
return 0;
}
// Функція для заповнення масиву випадковими значеннями
void Randmass(int** mass, int size, int first_value, int last_value) {
cout << "Ініціалізація масиву:" << endl;
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
mass[i][j] = first_value + rand() % (last_value - first_value + 1);
}
}
}
// Функція для виведення масиву
void Printmass(int** mass, int size) {
cout << "Друк масиву:" << endl;
for (int i = 0; i < size; i++) {
cout << endl;
for (int j = 0; j < size; j++) {
cout << "\t" << mass[i][j];
}
}
}
// Функція для знаходження максимальних елементів у кожному рядку
vector<int> MaxStr(int** x, int n) {
vector<int> v(n); // Вектор для зберігання максимумів
int max;
for (int i = 0; i < n; i++) {
max = x[i][0]; // Початкове значення максимуму
for (int j = 1; j < n; j++) {
if (x[i][j] > max) {
max = x[i][j];
}
}
v[i] = max; // Зберігаємо максимум поточного рядка
}
return v;
}
Дано двовимірний масив цілих чисел розміром nxn. До першого парного елемента кожного рядка додати перший елемент відповідного рядка.

Алгоритм, що використовується для кожного рядка, простий — спочатку знаходиться перший парний елемент кожного рядка, а потім до нього додається перший елемент цього ж рядка.
/***********
Дано двовимірний масив цілих чисел розміром n×n. До першого парного елементу
кожного рядка додати перший елемент відповідного рядка.
***********/
#include <iostream>
#include <ctime>
#include <vector>
using namespace std;
void Randmass(int**, int, int, int); // Заповнення масиву випадковими числами
void Printmass(int**, int); // Виведення масиву на екран
void ProcessRows(int**, int); // Обробка рядків
int main() {
int n, first_value, last_value;
setlocale(0, "UKR"); // Українська локаль
cout << "Введіть діапазон значень масиву: " << endl;
cin >> first_value >> last_value;
srand(time(0)); // Ініціалізація генератора випадкових чисел
cout << "Введіть розмір матриці: " << endl;
cin >> n;
// Виділення пам'яті для матриці
int** matrix = new int*[n];
for (int i = 0; i < n; i++) {
matrix[i] = new int[n];
}
Randmass(matrix, n, first_value, last_value);
cout << endl;
Printmass(matrix, n);
ProcessRows(matrix, n);
cout << endl << "Матриця після обробки:" << endl;
Printmass(matrix, n);
// Звільнення пам'яті
for (int i = 0; i < n; i++) {
delete[] matrix[i];
}
delete[] matrix;
return 0;
}
// Функція для заповнення масиву випадковими значеннями
void Randmass(int** mass, int sizematrix, int first_value, int last_value) {
cout << "Ініціалізація масиву:" << endl;
for (int i = 0; i < sizematrix; i++) {
for (int j = 0; j < sizematrix; j++) {
mass[i][j] = first_value + rand() % (last_value - first_value + 1);
}
}
} // Додано відсутню закриваючу дужку
// Функція для виведення масиву
void Printmass(int** mass, int sizematrix) {
cout << "Друк масиву:" << endl;
for (int i = 0; i < sizematrix; i++) {
cout << endl;
for (int j = 0; j < sizematrix; j++) {
cout << "\t" << mass[i][j];
}
}
} // Додано відсутню закриваючу дужку
// Функція для зміни матриці (додавання першого елемента до першого парного)
void ProcessRows(int** x, int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (x[i][j] % 2 == 0) { // Перевірка на парність
x[i][j] += x[i][0]; // Додаємо перший елемент рядка
break; // Перехід до наступного рядка
}
}
}
}