середа, 15 вересня 2021 р.

16.09.2021-23.09.2021 Цикли з лічильником на Python

 16.09.2021-23.09.2021


Тема: Команди повторення. Цикли з лічильником.

Теоретична частина.

Розглянемо, який загальний вигляд запису команд  циклів на алгоритмічній мові та мові Python:

алгоритмічна мова(псевдокод)

цикл з лічильником

мова Python

цикл з лічильником

Для m  умова лічильника

    пц

             тіло циклу

    кц

 for m in range(0,n,k) :

        тіло циклу

 

 

алгоритмічна мова(псевдокод)

цикл з передумовою

мова Python

цикл з передумовою

поки умова

    пц

             тело циклу

    кц

while  умова :

       тіло циклу

(пц -  початок циклу, кц - кінець циклу)

Зверніть увагу на двокрапку після умови. Це невід'ємна частина команди циклу на мові Python.

Серія команд, що повторюються, на Python відділяється відступами і тільки відступами (ніяких "операторних дужок" BEGIN -END (як у Pascal) чи фігурних дужок (як у С++)).

Цей оператор виконується наступним чином. Перевіряється умова. Якщо вона виконується, тобто має значення TRUE (правда,істина, +), то виконується тіло циклу. Знову перевіряється умова, якщо вона істинна, то знову виконується тіло циклу. Так повторюється, поки умова не перестане виконуватися. Тобто прийме значення FALSE (неправда, хиба, -). Як тільки це трапилося повторення дій припиняється, управління передається оператору, що є наступним за оператором циклу.

 

Отже, інтерпретатор повторює тіло циклу, поки умова циклу залишається істинною.

! Якщо умова не виконується при першій перевірці, то тіло циклу не виконується жодного разу.

Очевидно, що один з операторів, що знаходяться в тілі циклу, повинен впливати на умову, інакше цикл буде виконуватись вічно.

 

Буквальне розуміння прислів'я «Сім разів відміряй, один раз відріж» потребує використання команди циклу.

По-перше, нехай комп'ютер сам ніби «загинає пальці» і підраховує, скільки відмірювань здійснено.  Для цього введемо змінну, що буде грати роль лічильника кількості дій відмірювань. Нехай це буде змінна і. Нехай спочатку вона має значення 1

i=1

Що буде тілом циклу, тобто які команди будуть повторюватися? Звичайно, це «відміряй» і збільшення лічильника відмірювань на одиницю. Скільки разів має виконатися тіло циклу? За прислів'ям рівно сім. Тобто умова циклу має бути такою, щоб вона була істинною 7 разів, а потім стала хибною. Це може бути, наприклад, така умова:   i<=7. Тоді цикл буде виглядати так:

алгоритмічна мова

мова Python

i=1

поки i<=7

      пц

            «відміряй»

            i=i+1

      кц

«відріж»

i=1

while i<=7:

           «відміряй»

           i=i+1

«відріж»     

 

Виконаємо цю команду:

Змінна і набуває значення 1. Перевіряємо умову 1<=7, вона істинна, тому заходимо в тіло циклу. Відбувається команда «відміряй», змінна і набуває попереднього значення, збільшеного на 1.

Останній абзац будемо писати скорочено, відмічаючи «+» істинність умови і «-» її хибність:

Виконання

i=1

1<=7  +

«відміряй»

i=1+1=2

2<=7  +

«відміряй»

i=2+1=3

3<=7  +

«відміряй»

i=3+1=4

4<=7  +

«відміряй»

i=4+1=5

5<=7  +

«відміряй»

i=5+1=6

6<=7  +

«відміряй»

i=6+1=7

7<=7  +

«відміряй»

i=7+1=8

8<=7  -

«відріж»

Умова циклу хибна, тому циклічна команда завершила роботу. Скільки разів виконалось тіло циклу? Стільки, скільки разів була істинна умова, тобто 7. Скільки відбулось відмірювань? Подимившись на виконання, легко побачити, що їх було 7. Яке значення змінної і  після виходу з циклу? Дивимось на виділену більшим шрифтом стрічку виконання, це остання зміна значення змінної і. Отже, і має значення 8.

Після циклу стоїть команда «відріж». Вона  не відноситься до тіла циклу, оскільки у алг.мові розташовується після пц, а у мові Python стоїть без відступу.

 

Якщо нам треба повторити серію команд 4 рази, використовуємо наступну циклічну команду:

