owned this note
owned this note
Published
Linked with GitHub
# Линейные программы
---
## Линейные алгоритмы
----
Самыми простыми являются линейные алгоритмы. В линейных алгоритмах используется единственная алгоритмическая конструкция – следование, то есть команды в таких алгоритмах выполняются последовательно, одна за другой, в том порядке, в котором они записаны.
----
Мы уже знаем, что приоритет выполнения арифметических операций в языке Python аналогичен математическому. Таким образом, при записи математических выражений стоит учитывать, что сначала вычисляются выражения в скобках, после чего выполняются действия возведения в степень.
----
В языке Python возможно использование множественного присваивания. Если записать инструкцию: `b = a = 3`, то сначала будет создана ячейка оперативной памяти с целочисленным значением 3, после чего эта ячейка сначала будет связана с именем a, а потом и с именем b.
----
Также при помощи одной инструкции присваивания можно задать сразу несколько значений нескольким переменным. Для этого в инструкции, слева от знака равенства, через запятую перечисляются имена переменных, а справа от знака равенства – выражения, значения которых необходимо присвоить указанным переменным. Количество и порядок следования имён переменных и присваиваемых значений должны совпадать. пример `a,b = 2,3`
---
## Преобразование типов данных
----
Процесс преобразования значения одного типа данных (целые числа, строки, числа с плавающей точкой и т. д.) в другой называется преобразованием типа. В Python есть два вида преобразования:
* Неявное преобразование типов.
* Явное приведение типов.
----
При неявном преобразовании типов Python автоматически преобразует один тип данных в другой. Этот процесс не требует участия пользователя.
```python
num_int = 123
num_float = 1.23
num_new = num_int + num_float
print("Тип данных в num_int:", type(num_int))
print("Тип данных в num_float:", type(num_float))
print("Значение num_new:", num_new)
print("Тип данных в num_new:", type(num_new))
```
----
Теперь давайте попробуем сложить строку и целое число и посмотрим, как Python с этим справится.
```python=
# Складываем строку и целое число
num_int = 123
num_str = "456"
print("Тип данных в num_int:", type(num_int))
print("Тип данных в num_str:", type(num_str))
print(num_int + num_str)
```
----
В явном преобразовании программист сам заменяет текущий тип данных объекта на требуемый. Для этого используются встроенные функции, такие как `int()`, `float()`, `str()` и т. д., чтобы выполнить явное преобразование типов.
----
Приведение типов можно выполнить, если присвоить выражению значение функции, соответствующее нужному типу данных.
```python=
num_int = 123
num_str = "456"
print("Тип данных в num_int:", type(num_int))
print("Тип данных в num_str до явного приведения:", type(num_str))
num_str = int(num_str)
print("Тип данных в num_str после явного приведения:", type(num_str))
num_sum = num_int + num_str
print("Сумма num_int и num_str:", num_sum)
print("Тип данных полученной суммы:", type(num_sum))
```
----
* Преобразование типов — это преобразование объекта из одного типа данных в другой.
* Неявное преобразование типов автоматически выполняется интерпретатором Python.
* Python не допускает потери данных при неявном преобразовании типов.
----
* Явное преобразование типов также называется приведением типов. Типы данных преобразуются пользователем с помощью встроенных функций.
* В явном приведении типов может произойти потеря данных, поскольку мы принудительно приводим объект к определенному типу.
---
## Форматирование строк
----
Функция print() обладает ещё двумя параметрами, которые вы можете указать для простого форматирования вывода.
sep - параметр, который отвечает за разделитель. По умолчанию пробел.
end - параметр, который отвечает за окончание строки. По умолчанию переход на новую строку.
----
Пример sep
```python
print(1,2,3,sep='000')
print('1','2','3',sep='/')
print(1,'2',3,sep='.')
print(1,2,3,sep='-')
```
----
пример end
```python
print('это',end=' ')
print('цельная',end=' ')
print('строка',end=', ')
print('',end='будьте уверены')
```
----
Иногда (а точнее, довольно часто) возникают ситуации, когда нужно сделать строку, подставив в неё некоторые данные, полученные в процессе выполнения программы (пользовательский ввод, данные из файлов и т. д.). Подстановку данных можно сделать с помощью форматирования строк.
----
Использование форматирования строк
```python
name = "Эрик"
age = 74
print(f"Привет, {name}. Тебе {age} года.")
```
---
## Составное присваивание
----
В составном операторе присваивания используются арифметические операторы. По своей сути составное присваивание - упрощенная форма записи математического выражения
----
Пример сложения с присваиванием:
```
a = 2
a += 5
print(a)
```
----
Составной оператор += прибавляет к переменной значение выражения справа от оператора присваивания и записывает получившийся результат в эту переменную. a += 5 эквивалентно a = a + 5.
----
| Составное присваивание | Эквивалентное выражение |
| -------- | ---------- |
| a **= b | a = a ** b |
| a //= b | a = a // b |
| a %= b | a = a % b |
| a /= b | a = a / b |
| a *= b | a = a * b |
| a -= b | a = a - b |
| a += b | a = a + b |
---
## Математические функции
----
В Python хорошие ребята уже написали код практически для всех математических функций и добавили их в библиотеки. Так что вам вручную писать функции не придется, вы можете без зазрения совести использовать готовые решения.
----
Функция модуля возвращает неотрицательное значение аргумента. Иначе говоря, она не меняет неотрицательные значения, а отрицательные значения делает положительными.
Пример: модуль -3 равен 3, модуль -8.74 равен 8.74 и так далее.
```
abs(-99.99)
```
----
Синус — тригонометрическая функция, она принимает только одно значение в качестве аргумента — x. Аргумент должен быть выражен в радианах, не путайте со степенью.
Для того, чтобы использовать эту функцию, нам нужно импортироватть библиотеку с математическими функциями.
```
import math
math.sin(3.14159)
```
----
Округление - для округления у нас сразу две функции floor и ceil.
floor округляет число до ближайшего меньшего целого.
ceil округляет число до ближайшего большего целого.
```
import math
print(math.floor(3.5))
print(math.ceil(3.5))
```
----
Взятие корня производится командой sqrt
```
import math
print(math.sqrt(3.5))
```
---
## Задачи
----
1. Дано натуральное число. Выведите его последнюю цифру.
----
2. Дано натуральное число. Найдите число десятков в его десятичной записи.
----
3. Дано трехзначное число. Найдите сумму его цифр.
----
4. Дано положительное действительное число X. Выведите его дробную часть.
----
5. Дано положительное действительное число X. Выведите его первую цифру после десятичной точки.
----
6. Даны значения двух моментов времени, принадлежащих одним и тем же суткам: часы, минуты и секунды для каждого из моментов времени. Известно, что второй момент времени наступил не раньше первого. Определите, сколько секунд прошло между двумя моментами времени. Программа на вход получает три целых числа: часы, минуты, секунды, задающие первый момент времени и три целых числа, задающих второй момент времени. Выведите число секунд между этими моментами времени.
----
7. Длина Московской кольцевой автомобильной дороги – 109 километров. Байкер Вася стартует с нулевого километра МКАД и едет со скоростью `v` километров в час. На какой отметке он остановится через `t` часов? Программа получает на вход значение `v` и `t`. Если `v>0`, то Вася движется в положительном направлении по МКАД, если же значение `v<0`, то в отрицательном. Программа должна вывести целое число от 0 до 108 – номер отметки, на которой остановится Вася.
----
8. Пирожок в столовой стоит `a` гривен и `b` копеек. Определите, сколько гривен и копеек нужно заплатить за `n` пирожков. Программа получает на вход три числа: `a`, `b`, `n`, и должна вывести два числа: стоимость покупки в гривназ и копейках.
----
9. За день машина проезжает `n` километров. Сколько дней нужно, чтобы проехать маршрут длиной m километров? Программа получает на вход числа `n` и `m`.
----
10. В некоторой школе занятия начинаются в 9:00. Продолжительность урока — 45 минут, после 1-го, 3-го, 5-го и т.д. уроков перемена 5 минут, а после 2-го, 4-го, 6-го и т.д. — 15 минут. Дан номер урока (число от 1 до 10). Определите, когда заканчивается указанный урок. Выведите два целых числа: время окончания урока в часах и минутах.
----
11. Дано два числа `a` и `b`. Выведите гипотенузу треугольника с заданными катетами.
----
12. Улитка ползет по вертикальному шесту высотой `h` метров, поднимаясь за день на `a` метров, а за ночь спускаясь на `b` метров. На какой день улитка доползет до вершины шеста? Программа получает на вход натуральные числа `h`, `a`, `b`. Программа должна вывести одно натуральное число. Гарантируется, что a>b.
----
13. С начала суток прошло `H` часов, `M` минут, `S` секунд (`0 ≤ H < 12`, `0 ≤ M < 60`, `0 ≤ S < 60`). По данным числам `H`, `M`, `S` определите угол (в градусах), на который повернулаcь часовая стрелка с начала суток и выведите его в виде действительного числа.
----
14. С начала суток часовая стрелка повернулась на угол в `α` градусов. Определите на какой угол повернулась минутная стрелка с начала последнего часа. Входные и выходные данные — действительные числа.
----
15. С начала суток часовая стрелка повернулась на угол в `α` градусов. Определите сколько полных часов, минут и секунд прошло с начала суток, то есть решите задачу, обратную задаче «Часы - 1». Запишите ответ в три переменные и выведите их на экран.
----
16. Процентная ставка по вкладу составляет `P` процентов годовых, которые прибавляются к сумме вклада. Вклад составляет `X` рублей `Y` копеек. Определите размер вклада через год. Программа получает на вход целые числа `P`, `X`, `Y` и должна вывести два числа: величину вклада через год в рублях и копейках. Дробная часть копеек отбрасывается.