1 of 24

Двовимірний масив даних

Урок 52

teach-inf.at.ua

9

2 of 24

Двовимірний масив даних

Розділ 9 § 38

Одновимірний масив призначений для опрацювання таблиць, які містять один рядок даних.

Однак під час розв'язування багатьох задач доводиться працювати з таблицями, у яких кілька рядків і кілька стовпців. Для опрацювання таких таблиць існує тип даних двовимірний масив.

9

© Вивчаємо інформатику teach-inf.at.ua

3 of 24

Двовимірний масив даних

Розділ 9 § 38

Ми постійно маємо справу із двовимірними масивами.

Подивіться на екран вашого монітора — його матриця є двовимірним масивом пікселів.

У залі кінотеатру розташований двовимірний масив стільців, де кожний стілець має 2 індекси — номер ряду і номер стільця в ряду.

Згадайте також шахівницю або знамениту комп'ютерну гру Lines.

9

© Вивчаємо інформатику teach-inf.at.ua

4 of 24

Опис змінних типу�двовимірний масив

Розділ 9 § 38

Розглянемо приклад двовимірного масиву:

Двовимірний масив — це прямокутна таблиця, у якій N рядків і М стовпців. Елемент, розташований на перетині і-го рядка і j-го стовпця масиву А, позначають А[і, j].

7

2

3

34

4

5

0

-3

1

3

8

1.2

9

© Вивчаємо інформатику teach-inf.at.ua

5 of 24

Опис змінних типу�двовимірний масив

Розділ 9 § 38

У масиві, заповненому таким чином:

А[1,1] = 7

А[2,3] = 0;

А[3,2] = 3

7

2

3

34

4

5

0

-3

1

3

8

1.2

9

© Вивчаємо інформатику teach-inf.at.ua

6 of 24

Опис змінних типу�двовимірний масив

Розділ 9 § 38

Головну діагональ утворюють елементи двовимірного масиву, для яких

Описати змінну типу двовимірний масив можна двома способами:

  1. type mas = array[1..N, 1-М] of <тип елементів>;

var A: mas;

де N — кількість рядків, М — кількість стовпців.

  1. var A: array[1..N, 1..M] of <тип елементів>;

i=j

9

© Вивчаємо інформатику teach-inf.at.ua

7 of 24

Опис змінних типу�двовимірний масив

Розділ 9 § 38

Таблицю з попереднього прикладу можна описати таким чином:

type mas = array[1..3, 1..4] of Real;

var A: mas;

або

var A: array[1„3, 1..4] of Real;

9

© Вивчаємо інформатику teach-inf.at.ua

8 of 24

Опис змінних типу�двовимірний масив

Розділ 9 § 38

Послідовно отримати доступ до всіх елементів двовимірного масиву можна за допомогою вкладених циклів.

Щоб вивести у поле ListBox значення елементів масиву А (з першого прикладу), лічильник зовнішнього циклу потрібно змінювати в діапазоні 1..3, а внутрішнього — у діапазоні 1..4:

For і := 1 to 3 do

For j := 1 to 4 do