i=1

while i<=4:

            Серія команд

             i=i+1

Якщо серія команд має виконатися 3 рази, то команда циклу виглядатиме так:

i=1

while i<=3:

            Серія команд

       i=i+1

 

Математичні моделі, які будемо алгоритмізувати

Визначення: Множина називається числовою, якщо її елементами являються числа.

Наведемо приклади декількох відомих числових множин:

N - множина натуральних чисел(N={1,2,3,4,5,6….n,…};

Z - множина цілих чисел(Z={,-n,…, -2,1,0,1,2,…,n…}.);

Q - множина раціональних чисел( Q={z/n, де n - натур. число, z -ціле}) ;

І - множина ірраціональних чисел( I={m**(z/n), де n,m-натур.число,z-ціле}) ;

R - множина дійсних чисел(R={QÈI, де Q-раціон. числа, I -іррац. числа};

С - множина комплексних чисел.

Між цими множинами встановленні такі відношення:

N Ì Z Ì Q Ì R Ì C.

В основі розширення числових множин лежать такі принципи: якщо множина А розширюється до множини В, то:

1) А Ì B;

2) операції і відношення між елементами, які виконуються в множині  А, зберігаються і для элементів множини В;

3) у множині В виконуються операції,  які не виконуються або частково виконуються  у множині А;

4) множина В являється мінімальним розширенням множина А, яка володіє властивостями  1) – 3).

Множина натуральних чисел N строго визначається за допомогою аксіом Пеано.

Довідка: Джузеппе Пеано (1858-1932) — італійський математик, якому, крім фор­мулювання аксіом натуральних чисел, належать загальна теорема про існуван­ня розв'язку диференціального рівняння, результати з обґрунтування геометрії. Вперше побудував неперервну криву, що заповнює квадрат.

 

1. Існує натуральне число 1, яке не є наступним ні за яким натуральним числом (натуральний ряд починається з 1).

2. Кожне натуральне число следує тільки за одним і тілько одним натуральним числом (у натуральному ряді немає повторень).

3. За кожним натуральним числом слідує одне і тільки одне натуральне число (натуральный ряд нескінчений).

4. Аксіома індукції. Нехай М Ì N. Якщо:

1)  1 Î М; (початковий елемент належить підмножині натуральних чисел)

2) Для будь-якого елемента а Î М множині М належить і наступний за а элемент а1, тоді множина М співпадає з множиною натуральних чисел.

Таким чином, множина  N = { 1, 2, 3, 4,...}.

На аксиомі 4 грунтується спосіб доведення тверджень, який називається метод математичної індукції. Доведення різних тверджень  цим методом проводиться від часткового до загального, а потім робиться висновок про істинність даного твердження.

 

Приклад. Довести, що на площині n прямих, серед яких жодні три не перетинаються в одній точці, а жодні дві не паралельні, поділяють площину на 1 + 0,5n(n + 1) частин.

Доведення (методом математичної індукції):

1)Пряма ділить площину на 2 = 1+0,5 ∙ 1 ∙(1 +1)  частини, тобто
твердження справджується для
n = 1.

2)Припустимо, що n прямих ділять площину на 1 + 0,5n(n+1) час­тин. Нова (n + 1)-а пряма перетне наявні n прямих у n точках,
що поділять нову пряму на (
n + 1) частин. Отже, з наявних
1 + 0,5
n(n + 1) частин площини буде перетнуто і поділено новою
прямою (
n+1). Таким чином, при проведенні цієї прямої кількість частин, на які поділяється площина, зросте на (n + 1) і
дорівнюватиме:

1 + 0,5n(n + 1) + (n + 1) = 1 + 0,5(n + 1)(n + 2).

Якщо є повне розуміння попереднього доведення, тоді спробуйте самостійно довести методом математичної індукції такі рівності для сумування числових рядів:

1.     2+4+6+..+ 2k = k(k+1)   (сума перших парних натуральних чисел);

2.     1+3+5+..+ 2к -1 = k2   (сума перших непарних натуральних чисел);

3.     1+2+3+4+..+ k = 0,5* k(k+1)   (сума перших натуральних чисел);

4.     12+22+32+42+..+ к2 =  k(k+1)(2k+1)/6    (сума квадратів перших натуральних чисел);

5.     1∙2 + 3∙2 + 3∙4 + 4∙5 + 5∙6 + … + к(к+1) = k(k+1)(2+k)/3;

