Вкладені цикли FOR

У наведеному на рис 32 прикладі показано, яким чином один цикл FOR можна використовувати всередині іншого Зверніть увагу на те, що внутрішній цикл повністю міститься у зовнішньому Така структура називається вкладенням циклів FOR

Рис 32 Приклад використання одного циклу FOR всередині іншого

Подібне вкладення зображується наступною діаграмою-

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

Так як в операторі PRINT (рядок 40) вказана крапка з комою, то значення z друкуватимуться на одному рядку доти, поки управління не вийде з внутрішнього циклу, після чого оператор PRINT в рядку 60 почне новий рядок для циклу, керованого змінної I Таким чином, висновок програми буде мати наступний вигляд:

Врахуйте, що в Бейсике ВВС спосіб зображення числових даних такий, що в наведеному вище прикладі стовпці результатів зіллються, тому при роботі з цією версією Бейсика рядок 40 треба замінити на оператор

40 PRINT &quot "Z

Нижче демонструються різні можливості застосування операторів F0R-NEXT на прикладі трьох вкладених циклів:

20  B=4

30 FOR I = 100 ТО 200 STEP 60

40 PRINT ПОТОЧНЕ ЗНАЧЕННЯ I =; I

50   FOR J=3 TO 2 STEP -1

60 PRINT ПОТОЧНЕ ЗНАЧЕННЯ J =; J

70 FOR K = A ТО В

80 PRINT Поточне значення К = ; До

Якщо можливе застосування додаткових форм оператора NEXT, то оператор NEXT без імені змінної відзначає кінець циклу, розпочатого безпосередньо передує йому оператором FOR У цьому випадку рядки 90, 100, 110 можна переписати у вигляді

90  NEXT

100  NEXT

110  NEXT

А якщо допускається і друга додаткова форма, то ці рядки можна замінити рядком

90 NEXT I, J, К

б показала, що всі цикли закінчуються в одному і тому ж місці (перші змінні відповідають зовнішнім циклам)

І, нарешті, останнє: якщо використовувані в операторі FOR змінні не є цілими, то при змінах значення керуючої змінної обчислення будуть проводитися наближено і момент завершення циклу може залежати від точності обчислень, забезпечуваною Вашою системою Це дуже неприємний момент, оскільки через це можуть час від часу виходити дивовижні результати (наприклад, якщо в циклі з великим числом повторень використовується крок циклу з дробової частиною)

331 ПРИКЛАД ПРОГРАМИ

У цьому підрозділі ілюструється застосування трьох вкладених циклів Наведена тут програма обчислює ймовірність отримання заданої суми очок при киданні трьох гральних кісток Ця ймовірність визначається як відношення числа тих варіантів, при яких випадає задана

сума очок N, до числа всіх варіантів (6 * 6 * 6 = 216 варіантів) Варіанти із заданою сумою очок підраховуються в рядку 80, а складові цю суму окуляри друкуються в рядку 90 Якщо сума очок відрізняється від N, то відбувається перехід з рядка 70 до рядка 100, тобто зазначені вище дії обходяться Відповіді користувача підкреслені:

10 INPUT N

20 PRINT

30 С = 0

40 FOR D1=1 TO 6

50   FOR D2=l TO 6

60     FOR D3=l TO 6

70        IF(D1+D2+D3&lt&gtN) THEN 100

80 С = С +1

90       PRINT D1 D2 D3

100     NEXT D3

110   NEXT D2

120 NEXT D1

130 PRINT N випадає В; С ВИПАДКАХ&quot

140 PRINT ОТСЮДА ЙМОВІРНІСТЬ; N Рівних; С/216

150 END RUN

?6

1 1 4

1 2 3

1 3 2

1&nbsp&nbsp&nbsp 1 2 1 3 2 2 2

2&nbsp 3 1

3&nbsp 1 2

3&nbsp 2 1

4&nbsp 1 1

6 випадає в 10 ВИПАДКАХ ЗВІДСИ ЙМОВІРНІСТЬ 6 рівних 46296ЗЕ-2 END AT LINE 150

Структура цієї програми зображується наступною діаграмою:

При роботі з Бейсиком ВВС рядок 90 треба модифікувати таким чином: 90 PRINT D1 ; D2″ ; D3

Джерело: Уолш Б Програмування на Бейсике: Пер з англ М: Радіо і звязок, 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>

*

*