- •Г.В. Ваныкина, т.О. Сундукова
 - •Часть 1. Введение в программирование Тула - 2009
 - •Содержание
 - •Предисловие
 - •Лабораторная работа №1
 - •Лабораторная работа №2 Типы данных. Стандартные потоки ввода-вывода данных
 - •Лабораторная работа №3 Константы. Стандартные потоки ввода-вывода вещественных данных
 - •Лабораторная работа №4 Форматированный ввод-вывод данных
 - •Лабораторная работа №5 Присваивание. Арифметические операции
 - •Лабораторная работа №6 Логические и поразрядные операции. Операции сравнения и определения размера
 - •Лабораторная работа №7 Математические функции. Выражения
 - •Математические функции – файл math.H
 - •Лабораторная работа №8 Линейные программы. Преобразование типов
 - •Лабораторная работа №9 Операторы выбора: оператор условия if
 - •Лабораторная работа №10 Решение задач с использование оператора условия if
 - •Лабораторная работа №11 Операторы перехода. Операторы выбора: оператор-переключатель switch
 - •Лабораторная работа №12 Решение задач с использованием оператора-переключателя switch
 - •Лабораторная работа №13 Операторы цикла: оператор цикла с параметром for
 - •Лабораторная работа №14 Операторы цикла: оператор цикла с предусловие while
 - •Лабораторная работа №15 Операторы цикла: оператор цикла с постусловием do … while
 - •Лабораторная работа №16 Решение задач с использованием операторов цикла
 - •Лабораторная работа №17 Функции пользователя
 - •Лабораторная работа №18 Решение задач методом процедурной абстракции
 - •Лабораторная работа №19 Рекурсивные функции
 - •Индивидуальные задания Требования к оформлению индивидуальных заданий
 - •Задание 1. Линейные программы
 - •Задание 2. Задачи на составление логических выражений
 - •Задание 3. Условный оператор
 - •Задание 4. Цикл с параметром
 - •Задание 5. Циклы с условиями
 - •Задание 6. Числовые функции
 - •Задание 7. Функции
 - •Задание 8. Рекурсия
 - •Литература
 - •Часть 1. Введение в программирования
 
Лабораторная работа №12 Решение задач с использованием оператора-переключателя switch
Цель работы: научиться решить задачи, используя оператор-переключатель switch в языке C++.
Теоретические сведения
Применение переключателей (оператор switch) наиболее целесообразно в том случае, когда ветвления нужно выполнить на основе сравнения значения некоторого выражения (например, переменной) с фиксированным набором значений. Часто это удобно при программировании меню.
Отметим, что в теле оператора-переключателя switch можно использовать вложенные операторы switch, при этом в ключевых словах case можно использовать одинаковые метки.
Например:
switch (w)
{
case 1: b=c; break; /* если переменная w=1, то b=c */
case 2:
switch (d) {
case 0: f=s; break; /* если w=2 и d=0 */
case 1: f=9; break; /* если w=2 и d=1 */
case 2: f-=9; break; /* если w=2 и d=2 */
}
break;
case 3: b-=c; break; /* если переменная w=3, то b=b-c */
}
Чтобы использовать переключатель для ветвления по условию с проверкой попадания некоторой величины в тот или иной интервал, можно воспользоваться условным выражением, формирующим целочисленный номер соответствующего интервала.
Пример 1. Составьте программу для печати приветствия на английском языке.
1 вариант
Часы суток  | 
			Номер интервала  | 
			Приветствие  | 
		
22 – 3  | 
			интервал 1  | 
			Good Night!  | 
		
4 – 10  | 
			интервал2  | 
			Good Morning!  | 
		
11 – 14  | 
			интервал 3  | 
			Good Day!  | 
		
15 – 16  | 
			интервал 4  | 
			Good Afternoon!  | 
		
17 – 21  | 
			интервал 5  | 
			Good Evening!  | 
		
