- •Глава 2 Условия, выбор и циклы
- •Структура условия
- •Структура множественного выбора
- •Конструкция цикла for
- •Цикл с предусловием
- •Цикл с постусловием
- •Типовые примеры
- •Подсчет суммы цифр в числе
- •Анализ четности пары чисел
- •Построение треугольников из отрезков
- •Подсчет по условию
- •Возможность построения прямоугольного треугольника
- •Представление слова с учетом падежа
- •Формирование таблицы стоимости товаров
- •Поиск чисел
- •Анализ чисел
Структура множественного выбора
Для случаев, когда требуется осуществить выбор одного значения из конечного набора вариантов, структуру ifудобнее заменить структурой множественного выбораswitch:
switch (выражение)
{ case значение1:
Операторы 1;
break;
case значение2:
операторы 2;
break;
…
default:
операторы 0;
}
В целом структура switchвыполняется так же, как и составная условная структураif. Выражение (после ключевого словаswitch) должно иметь целый или символьный тип. Значение этого выражения последовательно сравнивается со значениями в расположенных ниже списках. Если в одном из списков находится совпадающее значение, то выполняется соответствующий оператор.
Элементы списка перечисляются через запятую (если их несколько), ими могут быть константы и диапазоны значений того же типа, что тип выражения. В листинге 2.6 приведен простой пример использования оператора выбора, с помощью которого организуется вывод текстового названия месяца года в зависимости от числового обозначения месяца. Здесь в каждом списке структуры case используется только одно значение (списки формируются из одного элемента).
Листинг 2.6. Формирование названия месяца по номеру
#include <iostream>
using namespace std;
#include <conio.h>
#include <math.h>
void main()
{ int Z;
cout << " 'Введите номер месяца : ";
cin >> Z;
switch(Z)
{ case 3:
cout << "Март";
break;
case 4:
cout << "Апрель";
break;
case 5:
cout << "Май";
break;
default:
cout << "Не весенний месяц";
}
_getch();
}
Рассмотрим еще один пример на тему оператора выбора. Необходимо по введенному с клавиатуры номеру тарифа и количеству оплачиваемых месяцев выдать значение суммы для оплаты. Листинг 2.7 содержит текст программы, а на рис. 2.5 приведена блок-схема алгоритма.
Листинг 2.7. Анализ тарифа и вычисление суммы для оплаты
#include <iostream>
using namespace std;
#include <conio.h>
#include <math.h>
void main()
{ int M,N;
float Sum,Tar;
cout << "Ввести число оплачиваемых месяцев : ";
cin >> M;
cout << "Ввести номер тарифа : ";
cin >> N;
switch(N)
{ case 1:
Tar=12000;
break;
case 2:
Tar=10000;
break;
case 3:
Tar=9000;
break;
default:
Tar=0;}
if (Tar == 0)
cout << "Ошибка в указании номера тарифа";
else
{
Sum=Tar*M;
cout << "К оплате "<<Sum;
}
_getch();
}

Рис. 2.5. Блок-схема к программе листинга 2.7
В листинге 2.8 приведен более усложненный вариант предыдущей разработки: в случае, если указан первый тариф и оплачивается число месяцев не менее трех, то для человека предоставляется скидка в виде 5 % от суммы.
В программе скидка в 5 % реализуется с помощью умножения суммы, представленной к оплате, на 0.95.
Листинг 2.8. Вычисление суммы с учетом скидки
#include <iostream>
using namespace std;
#include <conio.h>
#include <math.h>
void main()
{ int M,N;
float Sum,Tar,Skidka;
cout << "Ввести число оплачиваемых месяцев : ";
cin >> M;
cout << "Ввести номер тарифа : ";
cin >> N;
Skidka=1;
switch(N)
{ case 1:
Tar=12000;
if (M>3)
Skidka=0.95;
break;
case 2:
Tar=10000;
break;
case 3:
Tar=9000;
break;
default:
Tar=0;
}
if (Tar == 0)
cout << "Ошибка в указании номера тарифа";
else
{
Sum=Tar*M*Skidka;
cout << "К оплате "<<Sum;
}
_getch();
}
