Основные алгоритмы и их реализация на Python
2.1 Линейные алгоритмы. Операции с числами и строками
Линейный алгоритм — алгоритм, в котором вычисления выполняются строго последовательно. Типичная блок-схема линейного алгоритма показана на рис. 2.1.
Далее рассмотрим типичные задачи с линейной структурой алгоритма.
Задача 1. Дано два числа a и b. Сделать так, чтобы их значения поменялись местами.
Постановка задачи: Имеются две переменные с какими-то определёнными значениями. Пусть значение a равно x, а значение b равно y. Требуется, чтобы значение a стало равно y, а значение b стало равно x.
Метод решения (общий): Использовать дополнительную переменную c, в которую временно записать начальное значение переменной a, присвоить переменной a значение переменной b, а потом переменной b присвоить значение переменной c.
Блок-схема такого алгоритма показана на рис. 2.2.
Текст программы на "псевдоязыке":
ввод a, b c=a a=b b=c вывод a, b
Метод решения с использованием особенностей Python: использовать два кортежа. В первом будут определены переменные a и b и их значения, а второй сформируем из этих же переменных, но в обратном порядке.
Текст программы на Python:
# -*- coding: utf-8 -*-
# Перестановка местами двух чисел с использованием кортежа
#
(a, b)=input('Введите исходные значения (a, b) через запятую: ')
(a, b)=(b, a)
print 'Новое значение а: ', a, '\n', 'Новое значение b: ', b
Как описано в разделе 1.4.2, комбинация '\n' означает директиву на перевод строки для команды print.
Задача 2. Известны оклад (зарплата) и ставка процента подоходного налога. Определить размер подоходного налога и сумму, получаемую на руки.
Постановка задачи: Исходными данными являются величина оклада (переменная oklad, выражаемая числом) и ставка подоходного налога (переменная procent, выражаемая числом). Размер налога (переменная nalog) определяется как oklad*procent/100, а сумма, получаемая на руки (переменная summa) — как oklad-nalog.
Блок-схема алгоритма показана на рис. 2.3.
Текст программы на "псевдоязыке":
ввод oklad, procent nalog=oklad * procent /100 summa=oklad-nalog вывод summa, nalog
Программа на Python:
# -*- coding: utf-8 -*-
#
oklad=input("Оклад: ")
procent=input("% налога: ")
nalog=float(oklad*procent) /100
summa=oklad-nalog
print"Сумма на руки: ", summa
print"Налог: ", nalog
Если все числа в этом примере использовать как целые, то результат может получиться неверным. Поэтому при вычислении налога используется преобразование числителя из целого числа в вещественное (функция float()).
Задача 3. Используя данные таблицы определить общую стоимость обеда в столовой. Определить, во сколько раз возрастёт стоимость обеда, если цена котлеты увеличится вдвое.1Источник: В.А.Молодцов, Н.Б.Рыжикова. Информатика: тесты, задания, лучшие методики. Ростов-на-Дону: Феникс, 2009.
Постановка задачи (формализованная): Имеется четыре числа, которые требуется просуммировать (обозначим их переменными a, b, c и d соответственно). Сумму их значений обозначим S1. Требуется найти также величину S2=S1+b и определить отношение S2/S1 (обозначим это отношение переменной res). В результате нужно вывести значения переменных S1 и res.
Блок-схема показана на рис. 2.4.
Текст программы на "псевдоязыке":
ввод a, b, c, d S1=a, b, c, d S2=S1+b res=S2/S1 вывод S1, res
В программе на Python разумно будет использовать кортеж:
# -*- coding: utf-8 -*-
#
t=(a, b, c, d)=input('Введите значения через запятую: ')
S1=sum(t)
S2=S1+b
res=float(S2) /S1
print'Начальная_стоимость : ', S1, ' \n ', 'Увеличение, _раз : ', res
И снова для преобразования целого числа в вещественное использована функция float(). (Полезно сравнить результат, получаемый при использвании выражения res=float(S2)/S1 и выражения res=float(S2/S1)).
Задача 4. Преобразовать дату в "компьютерном" представлении (системную дату) в "российский" формат, т. е. день/месяц/год (например, 17/05/2009).
Постановка задачи: Системная дата имеет вид 2009-06-15. Нужно преобразовать это значение в строку, строку разделить на компоненты (символразделитель — дефис), потом из этих компонентов сконструировать нужную строку.
Сразу перейдём к программе на Python. Функциями работы с датами и временем в Python "заведует" модуль datetime, а непосредственно для работы с датами используется объект date и его методы.
Воспользуемся знанием методов строк и списков.
# -*- coding: utf-8 -*-
#
# Подключаем нужный программный модуль
from datetime import date
# Получаем текущую дату
d1=date.today()
# Преобразуем результат в строку
ds=str(d1)
print"Системная дата ", ds
# Используем методы строки и списка
lst=ds.split('-')
lst.reverse()
# Составляем новую строку для даты
rusdate="/".join(lst)
print"Российский стандарт ", rusdate
Комментарии в тексте программы помогают понять происходящее.
2.1.1 Задачи для самостоятельного решения
- Нарисуйте блок-схему к задаче 4 этой главы.
- Даны действительные числа А,В,С. Найти максимальное и минимальное из этих чисел.
- Известны длины трёх сторон треугольника. Вычислить периметр треугольника и площадь по формуле Герона (указание: использовать модуль math и функцию sqrt()).
- Задан вес в граммах. Определить вес в тоннах и килограммах.
- Известен объем информации в байтах. Перевести в килобайты, мегабайты.
- Определить значение функции Z=1/(XY) при X и Y не равных 0.