Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 основи програмування книга.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.77 Mб
Скачать

6.9. Оператори вибору: оператор варіанта

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

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

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

Оператор варіанта має вид:

Case <вираз {селектор}> of

<список міток варіанта > : <оператор>;

. . . . . . . . . .

< список міток варіанта > : < оператор >

[else < оператор > ]

end

Приклади операторів варіанта:

а)

Select : = Index mod 4;

case Select of

0 : x := y*y + 1;

1 : x := y*y - 2*y;

2,3 : x := 0

end;

В цьому прикладі Select приймає значення 0, 1, 2, 3. Це досягнуто обчисленням Select := Index mod 4.

Таким чином, замість імені Select можна використовувати вираз Index mod 4:

a)

case Index mod 4 of

0 : x := y*y + 1;

1 : x := y*y - 2*y;

2,3 : x := 0

end;

б)

case ch of

‘a’,’b’,’c’ : ch := succ(ch);

‘y’,’z’ : ch := pred(ch);

‘f’,’g’ : {порожній варіант};

else ch := pred(pred(ch)

end;

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

Приклад 6.3.

program Sign_of_Function;

Type

Fun = (Unknown, FSin, FCos, Ftg, Fctg);

Var

FunNumber, Quoter: Integer;

TrigFun : Fun;

Procedure InpData (Var FunNumber, Quoter: Integer);

Begin

Write(‘ Введіть номер тригонометричної функції ‘);

Readln(FunNumber);

Write(‘ Введіть номер квадранта ‘);

Readln(Quoter);

End;

Function FunctionName ( FunNumber: Integer): Fun;

Begin

{ Обчислення імені функції }

Case FunNumber of

1 : FunctionName:= FSin;

2 : FunctionName:= FCos;

3 : FunctionName:= FTg ;

4 : FunctionName:= FCtg

else

FunctionName:= Unknown;

End;

End;

Procedure ZnakFunction (TrigFun: Fun; Quoter: Integer);

Begin

{ Обчислення знака функції }

case TrigFun of

FSin: case Quoter of

1, 2 : Writeln (‘ знак синуса +’);

3, 4 : Writeln (‘ знак синуса -‘)

end;

FCos: case Quoter of

1, 3 : Writeln (‘ знак косинуса +’);

2, 4 : Writeln (‘ знак косинуса -‘)

end;

FTg, FCtg: case Quoter of

1, 4: Writeln (‘ знак тангенса і котангенса +’);

2, 3: Writeln (‘ знак тангенса і котангенса -‘)

end;

Unknown: Writeln(‘ Функція не визначена ’)

end;

End;

Begin

InpData ( FunNumber, Quoter);

TrigFun :=FunctionName ( FunNumber);

ZnakFunction (TrigFun, Quoter);

end.