Одновимірний масив можна уявити як таблицю, що містить один рядок або стовпець даних. Однак нам часто доводиться працювати з таблицями, у яких кілька рядків і кілька стовпців. Для опрацювання даних таких таблиць зручно використовувати двовимірний масив. Кожний елемент такого масиву визначається двома індексами.
Як двовимірний масив можна уявити стільці в залі кінотеатру, де кожний стілець визначається двома індексами — номером ряду і номером стільця в ряду. У вигляді двовимірного масиву легко подати поле шахівниці або популярної комп’ютерної гри Сапер. Матриця екрана вашого монітора також є двовимірним масивом пікселів.
Опис змінних типу двовимірний масив
Двовимірний масив — це прямокутна таблиця, у якій N рядків і М стовпців. Елемент, розташований на перетині і-го рядка і і-го стовпця масиву А, позначають А[д].
Розглянемо приклад двовимірного масиву (рис. 38.1). У масиві, заповненому таким чином:
А[1,1] = 7; А[2,3] = 0; А[3,2] = 3.
Елементи двовимірного масиву, для яких і=і, утворюють головну діагональ.
Описати змінну типу двовимірний масив можна двома способами:


Надання значень елементам двовимірного масиву
Послідовно отримати доступ до всіх елементів двовимірного масиву можна за допомогою вкладених циклів.
Ввести елементи масиву A[1..N, 1..M] з клавіатури:
For і := 1 to N do
For j := 1 to M do A[i] := БігТоІп^ІприїВохОВведіть значення елементів 'A[' + IntToStr(i) + + IntToStr(j)+ ']?', '0'));
Задати значення елементів масиву A[1..3, 1..4] за допомогою масиву-константи:
type Mas = array[1 ..3,1 ..4] of Real;
const Numbers: Mas = ((7,2,3,34),(4,5,0,-3),(1,3,8,1.2));
var А: Mas;
begin А := Numbers; {...}
Заповнити двовимірний масив M[1..4,1..4] таким чином, щоб елементи головної діагоналі дорівнювали 1, а всі інші — нулю (рис. 38.2).
For і := 1 to 4 do For j := 1 to 4 do
If і = j Then M[i,j] := 1 Else M[i,j] := 0;
Заповнити масив A[1..N, 1..M] випадковими числами з діапазону від 0 до 9: Randomize;
For i := 1 to N do
For j := 1 to M do A[i,j] := Random(10);

Виведення значень елементів двовимірного масиву
Алгоритм виведення значень елементів двовимірного масиву:
1) для кожного і-го рядка масиву створити порожній рядок S;
2) перебрати елементи і-го рядка: кожний елемент рядка перетворити в рядковий тип і додати до рядка S із додаванням пробілу;
3) додати рядок S до списку ListBox.
Отримані рядки можна виводити не лише до поля списку ListBox, а й до поля Memo або іншим способом.
Вивести значення елементів массиву A[1..3, 1..4] до поля списку ListBox.

Використання компонента StringGrid під час роботи з двовимірними масивами
У ході роботи з елементами двовимірного масиву важливо, щоб вони ображалися у вигляді прямокутної таблиці. Це дозволяє уявити вміст труктуру масиву. Саме тому зручно користуватися компонентом StringGrid. Розташований на перетині ї-го рядка і j-го стовпця елемент масиву Name позначають Name[i,j], а клітинку таблиці StringGrid — StringGrid1.Cells[j,i]. Тобто при зверненні до клітинок таблиці StringGrid першим індексом є номер стовпця, а другим — номер рядка.
Створити на формі об’єкт StringGrid1 (рис. 38.3), властивості якого налаштувати для виведення масиву з трьох рядків і чотирьох стовпців (RowCount = 4, ColCount = 5).
Виведення номерів рядків і стовпців запрограмоване в процедурі FormCreate:

Ввести з клавіатури значення елементів масиву А[1..3, 1..4] та вивести значення елементів масиву в таблиці StringGrid.

