Основа програмування – цикли, наприклад, for. Pascal. Як і будь-який комп'ютерний мову, він також містить такі конструкції у своєму синтаксисі.
Призначення циклічних операторів
Типова задача – змусити комп'ютер виконувати одне і те ж дію кілька разів. Ось тут і рятують конструкції, що дозволяють організувати повторення коду. Отже, цикл у програмуванні – це багаторазово виконується дія, що організовується за допомогою засобів мови. Мова програмування Pascal включає кілька таких конструкцій: for – повторення з параметром; while – повтор з передумовою; repeat until – повторення з післяумовою.
Незважаючи на уявну простоту і очевидність циклічних конструкцій, починаючі програмісти стикаються з низкою проблем при їх реалізації. Найбільші складності викликає постановка умов виходу з циклу. В цьому відношенні лічильний оператор for є самим нехитрим.
Структура
Щоб записати конструкцію повторення з параметром, потрібно набрати наступний код: FOR {a} := {b} TO {c} DO {d}. У прикладі зарезервовані слова мови для зручності написані великими літерами, на практиці можна використовувати рядкове накреслення. Використовувані змінні і оператори наведені у фігурних дужках. Вони означають: { a} – змінна будь-якого рахункового типу, найчастіше INTEGER; { b}, { c} – вирази рахункового типу, такого ж, як і { a} ; { d} – довільний оператор/оператори мови, звані також тілом циклу. Відпрацьовуючи конструкцію for , Pascal розраховує значення { b} , присвоює { a} := { c} , після чого запускається повтор дій:
перевірка умови { b} <= { c} , при виконанні якого цикл припиняє свою роботу; запуск оператора {d} ; збільшення значення {a} на одиницю, тобто { a} := { a} + 1 .
Оскільки кількість повторень всередині тіла for відомо, дану конструкцію відносять до детермінованим циклів.
Приклад
Щоб зрозуміти, як буде виконуватися for далі , наведено приклад коду на мові паскаль для «чайників». s := 0; for a := 1 to 5 do begin s := s + a; end; writeln(s); Розбираючись в написаних інструкціях, можна записати значення в кожній ітерації: 1-я ітерація: a = 1; s = 1 ; 2-я ітерація: a = 2; s = 3 ; 3-я ітерація: a = 3; s = 6 ; 4-я ітерація: a = 4; s = 10 ; 5-я ітерація: a = 5; s = 15 . У підсумку користувач побачить на екрані число «15» – суму чисел від 1 до 5. Щоб зробити першу програму більш універсальною, слід замінити числа 1 і 5 змінними.
Часті помилки
При використанні циклу for , Pascal вимагає уважного ставлення до значень { a}, { b}, { c} . Якщо не виконувати правила написання програм, компілятор повідомить про помилку. Таких правил п'ять. Лічильник (параметр циклу) { a} задається цілим числом. Значення { b} і { c} також повинні мати цілочисельний тип. Наприклад, потрібно прорахувати значення кута, заданого в радіанах від 0 до p. Але наступна запис коду буде невірною for a := 0 to pi do. Рішення – використовувати функції округлення trunc () або round (). Перша відкидає дробову частину дійсного числа, друга – округлює його до найближчого цілого. Якщо користувач помилився і вказав {b} < {c} оператор {d} жодного разу не відпрацює. Після виконання циклу лічильник { a} може мати будь-яке значення. Хоча це суперечить логіці, але на практиці { a} <> { c} . Висновок: не рекомендується звертатися до { a} після виконання конструкції for . У тілі циклу (тобто після слова do ) не рекомендується використовувати будь-які оператори, що змінюють значення параметра { a} . Дотримання цього правила помилки не викличе, але буде порушена логіка програми. Таке правило є загальноприйнятим і відповідає «хорошого тону» у програмуванні: щоб було зручно працювати з кодом, який необхідно записувати оператори тіла циклу не з першої колонки. Наприклад, роблячи 2-3 пробілу ліворуч або використовуючи клавішу Tab.
Дане розпорядження стосується не тільки до мови паскаль. Для «чайників» воно дозволяє швидко знайти і виправити помилку в інструкціях.
Типові завдання
Припустимо, необхідно виконати табуляцію функції виду f( x) = 3* x + 15 , тобто отримати таблицю з M значень функцій в діапазоні[x1; x2], де x 1 і x 2 – мінімальне та максимальне значення аргументу. Вирішувати цю та подібні завдання допомагає конструкція for . Pascal рекомендує записати програмний код наступним способом: for a := 1 to M do begin x:= x1+(x2–x1)*(a–1)/(M–1); f:= 3*x + 15; writeln (x, ' ', f); end. Оскільки крок зміни x не задано, значення аргументу розраховується в ході програми при кожній ітерації за допомогою формули: x:= x1+( x2– x1)*( a–1)/( M–1).
Цикл у циклі
Зважаючи на те, що усередині конструкції дозволяється використовувати будь-які оператори, допускається помістити в її тіло ще один цикл for . Pascal має стандартне опис для даної задачі, схоже з іншими мовами програмування: FOR {a} := {b} TO {c} DO FOR {a1} := {b1} TO {c1} DO
Щоб конструкція працювала вірно, необхідно дотримуватися умова: лічильники в кожному циклі повинні бути різні. Інакше внутрішній цикл буде змінювати значення параметра зовнішнього циклу, що призведе до логічних помилок.