#include <stdio.h>
void main () {
int time;
printf("Введите время (от 0 до 24): ");
scanf("%d",&time);
switch(time < 0 ? 0:
time < 4 ? 1:
time < 11 ? 2:
time < 15 ? 3:
time < 17 ? 4:
time < 22 ? 5:
time < 24 ? 1 : 0){
case 1: printf("Good Night!"); break;
case 2: printf("Good Morning!"); break;
case 3: printf("Good Day!"); break;
case 4: printf("Good Afternoon!"); break;
case 5: printf("Good Evening!"); break;
default: printf("Error!");
}
}
В соответствии со смыслом задачи и целочисленностью переменной time (используются только часы, минуты не учитываются) каждому интервалу соответствует конечное и не слишком большое количество значений. Их можно явно использовать в виде констант, входящих в case. Таким образом, решить данную задачу можно, используя несколько меток ветви переключателя.
Пример 2: Составьте программу для печати приветствия на английском языке. 2 вариант.
#include <stdio.h>
void main () {
int time;
printf("Введите время (от 0 до 24): ");
scanf("%d",&time);
switch(time){
case 22: case 23: case 24: case 0: case 1: case 2: case 3:
printf("Good Night!"); break;
case 4: case 5: case 6: case 7: case 8: case 9: case 10:
printf("Good Morning!"); break;
case 11: case 12: case 13: case 14:
printf("Good Day!"); break;
case 15: case 16:
printf("Good Afternoon!"); break;
case 17: case 18: case 19: case 20: case 21:
printf("Good Evening!"); break;
default: printf("Error!");
}
}
Задания
Составьте программу для решения задачи. Вычислить y по формуле
Составьте программу для решения задачи. Даны два целых числа: D (день) и M (месяц), определяющие правильную дату невисокосного года. Вывести значения D и M для даты, следующей за указанной.
Составьте программу для решения задачи. Испытуемый при тестировании может получить некоторое количество очков от 0 до 100. По результатам тестирования выставляется оценка в баллах:
от 0 до 19 – 2 балла;
от 20 до 39 – 3 балла;
от 40 до 79 – 4 балла;
от 80 до 100 – 5 баллов.
Вывести количество введенных очков тестирования и соответствующий ей балл.
Домашние задания
Наберите код программ из Примеров 1 и 2. Сохраните коды программ. Выполните компиляцию и запуск программ. Введите свои данные в качестве входных.
Составьте программу для решения задачи. Вычислить y по формуле
Составьте программу для решения задачи. Составить программу, которая в зависимости от порядкового номера месяца (1 – январь, 2 – февраль, и т.д.) выводит на экран время года, к которому относится этот месяц.
Индивидуальное задание. Номер варианта определяется по журналу. Составьте программу для решения задачи.
Варианты индивидуального задания.
№  | 
				Задание  | 
			
| 
					 | 
				Написать программу, которая по номеру дня недели n (целому числу от 1 до 7) выдает в качестве результата количество пар в вашей группе в этот день и сколько времени вы провели в университете.  | 
			
| 
					 | 
				Написать программу, позволяющую по последней цифре числа k определить последнюю цифру его квадрата.  | 
			
| 
					 | 
				В старояпонском календаре был принят 12-летний цикл. Годы внутри цикла носили названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. Написать программу, которая вводит номер некоторого года и печатает его название по старояпонскому календарю. (Справка: 1996 г. – год Крысы – начало очередного цикла.)  | 
			
| 
					 | 
				Для целого числа k с от 1 до 99 напечатать фразу «Мне k лет», учитывая при этом, что при некоторых значениях k слово «лет» надо заменить на слово «год» или «года». Например, 11 лет, 22 года, 51 год.  | 
			
| 
					 | 
				Составить программу, которая по заданным номеру месяца m определяет количество дней в этом месяце. Для февраля вывести на экран сообщение "28 или 29 дней".  | 
			
| 
					 | 
				Для каждой введенной цифры (0 – 9) вывести соответствующее ей название на английском языке (0 – zero, 1 – one, 2 – two,...).  | 
			
| 
					 | 
				Составить программу, которая для введенного натурального числа от 1 до 10000 выводит числительное, соответствующее этому числу, на русском языке. Например, 7 семь; 204 двести четыре; 52 пятьдесят два.  | 
			
| 
					 | 
				Составить программу, которая по данному числу m (1 – 12) выводит название соответствующего ему месяца и определяет количество дней заданного месяца в текущем году.  | 
			
| 
					 | 
				Составить программу, позволяющую получить словесное описание школьных отметок (1 – «плохо», 2 – «неудовлетворительно», 3 – «удовлетворительно», 4 – «хорошо», 5 – «отлично»).  | 
			
| 
					 | 
				Составить программу, которая по веденному номеру месяца m выдает название месяца, следующего за данным.  | 
			
| 
					 | 
				Написать программу, которая бы по введенному номеру времени года (1 – зима, 2 – весна, 3 – лето, 4 – осень) выдавала соответствующие этому времени года месяцы и сумму дней сезона.  | 
			
