3. nädala õpijuhis
Eesmärk
[edit]Selle nädala õppimise eesmärgiks on:
- Tutvuda võrdlustehete, loogikatehete ja loogikaavaldistega.
- Tutvuda algoritmi teise suure ehituskivi - valikuga
- Tutvuda programmis valiku/otsuste tegemist võimaldava if-lausega ja tema erinevate variantidega
- Praktiseerida valikut sisaldavate algoritmide koostamist ja vastavate programmide koodi kirjutamist
Lugemiseks ja proovimiseks
[edit]- Loe kõigepealt materjali Võrdlustehted ja loogikatehted. Lahenda järgmised loogikatehted, st leia, kas selle tehte tulemuseks on True või False. Oma vastuse õigsust võid kontrollida Pythoni käsurežiimis: kõigepealt omista muutujatele kirjeldatud väärtused ning seejärel kopeeri siit tehted ning vaata, kas keskkond arvutab sama tulemuse, kui sinagi.
Muutujate väärtusi on kolm komplekti:
temp=30 temp=5 temp=10 pilves=True pilves=False pilves=True
Arvuta järgmiste avaldiste väärtused kõigi kolme komplektiga (st 3 * 3 = 9 tehet ja vastust):
temp>20 and pilves temp<10 and temp>0 not pilves or temp>25
- Loe läbi materjal teemal Valik ja IF-lause. Ka see materjal sisaldab mõned terviklikud koodinäited. Kopeeri need Pythoni keskkonda ja veendu, et nad töötavad.
- Loe läbi materjal Vead ja erinditöötlus, kopeeri Pythoni keskkonda materjalis toodud terviknäited ning vaata, kuidas nad töötavad. Erindite teema võtame teadmiseks, kuid edaspidi seda oluliselt ei kasuta. Siiski proovimiseks soovitan lahendada erindite abil ülesande ruutvõrrandi lahendamisest. Seda siiski alles pärast allpool kirjeldatud ülesannete lahendamist, sest ülesande selgitus järgneb.
Ülesanded
[edit]Ülesanne 1 Ilm
[edit]Uuri järgmist programmi. Kasutatud on ühte if-lauset, et vihmasaju järgi jagada soovitusi õueminekuks.
# -*- coding: ISO-8859-4 -*- # Programm jagab soovitusi õue minemiseks # Sisend: vastus - string print("See on väga vajalik programm, mis aitab Sul enne kooli minekut olulisi otsuseid teha.") vastus = input("Kas vihma sajab [ja/ei]? ") if vastus == "ja": print("Ära unusta vihmavarju ja mõistlik oleks sõita trammiga!") else: print("Liikumine on tervisele kasulik. Jaluta täna!") print("Head koolipäeva")
Täienda programmi veel oma fantaasia kohaselt - näiteks uuri lumesaju kohta ja jaga sel puhul soovitusi või siis kuuma ilma jaoks jms
Ülesanne 2 Võrdlemine
[edit]Vaata järgmist algoritmi. Sellel on kujutatud lahendusalgoritm ülesandele: Sisesta kaks arvu ja anna teada, kumb arv (kas esimesena sisestatud või teisena sisestatud) on suurem. Mõtle ja vasta küsimusele: millise vastuse saame sellelt algoritmilt, kui sisestatud arvud on võrdsed?
Kui muidu teada ei saa, siis kirjuta algoritmile vastav programm ning proovi järele.
Viga aitab parandada teise if
-i lisamine eelmise sisse. Tulemust programmina demonstreerib järgmine kood. Sellest koodist tuleks ka lisaks uurida, kuidas näeb välja if
-lause teise if
-lause else
-osas ning jälgida else
-de paigutust
# -*- coding: ISO-8859-4 -*- # Programm võrdleb arve, teatab kumb on suurem ja väljastab nad suuruse järjekorras # Sisend: arv1, arv2 - int print("Programm tuvastab, kumb sisestatud arvudest on suurem ja kuvab nad suuruse järjekorras.") arv1 = input("Sisesta esimene arv ") arv2 = input("Sisesta teine arv ") if arv1 > arv2: print("Esimene arv on suurem.") print("Suuruse järjekorras: ", arv2, arv1) else: if arv1 < arv2: print("Teine arv on suurem.") print("Suuruse järjekorras ", arv1, arv2) else: print("Arvud on võrdsed.")
Proovi, kas programm annab alati õigeid tulemusi. Näiteks proovi arvupaariga 12 ja 27. Ja nüüd proovi arvupaariga 101 ja 65. Ühel juhul programm valetab. Leia viga üles, paranda ja mõtle läbi ka seletus - mis programm just selliseid vastuseid andis.
Järgnevate ülesannete lahendamisel alusta algoritmi läbimõtlemisest ja ülesjoonistamisest. Kui "pilt on selge", siis asu alles koodi kirjutama.
Ülesanne 3 Paarisarv
[edit]Sisestatakse arv ja kontrollitakse, kas on tegemist paarisarvu või paaritu arvuga. Kuidas saada teada, kas arv on paaris? Paarisarvud jaguvad 2-ga, paaritud arvud mitte. Millal arv jagub kahega? Siis kui jagamisel 2-ga tekkiv jääk on 0. Jäägi leidmiseks oli spetsiaalne tehe: %
Ülesanne 4 Jagamine
[edit]Sisestatakse kaks arvu. Leida nende arvude jagatis selliselt, et 1. arv jagatakse 2. arvuga. Kui arve jagada ei saa, siis anda sobiv veateade. Koolist kõik mäletavad, et nulliga ei lubanud matemaatikaõpetaja jagada. Arvuti ei ole ka nõus seda tegema. Kasuta nulliga jagamise vältimiseks if-lauset.
Ülesanne 5 Ruutvõrrand
[edit]ax^2 + bx + c = 0 on ruutvõrrand. Kirjutada programm, mis laseks sisestada ruutvõrrandi kordajad (a, b, c) ja leiaks lahendid x1 ja x2. Piirdume reaalarvuliste lahendite leidmisega, mida kõigi kordajate puhul ei teki. Seega tuleb oma programmis ettenäha kontroll reaalarvuliste lahendite puudumise tuvastamiseks. Samuti võiks kontrollida ruutliikme kordaja väärtust, mis ei tohiks 0 olla.
Lahenda see ülesanne kahel erineval viisil: kõigepealt if-lauseid kasutades ja teiseks erindite abil vigu tuvastades.
Testandmed antud ülesande jaoks: a b c x1 x2 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2 5 2 -0.5 -2 3 2 -1 0.33 -1 2 2 2 reaalarvulised lahendid puuduvad 2 4 2 -1
Ülesanne 6 Liigaasta
[edit]Kirjutada programm, mis kontrollib, kas antud positiivne täisarv on liig- või lihtaasta number. Aasta on liigaasta, kui tema number jagub neljaga, välja arvatud need aastad, mille number jagub sajaga, kuid ei jagu neljasajaga.
Lahendamiseks tuleks koostada algoritm ühe if-lausega, kus kõik tingimused liigaasta tuvastamiseks on võrdlus- ja loogikatehete abil kokku võetud.
Ülesanne 7 Inimene - versioon 2.0
[edit]Võta eelmisel nädalal tehtud programm ja täienda seda järgmiselt:
- Lisaks saab sisestada soo. Kui on mees, arvutatakse näitajad "mehevalemitega", kui naine, siis "naisevalemitega". Üheks võimaluseks sugu määrata võiks olla väärtuse M või N sisestamine. Et hiljem programmis kontrollida kumb täht on sisestatud, on vaja M ja N esitada stringkonstantidena jutumärkide vahel (näiteks nii:
sugu=="M"
) - Anna hinnang leitud tulemustele - kas inimene on normaalne või kipub rasvuma. Vaata rasvaprotsentide tabelit. Selline tabel oli kaasas ühe kaaluga. Kuna tabel on hirmuäratavalt suur, siis võib programmis piirduda vaid ühe vanusevahemikuga. Et ülejäänud vanuste programmi lisamine on täpselt samasugune, ei anna see oskustele oluliselt juurde.
Ja lõpuks ei tohiks kõiki neid arve liiga tõsiselt võtta ja oma tulemuste pärast masendusse langeda.