ListBox1.Items.Add(FloatToStr(A[i, j]);

9

© Вивчаємо інформатику teach-inf.at.ua

9 of 24

Надання значень елементам масиву

Розділ 9 § 38

Ввести елементи масиву A[1..N, 1..M] з клавіатури:

For i := 1 to N do

For j := 1 to M do StrToInt(InputBox('Введіть значення елементів', A[' + IntToStr(i) + lntToStr(j)+']?', '0'));

Задати значення за допомогою масиву-константи:

type Tabl = array[1..3, 1..4] of Real;

const В: Tabl = ((7, 2, 3, 34), (4, 5, 0, -3), (1, 3, 8, 1.2));

9

© Вивчаємо інформатику teach-inf.at.ua

10 of 24

Надання значень елементам масиву

Розділ 9 § 38

Заповнити масив випадковими числами:

begin Randomize;

For і := 1 to N do

For j := 1 to M do A[i,j] := Random(X);

9

© Вивчаємо інформатику teach-inf.at.ua

11 of 24

Надання значень елементам масиву

Розділ 9 § 38

Заповнити одиничну матрицю M[1..N, 1..N]:

For і := 1 to N do

For j := 1 to N do

If і = j Then M[i,j] := 1

else M[i,j] := 0;

Одиничною матрицею називають двовимірний масив, у якого однакова кількість рядків і стовпців, елементи головної діагоналі дорівнюють одиниці, а всі інші — нулю.

9

© Вивчаємо інформатику teach-inf.at.ua

12 of 24

Використання компонента StringGrid�під час роботи з двовимірними масивами

Розділ 9 § 38

У ході виведення двовимірного масиву на екран важливо, щоб елементи масиву утворювали прямокутну таблицю, тому зручно користуватися компонентом StringGrid.

При цьому виникає суттєва проблема: при зверненні до елемента масиву:

Name[i,j]

Вважається, що елемент розташований на перетині іго рядка і j-го стовпця масиву Name.

9

© Вивчаємо інформатику teach-inf.at.ua

13 of 24

Використання компонента StringGrid�під час роботи з двовимірними масивами

Розділ 9 § 38

У разі звернення до комірок таблиці StringGrid першим індексом є номер стовпця, а другим — номер рядка, тобто комірку, розташовану на перетині і-го рядка і j-го стовпця, позначають.

StringGrid1.

Cells[j,i]

9

© Вивчаємо інформатику teach-inf.at.ua

14 of 24

Використання компонента StringGrid�під час роботи з двовимірними масивами

Розділ 9 § 38

На формі створити об'єкт StringGrid1, властивості якого налаштувати для відображення масиву з:

трьох рядків

чотирьох стовпців

ColRow

ColCount

=

=

4

5

9

© Вивчаємо інформатику teach-inf.at.ua

15 of 24

Використання компонента StringGrid�під час роботи з двовимірними масивами

Розділ 9 § 38

Відображення номерів рядків і стовпців запрограмоване в процедурі FormCreate:

procedure TForm1.FormCreate(Sender: TObject);

var і, j: Integer;

begin

For і := 1 to 3 do StringGrid1.Cells[0,i] := IntToStr(i);

For j := 1 to 4 do StringGrid1.Cells[j,0] := lntToStr(j);

end;

9

© Вивчаємо інформатику teach-inf.at.ua

16 of 24

Використання компонента StringGrid�під час роботи з двовимірними масивами

Розділ 9 § 38

Введемо з клавіатури за допомогою функції InputBox значення елементів масиву А з першого прикладу. Введення значень здійснюється по рядках.

var A: array[1..3, 1..4] of Real; і, j: Integer;

begin

For і := 1 to 3 do

For j := 1 to 4 do

a[i,j] := StrToFloat(InputBox(‘Введіть значення

елементів', IntToStr(i) + ‘,’ + IntToStr(j), '0'));

9

© Вивчаємо інформатику teach-inf.at.ua

17 of 24

Використання компонента StringGrid�під час роботи з двовимірними масивами

Розділ 9 § 38

Відобразимо значення елементів масиву А в таблиці StringGrid1.

Елемент a[i,j] виводиться до комірки StringGrid1.Cells[j,i].

For і := 1 to 3 do

For j := 1 to 4 do

StringGrid1.Cells[j,i] := FloatToStr(a[i,j])

9

© Вивчаємо інформатику teach-inf.at.ua

18 of 24

Використання компонента StringGrid�під час роботи з двовимірними масивами

Розділ 9 § 38

Заповнити таблицю Піфагора :

procedure TForm1.FormCreate(Sender: TObject);

var i, j: Integer; T: array[1..W, 1..10] of Integer;

begin

{ заповнення зафіксованих рядків }

For i := 1 to 10 do StringGrid1.Cells[0,i] := IntToStr(i);

For j := 1 to 10 do StringGrid1.Cells[j,0] := IntToStr(j);

{ заповнення таблиці добутками індексів }

For i := 1 to 10 do

For j := 1 to 10 do begin

T[i,j] := i*j;//обчислення елемента масиву Т

StringGrid1.Cells[j,i] := IntToStr(T[i,j]); {виведення T[i,j] }

end; end;

9

© Вивчаємо інформатику teach-inf.at.ua

19 of 24

Використання компонента StringGrid�під час роботи з двовимірними масивами

Розділ 9 § 38

Вікно програми з таблицею Піфагора.

9

© Вивчаємо інформатику teach-inf.at.ua

20 of 24

Розгадайте ребус

Розділ 9 § 38

9

© Вивчаємо інформатику teach-inf.at.ua

21 of 24

Питання для самоперевірки

Розділ 9 § 38

  1. Опишіть двовимірний масив цілих чисел із 5 рядків і 8 стовпців.
  1. Які елементи належать головній діагоналі прямокутної таблиці?
  1. Як увести значення елементів двовимірного масиву з клавіатури?
  1. Як заповнити двовимірний масив випадковими числами?
  1. Як вивести до таблиці StringGridl значення елементів двовимірного масиву?

9

© Вивчаємо інформатику teach-inf.at.ua

22 of 24

Домашнє завдання

Проаналізувати

§ 38, ст. 212-217

Розділ 9 § 38

9

© Вивчаємо інформатику teach-inf.at.ua

23 of 24

Працюємо за комп’ютером

Розділ 9 § 38

ст.215-217�Вправа 38

9

© Вивчаємо інформатику teach-inf.at.ua

24 of 24

Дякую за увагу!

teach-inf.at.ua

9