
- •П. Г. Ратайчук, а. М. Тихоненко
- •Алгоритмічна мова
- •Курс лекцій
- •Черкаси – 2003
- •Основні поняття навчальної алгоритмічної мови
- •Величини в навчальнiй алгоритмiчнiй мовi
- •Вирази в навчальнiй алгоритмiчнiй мовi
- •Загальні правила опису алгоритмів на нам
- •Переклад алгоритмiв на мову Паскаль
- •Лiнiйнi алгоритми
- •Команди побудови розгалужень в нам
- •Наступнi алгоритми вимагають застосування команди розгалуження
- •Наступнi алгоритми вимагають застосування команди вибору
- •Команди повторення нам
- •Приклади алгоритмів, що вимагають застосування iтерацiйного циклу
- •Лiнiйні таблиці
- •Приклади алгоритмів
- •Прямокутні таблиці
- •Приклади алгоритмів прямокутних таблиць
- •Лiтерні величини
- •Приклади алгоритмів літерних величин
- •Список рекомендованої літератури
- •Про авторів
- •Алгоритмічна мова
- •18028, М. Черкаси, вул. Смілянська, 120/1
Прямокутні таблиці
Розглянемо алгоритми для роботи з прямокутними таблицями. Основна особливiсть запропонованих алгоритмiв полягає у поданнi прямокутної таблицi як лiнiйної таблицi лiнiйних таблиць. При цьому складовими прямокутної таблицi є лiнiйнi таблицi - рядки. Це дає можливiсть звести до елементарних традицiйно складнi задачi за рахунок того, що зникає потреба у використаннi громiздких вкладених циклiв, а також з'являється можливiсть використовувати як допомiжнi алгоритми роботи з лiнiйними таблицями.
Указану можливiсть надає також i мова Паскаль.
Якщо елементи деякого масиву теж є масивами, то таку структуру можна розглядати як масив масивiв або як один масив, вимiрнiсть якого на одиницю бiльша вiд вимiрностi даного.
Type
Date1 = Array[1..2] Of Array[1..3] Of Real;
Var
X: Date1;
Об'явлено тип Date1 одновимiрного масиву. Базовий тип Array[1..3] Of Real, отже масив типу Date1 може мiстити одновимiрнi масиви. Можливi значення iндексiв 1 i 2. Звернення X[1] є зверненням до першого складового одновимiрного масиву, звернення X[2] - до другого.
В свою чергу, складовi одновимiрнi масиви базового типу мають власний базовий тип Real. Отже, вони можуть мiстити дiйснi числа. Можливi значення iндексу для них 1, 2 i 3. Звернення X[1][2] є зверненням до другого елемента першого складового масиву, звернення X[2][3] є зверненням до третього елемента другого складового масиву.
Тепер розглянемо такий опис:
Type
Date2 = Array[1..2,1..3] Of Real;
Var X: Date2;
Тут об'явлено тип Date2 двовимiрного масиву з базовим типом Real. Оскiльки типи iндексiв в обох випадках спiвпадають, то тип Date2 компiлятор вважає аналогiчним типу Date1, тобто розташування елементiв у пам'ятi для обох типiв буде однаковим. Отже, звернення X[1,2] та X[2,3] - це будуть звернення до тих же елементiв, що i звернення X[1][2] та X[2][3]. Рiзниця мiж обома описами полягає в тому, що у другому випадку є неможливими звернення виду X[1] або X[2].
Приклади алгоритмів прямокутних таблиць
Приклад 1. "Обмiн рядкiв". Задано прямокутну таблицю C, що мiстить M рядкiв та N стовпчикiв з дiйсними числами. Переставити мiсцями два заданих рядки таблицi.
алг ОбмР(арг M,N,K1,K2: цiл; рез C: дiйс таб[1..10,1..10])
поч X: дiйс таб[1..10]
X := C[K1]; C[K1] := C[K2]; C[K2] := X
кiн
Завдяки тому, що прямокутна таблиця представлена як лiнiйна таблиця лiнiйних таблиць, з'являється можливiсть виконувати пряме присвоєння мiж лiнiйними таблицями. При цьому обмiн рядкiв виконується як обмiн звичайних змiнних.
Приклад 2. "Мiнiмальний iз максимальних". Задано прямокутну таблицю C, що мiстить M рядкiв та N стовпчикiв з дiйсними числами. Знайти мiнiмальний iз максимальних елементiв рядкiв.
алг MINMAX(M,N: цiл, C: дiйс таб[1..10,1..10]; рез km,kn: цiл)
поч i,j: цiл
km := 1; kn := МАХЕЛ(N,C[1])
для i вiд 2 до M
виконувати пс j := МАХЕЛ(N,C[i]);
якщо C[i,j]<C[km,kn] то пс km:=i; kn:=j кс кс
кiн
Даний алгоритм використовує як допомiжний алгоритм пошуку максимального елемента у лiнiйнiй таблицi. Результатом даного алгоритму є порядковi номери рядка та стовпчика, на перетинi яких знаходиться шуканий елемент. В алгоритмі використовується звернення до функції про відшукання мінімального та максимального елемента в лінійних таблицях.
Приклад 3. "Таблиця множення". Створити прямокутну таблицю на M рядкiв та N стовпчикiв цiлих чисел. Кожне число таблицi має дорiвнювати добутку вiдповiдних номерiв рядка та стовпчика.
алг ТаблМнож(M,N: цiл; рез C: цiл таб[1..10,1..10])
поч i,j: цiл
для i вiд 1 до M виконувати
для j вiд 1 до N виконувати C[i,j] := i * j
кiн
Для розв'язування задачi потрiбний вкладений цикл: зовнiшнiй - по рядках, внутрiшнiй - по стовпчиках.