Novi asfalt
Piše se leto 2036. Asfalt na kolesarski poti, ki teče vzporedno z Večno potjo, dokončno razpade in Mestna občina Ljubljana (MOL) ugotovi, da je napočil čas za prenovo. Oddelek za gozdarske dejavnosti in motorni promet ugotovi, da so zadnje zaplate asfalta dejansko izginile in sklene, da bodo vsako leto asfaltirali tretjino poti. Kolesarji se razveselé, da bo pot asfaltirana že v treh letih, vendar se izkaže, da je to mišljeno malo drugače: vsako leto bodo asfaltirali tretjino preostale dolžine poti.
Recimo, da je celotna pot dolga 2700 metrov.
- Prvo leto bodo asfaltirali eno tretjino, to je 2700 / 3 = 900 metrov. Neasfaltiranih bo še 1800 metrov.
- Drugo leto bodo asfaltirali eno tretjino ostanka, torej 1800 / 3 = 600 metrov. Neasfaltiranih bo še 1200 metrov.
- Tretje leto bodo asfaltirali eno tretjino preostanka, torej 1200 / 3 = 400 metrov. Neasfaltiranih bo še 800 metrov.
- ...
Kolesarji - presneta banda nehvaležna! - seveda začnejo robantiti, da tega ne bo nikoli konec in opletati z limitami, pa Ahilom, pa želvami... MOL jih v svoji neskončni potrpežljivosti pomiri, da bodo metre zaokrožali navzgor:
- ...
- Četrto leto bodo asfaltirali tretjino od 800, to je 267 metrov, ostalo bo še 533 metrov.
- Peto leto pride na vrsto 178 metrov, ostane še 355 metrov.
- Šesto leto dodajo 119 metrov, ostane 236 metrov.
- ...
Izkaže se, da se prenova ne bo vlekla v neskončnost, temveč bo končana v borih 19 letih, kar je, kot pripomni MOL, bistveno hitreje kot nikoli. Zlobno natolcevanje kolesarjev je s tem razkrinkano kot neresnično.
Obvezna naloga
Napiši program, ki mu vpišemo dolžino poti in izpiše, koliko metrov bo asfaltiranih v posameznem letu, na koncu pa še, koliko let bo trajalo asfaltiranje.
Program naj ne izpisuje ničesar drugega kot te številke.
Če vnesemo 2700, program izpiše
900
600
400
267
178
119
79
53
35
23
16
10
7
5
3
2
1
1
1
19
Če vnesemo 100, program izpiše
34
22
15
10
7
4
3
2
1
1
1
11
Če vnesemo 10000, program izpiše
3334
2222
1482
988
658
439
293
195
130
87
58
38
26
17
11
8
5
3
2
2
1
1
22
Dodatna naloga, ki se je lahko lotijo vsi
Te naloge ne oddajate, to je samo za vašo vajo.
- Napišite program, ki prejme dolžino poti in izpiše skupno dolžino poti, ki bo asfaltirana v prvih desetih letih.
Dodatne naloge za te, ki se dolgočasijo
- Nalogo reši z rekurzivno funkcijo.
Narišite graf, ki ima na osi x različne dolžine poti, na primer
[100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000, 500000]
, nay
pa, koliko let bo trajalo asfaltiranje za takšno dolžino. Za gornje primere bi bil graf videti takole:Ta graf je seveda malo "polomljen", ker je točk malo. Če bi jih narisali več, recimo dolžine, ki smo jih našteli zgoraj: je čas asfaltiranja sorazmeren dolžini? Z drugimi besedami, je graf približno premica (z manjšimi naključnimi odkloni, kot na gornjem grafu)? Ali pa ni? Če ni: na katero krivuljo vas spominja? Znate to dokazati - grafično, s primerno spremenjenim grafom? Znate morda utemeljiti, zakaj je tako?
- Znate morda s preprosto matematično formulo oceniti (z napako enega ali dveh let gor ali dol), koliko let bo trajala prenova?
- Kaj pa tole: MOL se odloči, da metrov ne bo zaokrožal navzgor. Vsako leto bo asfaltiral natančno eno tretjino ostanka. Z asfaltiranjem bo končal, ko bo neasfaltirana dolžina krajša od enega metra, kar je za kolesarje čisto dovolj dobro. Napiši program, ki računa čas asfaltiranja po takšnem pravilu. (Ne skrbite glede natančnosti: Pythonov
float
ima 15 decimalnih mest, premer protona pa je $10^{-15} m$. Še več: najmanjši pozitivnifloat
je $5\times 10^{-324} m$, Planckova razdalja - v nekem smislu "najmanjša možna razdalja" v fiziki - pa je $10^{-35} m$. Pythonovfloat
bo za reševanje te naloge čez in čez dovolj.) - Če ste rešili prejšnjo nalogo: znate morda na ta problem odgovoriti s povsem preprosto matematično formulo? Obstaja matematična funkcija, ki računa natančno to reč, samo njen rezultat morate zaokrožiti navzgor.