Опубликован: 05.04.2015 | Уровень: для всех | Доступ: платный | ВУЗ: Компания ALT Linux
Лекция 2:

Основные алгоритмы и их реализация на Python

< Лекция 1 || Лекция 2: 12345 || Лекция 3 >
Аннотация: При разборе задач в этой части будем обращать внимание на постановку задачи (что именно нужно сделать) и собственно алгоритм, который будет описываться как блок-схемой, так и на "псевдоязыке" программирования (подобие "школьного алгоритмического языка"). И только после этого можно приступать к написанию программы на Python с учётом всех тех его особенностей и возможностей, которые были описаны в предыдущей части.

2.1 Линейные алгоритмы. Операции с числами и строками

Линейный алгоритм — алгоритм, в котором вычисления выполняются строго последовательно. Типичная блок-схема линейного алгоритма показана на рис. 2.1.

Далее рассмотрим типичные задачи с линейной структурой алгоритма.

Задача 1. Дано два числа a и b. Сделать так, чтобы их значения поменялись местами.

Постановка задачи: Имеются две переменные с какими-то определёнными значениями. Пусть значение a равно x, а значение b равно y. Требуется, чтобы значение a стало равно y, а значение b стало равно x.

Метод решения (общий): Использовать дополнительную переменную c, в которую временно записать начальное значение переменной a, присвоить переменной a значение переменной b, а потом переменной b присвоить значение переменной c.

Блок-схема такого алгоритма показана на рис. 2.2.

Блок-схема алгоритма обмена значениями

Рис. 2.2. Блок-схема алгоритма обмена значениями

Текст программы на "псевдоязыке":

ввод
	a, b
c=a
a=b
b=c
вывод
a, b
Типичная схема линейного алгоритма

Рис. 2.1. Типичная схема линейного алгоритма

Метод решения с использованием особенностей 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

Блок-схема задачи о налоге

Рис. 2.3. Блок-схема задачи о налоге

Если все числа в этом примере использовать как целые, то результат может получиться неверным. Поэтому при вычислении налога используется преобразование числителя из целого числа в вещественное (функция float()).

Задача 3. Используя данные таблицы определить общую стоимость обеда в столовой. Определить, во сколько раз возрастёт стоимость обеда, если цена котлеты увеличится вдвое.1Источник: В.А.Молодцов, Н.Б.Рыжикова. Информатика: тесты, задания, лучшие методики. Ростов-на-Дону: Феникс, 2009.

Блюдо Цена
Борщ 35
Котлета 40
Каша 20
Чай 3

Постановка задачи (формализованная): Имеется четыре числа, которые требуется просуммировать (обозначим их переменными a, b, c и d соответственно). Сумму их значений обозначим S1. Требуется найти также величину S2=S1+b и определить отношение S2/S1 (обозначим это отношение переменной res). В результате нужно вывести значения переменных S1 и res.

Блок-схема показана на рис. 2.4.

Блок-схема задачи об обеде

Рис. 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 Задачи для самостоятельного решения

  1. Нарисуйте блок-схему к задаче 4 этой главы.
  2. Даны действительные числа А,В,С. Найти максимальное и минимальное из этих чисел.
  3. Известны длины трёх сторон треугольника. Вычислить периметр треугольника и площадь по формуле Герона (указание: использовать модуль math и функцию sqrt()).
  4. Задан вес в граммах. Определить вес в тоннах и килограммах.
  5. Известен объем информации в байтах. Перевести в килобайты, мегабайты.
  6. Определить значение функции Z=1/(XY) при X и Y не равных 0.
< Лекция 1 || Лекция 2: 12345 || Лекция 3 >
Ольга Курыло
Ольга Курыло
Александр Кудлаев
Александр Кудлаев

Ознакомился с курсом "Практика по алгоритмизации и программированию на Python". Хотел сдать экзамен. Вместо традиционного тестирования было предложено написать курсовую работу. Написал. Отослал.Ответ на следующий день: "Задание не прверено". Сколько ожидать результата проверки работы?

Шавкатжон Кодиров
Шавкатжон Кодиров
Узбекистан, Ташкент