Складений оператор поєднує групу операторів у єдине ціле, після чого вони можуть вважатися одним оператором. Складений оператор складається з послідовності поєднуваних операторів, які розташовуються між ключовими словами beginі end.
Складений оператор використовується в тих випадках, коли синтаксис мови допускає в певній точці програми вказівку тільки одного оператора, а по алгоритму в цьому місці необхідно виконати групу операторів. як правило, складений оператор використовується спільно зі структурними операторами.
Умовні оператори
В Turbo Pascal включені два умовних оператори - if і case, кожний з яких може бути записаний у двох формах: повній й неповній, що відповідає чотирьом узагальненим керуючим конструкціям алгоритмів. Синтаксична діаграма умовного оператора має такий вигляд.
Хоча обоє операторів ifі case по своїй суті є умовними, однак, історично склалося так, що оператором умови (умовним оператором) називається оператор if, а оператор case називається оператором вибору або оператором варіанта. Надалі будемо дотримуватися цієї історичної термінології.
Умовний оператор if
if Вираз
then Оператор1
else 0ператор2;
|
Умовний оператор if, як відзначалося вище, може бути записаний у повній і неповній формах, які мають такий вигляд.
Неповна форма: Повна форма:
Синтаксична діаграма оператора 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.