Основы линейных алгоритмов: код выполняется шаг за шагом

Раздел: Управляющие конструкции -> последовательное выполнение

Линейные алгоритмы представляют собой последовательность операций, выполняемых одна за другой без ветвлений и циклов. В Python такой подход используется для простых вычислительных задач, ввода данных и вывода результатов. Каждый шаг алгоритма строго следует за предыдущим, что делает код предсказуемым и лёгким для отладки. Основное преимущество - простота реализации и понимания.

Линейные алгоритмы: последовательное выполнение

Базовый пример линейного алгоритма - сложение двух чисел, введённых пользователем. Программа последовательно запрашивает ввод, преобразует строки в числа, выполняет сложение и выводит результат.

a = input('Введите первое число: ')
b = input('Введите второе число: ')
sum = int(a) + int(b)
print('Сумма:', sum)

Python программирование линейных алгоритмов (линейные алгоритмы в python)

После запуска программа останавливается на каждом input(), ожидая ввода, затем последовательно выполняет преобразование типов, арифметическую операцию и вывод. Этот шаблон подходит для любых линейных вычислений, где порядок действий фиксирован.

Как выполнить несколько вычислений в одной программе?

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

length = float(input('Длина: '))
width = float(input('Ширина: '))
area = length * width
perimeter = 2 * (length + width)
print('Площадь:', area)
print('Периметр:', perimeter)

Каждое новое действие добавляется в конец последовательности. Такой подход применяется в калькуляторах, конвертерах и простых инженерных расчётах.

Как обработать разные типы данных в линейном алгоритме?

Линейная программа может работать со строками, числами и другими типами. Часто требуется преобразование типов (например, из строки в число) или форматирование вывода.

name = input('Имя: ')
age = int(input('Возраст: '))
years_to_hundred = 100 - age
message = 'Привет, ' + name + '! Через ' + str(years_to_hundred) + ' лет тебе будет 100.'
print(message)

Здесь input() возвращает строку, int() преобразует возраст в целое число, а str() - обратно для конкатенации. Без явного приведения типов возникнет ошибка TypeError.

Как улучшить читаемость и избежать магических чисел?

Для повышения понятности кода используют именованные константы и комментарии. Это особенно важно в длинных линейных алгоритмах (например, расчёт сложных формул).

# Константы перевода единиц
METERS_IN_KM = 1000
MINUTES_IN_HOUR = 60

distance_km = float(input('Расстояние в км: '))
speed_kmh = float(input('Скорость в км/ч: '))

time_hours = distance_km / speed_kmh
time_minutes = time_hours * MINUTES_IN_HOUR
time_meters = distance_km * METERS_IN_KM

print('Время в часах:', time_hours)
print('Время в минутах:', time_minutes)
print('Пройденное расстояние в метрах:', time_meters)

Константы вынесены в начало, что упрощает изменение единиц. Комментарий поясняет назначение. Такой стиль рекомендуют в учебных и производственных проектах.

Типичные ошибки при написании линейных алгоритмов:

  • Ошибка ввода: пользователь вводит текст вместо числа. Программа вызовет ValueError. В линейном алгоритме исключение не обрабатывается - программа аварийно завершается. Решение: использовать try/except, но это уже ветвление, нарушающее линейность. Поэтому при проектировании линейных алгоритмов предполагается корректный ввод.
  • Деление на ноль: если в формуле есть деление, а знаменатель оказывается нулевым, возникает ZeroDivisionError. Пример: speed_kmh = 0. Линейный код не предусматривает проверку, поэтому необходимо заранее гарантировать ненулевые значения.
  • Несоответствие типов: попытка сложить строку и число без преобразования вызывает TypeError. Всегда следует явно приводить типы с помощью int(), float(), str().
  • Переполнение: для целых чисел в Python не ограничено, но для вещественных может возникнуть OverflowError при слишком больших значениях.

Рекомендация: перед запуском тестировать программу на граничных вводных данных (нулевые, отрицательные, очень большие числа) и при необходимости добавлять проверки, но это выходит за рамки линейного подхода.

Расширенные примеры линейных алгоритмов с детальным разбором кода и результатами выполнения.

Примеры линейных алгоритмов

1. Площадь треугольника по формуле Герона

Формула Герона: S = √(p·(p−a)·(p−b)·(p−c)), где p = (a+b+c)/2. Программа вводит длины сторон, вычисляет полупериметр и площадь. Важно, что стороны должны образовывать треугольник, иначе подкоренное выражение станет отрицательным, и возникнет ошибка. В линейном варианте мы полагаемся на корректные данные.

Пример
import math

a = float(input('Сторона a: '))
b = float(input('Сторона b: '))
c = float(input('Сторона c: '))

p = (a + b + c) / 2
area = math.sqrt(p * (p - a) * (p - b) * (p - c))

print('Полупериметр:', p)
print('Площадь треугольника:', area)
Сторона a: 3
Сторона b: 4
Сторона c: 5
Полупериметр: 6.0
Площадь треугольника: 6.0

При вводе сторон 3, 4, 5 программа корректно вычисляет площадь 6. Для недопустимого треугольника (например, 1, 2, 3) подкоренное выражение может быть отрицательным, и math.sqrt() вызовет ValueError - это ограничение линейного подхода.

2. Конвертер температуры из Цельсия в другие шкалы

Линейный алгоритм переводит температуру из градусов Цельсия в Фаренгейты и Кельвины. Формулы: F = C·9/5 + 32, K = C + 273.15.

Пример
celsius = float(input('Температура в Цельсиях: '))

fahrenheit = celsius * 9/5 + 32
kelvin = celsius + 273.15

print('По Фаренгейту:', fahrenheit)
print('По Кельвину:', kelvin)
Температура в Цельсиях: 100
По Фаренгейту: 212.0
По Кельвину: 373.15

Все вычисления выполняются последовательно. Для абсолютного нуля (−273.15 °C) значение кельвина станет 0 – это корректно. Ошибки могут возникнуть только при вводе нечисловых данных.

3. Расчёт стоимости покупки с фиксированной скидкой

Программа запрашивает цену единицы товара, количество и процент скидки. Итоговая сумма вычисляется как (цена × количество) × (1 − скидка/100). Скидка считается постоянной для всей покупки (без условий по сумме).

Пример
price = float(input('Цена за единицу (руб): '))
quantity = int(input('Количество: '))
discount_percent = float(input('Скидка (%): '))

total_before_discount = price * quantity
discount_amount = total_before_discount * discount_percent / 100
total_after_discount = total_before_discount - discount_amount

print('Сумма без скидки:', total_before_discount)
print('Скидка:', discount_amount)
print('Итого к оплате:', total_after_discount)
Цена за единицу (руб): 10.5
Количество: 4
Скидка (%): 20
Сумма без скидки: 42.0
Скидка: 8.4
Итого к оплате: 33.6

Каждый шаг линейно зависит от предыдущего. Если ввести отрицательную скидку, алгоритм её учтёт (фактически наценка), но это уже некорректные данные. Для защиты от таких ситуаций требуется ветвление, выходящее за рамки линейной схемы.

линейные алгоритмы в Python - comments

En
Python программирование линейных алгоритмов (python)