Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ветвление+Циклы.doc
Скачиваний:
6
Добавлен:
25.11.2018
Размер:
136.19 Кб
Скачать

6.3. Переключатель

Используется для выбора одного из многих путей.

6.3.1. Формат записи в Паскале:

Case S of  

K1:ОператорныйБлок1;

K2: ОператорныйБлок2;

. . .

Kn: ОператорныйБлокn;

Else ОператорныйБлок;

End;

Здесь S – селектор, любое выражение порядкового типа; К1, К2, …, Кn – константы выбора, константа, тип которой совпадает с типом селектора.

Принцип работы оператора: вычисляется выражение селектора. Вычисленное значение последовательно сравнивается с константами альтернатив и передается управление оператору константа выбора, которого совпадает с вычисленным значением селектора. Выполняется оператор и передается управление за пределы оператора выбора. Если вычисленное значение селектора не совпадает ни с одной из констант, то управление передается на ветвь Else, наличие которой, не обязательно в этом случае управление передается за пределы оператора выбора.

Структуру оператора выбора можно реализовать с помощью вложенных условных операторов, но это ухудшает наглядность программы. Рекомендуется не более 2-3 уровней вложений.

Пример. Составить программу вычисления функции y для заданного значения x.

где: a=2,8;  ;  0< x < 0.5;  Dx=0,01.

Текст программы

program gcase;

uses crt;

var

a,b,x,y :real;

n :integer;

begin

clrscr;

a:=2.8; b:=5.1E-2;

writeln('Результат':20);

writeln('n':3,'x':10,'y':15);

x:=0;

repeat

n:=trunc(10*x+1);

write(n:3);

case n of

1:y:=1+exp(a*x);

2:y:=a+ln(a+b);

3:y:=b*sqr(x);

4:y:=a-sqrt(abs(a*b/2));

5:y:=1+a*b*x;

end;

writeln(' ':10,x:5:3,' ':5,y:9);

x:=x+0.05;

until x>=0.5;

Readln;

end.

6.3.1. Формат записи в С++:

switch (условие)

{

case константа: инструкции

case константа: инструкции

case константа: инструкции

case константа: инструкции

default: инструкции

}

Каждая ветвь case может быть помечена одной или несколькими целочисленными константами или же константными выражениями. Выполняется та ветвь case, для которой константа (выражение) совпала с условием, указанным в начале переключателя switch. Если выяснилось, что ни одна из констант не подходит, то выполняется ветвь default. Если этой ветви нет, то ничего не выполняется.

Условие, следующее за ключевым словом switch в круглых скобках, может быть любым выражением, допустимыми в языке программирования С, значение которого должно быть целым.

Значение этого выражения является ключевым для выбора из нескольких вариантов. Тело оператора switch состоит из нескольких операторов, помеченных ключевым словом case с последующим константным выражением. Константное выражение может быть одно или их может быть несколько, кроме того, возможно использование целочисленных констант. Следует отметить, что использование целого константного выражения является существенным недостатком, присущим рассмотренному оператору.

Так как константное выражение вычисляется во время компиляции, оно не может содержать переменные или вызовы функций. Обычно в качестве константного выражения используются целые или символьные константы.

Все константные выражения в операторе switch должны быть уникальны. Ветвь default может отсутствовать. Ветви case и default могут располагаться в любом порядке.

Список операторов (инструкций) может быть пустым, либо содержать один или более операторов. Причем в операторе switch не требуется заключать последовательность операторов в фигурные скобки.

Отметим также, что в операторе switch можно использовать свои локальные переменные, объявления которых находятся перед первым ключевым словом case, однако в объявлениях не должна использоваться инициализация.

Схема выполнения оператора switch следующая:

- вычисляется выражение в круглых скобках;

- вычисленные значения последовательно сравниваются с константными выражениями, следующими за ключевыми словами case;

- если одно из константных выражений совпадает со значением выражения, то управление передается на оператор, помеченный соответствующим ключевым словом case;

- если ни одно из константных выражений не равно выражению, то управление передается на оператор, помеченный ключевым словом default, а в случае его отсутствия управление передается на следующий после switch оператор.

В конце каждой ветви достаточно часто ставится инструкция break. Это связано с тем, что после выполнения одной ветви программа проверяет возможность выполнения остальных "ниже" находящихся ветвей. Инструкция break вызывает немедленный выход из переключателя switch.

Для того, чтобы выполнить одни и те же действия для различных значений выражения, можно пометить один и тот же оператор несколькими ключевыми словами case.

Рассмотрим работу оператора switch на примерах.

Пример 1.

Условие задачи: написать программу, которая складывает, вычитает, умножает, делит два числа введенных с клавиатуры.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

#include <iostream>

int main()

{

int count; // переменная для выбора в switch

double a,b; // переменные для хранения операндов

cout << "Vvedite pervoe chislo: "; cin >> a;

cout << "Vvedite vtoroe chislo: "; cin >> b;

cout << "Vibirite deistvie: 1-+; 2- -; 3-*; 4- /";

cin >> count;

switch (count) // начало оператора switch

{

case 1: // если count = 1

{// выполнить сложение

cout << a << " + " << b << " = " << a + b << endl;

break;

}

case 2: // если count = 2

{// выполнить вычитание

cout << a << " - " << b << " = " << a - b << endl;

break;

}

case 3: // если count = 3

{// выполнить умножение

cout << a << " * " << b << " = " << a * b << endl;

break;

}

case 4: // если count = 4

{// выполнить деление

cout << a << " / " << b << " = " << a / b << endl;

break;

}

default: // если count равно любому другому значению

cout << "Nepravilni vvod" << endl;

}

return 0;

}

Пример 2.

# include <iostream>

# include <clocale>

using namespace std;

int main ()

{

cout << "Введите количество пирожков: ";

int n;

cin >> n;

cout << "Я собираюсь съесть: " << n;

cout << " пирожков" << endl;

cin.get();

cin.get();

}

Результатом выше приведенной программы будет:

при n = 5 - "Я собираюсь съесть: 5 пирожков"

при n = 2 - "Я собираюсь съесть: 2 пирожков"

попробуем это исправить, для этого используем оператор % - для получения остатка вводимого количества пирожков, оператор switch для создания правильных вариантов склонения, и оператор if - для указания условий выбора.

# include <iostream>

using namespace std;

int main ()

{

cout << "Введите количество пирожков: ";

int n;

cin >> n;

cout << "Я собираюсь съесть: " << n;

int o = n % 100; // получение остатка

if ((o > 10)&& (o < 20))

cout << " пирожков";

else

{

switch (o % 10)

{

case 0:

cout << " пирожков.";

break;

case 1:

cout << " пирожок.";

break;

case 2:

case 3:

case 4:

cout << " пирожка.";

break;

case 5:

case 6:

case 7:

case 8:

case 9:

cout << " пирожков.";

break;

}

}

cout << endl;

cin.get();

cin.get();