Основные алгоритмы и их реализация на Python
2.2 Ветвления и оператор выбора
В решениях задач по алгоритмизации одним из важнейших элементов является так называемое "ветвление", которое хорошо описывается сказочной формулой "Направо пойдёшь — голову потеряешь, прямо пойдёшь — коня потеряешь...", а проще говоря, ситуация "если ..., то ..., иначе ...". Типовая блок-схема алгоритма с ветвлением (проверкой условия) показана на рис. 2.5.
Если условие, указанное в блоке "Условие", выполняется, то далее производятся действия, соответствующие "ветви ДА" ("Действия ДА"), иначе выполняются действия, соответствующие "ветви НЕТ" (Действия НЕТ"). Условия нужно составлять так, чтобы результат проверки любого условия допускал только два исхода — условие либо выполняется, либо не выполняется.
В случае, когда одной проверкой не удаётся охватить все варианты, используются "вложенные" условия, как показано на рис. 2.6. Условия могут быть вложены друг в друга любое количество раз (уровень вложенности не ограничен). Такая ситуация также называется "выбор".
В языках программирования для обеспечения проверки условий используется специальный составной оператор IF ("если"). В этом операторе указывается условие, которое нужно проверить, и действия для ветвей "ДА" и "НЕТ".
Чтобы понять, как работает оператор IF, рассмотрим типичные задачи на проверку условий и выбор.
Задача 1. Составить программу ввода значения температуры воздуха и выдачи текста "Хорошая погода!", если градусов и текста "Плохая погода!", если градусов2Источник: В.А.Молодцов, Н.Б.Рыжикова. Информатика: тесты, задания, лучшие методики. Ростов-на-Дону: Феникс, 2009..
Постановка задачи: Исходными данными является значение t, необходимо сформировать строку s. При s='Плохая погода!', иначе s='Хорошая погода!'.
Блок-схема алгоритма показана на рис. 2.7.
Текст программы на "псевдоязыке":
ввод t если (t <10) то s='Плохая погода!' иначе s='Хорошая погода!' конец если вывод s
Текст на Python:
# -*- coding: utf-8 -*-
#
t=input('Введите температуру в градусах: ')
if t <10:
s='Плохая погода!'
else:
s='Хорошая погода!'
print s
Начало каждой "ветви" программы обозначается символом ":". Условие в операторе IF ("если") записывается без скобок. Как таковое окончание оператора IF отсутствует. Python считает, что следующий оператор начинается в строке без отступа. Таким образом, в Python отступы играют важную роль.
Задача 2 (источник тот же). Составить программу ввода оценки , полученной учащимся, и выдачи текста "Молодец!", если , "Хорошо!", если и "Лентяй!", если .
Постановка задачи: Дано значение , которое является натуральным числом и не может быть больше 5. В зависимости от величины нужно сформировать строку s по правилам, указанным в условии. Необходимо выполнить две последовательные проверки значения .
Блок-схема алгоритма показана на рис. 2.8.
Текст программы на "псевдоязыке":
ввод P если (P=5) то s='Молодец!' иначе если (P=4) s='Хорошо!' иначе s='Лентяй!' конец если вывод s
Программа на Python:
# -*- coding: utf-8 -*-
#
P=input('Ваши баллы? ')
if P==5:
s='Молодец!'
elif P==4:
s='Хорошо!'
else:
s='Лентяй!'
print s
Ключевое слово elif в Python является сокращением от else if ("иначе если") и используется для организации вложенных условий (алгоритмов выбора).
2.2.1 Задачи для самостоятельного решения
- Дано натуральное число. Определить, будет ли это число: чётным, кратным 4.
- Дано натуральное число. Определить, будет ли это число: нечётным, кратным 5.
- Дано натуральное число. Определить, будет ли это число: нечётным, кратным 7.
- Дано натуральное число. Определить, будет ли это число: чётным, кратным 10.
- Имеется коробка со сторонами: . Определить, пройдёт ли она в дверь с размерами .
- Дано вещественное число. Определить, какое это число: положительное, отрицательное, ноль.
- Можно ли из бревна, имеющего диаметр поперечного сечения , выпилить квадратный брус шириной ?
- Можно ли в квадратном зале площадью поместить круглую сцену радиусом так, чтобы от стены до сцены был проход не менее ?
- Дан номер места в плацкартном вагоне. Определить, какое это место: верхнее или нижнее, в купе или боковое.
- Известна денежная сумма. Разменять её купюрами 500, 100, 10 и монетой 2 руб., если это возможно.
- Имеются две ёмкости: кубическая с ребром , цилиндрическая с высотой и радиусом основания . Определить, поместится ли жидкость объёма в первую ёмкость, во вторую, в обе.
- Имеются две ёмкости: кубическая с ребром , цилиндрическая с высотой и радиусом основания . Определить, можно ли заполнить жидкостью объёма первую ёмкость, вторую, обе.
- Даны вещественные числа: . Определить, существует ли треугольник с такими длинами сторон и, если существует, будет ли он прямоугольным.
- Дано число . Определить, принадлежит ли это число заданному промежутку .
- Определить значение функции при произвольных и .
- Даны вещественные числа: . Определить, выполняются ли неравенства или и какое именно неравенство выполняется.
- Даны вещественные числа и . Вычислить . при , в противном случае.
- Даны вещественные положительные числа . Выясните, может ли прямоугольник со сторонами уместиться внутри прямоугольника со сторонами так, чтобы каждая сторона внутреннего прямоугольника была параллельна или перпендикулярна стороне внешнего прямоугольника.
- Дано вещественное число . Вычислить , если , при ; в противном случае .
- Дано вещественное число . Вычислить , если , при ; при , в противном случае .
- Дано вещественное число . Вычислить , если при при , в противном случае .
- Составить алгоритм и программу для реализации логических операций "И" и "ИЛИ" для двух переменных.
- Известен ГОД. Определить, будет ли этот год високосным, и к какому веку этот год относится.
Указание. При вычислении корней и логарифмов используйте функции sqrt() и log() модуля . В этом же модуле определена константа ().