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


Другий спосіб передавання у функцію двовимірного масиву

В onlineGDB.com обирайте C++20

Починаючи з C++14 (у функціях лише зі стандарту C++20) ключове слово auto при ініціалізації змінної може використовуватися замість типу змінної, щоб повідомити компілятору, що він має визначити тип змінної на основі значення, яке їй присвоюється.

Уніфікована ініціалізація (uniform-ініціалізація)

Коли змінній присвоюється значення після її оголошення (не в момент оголошення), це називається копіювальним присвоєнням (або просто «присвоєнням»):

int nValue;
nValue = 5; // копіювальне присвоєння

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

Щоб забезпечити єдиний механізм ініціалізації, який працює з усіма типами даних, у C++11 було додано новий спосіб ініціалізації, який називається уніфікованою ініціалізацією (uniform-ініціалізацією):

int value{5};

Ініціалізація змінної з порожніми фігурними дужками означає ініціалізацію за замовчуванням (змінній присвоюється 0):

int value{}; // ініціалізація змінної за замовчуванням значенням 0 (нуль)

У уніфікованої ініціалізації є ще одна перевага: ви не зможете присвоїти змінній значення, яке не відповідає її типу даних — компілятор видасть попередження або повідомлення про помилку. Наприклад:

int value{4.5}; // помилка: цілочисельна змінна не може містити нецілочисельні значення

Правило: Використовуйте уніфіковану ініціалізацію.

Приклад

Дано двовимірний масив цілих чисел. Вставте в нього рядок із чисел 10 перед рядком з номером t.

#include <iostream>
#include <ctime>
using namespace std;

const int maxM = 10; // Максимальна кількість рядків
const int maxN = 10; // Максимальна кількість стовпців

// Прототипи функцій
void printMatrix(int[][maxN], int, int);         // Вивід матриці
void randomizeMatrix(int[][maxN], int, int, int, int); // Заповнення матриці випадковими числами
void InsertRow(int[][maxN], int&, int, int, int*); // Вставка рядка

int main() {
    srand(time(0)); // Ініціалізація генератора випадкових чисел
    
    int arr[maxM][maxN]; // Оголошення матриці
    int M = 5, N = 5;   // Початкові розміри
    
    // Введення розмірів матриці
    cout << "Введіть розміри матриці (рядки стовпці):" << endl;
    cin >> M >> N;
    
    // Введення діапазону значень
    int minRand = 0, maxRand = 9;
    cout << "Введіть діапазон значень елементів матриці (min max):" << endl;
    cin >> minRand >> maxRand;
    
    // Заповнення та вивід матриці
    randomizeMatrix(arr, M, N, minRand, maxRand);
    printMatrix(arr, M, N);
    cout << endl;
    
    // Введення номера рядка для вставки
    int k;
    cout << endl << "Введіть номер рядка для вставки:" << endl;
    cin >> k;
    
    // Створення рядка для вставки
    int s[maxM];
    for (int i = 0; i < N; i++) s[i] = 10; // Заповнюємо рядок значеннями 10
    
    // Вставка рядка або повідомлення про помилку
    if (k >= 0 && k < M) {
        InsertRow(arr, M, N, k, s);
    } else {
        cout << "Помилка в даних. Невірний номер рядка." << endl;
    }
    
    // Вивід оновленої матриці
    cout << endl;
    printMatrix(arr, M, N);
    
    return 0;
}

// Функція виводу матриці
void printMatrix(int matrix[][maxN], int rows, int cols) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }
}

// Функція заповнення матриці випадковими числами
void randomizeMatrix(int matrix[][maxN], int rows, int cols, int minVal, int maxVal) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            matrix[i][j] = rand() % (maxVal - minVal + 1) + minVal;
        }
    }
}

// Функція вставки рядка
void InsertRow(int matrix[][maxN], int& rows, int cols, int rowNum, int* newRow) {
    // Зсув рядків вниз
    for (int i = rows; i > rowNum; i--) {
        for (int j = 0; j < cols; j++) {
            matrix[i][j] = matrix[i-1][j];
        }
    }
    
    // Вставка нового рядка
    for (int j = 0; j < cols; j++) {
        matrix[rowNum][j] = newRow[j];
    }
    
    rows++; // Збільшення кількості рядків
}

Обробка


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