3. praktikumi harjutused
1. Töötasu
Tavalise töönädala pikkus on 40 tundi. Ületundide eest saadava tasu määr on tavalisest tasumäärast poolteist korda suurem.
Kirjuta funktsioon, millel on kaks parameetrit: töötatud tundide arv ja tavaline tasumäär tunnis. Funktsioon tagastab töötasu suuruse, võttes arvesse ka ületunde.
Näide funktsiooni arvuta_tasu kasutamisest
>>> arvuta_tasu(45, 10) 475.0
Selgitus: 40*10 + 5*1.5*10 = 475.0
Kirjuta programm, mis küsib kasutajalt kahe töötaja nimesid, töötatud tundide arve ja tasumäärasid. Seejärel teeb programm kindlaks ja väljastab töötaja, kelle töötasu oli suurem.
Näide programmi tööst
Sisesta 1. töötaja nimi: Utos Sisesta 1. töötaja tunnid: 20 Sisesta 1. töötaja tasumäär: 25 Sisesta 2. töötaja nimi: Rork Sisesta 2. töötaja tunnid: 45 Sisesta 2. töötaja tasumäär: 10 Utos saab suuremat tasu kui Rork
2. Faili suurus
Kirjuta funktsioon, mis võtab argumendiks failinime ja tagastab selle faili suuruse baitides, kui süsteemis leidub etteantud nimega fail, või -1, kui sellist faili pole või kui see nimi tähistab hoopis kausta. Abiks on Pythoni moodul os.path
(http://docs.python.org/py3k/library/os.path.html) NB! Tegemist on mitmeosalise moodulinimega, st importimisel tuleb mainida mõlemad nime osad, nt:
from os.path import *
3. Kilo, mega, giga
Suurte failide puhul ei ole mugav arvestada faili suurust baitides. Kirjuta funktsioon teisenda
, mis võtab argumendiks baitide arvu ja tagastab sõne, kus baidid on teisendatud sobivatesse ühikutesse, sobiva täpsusega. Näiteks teisenda(37065)
võiks tagastada sõne "36.2 KB"
. Teisendusreeglid on: 1 KB = 1024 B, 1 MB = 1024 KB jne. Vastus tagasta ühe komakoha täpsusega.
Näide funktsiooni tööst:
>>> teisenda(37065) 36.2 KB
4. Kasutajasõbralik failisuurus
Kirjuta funktsioon, mis võtab argumendiks failinime ja tagastab faili suuruse sõnena, parajates ühikutes. Kasuta abifunktsioonidena eelmiste ülesannete funktsioone.
Lõpuks koosta programm, mis küsib kasutajalt failinime ja kuvab loodud funktsiooni abil vastuseks ekraanile vastava faili suuruse näiteks kui faili suuruse on 37065 baiti:
Faili suurus on 36.2 KB
5. Värvide teisendamine
RGB-värvimudelis esitatakse värve kolme põhivärvi, punase, rohelise ja sinise kombinatsioonina, segades neid sobivas vahekorras. RGB-mudelit võib ette kujutada kuubina, kus igal värvil on kolm koordinaati – kolme põhivärvi intensiivsused. Lihtsuse huvides eeldame, et kuubi küljepikkus on 1.
HSL-värvimudelis esitatakse värve tooni, küllastuse ja heleduse kombinatsioonina. HSL-mudelit võib ette kujutada kui topeltkoonust, kus toonid on paigutatud ringikujuliselt ümber koonuste ühise põhja, määrates nende asukoha kraadides skaalal 0° kuni 360°, küllastus on kaugus ringi keskpunktist ja heledus on väärtus vertikaalteljel, mis on tõmmatud ringi keskpunktist läbi koonuste tippude. Nii küllastust kui ka heledust mõõdetakse skaalal 0 kuni 1.
![](https://courses.cs.ut.ee/2024/programmeerimine/fall/Main/Praks3?action=download&upname=N3_H.png)
![](https://courses.cs.ut.ee/2024/programmeerimine/fall/Main/Praks3?action=download&upname=N3_H2.png)
On olemas mitmeid algoritme värviesituste teisendamiseks RGB-mudelist HSL-mudelisse. Üks neist algoritmidest töötab järgmiselt.
Algoritm
Olgu R, G, B värvi koordinaadid RGB-mudelis. Nagu eespool nimetatud, eeldame, et need jäävad lõigule 0 kuni 1. Arvutame selle värvi koordinaadid HSL-mudelis; märgime neid tähtedega H, S, L.
- Olgu Xmin ja Xmax väärtustest R, G, B vastavalt vähim ja suurim.
- Arvutame heleduse: L = (Xmin + Xmax) / 2.
- Kui Xmin ja Xmax on võrdsed, siis toon on H = 0 ja küllastus S = 0.
- Muidu leiame tooni:
- kui Xmax = R, siis H = (G - B) / (Xmax - Xmin)
- kui Xmax = G, siis H = 2 + (B - R) / (Xmax - Xmin)
- kui Xmax = B, siis H = 4 + (R - G) / (Xmax - Xmin)
Kui H < 0, siis H = H + 6. Need valemid annavad H väärtuse vahemikus 0 kuni 6. Seetõttu korrutame tulemuse veel 60-ga, et saada väärtus kraadides.
- Leiame küllastuse:
- Kui L < 1/2, siis S = (Xmax - Xmin) / (Xmax + Xmin)
- muidu S = (Xmax - Xmin) / (2 - Xmax - Xmin)
Kirjuta funktsioon teisenda
, mis võtab ette R, G ja B väärtused ning tagastab H, S ja L väärtused. Pythonis saab funktsioon tagastada mitu väärtust: return x, y, z.
Näited funktsiooni teisenda
tööst
>>> teisenda(0.1, 0.3, 0.9) (225.0, 0.8, 0.5)
>>> teisenda(0.4, 0.4, 0.4) (0, 0, 0.4)
6. Kolmnurga pindala
Kirjuta funktsioon kolmnurga_pindala_külgede_järgi
, mis võtab argumentideks kolmnurga külgede pikkused ning tagastab vastava kolmnurga pindala. Võid eeldada, et argumentideks antud arvud sobivad kolmnurga küljepikkusteks.