Алгоритмизация и реализация простых алгоритмов
PythonGuru
Привет, любитель Python!
В сегодняшней статье:
- Что такое алгоритмизация?
- Способы представления алгоритмов.
- Разбор простых алгоритмов.
Цель нашей статьи изучить основные понятия алгоритмизации, способы представления алгоритмов и практика разработки простых алгоритмов.
Что такое алгоритм
Алгоритм - это последовательность определённых действий, выполнение которых решает задачу.
Каким должен быть алгоритм

Виды алгоритмов
Алгоритмы бывают трёх типов:
- Линейный - список команд (указаний), выполняемых последовательно друг за другом
- Разветвляющийся - алгоритм, содержащий хотя бы одну проверку условия, в результате которой обеспечивается переход на один из возможных вариантов решения
- Циклический - алгоритм, предусматривающий многократное повторение одной и той же последовательности действий. Количество повторений обусловливается исходными данными или условием задачи

Задача 1. Нахождение максимума из трёх чисел
Пусть a, b и c это переменные, которым присваиваются введённые числа, а переменная m в конечном итоге должна будет содержать значение наибольшем переменной. Тогда алгоритм программы сведётся к следующим шагам:
- Сначала предположим, что переменная a содержит наибольшее значение. Присвоим его переменной m.
- Если текущее значение m меньше, чем у b, то следует присвоить m значение b. Если это не так, то не изменять значение m.
- Если текущее значение m меньше, чем у c, то присвоить m значение c. Иначе ничего не делать.

Первый вариант:
a = int(input()) b = int(input()) c = int(input()) m = a if m < b: m = b if m < c: m = c print(m)
Данную задачу можно решить и без использования четвертой переменной, однако программа будет логически сложнее и будет состоять из следующих шагов:
- Если a больше b, то проверить больше ли a, чем c. Если это так, то максимальное число содержит переменная a. Если a больше b, но при этом меньше c, то максимальным является значение c.
- Иначе (когда a меньше b) сравнить значения b и c. Большее из них и есть максимальное.

Второй вариант:
a = int(input()) b = int(input()) c = int(input()) if a > b: if a > c: print(a) else: print(c) else: if b > c: print(b) else: print(c)
Задача 2. Вычислить значение функции y = f(x)
Дана следующая функция y=f(x):
y = 2x - 10, если x > 0
y = 0, если x = 0
y = 2 * |x| - 1, если x < 0
Требуется найти значение функции по переданному x.Алгоритм решения задачи сводится к следующим шагам:
- Получить с клавиатуры значение x.
- Если x больше 0, то вычислить выражение 2*x-10, результат присвоить переменной y. Иначе если x равен 0, то присвоить y значение 0. Иначе присвоить y результат выражения 2*|x|-1.
- Вывести значение y на экран.

Решение
x = input() x = int(x) if x > 0: y = 2 * x - 10 elif x == 0: y = 0 else: y = 2 * abs(x) - 1 print(y)
Задача 3. Проверка делимости одного числа на другое
Вводятся два целых числа. Проверить делится ли первое на второе. Вывести на экран сообщение об этом, а также остаток (если он есть) и частное (в любом случае).
Алгоритм решения задачи сводится к следующим шагам:
- Если первое число нацело делится на второе, то вывести сообщение об этом.
- Иначе вывести сообщение о том, что первое число не делится на второе, найти остаток от деления и также вывести его.
- В конце программы найти частное от деления чисел и вывести его.

Решение
a = int(input())
b = int(input())
if a%b == 0:
print("%d делится на %d" % (a,b))
else:
print("%d не делится на %d" % (a,b))
print("Остаток: %d" % (a%b))
print("Частное: %d" % (a//b))
Задача 4. Перевести байты в килобайты или наоборот
Перевести число, введенное пользователем, в байты или килобайты в зависимости от его выбора.
Алгоритм решения задачи сводится к следующим шагам:
В данной задаче пользователь должен ввести два значения: само число и как-либо указать, во что он хочет его перевести (в байты или килобайты). Пусть выбор способа перевода указывается с помощью одного из двух символов. Например, если пользователь введет букву "b", то число будет переводиться в байты, а если букву "k", то в килобайты. Тогда алгоритм решения задачи будет следующим:
- Ввести число.
- Указать направление перевода.
- Если выбран перевод в байты, то надо умножить число на 1024.
- Если выбран перевод в килобайты, то надо разделить число на 1024.

Решение
n = int(input("Число: "))
c = input("Перевести в байты (b) или килобайты (k): ")
if c == 'b':
print("%dКб = %d байт" % (n, n*1024))
elif c == 'k':
print("%d байт = %.2fКб" % (n, n/1024))
Домашнее задание
Для каждого упражнения составить словесное и графическое представление алгоритма и написать программную реализацию.
Найти сумму и произведение цифр трехзначного числа, которое вводит пользователь.
- Выполнить логические побитовые операции "И", "ИЛИ" и др. над числами 5 и 6. Выполнить над числом 5 побитовый сдвиг вправо и влево на два знака. Объяснить полученный результат.
- По введенным пользователем координатам двух точек вывести уравнение прямой, проходящей через эти точки.
- Написать программу, которая генерирует в указанных пользователем границах случайное целое число, случайное вещественное число, случайный символ.
- Для каждого из трех случаев пользователь задает свои границы диапазона. Например, если надо получить случайный символ от 'a' до 'f', то вводятся эти символы. Программа должна вывести на экран любой символ алфавита от 'a' до 'f' включительно.
- Пользователь вводит две буквы. Определить, на каких местах алфавита они стоят, и сколько между ними находится букв.
- Пользователь вводит номер буквы в алфавите. Определить, какая это буква.
- По длинам трех отрезков, введенных пользователем, определить возможность существования треугольника, составленного из этих отрезков. Если такой треугольник существует, то определить, является ли он равносторонним, равнобедренным или равносторонним.
- Определить, является ли год, который ввел пользователем, високосным или не високосным.
- Вводятся три разных числа. Найти, какое из них является средним (больше одного, но меньше другого).
Совершенствуй знания по Python каждый день у нас на канале, PythonGuru.
Вопросы, реклама - @pythonguru_admin
Поддержать проект (сбербанк):
4817760113082329