6.     13+23+33+43+..+ k3k2(k2+1)/4 (сума кубів перших натуральних чисел);

 

Практична частина.

Програмування циклів для сумування чисел мовою Python

 

Завдання 1. Створити, реалізувати та протестувати мовою пограмування Python у середовищі програмування Thonny лінійний і нелінійний алгоритми, що за введенним натуральним числом k знаходять суму перших парних натуральних чисел, тобто 2+4+6+ ... + 2k=k*(k+1).

Реалізація.

 

print('Лінійний алгоритм обчислення суми перших парних натуральних чисел')

print('Введіть натуральне число k=')

k=int(input())

s=k*(k+1)

print('Сума 2+4+6+...+ 2k=k*(k+1)=', s)

print('Нелінійний циклічний алгоритм обчислення суми перших парних натуральних чисел')

print('Введіть натуральне число k=')      # виведення повідомлення на екран

k=int(input()); s=0;                        # введення вхідних даних в алгоритм

for m in range(1, k+1,1):        # цикл з лічильником від 1 до к+1 з кроком 1

      s=s+2*m                    # сумування парних чисел

print('Сума 2+4+6+...+',2*k,'=',k,'*(',k+1,')=', s)    # виведення результату 

 

Протестуйте алгоритм, якщо: 1) k=51;   2)k=327;  3)k=790097.

 

Завдання 2. Створити, реалізувати та протестувати мовою пограмування Python у середовищі програмування Thonny лінійний і нелінійний алгоритми, що за введенним натуральним числом k знаходять суму перших непарних натуральних чисел, тобто 1+3+5+ ... + 2k-1=k*k.

Реалізація.

 

print('Лінійний алгоритм обчислення суми перших непарних натуральних чисел')

print('Введіть натуральне число k=')

k=int(input())

s=k*k

print('Сума 1+3+...+',2*k-1,'=',k,'*(',k,')=', s)    # виведення результату  print('Нелінійний циклічний алгоритм обчислення суми перших непарних натуральних чисел')

print('Введіть натуральне число k=')       # виведення повідомлення на екран

k=int(input()); s=0;                        # введення вхідних даних в алгоритм

for m in range(1, k+1,1):        # цикл з лічильником від 1 до к+1 з кроком 1

      s=s+2*m-1                    # сумування парних чисел

print('Сума 1+3+5+...+',2*k-1,'=',k,'*(',k,')=', s)    # виведення

 

Протестуйте алгоритм, якщо 1) k=85; 2)k=1037;  3)k=90067.

 

Завдання 3. Створити, реалізувати та протестувати мовою пограмування Python у середовищі програмування Thonny лінійний і нелінійний алгоритми, що за введенним натуральним числом k знаходять суму перших натуральних чисел, тобто 1+2+3+4+ ... + k=k*(k+1)//2.

Реалізація.

 

print('Лінійний алгоритм обчислення суми перших натуральних чисел')

print('Введіть натуральне число k=')

k=int(input())

s=k*(k+1)//2

print('Сума 1+2+3+...+',k,'=0.5*',k,'*(',k+1,')=', s)    # виведення результату  print('Нелінійний циклічний алгоритм обчислення суми перших натуральних чисел')

print('Введіть натуральне число k=')            # виведення повідомлення k=int(input()); s=0;                        # введення вхідних даних в алгоритм

for m in range(1, k+1,1):        # цикл з лічильником від 1 до к+1 з кроком 1

      s=s+m                    # сумування парних чисел

print('Сума 1+2+3+...+',k,'=0.5*',k,'*(',k+1,')=', s)    # виведення результату 

 

Протестуйте алгоритм, якщо 1) k=71; 2)k=5757;  3)k=284582.

 

Завдання 4. Створити, реалізувати та протестувати мовою пограмування Python у середовищі програмування Thonny лінійний і нелінійний алгоритми, що за введенним натуральним числом k знаходять суму квадратів перших натуральних чисел, тобто 1*1+2*2+3*3+4*4+ ... + k*k=k*(k+1)(2*k+1)//6.

 

Реалізація.

 

print('Лінійний алгоритм обчислення суми квадратів перших натуральних чисел')

print('Введіть натуральне число k=')

k=int(input())

s=k*(k+1)*(2*k+1)//6

print('Сума 1*1+2*2+3*3+4*4+ ... + ',k*k,'=',k,'*(',k+1,')//6=', s)   

