# Отчет по Теме 5

Зеленкина Ксения, А-02-23

## 1. Начало работы.
Запустила интерактивную оболочку IDLE и открыла окно текстового редактора, куда буду фиксировать мои дальнейшие действия.

## 2. Условный оператор.
Изучила ветвление по условию – управляющая инструкция __if__. 
Задала некоторые числовые значения объектам __porog__, __rashod1__, __rashod2__. Выполните следующую операцию, определив значение __dohod__:

_Пример 1:_
 ```py
porog, rashod1, rashod2 = 3, 120, 50
if rashod1>=porog:
		dohod=12
elif rashod2==porog:
		dohod=0
else:
	 	dohod=-8
print(dohod)
 ```
 
__Результат:__
```py
12
```
Выполним ещё одну операцию, определив значение __dohod__:
_Пример 2:_
 ```py
if rashod1>=3 and rashod2==4:
 		dohod=rashod1
		if rashod2==porog or rashod1<rashod2:
 			dohod=porog
print(dohod)
 ```
 __Результат:__
```py
12
```
Ещё одна операция с множественным ветвлением линий потока:
_Пример 3:_
```py
if porog==3:
		dohod=1
elif porog==4:
		dohod=2
elif porog==5:
		dohod=3
else:
		dohod=0
print(dohod)
```
 __Результат:__
```py
1
```
Условные инструкции можно записываться также в одну строку в операторе присваивания. Изучим примеры:
_Пример 1:_
```py
dohod=2 if porog>=4 else 0
```
 __Результат:__
 ```py
 0
 ```
 
 _Пример 2:_
```py
porog = 10
if porog>=5 : rashod1=6; rashod2=0
print(rashod1, rashod2)
```
 __Результат:__
 ```py
 6 0
 ```
 
## 3. Цикл по перечислению.
 Цикл по перечислению – управляющая инструкция for. 
#### 3.1.
 Выполним простой цикл:
 ```py
 temperatura=5
for i in range(3,18,3):
	temperatura+=i
	print(temperatura)
 ```
  __Результат:__
 ```py
8
14
23
35
50
 ```
#### 3.2.
 Выполним более сложный цикл:
 ```py
 sps=[2,15,14,8]
for k in sps:
	if len(sps)<=10:sps.append(sps[0])
	else:break
print(sps)
 ```
  __Результат:__
 ```py
[2, 15, 14, 8, 2, 2, 2, 2, 2, 2, 2]
 ```
 Выполним чуть-чуть отличающуюся совокупность операций:
 ```py
sps=[2,15,14,8]
for k in sps[:]:
	if len(sps)<=10:sps.append(sps[0])
	else:break
print(sps)
 ```
   __Результат:__
 ```py
[2, 15, 14, 8, 2, 2, 2, 2]
 ```
#### 3.3.
 Пример: создание списка с 10 целыми случайными числами из диапазона от 1 до 100. При этом, если сумма чисел не превышает 500, эта сумма должна быть отображена на экране.
 ```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)
 ```
    __Результат:__
 ```py
1 раз: (пусто)
2 раз: (пусто)
3 раз: 316
 ```
 Вывод значения __ss__ бывает не всегда, потому что блок __else__ относится к циклу __for__ и выполняется только если цикл не был прерван __break__.
 
 #### 3.4.
 Пример с символьной строкой
 ```py
 stroka='Это – автоматизированная система'
stroka1=""
for ss in stroka:
	stroka1+=" "+ss
print(stroka1)
 ```
__Результат:__
 ```py
 Э т о   –   а в т о м а т и з и р о в а н н а я   с и с т е м а
 ```
 
#### 3.5.
 Запись цикла в строке. Пример: создание списка с синусоидальным сигналом:
 ```py
 import math
import matplotlib.pyplot as plt
sps2=[math.sin(i*math.pi/5+2) for i in range(100)]
x = list(range(100))
plt.figure(figsize=(12, 6))
plt.plot(x, sps2, 'b-', linewidth=1, label='sin(i*π/5 + 2)')
plt.title('График сигнала: sin(i*π/5 + 2)')
plt.xlabel('i (индекс)')
plt.ylabel('Значение sin(i*π/5 + 2)')
plt.show()
 ```
__График:__
 <img src = "./photo1.png" width="500" height="400" align="center">
 
 ## 4. Цикл «пока истинно условие» 
 Цикл «пока истинно условие» – управляющая инструкция __while__.
 #### 4.1.
 Цикл со счетчиком:
 ```py
 rashod=300
while rashod:
	print("Расход=",rashod)
	rashod-=50
 ```
__Результат:__
 ```py
 Расход= 300
Расход= 250
Расход= 200
Расход= 150
Расход= 100
Расход= 50
```
Цикл завершился, потому что условие __while rashod__: стало ложным, когда __rashod__ достиг нуля.

#### 4.2.
 Пример с символьной строкой.
 ```py
 import math
import matplotlib.pyplot as plt
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
plt.figure(figsize=(12, 6))
plt.plot(sps2, 'b-', linewidth=2, label='Выход инерционного звена')
plt.title('Сигнал на выходе инерционного звена')
plt.xlabel('Время (момент i)')
plt.ylabel('Значение r')
plt.grid(True, alpha=0.3)
plt.legend()
plt.show()
 ```
 
__График:__
 <img src = "./photo2.png" width="500" height="400" align="center">

#### 4.3.
Определим, является ли число простым (делится только на самого себя или 1).
```py
chislo=267   #Проверяемое число
kandidat =chislo // 2 		
while kandidat > 1:
	if chislo%kandidat == 0: 
		print(chislo, ' имеет множитель ', kandidat)
		break 		# else выполняться не будет
	kandidat -= 1
else: 			# При завершении цикла без break
	print(chislo, ' является простым!')
```
__Результат:__
 ```py
 267  имеет множитель  89
 ```
 
 Дополним программу так, чтобы выявить все простые числа в диапазоне от 250 до 300.
 ```py
 for chislo in range(250, 301):
	kandidat = chislo // 2
	while kandidat > 1:
		if chislo % kandidat == 0:
			break
		kandidat -= 1
	else:
		print(chislo, 'является простым!')
 ```
 
__Результат:__
 ```py
 251 является простым!
257 является простым!
263 является простым!
269 является простым!
271 является простым!
277 является простым!
281 является простым!
283 является простым!
293 является простым!
 ```

## Завершение работы.