| 
					 | 
				Написать программу, которая бы по введенному номеру единицы измерения (1 – дециметр, 2 – километр, 3 – метр, 4 – миллиметр, 5 – сантиметр) и длине отрезка L выдавала бы соответствующее значение длины отрезка в метрах.  | 
			
| 
					 | 
				Вычислить номер дня в невисокосном году по заданным числу d и месяцу m. Считать, что дата введена корректно.  | 
			
| 
					 | 
				Написать программу, которая по вводимому числу от 1 до 11 (номеру класса) выдает соответствующее сообщение «Привет, k-классник». Например, если k = 1, «Привет, первоклассник»; если k = 4, «Привет, четвероклассник».  | 
			
| 
					 | 
				В некотором учебном заведении действуют следующие правила приема. Абитуриенты сдают три экзамена. Если они набирают не менее 13 баллов, то это дает право поступить на дневное отделение, от 10 до 12 – на вечернее, от 8 до 9 – на заочное; ниже 8 баллов означает отказ в приеме на учебу. Написать программу, которая в зависимости от суммы набранных баллов сообщает абитуриенту его права на поступление.  | 
			
| 
					 | 
				Написать программу, которая бы по введенному номеру единицы измерения (1 – килограмм, 2 – миллиграмм, 3 – грамм, 4 –тонна, 5 – центнер) и массе М выдавала бы соответствующее значение массы в килограммах.  | 
			
| 
					 | 
				Введите время h (только часы). Напечатайте соответствующее этому времени сообщение: «Доброе утро», «Добрый день», «Добрый вечер», «Доброй ночи».  | 
			
| 
					 | 
				Введите количество посадочных мест m в транспорте. Напечатайте соответствующий этому количеству вид транспорта: «велосипед», «мотоцикл», «легковой автомобиль», «микроавтобус», «автобус».  | 
			
| 
					 | 
				Составить программу, позволяющую по последней цифре данного числа определить последнюю цифру куба этого числа.  | 
			
| 
					 | 
				Написать программу, которая по введенному числу от 1 до 12 (номеру месяца) выдает все приходящиеся на этот месяц праздничные дни (например, если введено число 1, то должно получиться 1 января – Новый год, 7 января – Рождество).  | 
			
| 
					 | 
				Пусть элементами прямоугольного равнобедренного треугольника являются: катет а; гипотенуза b; высота h, опущенная из вершины прямого угла на гипотенузу; площадь S. Составить программу, которая по заданному номеру и значению соответствующего элемента вычисляла бы значение всех остальных элементов треугольника.  | 
			
| 
					 | 
				Написать программу, которая бы по введённому номеру единицы измерения (1-децеметр, 2-километр, 3-метр, 4-миллиметр, 5-сантиметр) и длине отрезка L выдавала бы соответствующее значение длины отрезка в метрах.  | 
			
| 
					 | 
				Дано натуральное число n от 1 до 365, соответствующее номеру дня в году. Составить программу, определяющую месяц, на который приходится этот день.  | 
			
| 
					 | 
				Пусть элементами равностороннего треугольника являются: сторона а; площадь S; высота h; радиус вписанной окружности r; радиус описанной окружности R. Составить программу, которая по заданному номеру и значению соответствующего элемента вычисляла бы значение всех остальных элементов треугольника.  | 
			
| 
					 | 
				Составить программу, которая для любого натурального числа n, не превосходящего миллион, печатает количество цифр в записи этого числа.  | 
			
| 
					 | 
				Дано натуральное число N. Если оно делится на 4, вывести на экран ответ N = 4k (где k – соответствующее частное); если остаток от деления на 4 равен 1 – N=4k+ 1; если остаток от деления на 4 равен 2 – N= 4k + 2; если остаток от деления на 4 равен 3 – N= 4к + 3.  | 
			
| 
					 | 
				Дано целое число k. Распечатайте приставку, соответствующую образованию производных единиц измерения от основных. Например, при k = 3 – кило; при k = -6 – микро; при k = 0 – не определено.  | 
			
| 
					 | 
				Каждой клетке шахматной доски соответствует пара координат: строки нумеруются числами от 1 до 8, столбцы – латинскими символами от ‘a’ до ’h’.На доске расставлены шахматные фигуры перед началом игры. По введенным координатам определите, чем занята клетка: белая пешка, белая фигура, черная пешка, черная фигура, клетка свободна.  | 
			
