Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторні ОП.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
569 Кб
Скачать
☆

Лабораторна робота №5. Двовимірні масиви мови Borland Pascal

Мета: набуття навичок обробки багатовимірних масивів

Обладнання: ПК, програмне забезпечення Turbo Pascal, методичні вказівки та завдання до лабораторної роботи.

Теоретичні відомості Багатовимірні масиви

Одновимірні масиви застосовуються для зберігання по­слідовностей. Проте для багатьох структур даних зображення у вигляді послі­довності є неприйнятним. Наприклад, результати матчів футбольного чемпіонату найзручніше подавати у вигляді квадратної таблиці. Для зберігання таких струк­тур даних застосовують багатовимірні масиви, серед яких найбільш широко ви­користовуються двовимірні масиви (матриці). У даному розділі розглядаються базові операції над елементами двовимірних масивів, а також техніка програмно­го розв'язування деяких матричних задач лінійної алгебри.

Оголошення багатовимірних масивів. Доступ до елементів

Розглянемо прямокутну таблицю з тxп однотипних елементів, що містить т ряд­ків та n стовпців. У математиці таку таблицю називають матрицею, а дані, що їх містить матриця, — елементами. У програмуванні матричні структури назива­ються двовимірними масивами.

Наведемо синтаксис оголошення змінної матричного типу в мові Pascal:

<ім'я матриці>:аггау[<нижній індекс рядка>..<верхній індекс рядка>,<нижній індекс стовпця>..<верхній індекс стовпця>] of <тип елементів>;

У цьому оголошенні array, of — зарезервовані слова, <тип елементів> — будь-який тип, крім файлового, <нижні й індекс рядка> і <верхній індекс рядка> — констан­ти, що визначають межі діапазону допустимих значень індексу рядка, а <нижній індекс стовпця> та <верхній індекс стовпця> — константи, що визначають межі діа­пазону допустимих значень індексу стовпця. Масиви, що мають більш ніж два виміри, оголошуються в аналогічний спосіб.

Зазначимо, що, як і будь-який тип даних користувача, тип двовимірного маси­ву можна оголосити також в розділі type окремо від оголошення змінної матрич­ного типу.

Наведемо приклади оголошень багатовимірних масивів. Нагадаємо, що обсяг сегмента пам'яті, де будуть зберігатися дані Pascal-програми, становить 64 Кбайт, і тому під час визначення розміру масиву необхідно враховувати можливість пе­реповнення пам'яті.

const k=10; m=20; n=5;

type TMatrix=array[l..k,l..m] of integer: {200 елементів}

var a:TMatrix;

b:array[l..n.l..n] of real: {25 елементів}

c:array[1..4.1..3] of char: {12 елементів}

d:array[byte.l..2] of integer; {512 елементів}

mat:array[1..3.5..10.2..4] of integer; {54 елементи, тривимірний масив}

Доступ до елементів матриці здійснюється операцією індексування [] за дво­ма індексами, які визначають номер рядка та номер стовпця елемента. Синтаксис операції індексування є таким:

<ім'я масиву>[<номер рядка>,<номер стовпця>]

Базові операції обробки двовимірних масивів

Наведемо спочатку перелік базових операцій над матрицями та їх елементами.

До таких операцій належать:

♦ введення та виведення матриць;

  • створення нової матриці за заданим алгоритмом;

  • пошук елементів матриці за певним критерієм;

  • визначення, чи задовольняє матриця або окремі її елементи певній властивості;

  • виконання певних операцій над компонентами матриць (переставлення ряд­ків і стовпців, множення матриць тощо).

Тепер розглянемо типові алгоритмічні схеми обробки елементів матриці з ме­тою подальшого застосування цих схем до розв'язання матричних задач. Зробимо загальне зауваження: однотипну обробку всіх елементів деякої матриці найлегше здійснити шляхом її обходу за рядками або стовпцями. Тобто спочатку обробля­ються всі елементи першого рядка (стовпця), потім — всі елементи другого рядка (стовпця) і т. д. Найпростішим методом реалізації такого обходу є використання вкладених циклів for. Отже, перейдемо до розв'язання базових матричних задач.

