4. kodutöö
1. Pooliku püramiidi süsteem (while-tsükliga)
Paljudes treeningkavades kasutatakse n-ö pooliku püramiidi süsteemi, kus iga seeria puhul tehakse üks kordus rohkem kui eelmises kuni kindlaksmääratud lõppseeriani. Tihti tekib aga selliste harjutuste puhul küsimus, kui palju terve harjutuse peale kordusi sooritatakse, sest hea on treeningpäevikusse kirja panna, kui palju mingil päeval mingit harjutust tehtud sai.
Selle väljaselgitamiseks tuleb käsitsi liita seeriad kokku. Näiteks kui treeningkava soovitab teha pooliku püramiidi süsteemis kätekõverdusi kuni 10 korduseni, siis kujuneb seeriate põhjal kogu kätekõverduste arv välja järgmiselt: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55 kordust. 10-se pooliku püramiidi puhul on arvutus veel võrdlemisi kiire, kuid suuremate lõppseeriate arvude juurde jõudes oleks mõistlik kirja panna lihtne programm, mis teeb töö kasutaja eest ära.
Koostada programm, mis
- küsib kasutajalt naturaalarvu (positiivne täisarv);
- arvutab while-tsükli abil pooliku püramiidi süsteemis harjutuste summa eelnevalt sisestatud naturaalarvuni (kaasa arvatud);
- väljastab saadud summa.
Harjutuste summa peab arvutama while-tsükli abil.
Näited programmi tööst
>>> %Run lahendus.py Sisesta korduste arv: 15 Harjutuste arv on 120.
>>> %Run lahendus.py Sisesta korduste arv: 10 Harjutuste arv on 55.
Üldisemaks teadmiseks huvilistele: täieliku püramiidi süsteem arvuni 10 tähendab ronimist 1…10…1, ehk tippu jõudes vähenevad arvud tagasi arvuni 1. Summa arvutamisel saaksime siin vastuseks 100 (10 liidetakse vaid ühel korral).
2. Pooliku püramiidi süsteem (for-tsükliga)
Paljudes treeningkavades kasutatakse n-ö pooliku püramiidi süsteemi, kus iga seeria puhul tehakse üks kordus rohkem kui eelmises kuni kindlaksmääratud lõppseeriani. Tihti tekib aga selliste harjutuste puhul küsimus, kui palju terve harjutuse peale kordusi sooritatakse, sest hea on päevikusse kirja panna, kui palju mingil päeval mingit harjutust tehtud sai.
Selle väljaselgitamiseks tuleb liita seeriad kokku. Näiteks kui treeningkava soovitab teha pooliku püramiidi süsteemis kätekõverdusi kuni 10 korduseni, siis kujuneb seeriate põhjal kogu kätekõverduste arv välja järgmiselt: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55 kordust. 10-se pooliku püramiidi puhul on arvutus veel võrdlemisi kiire, kuid suuremate lõppseeriate arvude juurde jõudes oleks mõistlik kirja panna lihtne programm, mis teeb töö kasutaja eest ära.
Koostada programm, mis
- küsib kasutajalt naturaalarvu (positiivne täisarv);
- arvutab for-tsükli ja funktsiooni range abil pooliku püramiidi süsteemis harjutuste summa eelnevalt sisestatud naturaalarvuni (kaasa arvatud);
- väljastab saadud summa.
Tegemist on ülesande 3.2 variandiga for-tsükli jaoks.
Näited programmi tööst
>>> %Run yl5.2.py Sisesta naturaalarv: 15 Harjutuste arv: 120
>>> %Run yl5.2.py Sisesta naturaalarv: 10 Harjutuste arv: 55
3. Päevade arv
Kirjuta funktsioon päevade_arv, millel on üks täisarvuline parameeter, kuu järjekorranumber. Funktsioon tagastab päevade arvu selles kuus. Kuude järjekorranumbrid on 1, 2, . . . , 12. Kui parameetri väärtuseks on midagi muud, siis tagastab funktsioon -1. Eeldame, et tegemist on lihtaastaga.
>>> päevade_arv(9) 30 >>> päevade_arv(2) 28 >>> päevade_arv(100) -1
Testi funktsiooni erinevate argumentidega.
Seejärel kirjuta programm, mis küsib kasutajalt korduvalt kuu järjekorranumbrit ja prindib selle kuu päevade arvu, kasutades funktsiooni päevade_arv. Kui kasutaja sisestab sõna "lõpp", siis programm lõpetab töö. Programm peaks tegema kõik vajalikud sisendikontrollid ja kutsuma funktsiooni päevade_arv välja ainult siis, kui kuu number on täisarv 1-st 12-ni (vihje: try-except).
Sisesta kuu number: 3 Selles kuus on 31 päeva Sisesta kuu number: 4 Selles kuus on 30 päeva Sisesta kuu number: viis Ebakorrektne number Sisesta kuu number: -1 Kuu number peab jääma lõiku 1–12 Sisesta kuu number: 100 Kuu number peab jääma lõiku 1–12 Sisesta kuu number: 10 Selles kuus on 31 päeva Sisesta kuu number: lõpp Programm lõpetas töö
Kui automaatkontroll ei lõpeta tööd, siis tõenäoliselt läheb mõni su programm lõpmatusse tsüklisse. Testi oma programme erinevate sisendandmetega ja uuri, milline tsükkel võib mingitel juhtudel jääda lõpmatuseni tööle.
3. Korrutis
Kirjuta programm, mis küsib kasutajalt positiivset täisarvu n ja prindib välja avaldise
{$$2\cdot\frac21\cdot\frac23\cdot\frac43\cdot\frac45\cdot\ldots\cdot\frac{2n}{2n-1}\cdot\frac{2n}{2n+1}$$}
väärtuse.
Vihje. Alusta arvust 2 ja korruta sellele igal sammul juurde järgmised tegurid kahekaupa. Avaldises olevate tegurite koguarv on teada.
Näide
Sisesta n: 1 Korrutis on 2.6666666666666665
Teine näide
Sisesta n: 2 Korrutis on 2.844444444444444
Testi oma programmi järjest suurenevate sisenditega. Millisele väärtusele see korrutis läheneb, kui n kasvab?
1. 3n+1
Antud naturaalarvuga tehakse järgmisi operatsioone.
- Kui arv jagub 2-ga, siis jagatakse ta 2-ga.
- Kui arv ei jagu 2-ga, siis korrutatakse ta 3-ga ja liidetakse 1.
Kuigi keegi pole seda suutnud tõestada, valitseb arvamus, et ükskõik millisest arvust lähtudes jõuame neid operatsioone korduvalt rakendades lõpuks arvuni 1.
Koosta programm, mille sisendiks on naturaalarv n ning väljundiks sammude arv, mis kulub jõudmiseks arvuni 1.
Näide 1
Sisesta arv: 4 Sammude arv on 2.
Näide 2
Sisesta arv: 6 Sammude arv on 8.
Juhis. Tasub jälgida, et igal sammul oleks vahetulemus täisarvutüüpi.