Назад Зміст Вперед


Перегляд кожного рядка або стовпця

У цьому розділі розглядаються приклади складання програм за відомими алгоритмами, але ці алгоритми застосовуються до елементів кожного рядка (стовпця) двовимірного масиву. Працюємо з копією матриці, представленою у вигляді одномірного масиву посилань на початок кожного рядка. Початкова матриця не змінюється.

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

Під час перегляду масиву по рядках (це звичайний перегляд, так ми вводимо елементи масиву) зовнішній цикл — за номером рядка (перший індекс), а внутрішній — за номером стовпця (другий індекс).

Під час перегляду масиву по стовпцях зовнішній цикл — за номером стовпця (другий індекс), а внутрішній — за номером рядка (перший індекс).

Для простоти будемо працювати з квадратними матрицями.

Приклад 1

Дано двовимірний масив цілих чисел розміром 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;
}
}

Приклад 2

Дано двовимірний масив цілих чисел розміром 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;
}

Приклад 3

Дано двовимірний масив цілих чисел розміром 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;
}

Приклад 4

Дано двовимірний масив цілих чисел розміром 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;
}

Приклад 5

Дано двовимірний масив цілих чисел розміром 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;  // Перехід до наступного рядка
            }
        }
    }
}   

Назад Зміст Вперед