print('Нелінійний циклічний алгоритм обчислення суми квадратів перших натуральних чисел')

print('Введіть натуральне число k=')            # виведення повідомлення

k=int(input()); s=0;                        # введення вхідних даних в алгоритм

for m in range(1, k+1,1):        # цикл з лічильником від 1 до к+1 з кроком 1

      s=s+m*m                    # сумування парних чисел

print('Сума 1*1+2*2+3*3+4*4+ ... + ',k*k,'=',k,'*(',k+1,'//6)=', s)   

 

Протестуйте алгоритм, якщо 1) k=56;  2)k=9217;  3)k=70482.

 

Завдання 5. Створити, реалізувати та протестувати мовою пограмування Python у середовищі програмування Thonny лінійний і нелінійний алгоритми, що за введенним натуральним числом k знаходять суму попарних добутків перших натуральних чисел, тобто

1*2+2*3+3*4+4*5+ ... + k*(k+1)=k*(k+1)(2+k)//3.

 

Реалізація.

 

print('Лінійний алгоритм обчислення суми попарних добутків перших натуральних чисел')

print('Введіть натуральне число k=')

k=int(input())

s=k*(k+1)*(k+2)//3

print('Сума 1*2+2*3+3*4+4*5+ ... + ',k,'*(',k+1,')=(',k+2,')*',k,'*(',k +1,')//3=', s)    print('Нелінійний циклічний алгоритм обчислення суми попарних добутків перших натуральних чисел')

print('Введіть натуральне число k=')            # виведення повідомлення на екран

k=int(input()); s=0;                        # введення вхідних даних в алгоритм

for m in range(1, k+1,1):        # цикл з лічильником від 1 до к+1 з кроком 1

      s=s+m*(m+1)                    # сумування парних чисел

print('Сума 1*2+2*3+3*4+4*5+ ... + ',k,'*(',k+1,')=(',k+2,')*',k,'*(',k +1,')//3=', s)   

 

Протестуйте алгоритм, якщо 1) k=27; 2)k=9687;  3)k=6071706.

 

Завдання 6. Створити, реалізувати та протестувати мовою пограмування Python у середовищі програмування Thonny лінійний і нелінійний алгоритми, що за введенним натуральним числом k знаходять суму попарних добутків перших натуральних чисел, тобто  1*1*1+2*2*2+3*3*3+4*4*4+ ... + k*k*k=k*k*(k+1)(1+k)//4.

Реалізація.

print('Лінійний алгоритм обчислення суми попарних добутків натуральних чисел')

print('Введіть натуральне число k='); k=int(input()); s= int(k*k*(k+1)*(1+k)//4)

print('Сума Сума 1*1*1+2*2*2+3*3*3+4*4*4+ ... +',k,'*(',k,')*',k,'=(',k+1,')*(',k+1,')*(',k,')*(',k,')//4=', s)

print('Нелінійний алгоритм обчислення суми попарних добутків натуральних чисел')

print('Введіть натуральне число k='); k=int(input()); s=0

for m in range(1, k+1,1):        # цикл з лічильником від 1 до к+1 з кроком 1

       s=s+m*m*m                    # сумування парних чисел

print('Сума 1*1*1+2*2*2+3*3*3+4*4*4+ ... + k*k*k=k*k*(k+1)*(1+k)//4=', s)   

Протестуйте алгоритм, якщо 1) k=12; 2)k=197;  3)k=620026.

 

Результати виконання практичної частини надсилати на електронну адресу учителя vinnser@gmail.com


*****************************************

Для тих, хто хоче самостійно програмувати:


Самостійна  робота. 

Компетентнісні завдання для самостійного  програмування.

 

0. Визначити, яку заробітну платню одержить на фірмі сумісник за виконану роботу, якщо йому нараховано грн., а податок становить 20%.
Вхідні дані
Ви вводите з клавіатури одне дійсне число S.

Вихідні дані
Ви виводите на екран одне дійсне число з двома знаками після коми (без округлення).

Приклад вхідних і вихідних даних
Вхід: 1000
Вихід: 800.00


1. Максим задумав число х, яке нікому не повідомив. Але на дошці записав інше число 
m, а саме: подвоєнне задумане число, збільшене на 7.  Відгадайте, яке число задумав Максим. Створити, реалізувати, протестувати алгоритм мовою програмування у середовищі програмування, який за числом m, що записане на дошці, знаходить задумане Максимом число x.

