Ітерацій

Єдиними формами операторів управління циклами, передбаченими в стандарті Бейсика, є цикл FOR-NEXT і комбінації IF-THEN і GOTO Однак відомі дві основні форми управління циклами, а саме цикл REPEAT-UNTIL (повторювати до), що представляється структограммой

де перевірка умови завершення циклу здійснюється в його кінці, і цикл WHILE (поки ..,

виконувати), що представляється структограммой

де перевірка умови завершення циклу здійснюється на його початку На псевдокоде ці цикли можна описати таким чином:

ПОВТОРЮВАТИ оператори ДО умова і ПОКИ умова ВИКОНУВАТИ оператори

Принципова відмінність між ними полягає в тому, що цикл ПОВТОРЮВАТИ ДО завжди виконується принаймні один раз, у той час як цикл ПОКИ може не виконуватися жодного разу, якщо його умова не виконується

Цикл FOR-NEXT треба розглядати як окремий випадок циклу ПОКИ з умовою, що значення лічильника циклу лежать в певному діапазоні

Якщо ця умова не виконана, то повторення циклу припиняється Проте в деяких системах, наприклад в Бейсике ВВС, перевірка виконання умови здійснюється в кінці циклу FOR-NEXT, так що подібна його реалізація є окремим випадком циклу ПОВТОРЮВАТИ ДО У дійсними-

ності єдиною ітераційної структурою загального вигляду в Бейсике ВВС є ПОВТОРЮВАТИ ДО тому й виявляється, що в цій версії Бейсика перевірка робиться в кінці циклів Таким чином, ці цикли завжди виконуються щонайменше один раз незалежно від містяться в них умов Приклад наступного циклу в Бейсике ВВС

10   REPEAT

20      I=I+1

30 Т = Т + А

40   UNTIL I&gtN

представляється структограммой

а цикл

10   REPEAT

20   …..

30   …..

40   …..

50   UNTIL FALSE

виявляється нескінченним, так як його умова ніколи не виконується (В Бейсике ВВС є дві функції (FALSE і TRUE), що повертають значення БРЕХНЯ і ІСТИНА відповідно) Оператори циклу можна вказувати в одному рядку:

10   REPEAT INPUT A : SUM = SUM+A : UNTIL A&lt0

Версія Бейсика Microsoft служить прикладом другий ітераційної структури, ПОКИ У цій системі перевірка умов як в циклі WHILE, так і в циклі FOR-NEXT здійснюється на початку циклу, а оператор REPEAT-UNTIL відсутня У версії Microsoft цикл починається з оператора * WHILE умова потім йде група операторів, а кінцем циклу служить оператор

WEND

У наведеному нижче прикладі використана програма бульбашкового сортування (див підрозд 451)

Згадана програма могла проводити не

є необхідними перевірки значень елементів вже впорядкованого масиву, поки не виконаються всі N-1 проходів зовнішнього циклу

1000 Rем ФРАГМЕНТ ПРОГРАМИ бульбашкового сортування

1010 REM припускали, що значення МІСТЯТЬСЯ

1020 REM У МАСИВІ А <1) ..... A (N) і сортує

1030 REM У порядку убування

1034 I=N

1038 SWAP = 1: REM ІСТИНА НЕ ОДНО НУЛЮ

1040 WHILE SWAP

1045   SWAP=0

1050   FOR J=l TO I-1

1060     IF A(J)&gt=A(J+1) THEN 1100

1070     TEMP=A(J)

1080      A(J)=A(J+1)

1090     A(J+1)=TEMP

1095     SWAP=1

1100   NEXT J

1105   I=I-1

1110 WEND

1120 REM КІНЕЦЬ СОРТУВАННЯ

ЯКЩО конструкція WHILE в системі відсутній, то її можна реалізувати за допомогою циклу

REPEAT, оскільки дії операторів

WHILE умова WEND 197

повністю еквівалентні діям операторів

IF умова THEN REPEAT UNTIL NOT умова

відповідна конструкції WHILE, еквівалентна

Це досить заплутане перетворення, і тому у випадку, якщо яка-небудь з двох ітераційних конструкцій відсутня, її найкраще імітувати підходящої комбінацією операторів IFTHEN і GOTO

Деякі автори рекомендують всередині циклу застосування конструкції, яку на псевдокоде можна записати як ЯКЩО умова, ТО ВИХІД. Її дія полягає в передчасному завершенні циклу, якщо виконано вказане в ній умову По суті, вона являє собою не що інше, як передачу управління за межі циклу першого оператору, що стоїть за кінцем циклу Таким чином, при досягненні цього оператора не відомо, чи відбулося це в результаті завершення циклу після виконання його умови або ж в результаті виконання умови в операторі IF Хороші методи розробки не допускають такої невизначеності, до того ж подібні дії можуть викликати труднощі при теоретичному доказі правильності програми Тому краще за все не користуватися псевдокодом подібного типу, як би ця конструкція не здавалася спокусливою для застосування на практиці Крім того, вона не має задовільного

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

Джерело: Уолш Б Програмування на Бейсике: Пер з англ М: Радіо і звязок, 1988 336 с: ил

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*