mozok.click » Інформатика » Двовимірний масив даних
Інформація про новину
  • Переглядів: 5740
  • Автор: admin
  • Дата: 14-09-2017, 06:41
14-09-2017, 06:41

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

Категорія: Інформатика

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

Як двовимірний масив можна уявити стільці в залі кінотеатру, де кожний стілець визначається двома індексами — номером ряду і номером стільця в ряду. У вигляді двовимірного масиву легко подати поле шахівниці або популярної комп’ютерної гри Сапер. Матриця екрана вашого монітора також є двовимірним масивом пікселів.

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

Двовимірний масив — це прямокутна таблиця, у якій 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 клас Бондаренко

 






^