For i := 1 to n do


Оператор циклу з параметром (з лічильником) for

Оператори повторення

Тема: Оператори циклу в мові Паскаль. Цикл з параметром. Цикл з передумовою. Цикл з післяумовою. Порівняльний аналіз операторів циклу. Оператор переходу.

End

Then

Begin

Else

End

Begin

Then

Складений оператор

Оператор переходу

Оператор процедури

Оператори мови Pascal

Означення. Оператори призначені для опису дій, які будуть виконані при реалізації алгоритму.

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

Згідно синтаксису оператори мови Pascal діляться на дві групи:

ü прості оператори;

ü структурні оператори.

 

Оператори відділяються один від одного символом (;). Цей символ не є частиною операторів, це роздільник операторів. Тому після останнього оператора програми і після останнього оператора в складеному операторі, тобто перед ключовим словом end, крапку з комою ставити не обов’язково. Якщо цей символ все ж таки поставили, то вважається, що після нього розташований порожній оператор і це не є помилкою .

Означення. Простим оператором є такий оператор, що не містить у собі інших операторів.

Простий оператор – це:


ü Оператор присвоєння

ü Оператор процедури

ü Оператор переходу

ü Порожній оператор.


Оператор присвоєння

Означення. Оператор присвоєнняскладається з

ü ідентифікатора змінної або користувацької функції,

ü символу присвоєння (:=)

ü виразу.

Наприклад:

A := В * З;

і := j div k;

Flag := (i <> 1) and (B < C);

Mas1 := Mas2;

Reс1 := Rec2;

Set1 := Set2;

 
 

Оператор присвоєння, в лівій частині якого стоїть ідентифікатор функції, може розташовуватися тільки в межах тіла функції.

Виконання оператора присвоєння приводить до обчислення значення, що визначається виразом, і присвоєння цього значення змінній, що ідентифікується ім’ям, яке стоїть ліворуч від символу присвоєння. У випадку якщо ліворуч стоїть ідентифікатор функції, виконується визначення результату функції,тобто значення, що повертає функцією в точку виклику.

Допускається присвоєння значень не тільки простих, але й структурованих типів, таких як масиви, записи й множини.

Обов’язковою є вимога: щоб тип виразу в правій частині оператора й тип змінної або результату функції в лівій частині оператора були сумісні по присвоєнню.

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

 
 

Оператор процедури без параметрів складається тільки з ідентифікатора процедури.

 

Наприклад,

Summa (A, m, n, Sum)

Initialize;

Swap (X, Y);

Виконання оператора процедури приводить до активізації дій, описаних у її тілі. Зазначені в операторі фактичні параметри повинні відповідати описаним у заголовку процедури формальним параметрам по типу, кількості й взаєморозміщенню. Перед активізацією тіла процедури відбувається передача фактичних параметрів відповідним формальним параметрам.

Зауваження. Аналогічні дії виконуються при виклику методів, описаних в об’єктних типах.

Наприклад,

program Prim; procedure Hello; begin WriteLn(‘Hello’); end; begin Hello; end.   program Prim; uses Crt; procedure Hallo(Stroka); begin WriteLn(Stroka); end; Begin Clrscr; GoToXY(40,15); Hello(‘Привіт!’); end.

 

 
 

Оператор переходу складається із ключового слова goto, після якого вказується мітка.

Виконання оператора gotoприводить до передачі керування на оператор, перед яким стоїть зазначена в операторі gotoмітка.

Обов’язковою є вимога, щоб мітка, зазначена в операторі переходу, розташовувалася в тому ж блоці або модулі, що й сам оператор goto. Це означає, що за допомогою оператора переходу заборонена передача керування усередину процедури (функції), а також передача керування із процедури (функції) у основну програму.

Варто відмітити, що оператор goto суперечить принципам структурного програмування, і його використання в програмах не рекомендується. Особливо небезпечним є застосування оператора переходу в Turbo Pascal, у якому значно ослаблені, у порівнянні зі стандартом мови Pascal, обмеження на використання goto. Зокремакомпілятор не видає повідомлення про помилку передачі керування усередину структурних операторів (наприклад, оператора for), що найчастіше приводить до непередбачених дій програми.

З огляду на сказане, можна порекомендувати взагалі виключити використання оператора переходу при написанні програм. Тим більше, що в Turbo Pascal включені певні процедури Break і Continue, які спеціально призначені ситуацій, при яких найчастіше і потрібен оператор goto.

Порожній оператор

