ОПЕРАТОРИ FOR-NEXT

У мові Бейсік передбачена пара операторів, що забезпечують побудову циклу того ж виду, що і в наведеному вище прикладі (див розд 33) Це оператори FOR і NEXT, які облямовують групу операторів, складають тіло циклу Наприклад, наведену вище програму можна з їх допомогою переписати у вигляді

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

Всі оператори між операторами FOR і NEXT виконуються при I = 1, I = 2, I = 3 і так далі до I = N Після цього управління передається оператору, наступному за оператором NEXT Отже, у нашому прикладі буде введено, перетворено і надруковано N значень температури, після чого програма завершує свою роботу

Цю програму можна ілюструвати наступною діаграмою:

ВВЕДЕННЯ N

ДЛЯ I = 1 ДО N

ВВЕДЕННЯ З F = С * .. ДРУК F КІНЕЦЬ

Оператор FOR

Загальна форма запису: FOR i=j ТО k або

FOR i =j ТО k STEP m

де i числова керуюча змінна, а j, k, m можуть бути числовими виразами (тобто

константами, змінними, а також комбінаціями змінних і констант)

Нижньою межею циклу, розпочатого операторомFOR,    служить оператор NEXT  i  Всі оператори між FOR і NEXT виконуються при

i = j, i = j + m, i = j +2 m, i = j +3 m, i = до тих пір, поки не буде досягнута межа k

Іншими словами, якщо т позитивно, то цикл триває весь час поки ik Якщо m негативно, то цикл триває, поки ik Якщо додаткове службове слово STEP (Крок) відсутня, то величина кроку m передбачається рівний +1

Наведемо кілька прикладів Програма

10 FOR I = 1 ТО 10

20     PRINT I

30   NEXT I

надрукує всі числа від 1 до 10, Програма

10  FOR K=1 TO 10 STEP 2

20 PRINT До

30 NEXT До

надрукує всі непарні числа від 1 до 10 Програма

10 Х = 2

20  Y=3

30   FOR P = X+Y TO X*Y

40     PRINT P

50  NEXT P

надрукує значення 5 і 6, а програма

10 FOR А = 10 ТО 1 STEP -1

20     PRINT A

30  NEXT A

надрукує числа від 10 до 1 в порядку убування

У багатьох системах з Бейсиком, наприклад Sinclair ZX81, перевірка виходу за межі циклу здійснюється відповідно до стандарту, на початку циклу Тому при виконанні операторів

10  FOR I=3 TO 2

20     PRINT I

30  NEXT I

нічого не буде надруковано і управління буде передано в рядок 40 Це відповідає прикладу програми з розд 33 і структограмме ПОВТОРЮВАТИ, ПОКИ.

В інших системах з Бейсиком, наприклад ВВС, стандарт не дотримується Цикл виконується, принаймні, один раз, і перевірка його завершення проводиться в кінці циклу Подібному підходу відповідає модифікована програма з розд 33 і структограмма ПОВТОРЮВАТИ ДО. У цьому випадку наведена вище програма надрукує 3

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

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

10 FOR I = 1 ТО 10

20 I = I +1 (керуюча змінна I змінюється) 30 NEXT I

10 FOR А = 2 ТО 8 STEP 2

20 INPUT I, А (керуюча змінна вказана в операторі INPUT)

30 I = 10 + I + А

40 NEXT A

Не слід розраховувати на те, що після виходу з циклу керуюча змінна буде мати певне значення У прикладі

10 FOR L=1 TO 10

20     PRINT L

30 NEXT L

40 PRINT L

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

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

10 А = 2

20  FOR I = A TO 4

30 А = А +1

40     PRINT I

50 NEXT I видає правильні результати 2, 3 і 4

Оператор NEXT Загальна форма запису: NEXT i

або

NEXT де i – числова змінна

Завершує цикл FOR, Більшість версій Бейсика для кожного оператора FOR вимагає наявності окремого оператора NEXT із зазначенням імені керуючої змінної Проте в деяких версіях допускається застосування оператора NEXT без зазначення імені керуючої змінної або навіть (у випадку вкладених циклів) із зазначенням декількох імен керуючих змінних

Для виходу з циклу FOR-NEXT, не чекаючи його повного завершення, можна використовувати оператори IF або GO TO Правда, робити це не рекомендується, так як такий вихід із циклу може викликати непорозуміння і, крім того, його, як правило, не можна зобразити структограммой І вже у всякому разі, ніколи не передавайте управління всередину циклу FOR-NEXT, так як це може призвести до непередбачуваних результатів

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

*

*