понедельник, 26 сентября 2016 г.

Цикли в PYTHON

Заняття 5
До моменту вивчення циклів у школі  програмування для багатьох школярів є чимось складним, вони не розуміють переваг компютера над тими самими діями, виконаними «вручну». Звичайно, швидше учні розвяжуть задачі на слідування та розгалудження вручну, ніж напишуть програму і побачать результат роботи на екрані. Саме цикли показують переваги програмування над самостійним розвязуванням задачі. Отже, цикли …
На мові PYTHON є два види циклів: перелік і умовний. Розпочнемо з першого.
Цикл «перелік» записується так:
for i in range(n):
    тіло циклу
Змінна і пробігає значення певного діапазону записаного у функції range() і для кожного значення виконується деяка послідовність команд, яка називається тілом циклу. Як видно із запису, тіло циклу знаходиться правіше оператора for.
Розглянемо параметри функції range(). У наведеному записі змінна n задає інтервал від 0 до n-1 включно (всього n значень). Тобто, спочатку змінна і набуває значення 0 і для цього значення виконуються всі команди у циклі. Наступне значення змінної і є 1, потім 2, потім 3 і т.д., поки не досягне значення n, для якого цикл вже не виконується. У випадку запуску циклу не з нуля, то вводиться ще один параметр – початкове значення. Наприклад,
for i in range(3,n):
    тіло циклу
Значення змінної і розпочинається з 3, потім 4, і т.д. і закінчується n-1.
Якщо ввести ще один параметр, то отримаємо …Спробуйте зрозуміти самостійно :)
n=10
for i in range(3,n,2):
    print(i, end=’ ’)
Програма виведе результат:
3 5 7 9
Здогадалися? Змінна і змінює значення з певним кроком, який задається у третьому параметрі. Більш формально можна сказати так:
Функція range(x,y,d) задає інтервал від х до y-1 включно з кроком d, тобто x, x+d, x+2d, x+3d, поки не досягне значення, рівного y або більше, для яких вона не виконується. Якщо значення d<0, то повинно бути x>y. Наприклад, для виведення чисел від 100 до 1 потрібно записати так:
for i in range(100,0,-1):
    print(i, end=’ ’)

Розглянемо цикл з умовою. Цей цикл записується практично так само як і в PASCAL, тільки замість оператора do ставиться двокрапка
x=1
while x<10:
    print(x**2)
    x+=2
Програма виводить у окремих рядках квадрати непарних одноцифрових чисел. Зверніть увагу, що тіло циклу знаходиться правіше оператора while.
Звичайно, що умова циклу може бути як проста так і складна. Наприклад, для того щоб цикл повторювався, поки не дотягнеться певний результат, наприклад, поки позиція об’єкта (i, j) не співпаде з координатою (x, y), цикл запишеться так:
 while not(x==i and y==j):
    тіло циклу
Якщо під час виконання циклу потрібно відокремити окремий випадок, наприклад, не опрацьовувати його або вийти з циклу, то для цього використовуються оператори continue та break. Перший оператор переходить на початок циклу (до наступної ітерації), не опрацьовуючи дані, а другий виходить із циклу. Звичайно, для цих операторів всередині тіла циклу повинна прописана умова, для яких вона виконується.
Наприклад, при виведенні коренів рівняння (х^3+x^2-10x+8)/(x^2-6x+5)=0  в діапазоні [0;10] необхідно пропускати пошук і виведення кореня для тих випадків, коли знаменник дорівнює нулю, тому слід використати оператор continue.
for x in range(11):
    if x**2-6*x+5==0:
             continue
    if x**3+x**2-10*x+8==0:
             print(x, end=’ ‘)
Програма виведе число 2, бо  число 1 пропустить (знаменник дорівнює нулю), а корінь -4 не входить в область пошуку.
Коли ж потрібно зупинитися на відшукання лише одного кореня, то після його знаходження потрібно вийти із циклу за допомогою оператора break.
for x in range(-10,11):
    if x**2-6*x+5==0:
             continue
    if x**3+x**2-10*x+8==0:
             print(x, end=’ ‘)
                   break
Програма виведе число -4 і одразу вийде з циклу.
Розглянемо кілька прикладів.

Приклад 1.
Дано натуральне число n. Знайти n! (добуток всіх натуральних чисел, що не перевищує n, тобто 1*2*3*…*n).
Вхід                                              Вихід
6                                                    720

n=int(input())
p=1
for i in range(1,n+1):
    p*=i
print(p)

Приклад 2.
Дано натуральне число n. Знайти суму його цифр.
Вхід                                               Вихід
342                                                 9

n=int(input())
s=0
while n>0:
    s+=n%10           (знаходимо останню цифру і додаємо до суми)
n//=10                (відкидаємо останню цифру)
print(s)

Приклад 3.
Дано натуральне число n (n≤9). Вивести числові східці, у якій і-ий рядок складається із східців від 1 до і.
Вхід                                           Вихід
4                                                 1
                                                   12
                                                   123
                                                   1234

n=int(input())
for i in range(1,n+1):
    for j in range(1,i):
             print(j, end=’’)
    print(i)

