Відмінності операторів repeat і while

· Комп'ютер виходить з циклу оператора repeat тоді, коли умова істинна, а з циклу оператора while - коли умова помилкова.

· While може ні разу не виконати оператор, що стоїть після do. repeat ж хоча б раз оператори, що стоять між repeat і until, виконає.

Так, фрагмент k: = 8; repeat k: = 1 until 3> 2; WriteLn (k) надрукує 1.

А фрагмент k: = 8; while 2> 3 do k: = 1; WriteLn (k) надрукує 8.

· При компіляції оператор while дає трохи більш ефективну програму, ніж оператор repeat.

Часто ці відмінності для початківців малоістотні, тому вибирайте оператор за смаком. Мені, наприклад, набридли паскалевская begin і end, тому я охоче користуюся оператором repeat.

Оператор циклу for

Виконуючи програму друку чисел 3 5 7 9, оператор repeat виконав цикл 4 рази. Те ж саме зробив і оператор while. Однак, зазвичай, коли ми пишемо оператори repeat і while, нам зовсім неважливо знати, скільки разів вони виконають цикл. Проте, існує багато завдань, для вирішення яких цикл потрібно виконати саме певну кількість разів. У цьому випадку зручно використовувати оператор циклу for.

Завдання. 200 раз надрукувати слово ФУТБОЛ.

Спробуємо спочатку вирішити задачу за допомогою оператора goto. Почнемо з такого фрагмента:

metka: WriteLn ( 'ФУТБОЛ');
goto metka

Але тут цикл буде повторюватися нескінченно, а нам потрібно тільки 200 разів. Ми вже бачили, що для виходу з циклу оператор goto потрібно включити до складу оператора if. Крім цього потрібна змінна, яка змінює своє значення від одного виконання циклу до наступного. Придумаємо цієї величини яке-небудь ім'я, скажімо i. Найпростіше завдання вирішує такий фрагмент:

Тут i спочатку дорівнює 1, але до кожного наступного виконання циклу воно збільшується на 1. В перший раз виконуючи оператор if, комп'ютер перевіряє умова 2<=200 и найдя его истинным, выполняет оператор goto metka. Во второй раз проверяется условие 3<=200 и т.д. В 199-й раз компьютер проверяет условие 200<=200 и найдя его истинным, выполняет оператор goto metka. В 200-й раз компьютер проверяет условие 201<=200 и найдя его ложным, выходит из цикла.

У нашому фрагменті "корисну" роботу виконує тільки один рядок з чотирьох - WriteLn ( 'ФУТБОЛ'). Решта три рядки зайняті тим, що забезпечують виконання "корисною" рядки рівно 200 разів. Нам довелося організувати спеціальну змінну, значення якої в кожен момент виконання програми говорить про те, в який раз виконується цикл. Змінна з такою властивістю називається лічильником циклів.

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

LABEL m1, m2; VAR i. Integer; BEGIN i: = 1; m1: if i> 200 then goto m2; WriteLn ( 'ФУТБОЛ'); i: = i + 1; goto m1; m2: END.

VAR i. Integer; BEGIN for i: = 1 to 200 do WriteLn ( 'ФУТБОЛ') END.

Слово for читається "фо", перекладається "для". Слово to читається "ту", перекладається "до". Слово do читається "ду", перекладається "роби". Конструкція for i: = 1 to 200 do по-русски читається так: Для i, що змінюється від 1 до 200, роби оператор, що стоїть після слова do. Сенс повторення тут такий же, як і в операторі while. Оператор, що стоїть після do, теж, звичайно, може бути складовим.

Синтаксис оператора for:

FOR ім'я: = вираження1 TO вираженіе2 DO оператор

Приклад запису: for j: = a + b to2 * s dok: = k + 1.

Пояснення до синтаксичної схемою:

ім'я - це ім'я довільної змінної порядкового типу (див. 5.7 і 12.8), зокрема целочисленной, званої змінної циклу,

вираження1 івираженіе2 - довільні вирази порядкового типу, зокрема - цілого.

Робота оператора for:

Перш за все обчислюється вираження1, і змінної циклу (нехай це буде i) присвоюється його значення. Потім обчислюється вираженіе2 і порівнюється з i. Якщо i> вираженія2, то оператор for завершує свою роботу, так нічого і не зробивши. В іншому випадку виконується оператор, що стоїть після do. Після виконання цього оператора значення i збільшується на 1 і знову порівнюється з вираженіем2. Якщо i> вираженія2, то оператор for завершує свою роботу, інакше знову виконується оператор, що стоїть після do, знову i збільшується на 1 і т.д.

У нашому прикладі змінна i крім того, що забезпечує нам вихід з циклу, ніякої "корисною" роботи не виконує. Ускладнимо ж трохи задачу. Нехай комп'ютер друкує таку інформацію:

10 ФУТБОЛ 11 ФУТБОЛ 12 ФУТБОЛ. 200 ФУТБОЛ

Тут після do варто вже складений оператор.

Чи можна зручно використовувати оператор for для друку такої інформації ?:

100 ФУТБОЛ 99 ФУТБОЛ 98 ФУТБОЛ. 40 ФУТБОЛ

Цілком, так як оператор for дозволяє не тільки збільшувати, а й зменшувати змінну циклу. Однак, для цього не можна писати for i: = 100 to 40, а потрібно писати for i: = 100 downto 40. Читається downto - " 'Даунт", перекладається буквально "вниз до". Відповідно, для виходу з циклу має бути достеменно не умова i> вираженія2, а умова i <выражения2.

Ось об'єднаний синтаксис оператора for:

FOR ім'я: = вираження1 TO DOWNTO вираженіе2 DO оператор

Вертикальна риса між двома елементами конструкції «TOіDOWNTO» говорить про те, що в конструкції повинен бути присутнім один з цих елементів.

Завдання 42: Надрукувати за допомогою оператора for:

Прямий рахунок: -5 -4 -3 -2 -1 0 1 2 3 4 5 Зворотний рахунок: 5 4 3 2 1 0 -1 -2 -3 -4 -5 Кінець рахунку

Схожі статті