- •Модуль реалізації алгоритмів на графах з візуалізацією етапів розробки
- •Анотація
- •1 Призначення та область застосування об’єкту проектування
- •1.1 Призначення та область застосування
- •1.2 Огляд способів та засобів розробки
- •1.2.1 Побудова блок-схем алгоритмів програм.
- •1.2.2 Правила побудови блок-схем
- •1.2.5 Створення нового проекту
- •1.2.6 Створення блок-схеми та генерація коду
- •1.2.3 Створення блок схем алгоритмів за допомогою fcEditor
- •1.2.4 Огляд fceDitor
- •1.2.7 Експорт блок схеми алгоритму
- •1.2.8 Імпорт блок схеми
- •1.3 Огляд програмних та апаратних засобів
- •1.3.1 Псевдо код
- •1.3.2 Мови програмування високого рівня
- •1.4 Постановка задачі на розробку
- •2 Проектування модуля реалізації алгоритмів на графах з візуалізацією етапів розробки
- •2.1 Поняття графа
- •2.1.1 Орієнтований граф
- •2.1.2 Змішаний граф
- •2.2 Цикли та умовний оператор if
- •2.2.1 Безумовні цикли
- •2.2.2 Цикл з передумовою
- •2.2.3 Цикл з післяумовою
- •2.2.4 Цикл з виходом із середини
- •2.2.5 Цикл з лічильником
- •2.2.6 Вкладені цикли
- •2.2.7 Спільний цикл
- •2.2.8 Умовний оператор if
- •2.3 Реалізація модуля побудови алгоритмів на графах з візуалізацією процесу розробки
- •2.4. Реєстр змінних
- •2.5 Алгоритм побудови псевдокоду
- •2.5.1 Генерація псевдокоду лінійного алгоритму
- •2.5.2 Генерація псевдокоду нелінійного алгоритму
- •2.6 Форматування псевдокоду
- •2.7 Аналіз правильності побудови графу
- •2.7.1 Алгоритм аналізу перевірки правильності графу
- •2.8 Вибір технології та мови програмування
- •3 Тестування системи
- •Висновки
- •Список використаних джерел
2.2.6 Вкладені цикли
Існує можливість організувати цикл всередині іншого циклу. Такий цикл буде називатися вкладених циклом. Вкладений цикл по відношенню до циклу, в тіло якого він прикріплений буде називатися внутрішнім циклом, і навпаки цикл, в тілі якого існує вкладений цикл буде називатися зовнішнім по відношенню до вложеного. Всередині вкладеного циклу в свою чергу може бути вкладений ще один цикл, утворюючи наступний рівень вкладеності і так далі. Кількість рівнів вкладеності як правило не обмежується.
Повне число виконань тіла внутрішнього циклу не перевищує добутку числа ітерацій внутрішнього і всіх зовнішніх циклів. Наприклад взявши три вкладених один в одного цикли, кожен по 10 ітерацій, отримаємо 10 виконань тіла для зовнішнього циклу, 100 для циклу другого рівня і 1000 в самому внутрішньому циклі.
Одна з проблем, пов’язаних з вкладеними циклами - організація дострокового виходу з них. У багатьох мовах програмування є оператор дострокового завершення циклу (break в Сі, exit в Турбо Паскаль, last в Perl і т. п.), але він, як правило, забезпечує вихід тільки з циклу того рівня, звідки викликаний. Виклик його з вкладеного циклу призведе до завершення тільки цього внутрішнього циклу, зовнішній же цикл продовжить виконуватися. Проблема може здатися надуманою, але вона дійсно іноді виникає при програмуванні складної обробки даних, коли алгоритм вимагає негайного переривання в певних умовах, наявність яких можна перевірити тільки в глибоко вкладеному циклі.
Рішень проблеми виходу з вкладених циклів кілька.
Найпростіший – використовувати оператор безумовного переходу goto для виходу в точку програми, безпосередньо наступної за вкладеним циклом. Цей варіант критикується прихильниками структурного програмування, як і всі конструкції, що вимагають використання goto. Деякі мови програмування, наприклад Modula-2, просто не мають оператора безумовного переходу, і в них подібна конструкція неможлива.
Альтернатива – використовувати штатні засоби завершення циклів, у разі необхідності встановлюючи спеціальні прапори, які потребують негайного завершення обробки. Недолік – ускладнення коду, зниження продуктивності без будь-яких переваг, крім теоретичної «правильності» із-за відмови від goto.
Розміщення вкладеного циклу в процедурі. Ідея полягає в тому, щоб вся дії, що можливо знадобитися перервати достроково, оформлюється у вигляді окремої процедури, і для дострокового завершення використовувати оператор виходу з процедури (якщо такий є в мові програмування). У Сі, наприклад, можна побудувати функцію з вкладених циклом, а вихід з неї організувати за допомогою оператора return. Недолік – виділення фрагмента коду в процедуру не завжди логічно обґрунтовано, і не всі мови мають штатні засоби дострокового завершення процедур.
Скористатися механізмом генерації та обробки виключень (виняткових ситуацій), який є зараз у більшості мов високого рівня. У цьому випадку в нештатній ситуації код у вкладеному циклі генерує виняток, а блок обробки виключень, в який поміщений весь вкладений цикл, перехоплює і обробляє його. Недолік – реалізація механізму обробки винятків у більшості випадків така, що швидкість роботи програми зменшується. Правда, в сучасних умовах це не особливо важливо: практично втрата продуктивності настільки мала, що має значення лише для дуже небагатьох додатків.
Нарешті, існують спеціальні мовні засоби для виходу з вкладених циклів. Так, в мові Ада програміст може помітити цикл (верхній рівень вкладеного циклу) міткою, і в команді дострокового завершення циклу вказати цю мітку. Вихід відбудеться не з поточного циклу, а з усіх вкладених циклів до поміченого, включно.
