§ 15. Двумерные массивы

15.2. Формирование двумерных массивов

Значения элементов двумерного массива можно задавать теми же способами, что и элементов одномерного массива.

Константные значения элементам массива можно задать при описании, заключив их в фигурные скобки (пример 15.2). Количество строк и столбцов при этом не указывают, размеры определяются автоматически.

Данные в массив могут быть прочитаны с клавиатуры (пример 15.3) или из файла. Задавать значения элементам можно случайным образом (пример 15.4). Для того, чтобы обратится к каждому элементу двумерного массива, необходимо два вложенных цикла: первый будет поочередно фиксировать номер строки, а второй перебирать все элементы данной строки.

Выводят элементы двумерного массива в виде таблицы, переводя курсор после вывода очередной строки (вывод элементов реализован при получении случайных значений в (примере 15.4).

Если в массиве есть числа с разным количеством цифр, то в качестве разделителя между элементами в одной строке можно использовать символ табуляции (пример 15.5) или задать ширину для вывода значения с помощью команды (пример 15.6)

Пример 15.7.Задано число n. Сформировать двумерный массив из n строк и n столбцов, который выглядит следующим образом:

Этапы выполнения задания

I. Исходные данные: число n.

II. Результат: двумерный массив d.

III. Алгоритм решения задачи.

1. Ввод исходных данных.
2. 
Заполнять массив будем в цикле следующим образом:

2.1. При описании все элементы равны 0.
2.2. Элементы в первой и последней строках, а также в первом и последнем столбцах равны 1.
2.3. Элементы на диагонали равны номеру строки +1.

3. Вывод результата.

IV. Описание переменных:
n – int, d – vector<vector <int>>.

Пример 15.2. Константные значения в двумерном массиве:

vector <vector <int>> d = 

               {{1, 0, 0},

                {0, 1, 0},

                {0, 0, 1}};

Пример 15.3. Ввод элементов с клавиатуры:

cin >> m >> n; 

vector< vector<int> > d(m, vector <int>(n));

for (int i = 0; i < m; i++)

  for (int j = 0; j < n; j++)

    cin >> d[i][j];

Пример 15.4. Случайные значения [-5, 5]:

cin >> m >> n;

vector< vector<int> > d(m, vector <int>(n));

for (int i = 0; i < m; i++) {

  for (int j = 0; j < n; j++){

    d[i][j] = rand() % 11 - 5;

    cout << d[i][j] << " ";

  }

  cout << endl;

}

Пример 15.5. Вывод элементов через табуляцию:

for (int i = 0; i < m; i++) {

  for (int j = 0; j < n; j++)

    cout << d[i][j] << '\t';

  cout << endl;

}

Пример 15.6. Вывод элементов с установкой ширины печати:

for (int i = 0; i < m; i++) {

  for (int j = 0; j < n; j++)

    cout << setw(5) << d[i][j];

  cout << endl;

}

Результат вывода из примеров 15.5 и 15.6.

Пример 15.7.

V. Программа:

#include <iostream>

#include <vector>

#include <iomanip>

 

using namespace std;

 

int main()

{

  int n;

  cout << "n = ";

  cin >> n;

  vector <vector <int>> d(n, vector <int> (n));

  for (int i = 0; i < n; i++){

    d[0][i] = 1;

    d[- 1][i] = 1;

    d[i][0] = 1;

    d[i][- 1] = 1;

    d[i][i] = i + 1;

  }

  for (int i = 0; i < n; i++){

    for (int j = 0; j < n; j++)

      cout << setw(3) << d[i][j];

    cout << endl;

  }

  return 0;

}

VI. Тестирование.