4. kodutöö
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.
2. 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?
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 tühisõne, 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: Programm lõpetas töö.
Mittekohustuslik edasiarendus. Realiseeri funktsioon päevade_arv nii, et ta veebruari puhul tagastaks 28 või 29, olenevalt sellest, kas süsteemi jooksev aasta on liht- või liigaasta.
Esita programmid
Esita ülesannete lahendused Moodle'i kaudu failidena kodu1.py, kodu2.py ja kodu3.py.
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.