Порожній оператор – це крапка (.) Використовується там, де за синтаксисом оператор необхідний, однак ніяких дій виконувати не потрібно.

Структурні оператори

Означення. Структурні оператори містять у собі інші оператори й управляють послідовністю їхнього виконання.

В Turbo Pascal структурними операторами є:

1. складений оператор;

2. умовні оператори;

ü оператор альтернативи if;

ü оператор вибору case;

3. оператори циклу:

ü оператор циклу з передумовою while;

ü оператор циклу з післяумовою repeat;

ü оператор циклу з лічильником for;

4. оператор для записів with.

Складений оператор поєднує групу операторів у єдине ціле, після чого вони можуть вважатися одним оператором.

Складений оператор складається з послідовності поєднуваних операторів, які розташовуються між ключовими словами beginі end.


Складений оператор використовується в тих випадках, коли синтаксис мови допускає в певній точці програми вказівку тільки одного оператора, а по алгоритму в цьому місці необхідно виконати групу операторів. Як правило, складений оператор використовується спільно зі структурними операторами.

Умовні оператори

 
 

В Turbo Pascal включені два умовних оператори – if і case, кожний з яких може бути записаний у двох формах: повній й неповній, що відповідає чотирьом узагальненим керуючим конструкціям алгоритмів. Синтаксична діаграма умовного оператора має такий вигляд.

 

Хоча обоє операторів ifі case по своїй суті є умовними, однак, історично склалося так, що оператором умови (умовним оператором) називається оператор if, а оператор case називається оператором вибору або оператором варіанта. Надалі будемо дотримуватися цієї історичної термінології.

Умовний оператор if

if Вираз thenОператор1 else 0ператор2;
Умовний оператор if, як відзначалося вище, може бути записаний у повній і неповній формах, які мають такий вигляд.

Неповна форма: Повна форма:

 

 

При виконанні умовного оператора спочатку обчислюється значення виразу,результат якого може приймати тільки логічний тип (True, False), а потім, залежно від значення результату, виконується або Оператор1,щостоїть після ключового слова then (якщо результат дорівнює True), або 0ператор2,щостоїть після ключового слова else (якщо результат дорівнює False).

Синтаксична діаграма оператора ifпоказана нижче.

 
 

 

 


У випадку, коли оператор ifзаписаний у неповній формі, при значенні результату False керування передається операторові, що слідує безпосередньо після оператора if, а Оператор, що стоїть за ключовим словом then, пропускається.

Нагадаємо, що в Turbo Pascal оператори розділяються символом «;». Це означає, що усередині будь-якого структурного оператора символ ";" зустрічатися не повинен,інакше все, що стоїть після нього, буде вважатися вже іншим оператором.

Приклад з помилкою:

ifА > В

thenВ : = А; (помилка!)

elseС := В;

У показаному вище прикладі крапка з комою, що стоїть перед ключовим словом else закінчує текст оператора if,а це приводить до синтаксичної помилки, оскільки оператора, що починається із ключового слова else в Turbo Pascal немає.

Щоб не допускати таких помилок доцільно запам’ятати таке правило:перед ключовим словом else символ ";" ніколи не ставиться.

По синтаксису після ключових слів then і elseможе стояти всього лише один оператор. Якщо ж у якій-небудь із гілок альтернативи (then або else) або й відразу в обох потрібно виконати декілька операторів, то варто скористатися складеним оператором
begin … end , який дозволяє інтерпретувати групу операторів як один оператор. Відмітимо, що оператори, розташовані між ключовими словами begin ... end, також як і скрізь, повинні розділятися крапкою з комою.

Узагальнені форми найпростішого випадку оператора if наведені в наступній таблиці:

 

Кількість операторів у гілці Узагальнена форма оператора if
then else
один один if вираз then оператор else оператор
декілька один if вираз then begin оператор; оператор; оператор end else оператор
один декілька if вираз then оператор else begin оператор; оператор; оператор end
декілька декілька if вираз then begin оператор; оператор; оператор end else begin оператор; оператор; оператор end

Ще одна синтаксична складність коректного використання оператора ifвиникає при написанні вкладених операторів if.У випадку, якщо вкладений оператор ifрозташовується в межах складеного оператора, великих проблем не виникає, тому що ключові слова beginі endточно обмежують область кожної альтернативи.

Наприклад:

if вираз

оператор;

if вираз

then оператор

elseоператор;

оператор

оператор;

if вираз

then оператор;

end;

Однак, якщо вкладений оператор ifє єдиним оператором у гілці альтернативи, то може виникнути неоднозначність: якому ifвідповідає вітка else.