Математична модель: x=0.5*m-3.5

2.  На праву тарілку великих терезів став Котигорошко, масою k кг, а на ліву тарілку стали три дівчинки відповідно з масами m кг,  n кг, p кг. Аби досягти рівноваги на терезах Котигорошко з'їв  b кг гороху. Створити, реалізувати, протестувати алгоритм мовою програмування у середовищі програмування, який за  числами k, m n, p знаходить число b.

Математична модель: b= m+n+p-k.


3.  Артем доглядає у зоопарку плазунів
:  гадюк довжиною по 1,12 м кожна, m  удавів довжиною 2,75 м кожний, n вужів довжиною 1,24 кожний.  Створити, реалізувати, протестувати алгоритм мовою програмування у середовищі програмування, який за числами k, m n, p знаходить довжину усіх плазунів, за якими доглядає Артем.
Математична модель: 
s=1.12*k+2.75*m+1.24*n


4.  Богдан записав на дошці ціле число k.  Вікторія записала на дошці  ціле число m. Марія записала на дошці ціле число n. Створити, реалізувати, протестувати алгоритм мовою програмування у середовищі програмування, який за цілими числами k, m, n знаходить  такі  цілі числа х та у, що виконується рівність k*x+m*y=n.
 
Математична модель: 
x=-mz+xo,  y=kx+yo, де (xoyo ) - пара цілих чисел таких, що k*xо+m*yо=n


5. Дмитро закупив k м'ячів вартістю m грн,  n м’ячів вартістю g грн, 
м’ячів вартістю р грн, заплативши за м'ячі кожного виду однакові суми грошей.  Усього м’ячів k+n+t=b. Скільки м'ячів кожного виду купив Дмитроякщо серед набору чисел k, m n, g немає рівних чисел. Створити, реалізувати, протестувати алгоритм мовою програмування у середовищі програмування, який за чотирьма цілими числами b, mg, p знаходить три цілі  числа: k м'ячів по m грн,  t м'ячів по p гривень, n м'ячів по g грн.
Математична модель: 
k*m==g*n==t*p==s та k+n+t==b.


6. Трицифрове число має k coтень, m десятків, і  n одиниць.
Створити, реалізувати, протестувати алгоритм мовою програмування у середовищі програмування, який за числами k, m, n  знаходить  різницю h між цим числом та cyмою цифр трицифрового числа. Математична модель: h = 99*x+9*y.

7. Ігор  задумав чотири послідовних парних чисел і повідомив своєму другові Максиму лише суму цих чотирьох чисел. Через деякий час Максим самостійно знайшов усі задумані Ігорем чотири числа. Створити, реалізувати, протестувати алгоритм мовою програмування у середовищі програмування, який за відомою сумою s знаходить чотири послідовні парні числа k, m n, p, які задумав Ігор.
Математична модель.
S=2x+(2x+2)+(2x+4)+2x+6
S=8x+12
8x=s-12
x= (s-12)//8
k=(s-12)//4 - перше задумане число
m = k + 2 - друге задумане число
n= m+2 - третє задумане число
p=n+2 - четверте задумане число.

8. Для нумерації  m сторінок книги використали n цифр(символів)( n<1002). До речі, кількість сторінок у книзі повинна бути кратною 4. Створити, реалізувати, протестувати алгоритм мовою програмування у середовищі програмування, який за
числом використаних n цифр знаходить кількість сторінок y книзі.
Математична модель.
9 цифр для усіх одноцифрових чисел.
90*2=180 цифр для усіх двоцифрових позначень.
900*3=2700  цифр для усіх трифрових позначень.
1002-189= 813 цифр для позначення трицифрових чисел.

Створимо розгалуження окремих випадків.

1)Якщо  (186<n<1002)and((n-189)%3==0), тоді
(n-189)//3 - кількість сторінок, що позначає трьома цифрами
m =9+90+(n-189)//3 - кількість сторінок у книзі, і при цьому m повинна бути кратне 4.(
m%4==0)
2)Якщо ( 9<n<=189)and((n-9)/%2==0), тоді
m =9+(n-9)//3 - кількість сторінок у книзі
і прицьому  m повинно бути кратне 4(
m%4==0).
3)Якщо (n==4)or(n==8), тоді
m=n - кількість сторінок.
4)Інакше такої книги не може існувати.

 


Немає коментарів:

Дописати коментар