Введення матриці є достатньо очевидною операцією:

var а:агтау[1..5, 1..5] of integer:

і,j:іnteger; begin

for i:=l to 5 do {зовнішній цикл по рядках }

for j:=l to 5 do {внутрішній цикл по стовпцях }

read(a[i,j]) {із клавіатури елементи вводяться через символ пробілу }

end.

Стосовно виведення матриці слід зауважити, що у вікні результатів програми елементи матриці мають подаватись у вигляді таблиці. Тому переводити курсор на новий рядок слід лише після виведення всіх елементів поточного рядка:

var а:агтау[1..5. 1..5] of integer;

і,j:integer;

begin

for i:=1 to 5 do

begin for j:=l to 5 do

write(a[i,j],' '): {вивести елементи рядка }

writeln; {перевести курсор на новий рядок}

end;

end.

Аналогічну структуру має код, що ініціалізує всі елементи матриці деякими значеннями:

var а:аггау[1..5. 1..5] of integer;

і.j:integer; begin

for i:=l to 5 do

for j:=l to 5 do

a[i,j]:=10; {альтернативи: a[i.j]:=random(20):

a[i,j]:=i*j; тощо}

end.

Одна з типових задач — пошук максимального або мінімального елемента мат­риці. Розв'язання цієї задачі нічим принципово не відрізняється від розв'язання аналогічної задачі для одновимірних масивів.

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

Перестановку рядків або стовпців можна виконати лише шляхом послідовних перестановок відповідних елементів. Наведемо фрагмент коду, що демонструє перестановку першого та п'ятого стовпців матриці. Нагадаємо, що для обміну значеннями між двома елементами слід використовувати допоміжну змінну.

var a:array[l..5, 1..5] of integer;

tmp:integer;

begin

for і:=1 to 5 do

begin

tmp:=a[i,1];

a[i,l]:=a[i.5];

a[i,5]:=tmp;

end;

end.

Порядок виконання роботи:

  1. Скласти алгоритм до завдання. Скласти програму. Відладити програму.

  2. Дати відповіді на контрольні запитання.

  3. Оформити звіт.

Контрольні запитання

  1. Як описуються двовимірні масиви?

  2. Як здійснюється звернення до елементу двовимірного масиву?

  3. Як здійснюється введення двовимірного масиву?

  4. Як здійснюється виведення двовимірного масиву?

  5. Який принцип використовується для знаходження мінімального елемента?

Звіт повинен містити:

1. Тему, мету, обладнання лабораторної роботи.

2. Завдання згідно варіанту.

3. Текст програми.

4. Результат виконання програми.

5. Аналіз допущених під час роботи помилок.

6. Висновки.

Викладач А.Г. Смерека

Завдання до лабораторної роботи №5

Варіант 1. Дана цілочисельна прямокутна матриця. Визначити кількість елементів, що дорівнюють нулю.

Варіант 2. Дана цілочисельна прямокутна матриця. Визначити кількість від’ємних елементів.

Варіант 3. Дана цілочисельна прямокутна матриця. Визначити: кількість додатніх елементів.

Варіант 4. Дана цілочисельна квадратна матриця. Визначити добуток елементів матриці.

Варіант 5. Дана цілочисельна квадратна матриця. Визначити суму елементів матриці

Варіант 6. Дана цілочисельна прямокутна матриця. Визначити мінімальний елемент матриці.

Варіант 7. Дана цілочисельна прямокутна матриця. Визначити максимальний елемент матриці.

Варіант 8. Дана цілочисельна прямокутна матриця. Записати на місце від’ємних елементів нулі.

Варіант 9. Дана цілочисельна прямокутна матриця. Знайти суму та кількість додатних елементів.

Варіант 10. Дана цілочисельна квадратна матриця. Знайти суму елементів, як знаходяться на головній та побічній діагоналі.

Варіант 11. Дана цілочисельна квадратна матриця. Замінити елементи головної діагоналі максимальним елементом матриці.

Варіант 12. Дана цілочисельна квадратна матриця. Знайти суму і кількість від’ємних елементів матриці, які знаходяться під головною діагоналлю .