Наприклад:

if вираз

then if вираз

then оператор

else оператор ???? (невідомо, до якого з if він відноситься)

У таких випадках варто пам’ятати правило:Ключове слово else зв’язується з найближчим ключовим словом if, що стоїть перед ним, яке ще не було пов’язане з яким-небудь ключовим словом else.

Якщо в попередньому прикладі більш чітко позначити структуру вкладеності, записавши elseна одному рівні з then, якому воно відповідає, то одержимо такий фрагмент:

if вираз

if вираз

then оператор

else оператор

 

Оператор вибору (варіанта)

Розглянутий умовний оператор if дозволяє вибирати тільки одне з двох можливих дій залежно від логічного виразу.

Оператор вибору caseє узагальненням оператора ifвін дає можливість виконати одну з декількох дій залежно від значення перемикача.

Загальну структуру оператора вибору в повній формі можна представити в такий спосіб:

caseПеремикач of

Список констант1: Оператор1;

Список констант2: Оператор2;

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

else ОператорЕ

В якості Перемикача використовується вираз, який розташовується між словами caseіof. Результатом цього виразу може бути тільки значення порядкового типу, загальна кількість елементів якого не перевищує 65535.

Однією фразою логіку роботи оператора вибору можна описати так: обчислене значення Перемикача визначає, який з (лише один) Операторів повинен бути виконаний. Якщо Перемикач приймає одне зі значень СпискаКонстант1, то виконується Оператор1, а інші Оператори пропускаються. Якщо Перемикач приймає одне зі значень СпискаКонстант2, то виконується Оператор2. Аналогічно будуть виконуватися оператори від Оператора3 до ОператораN. ОператорЕ буде виконуватися в тому випадку, якщо значення Перемикача не збіглося з жодним зі значень СписківКонстант від 1-го до N-гo.

У неповній формі оператора caseальтернативна всім попереднім варіантам вибору вітка elseвідсутня. У цьому випадку, якщо значення Перемикача не збігається з жодним зі значень констант вибору, не виконується жоден з Операторів, описаних в case,і керування передається операторові, що стоїть безпосередньо після ключового слова end, щозамикає оператор case.

План лекції

1. Оператори повторення.

2. Оператор циклу з параметром (з лічильником) for.

3. Оператор циклу з передумовою while.

4. Оператор циклу з післяумовоюrepeat.

5. Порівняння роботи операторівwhile, repeat іfor

Цикл - алгоритмічна структура для запису багаторазово повторюваних дій.

Оператори повторення мови Turbo Pascal підтримують три із чотирьох класичних керуючих конструкцій повторення:

ü цикл із передумовою (while),

ü цикл із післяумовою (repeat)

ü цикл із лічильником (з параметром)(for).

 

Оператор циклу з параметром (з лічильником) підходить для програмування тільки таких циклічних фрагментів, у яких до виконання циклу відомі початкове й кінцеве значення лічильника повторень циклу. Це обумовлює його менш широку сферу застосування.Однак у тих випадках, коли його використання можливо, оператор for, завдяки своїй високій наочності, має безсумнівну перевагу перед операторами циклу з умовами.


Спрощено загальну структуру оператора циклу з лічильником можна представити одним з наступних способів.

1) Якщо лічильник при виконанні циклу нарощує (збільшує) своє значення:

for Змінна := ПочатковеЗначенхяЛічильникаto КінцевеЗначенняЛічильника do Оператор

Щоб Операторвиконався хоча б один раз ПочатковеЗначенхяЛічильникаповинне бути не більше,ніж КінцевеЗначенняЛічильника.

 

2) Якщо лічильник при виконанні циклу зменшує своє значення:

for Змінна := ПочатковеЗначенхяЛічильникаdownto КінцевеЗначенняЛічильника do Оператор

ЩобОператорвиконався хоча б один раз ПочатковеЗначенхяЛічильникаповинне бути не менше,ніж КінцевеЗначенняЛічильника.

Приклад:

Suma := 0;

for i := 1to ndo

Suma := Suma + i;

Помітимо, що для оператора forустановка початкового значення лічильника циклів (i:=l) виконується не перед заголовком циклу, а прямо в заголовку. Крім того, щоразу після закінчення тіла циклу збільшення (зменшення) значення лічильника відбувається автоматично.Таким чином, спеціальний оператор для зміни значення лічильника (i:=i+l) не потрібний. Більше того, такий оператор приведе до неправильної роботи циклу.

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

Приклад з помилкою:

Suma := 0;