Приклад програмування циклів і умовних переходів

 

            Програмування циклів на обчислювальній системі під управління потоком даних пов'язане з поряд особливостей. Розглянемо їх на приведеному нижче прикладі.

· Команда в обчислювальній системі готова до виконання якщо для неї готові керуюче слово і обидва операнди. Програмування циклів пов'язане з повторюваністю виконання певних команд. Операнди команд тіла циклу можна розбити на два класи. Перший клас – операнди, що обчислюються на попередній ітерації, до них так само відноситься і змінна циклу (у прикладі – i, f). На першому кроці операнди поступають з пристроїв введення, а потім з кожної наступної ітерації. Так, для команди 4 (порівняння змінної циклу з кінцевим значенням) з пристрою введення поступає початкове значення змінної циклу i=1, а наступні змінною поступають з попередньої ітерації. Другий клас операндів – константи, значення яких не міняється в циклі. До таких операндів відносяться кількість ітерацій циклу, константи для виконання операцій. Під час вступу команди на обчислювальний блок операнди з відповідних елементів пам'яті операндів/асоциативній пам'яті віддаляються за винятком констант. Вони вводяться спочатку з пристрою введення і знаходяться у відповідному елементі пам'яті. Константи на малюнку нижче позначені зірочкою, а в програмі поле «Константа» такого операнда повинно містити «1». Необхідно пам'ятати, що двох констант у однієї команди бути не може, інакше це приведе до постійного виконання однієї і тієї ж команди, яка весь час знаходитиметься в стані готовності.

· Крім того, константи можуть не тільки вводитися з пристроїв введення, але і обчислюватися (наприклад в команді 3 обчислюється константа – кількість ітерацій циклу)

· Кожна команда повинна мати операнди з різними номерами (поле «Номер операнда»). Причому в більшості випадках важливий порядок операндів. Наприклад команда «віднімання» виконує операцію «Операнд№0»–«Операнд№1». А для команд управління операнд з номером 1 є службовим (наприклад у вентиля він повинен бути рівний TRUE або FALSE, тобто «1» або «0»).

· Результатом операцій «2-Розмножувач» і «N-Розмножувач» є група операндів з різними адресами і однаковими значеннями полів «Номер операнда». Тому команди, для яких призначалися ці операнди повинні їх приймати на однакові входи (наприклад команда №11 обчислює операнди з номером «0» для команд 13 и 7).

· Як видно з рисунку цикл містить 3 незалежних гілки: виведення результату, накопичення результату і інкрементування змінної циклу. Важливим елементом циклу є синхронізація незалежних гілок, інакше (див. приклад) при великому об'ємі обчислень в тілі циклу змінна циклу може бути інкрементована кілька разів, і результат обчислень буде невірним. Роль синхронізації виконує «Повторювач» або в прикладі команда №15. Ця команда «затримує» ініціалізацію нової ітерації циклу до тих пір, поки не буде виконано тіло циклу на поточній ітерації.

· Команда №14 є допоміжною, служить для перетворення поля «Номер операнда» (див. пункт 3), оскільки команда №12 результатом має операнд з номером «0», а для команди №15 потрібний операнд з номером «1».

 

ПРИКЛАД

Фрагмент програми на Паскалі:

 

a:=1; b:=-2; f:=2;

n:=(a+3)*(b+3);

FOR i:=1 TO n do

f:=f+2;

write(f);

 

Граф алгоритму на описаній мові для обчислювальної системи:

 

 

Програма представлена у файлі прикладу «ExCycle.alg»

 




Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: