diff --git a/TEMA5/pictures/image1.png b/TEMA5/pictures/image1.png new file mode 100644 index 0000000..7b0e0c7 Binary files /dev/null and b/TEMA5/pictures/image1.png differ diff --git a/TEMA5/pictures/image2.png b/TEMA5/pictures/image2.png new file mode 100644 index 0000000..4a42b0d Binary files /dev/null and b/TEMA5/pictures/image2.png differ diff --git a/TEMA5/report.md b/TEMA5/report.md index 85cbf30..65eb848 100644 --- a/TEMA5/report.md +++ b/TEMA5/report.md @@ -1,7 +1,363 @@ # Отчет по теме 5 + Коломейцев Дмитрий, А-02-23 -## Тема 5. Блоки инструкций, управляющие инструкции -## 1. \ No newline at end of file +## Блоки инструкций, управляющие инструкции + + +### 1-2. Изучение управляющей конструкции if. + + +Оператор if используется для того, чтобы в программе выбирать разные пути выполнения кода в зависимости от условия. Условие - это логическое выражение, которое принимает значение True или False. После условия идет блок кода с отступом. + + +```py +porog = 10 +rashod1 = 6 +rashod2 = 4 +if rashod1 >= porog: # Проверяем первое условие + dohod = 12 # Код выполнится, если условие верно +elif rashod2 == porog: # Проверяем второе условие + dohod = 0 # Код выполнится, если верно второе условие +else: # Если оба условия неверны + dohod = 8 # Этот код выполнится во всех остальных случаях +... +dohod + 8 +``` + + +В условиях можно проверять несколько выражений сразу, используя операторы and и or: + + +```py +if rashod1 >= 3 and rashod2 == 4: + dohod = rashod1 + if rashod2 == porog or rashod1 < rashod2: + dohod = porog + +dohod + 6 +``` + + +Можно проверить много разных условий подряд: + + +```py +if porog == 3: + dohod = 1 +elif porog == 4: + dohod = 2 +elif porog == 4: + dohod = 3 +else: + dohod = 0 + +dohod + 0 +``` + + +Условный оператор можно записать в одну строку: + + +```py +dohod = 2 if porog >= 4 else 0 +dohod + 2 +``` + + +Еще один способ написать условие в одну строку: + + +```py +if porog >= 5 : rashod1 = 6; rashod2 = 0 +... +rashod1 + 6 +rashod2 + 0 +``` + + +### 3. Изучение управляющей конструкции for. + + +Цикл for используется, чтобы пройти по всем элементам списка, строки или других подобных объектов. Цикл перебирает каждый элемент по очереди. + + +#### 3.1. Простой цикл. + + +Чтобы создать простой цикл for, нужно задать диапазон чисел, которые будут перебираться: + + +```py +temperatura = 5 +for i in range(3, 18, 3): # i будет принимать значения 3, потом 6, потом 15 + temperatura += i # Каждый раз прибавляем значение i + +temperatura + 50 +``` + + +#### 3.2. Более сложный цикл. + + +В цикле for можно использовать условия и оператор break, чтобы остановить цикл: + + +```py +sps = [2, 15, 14, 8] +for k in sps: + if len(sps) <= 10 : sps.append(sps[0]) + else: break # Останавливаем цикл + +sps + [2, 15, 14, 8, 2, 2, 2, 2, 2, 2, 2] +``` + + +Различие между этим примером и следующим в том, что в первом случае мы меняем сам список во время цикла, а во втором - работаем с копией. Поэтому в первом примере список вырос до 11 элементов (цикл остановился по break), а во втором - остался с 8 элементами (прошелся по 4 исходным элементам и добавил 4 новых). + + +```py +sps = [2, 15, 14, 8] +for k in sps[:]: + if len(sps) <= 10 : sps.append(sps[0]) + else: break + +sps + [2, 15, 14, 8, 2, 2, 2, 2] +``` + + +#### 3.3. Конструкция for - else. + + +Конструкция for - else позволяет добавить блок else, который выполнится только если цикл завершился сам по себе, без использования break. Если использовали break, то else не выполнится. Примеры: + + +```py +import random as rn +sps5 = [] +for i in range(10): + sps5.append(rn.randint(1, 100)) + ss = sum(sps5) + if ss > 500: break +else: + print(ss) + + + # Ничего не напечаталось, потому что сработал break +sps5 = [] +for i in range(10): + sps5.append(rn.randint(1, 100)) + ss = sum(sps5) + if ss > 500: break +else: + print(ss) + + 466 # Цикл прошел полностью, поэтому сработал блок else + + +``` + + +#### 3.4. Работа с символьной строкой внутри цикла. + + +В Python строки можно перебирать в цикле, как список элементов: + + +```py +stroka = "Это - автоматизированная система" +stroka1 = "" +for ss in stroka: + stroka1 += " " + ss # Добавляем пробел перед каждым символом + +stroka1 + ' Э т о - а в т о м а т и з и р о в а н н а я с и с т е м а' +``` + + +#### 3.5. Запись цикла в строке. + + +Цикл можно написать коротко в одну строку. Вот пример, где рисуем график синуса: + + +```py +import math, pylab +sps2 = [math.sin(i * math.pi / 5 + 2) for i in range(100)] # Цикл в одну строку +pylab.plot(list(range(100)), sps2) + [] +pylab.title("Синусоидальный сигнал") + Text(0.5, 1.0, 'Синусоидальный сигнал') +pylab.xlabel("Время") + Text(0.5, 0, 'Время') +pylab.ylabel("Сигнал") + Text(0, 0.5, 'Сигнал') +pylab.show() +``` + + +Полученный график: + + +![alt text](pictures/image1.png) + + +### 4. Изучение управляющей конструкции while. + + +Цикл while выполняется пока условие верно. Нужно быть осторожным, чтобы цикл не стал бесконечным, иначе программа зависнет. Поэтому в цикле должно быть что-то, что изменяет условие. + + +#### 4.1. Цикл со счетчиком. + + +Самый простой while - это цикл со счетчиком, который мы уменьшаем или увеличиваем в каждой итерации: + + +```py +rashod = 300 +while rashod: + print("Расход =", rashod) + rashod -= 50 + + Расход = 300 + Расход = 250 + Расход = 200 + Расход = 150 + Расход = 100 + Расход = 50 +``` + + +Цикл остановился потому что на 7-й итерации переменная rashod стала равна 0, что в Python значит False. Если бы она никогда не стала 0, цикл был бы бесконечным. + + +#### 4.2. Цикл с символьной строкой. + + +В while можно использовать строку как условие, чтобы пройти по всем ее символам: + + +```py +import math, pylab +stroka = "Расчет процесса в объекте регулирования" +i = 0 +sps2 = [] +while i < len(stroka): + r = 1 - 2 / (1 + math.exp(0.1 * i)) + sps2.append(r) + print("Значение в момент", i, "=", r) + i += 1 + + + Значение в момент 0 = 0.0 + Значение в момент 1 = 0.049958374957880025 + Значение в момент 2 = 0.09966799462495568 + Значение в момент 3 = 0.14888503362331795 + ... + Значение в момент 29 = 0.8956928738431645 + Значение в момент 30 = 0.9051482536448664 + Значение в момент 31 = 0.9137854901178277 +pylab.plot(list(range(39)), sps2) + [] +pylab.title("Сигнал на выходе") + Text(0.5, 1.0, 'Сигнал на выходе') +pylab.xlabel("Время") + Text(0.5, 0, 'Время') +pylab.ylabel("Сигнал") + Text(0, 0.5, 'Сигнал') +pylab.show() +``` + + +Полученный график: + + +![alt text](pictures/image2.png) + + +#### 4.3. Выполнение сложного алгоритма с помощью цикла. + + +С помощью циклов можно решать разные задачи. Вот пример: проверяем, является ли число простым. + + +```py +chislo = 267 +kandidat = chislo // 2 +while kandidat > 1: + if chislo % kandidat == 0: + print(chislo, "имеет делитель", kandidat) + break + kandidat -=1 +else: + print(chislo, "является простым") + + 267 имеет делитель 89 + + +``` + + +Этот алгоритм можно переделать, чтобы проверить целый диапазон чисел: + + +```py +prost = [] # Список, куда будем писать простые числа +for num in range(250, 301): # Проходим по числам от 250 до 300 + kandidat = num // 2 + while kandidat > 1: + if num % kandidat == 0: + print(num, "имеет делитель", kandidat) + break + kandidat -= 1 + else: + prost.append(num) + print(num, "является простым") + + 250 имеет делитель 125 + 251 является простым + 252 имеет делитель 126 + ... + 299 имеет делитель 23 + 300 имеет делитель 150 +prost # Выводим список найденных простых чисел + [251, 257, 263, 269, 271, 277, 281, 283, 293] +``` + + +#### 4.4. Инструкция continue. + + +Инструкция continue пропускает остаток текущей итерации и переходит к следующей: + + +```py +for i in range(10): + if i in [2, 4, 6, 8]: # Если число 2, 3 или 5, пропускаем его + continue + print(i) + + 0 + 1 + 3 + 5 + 7 + 9 +``` + + +### 5. Завершение работы со средой. + +Сохранил файлы отчета в своем рабочем каталоге и закончил сеанс работы с IDLE.