Приклад 4.
Дано послідовність чисел по одному в кожному рядку, що закінчуються нулем. Знати середнє арифметичне їх значення. Число 0 обробляти не потрібно. Числа в послідовності є натуральними.
Вхід                                              Вихід
4                                                    5.5
5                                                
12                                              
1                                                
0

s=0
n=0
a=int(input())
while a!=0:
    s+=a
    n+=1
    a=int(input())
print(s/n)

На цьому закінчимо заняття, а на наступному розглянемо створення використання власних функцій. До зустрічі. 

воскресенье, 25 сентября 2016 г.

Розгалуження в програмах

Заняття 4
На цьому занятті ми розглянемо елементи математичної логіки та розгалуження у програмах.
У більшості програм на певному кроці їх виконання потрібно вибирати той чи інший варіант подальших дій, тобто використовувати розгалуження. Умовою вибору того чи іншого варіанту є виконання деякої умови. Сама умова повинна бути булевського типу, тобто приймати лише два значення true або false. Сама умова записується одразу після оператора if, а після її через двокрапку записується команда, які необхідно виконати. Якщо команд декілька, то вони відокремлюються блоком, які мають однаковий відступ після оператора if. Відступ встановлюється клавішею Tab або пробілами. Якщо розгалуження закінчилося, то наступні команди слід писати під оператором if. Саме відступи виконують роль фігурних дужок на С++ або операторів begin end на PASCAL. Наприклад,
if a>0:
    print(“Дане число додатне”)
У випадку виконання інших команда у разі невиконання умови слід їх писати після оператора else, не забуваючи також поставити двокрапку. Наприклад,
if a>0:
    print(“Дане число додатне”)
else:
print(“Дане число недодатне”)
Якщо необхідно використати декілька гілок розгалуження, то використовують оператор elif, що є скороченою формою операторів else: if, причому їх кількість необмежена. Наприклад,
if a>0:
    print(“Дане число додатне”)
elif a<0:
    print(“Дане число відʼємне”)
else:
print(“Дане число дорівнює нулю”)
Зауваження: функцію print() можна писати в тому самому рядку, де і оператори if, elif чи else. Це можна робити, коли команда, що відноситься до умови лише одна, а у випадку блоку команд краще записувати з окремого рядка.

Розглянемо, які умови можна використовувати
Назва
Позначення
Приклад
Рівність
==
а==25
Більше
> 
a>25
Менше
< 
a<25
Більше або дорівнює
>=
a>=25
Менше або дорівнює
<=
a<=25
Не дорівнює
!=
а!=25
Якщо умова складна, то прості умови повʼязуються між собою службовими словами and, or та not()(логічне "і", логічне "або" та логічне "ні"). На мові PYTHON у цих операцій найнижчий пріоритет, тому прості умови не беруться в дужки. Наприклад, розглянемо, в якій координатній чверті знаходиться точка з координатами (x,y):
if x>0 and y>0:
    print(“І чверть”)
elif x<0 and y>0:
    print(“ІІ чверть”)
elif x<0 and y<0:
    print(“ІIІ чверть”)
elif x>0 and y<0:
    print(“ІV чверть”)
else:
print(“Точка лежить на координатних осях”)
Розглянемо ще один приклад перевірки умови рівності дробу x/y нулю.
if x==0 and not(y==0):
    print(“Дріб дорівнює нулю”)
Зауваження. Цю саму умову можна було записати і так:
if x==0 and y!=0:

Розглянемо кілька прикладів програм.

Приклад 1.
Дано одне натуральне число. Якщо воно парне, то вивести слово «YES», а якщо непарне, то – «NO»
Вхід                                   Вихід
34                                       YES
n=int(input())
if n%2==0:
    print(“YES”)
else:
    print(“NO”)

Приклад 2.
У двох рядках дано по одному цілому числу. Вивести максимальне з цих двох чисел.
Вхід                                   Вихід
3                                         4
4                   
a=int(input())
b=int(input())
if a>b:
    print(a)
else:
    print(b)

Приклад 3.
У одному рядку через пробіл дано три цілих числа. Вивести мінімальне з цих трьох чисел.
Вхід                                   Вихід
3 2 5                                   2
Програма:               
a, b, c = map(int, input().split())
m=a
if b<m:
    m=b
if c<m:
    m=c
print(m)

Приклад 4.
У одному рядку через пробіл дано чотири цілих числа – перші дві є координатами шахового коня на шаховій дошці, а інші два – координати короля протилежного кольору. Вивести слово «YES», якщо король перебуває під нападом з боку коня, або слово «NO», якщо ні.
Вхід                                   Вихід
3 2 5 1                                YES
Програма:               
x1, y1, x2, y2 = map(int, input().split())
if (abs(x1-x2)==1 and abs(y1-y2)==2) or (abs(x1-x2)==2 and abs(y1-y2)==1):
    print(“YES”)
else:
print(“NO”)

Зауваження. Оператор аbs() – це модуль числа, що стоїть у дужках. Читаємо умову: якщо модуль різниці перших координат дорівнює 1 і модуль різниці других координат дорівнює 2 або модуль різниці перших координат дорівнює 2 і модуль різниці других координат дорівнює 2, то виводимо слово «YES», інакше виводимо слово «NO».

Це був останній приклад на цьому занятті. На наступному занятті ми розглянемо оператори циклу. До зустрічі.