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


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

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

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

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

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

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

if Вираз then Оператор1 else 0ператор2;

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

if Вираз then Оператор;

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

 

 

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

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

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

if А > В then В : = А ;---- помилка! else С := В;

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

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

У показаному вище прикладі крапка з комою, що стоїть перед ключовим словом else закінчує текст оператора if А це приводить до синтаксичної помилки, оскільки оператора, що починається із ключового слова else в Turbo Pascal немає. Щоб не допускати таких помилок доцільно запам'ятати таке правило: Перед ключовим словом else символ ";" ніколи не ставиться.

По синтаксису після ключових слів then і elseможе стояти всього лише один оператор.

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

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

if вираз then begin оператор; if вираз then оператор elseоператор; оператор end else begin оператор; if вираз then оператор end

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

Наприклад:

 

 

Таблиця 3-1

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

 

if вираз then if вираз then оператор else оператор ????

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

Наприклад:

 

if вираз then if вираз then оператор else оператор

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

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

 

 

Завдання 1 З'ясувати, чи належить точка з координатами X і Y колу одиничного радіуса з центром на початку координат.

program Z1;

var X,Y;Real;

begin

Write('уведіть 2 дійсні числа');

Readln(X,Y);

Write(Точка (' , X:6:3, ',', Y:6:3, ')' );

if sqr(X)+sqr(Y)<1

then Write('попадає')

else Write('не попадає');

Writeln('у коло одиничного радіуса');

end.

 

Завдання 2 Написати програму, що аналізує, до якого алфавіту належать уведена буква, а також велика вона або мала.

program Z2;

var B : Char; Pr,Interval1, Interval2 : Boolean;

begin

Write(' натисніть на символьну клавішу');

Read(B);

Write(' - це ');

Interval1 := (B<'A') or ( (B>'Z') and (B<'a') ) or ( (B>'z') and (B<'А') );

Interval2 := ( (B>'п') and (B<'p') ) or (B>'я');

If (Interval1=True) or (Interval2=True)

then Write('не')

else

begin

if B<'z'

then

begin

Write('англійська');

Pr:=B<='Z'; {більша}

end

else

begin

Write('російська');

Pri:=B<='Ю';

end;

if Pr then Write('більша') else Write('маленька');

end;

Write('буква');

end.

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

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

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

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

case Перемикач of Список констант1: Оператор1; Список констант2: Оператор2; Список константN: ОператорN else ОператорЕ end

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

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

Приклади, що демонструють найбільш характерні способи використання оператора case.

Завдання 3

var Arrow : Char;

Position: record

X,Y : Word

end;

begin

with Position d

case Arrow of

#72 : Y:=Y-1;

#80 : Y:=Y+1;

#75 : X:=X-1;

#77 : X:=X+1

end

end.

Завдання 4 var Symbol : Char;

begin

case Symbol of

’0’..’9’ :writeln (‘Це цифра’);

’a'..’z : writeln ( Це мала літера');

'A'..'Z' : writeln ('Це прописна буква');

#10,#13,#26: writeln ('Це керуючий символ’)

else writeln ('Це інший символ’)

end

Завдання 5 Написати програму, що визначає по номері місяця кількість днів у ньому.

program Z4;

var Numer:Byte; B:Char;

begin

Write('уведіть номер місяця =>');

Readln(Number);

Write('У цьому місяці ');

case Number of

1,3,5,7,8,10,12 : Writeln('31 день ');

4,6,9,11 : Writeln('30 днів ');

2 : begin

Writeln;

Write(' Рік високосний ? Д/Н => ');

Readln(B);

case B of

'Д' : Writeln('29 днів');

'Н' : Writeln('28 днів');

else : Writeln('28 або 29 днів');

end;

end;

else Writeln('номер місяця уведений невірно');

end;

end.