Як бачите, елемент А[Щ виводиться до клітинки StringGrid1 .CeMs[j,i]. Побудувати таблицю Піфагора (рис. 38.4):


Питання для самоперевірки
1. Опишіть двовимірний масив цілих чисел із 5 рядків і 8 стовпців.
2. Як запрограмувати введення значень елементів двовимірного масиву з клавіатури?
3. Як заповнити двовимірний масив випадковими числами?
4. Визначте, що міститься в таблиці А[1..4, 1..5], якщо:
а) Д[і,і] = і; б) А[і,]] = Махііф;1 в) А[д] = Міп{і,Л; г) А[д] = |Н|.
5. Запишіть фрагмент програми, що дозволяє створити масив:

6. У ході вивчення теми 10 учнів отримали оцінки з 5 тестів. Складіть програму для визначення суми балів, набраної кожним учнем.
Вправа 38
Магічний квадрат — це квадратна таблиця (И = М), в якій суми чисел кожного ряду (рядка, стовпця й діагоналі) є рівними.
Скласти ігрову програму, в якій гравець має заповнити порожні клітинки квадрата 3 х 3 числами від 4 до 12 таким чином, щоб утворити магічний квадрат.
1) Створіть новий проект. Розмістіть на формі компоненти і налаштуйте їх властивості згідно з рис. 1.

2) Опишіть глобальні масиви даних: var Forml: TForml;
mk: array[1..3, 1..3] of Integer; // числа магічного квадрата Numbers: array[1..9] of Integer; // масив чисел від 4 до 12
3) У процедурі обробки події onclick для кнопки Нова гра запрограмуйте виведення випадковим чином трьох значень із масиву Numbers до таблиці StringGridl:
var i, j, k, n: Integer; begin Randomize;
For i := 1 to 3 do // заповнення масиву mk нулями
For j := 1 to 3 do mk[i,j] := 0;
For i := 0 to 2 do StringGrid1.Rows[i].Clear; // очищення таблиці For i := 1 to 9 do Numbers[i] := i + 3; // заповнення масиву Numbers
k := 0;
While k < 3 do begin // k — лічильник виведених до таблиці значень { задавання індексів клітинок для початкових значень } i := Random(3) + 1; j := Random (3) + 1;
n := Random(9) + 1; // випадковий вибір числа з масиву Numbers
If (mk[i,j]=0) and (Numbers[n] <> 0) Then begin { якщо клітинка mk[i,j] вільна і значення Numbers[n] ще не задіяне } mk[i,j] := Numbers[n]; k := k + 1;
Numbers[n] := 0; // використаний елемент Numbers[n] обнуляється
StringGrid1.Cells[j - 1, i - 1] := IntToStr(mk[i,j]); end; end; end;
4) У процедурі обробки події onclick для кнопки Перевірити запрограмуйте виведення значень масиву mk до таблиці StringGrid1 і обчислення сум елементів у рядках. Якщо числа розташовані правильно, то сума чисел кожного ряду дорівнює 24. Якщо чергова сума не дорівнює 24, прапорцева змінна Prap набуває значення False. var i, j, k, n, sum_row, sum_col: Integer; Prap: Boolean;
begin
For i := 1 to 3 do
For j := 1 to 3 do mk[i,j] := StrToInt(StringGrid1.Cells[j - 1,i - 1]); Prap := True;
For i := 1 to 3 do begin
sum_row := 0;
For j := 1 to 3 do sum_row := sum_row + mk[i,j];
If sum_row <> 24 Then Prap := False; end;
5) Запрограмуйте перевірку сум елементів у стовпцях. Якщо після обчислення всіх 6 сум змінна Prap не змінила значення, то квадрат заповнено правильно (рис. 2):
If Prap = True Then Labell.Caption := 'Перемога!'
Else Labell.Caption := 'Спробуй ще!'
end;
6) Перевірте роботу програми. Чи завжди початкове розташування чисел дозволяє заповнити магічний квадрат? Збережіть проект у папці Вправа 38. Завершіть роботу за комп’ютером.
Комп'ютерне тестування
Виконайте тестове завдання 38 із автоматичною перевіркою на сайті «Інтерактивне навчання».

Це матеріал з підручника Інформатика 9 клас Бондаренко