§ 15. Двухмерныя масівы

15.2. Фарміраванне двухмерных масіваў

Значэнні элементаў двухмернага масіву можна задаваць тымі ж спосабамі, што і элементаў аднамернага масіву.

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

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

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

Калі ў масіве ёсць лікі з рознай колькасцю лічбаў, то ў якасці раздзяляльніка паміж элементамі ў адным радку можна выкарыстоўваць сімвал табуляцыі (пыклад 15.5) ці задаць шырыню для вываду значэння з дапамогай каманды setw (прыклад 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. Тэсціраванне.