2. praktikum (8 tundi) Teemad: Tingimuslause / valik (if-lause) ja kordusluase / tsükkel (while-lause). Loogikatehted. Algoritmi esitamine vooskeemiga (plokkskeemiga). Ülesanne 1 Täisnurkne kolmnurk (soojenduseks ja meenutuseks) On antud täisnurkse kolmnurga kaatetite pikkused. Leia lisaks pindalale ka ümbermõõt. Kuidas te ennast matemaatikas tunnete? Kas meil õnnestub joonistada soovitud kolmnurk ka Turtle graafikas? Matemaatika funktsioonide osas on abiks moodul math: https://docs.python.org/3/library/math.html Ülesanne 2 Kontrollime sisendit Eelmise ülesande kolmnurga kaatetid ei tohiks olla negatiivsed. Programmiga saab seda kontrollida, anda veateade ja lubada kaatetit uuesti sisestada. Selleks on tingimus-, valiku- ehk if-lause. Selleks on ka näide, aga alustame voo(plokk)skeemiga Flowgorithmis. Joonistame kõigepealt algoritmi lahendamaks ülesannet "Kumb kahest sisestatud arvust on suurem?" Lõpuks võib ka vaadata näiteid suurem_vaiksem_if.py ning suurem_vaiksem_elif.py Nüüd kui if-lausega asi selge, siis tuleb kolmnurga ülesannet täiendada. Soovitav on teha uus versioon, et eelmist töötavat mitte ära rikkuda. Veidi teistsugust taktikat tuleks kasutada selleks, et kontrollida üldisemalt sisendit (nt et ei sisestataks teksti). Vaatame selleks näidet Ülesanne 3 Nulliga jagamine Sisesta kaks arvu ja jaga esimene teisega. Kui teine arv (jagaja) on 0, siis anna veateade. Ülesanne 4 Jaguvus Sisestatakse 2 arvu. Kontrollitakse, kas suurem arv jagub väiksema arvuga ja väljastatakse sellekohane vastus. Programm peab ise aru saama, kumb arv suurem on. Kuidas kontrollida, kas üks arv jagub teisega (lihtsam variant: kuidas tuvastada, kas tegemist on paaris või paaritu arvuga?). Tsükkel Sama tegevust korrata aitab tsükkel ehk kordus. Vaatame while-tsüklit. Tsüklit kasutatakse tegevuste kordamiseks. Enne järgmist kordust otsustatakse, tsüklis olevaid lauseid tuleb veel täita või mitte. Tsükli kavandamisel tuleb alati läbi mõtelda, milline on: - tsükli keha - milliseid lauseid on vaja korrata (ja milliseid mitte!!); - kordamise tingimus - millal tsükli sisu korratakse (ja millal lõpetatakse) ja kuidas tingimus kirja panna; - korduste arv - mitu korda korratakse - millest korduste arv sõltub; on võimalik, et korduste arv on juba enne tsükli alustamist teada. NB! On täiesti OK, kui ühe tsükli sees on teine tsükkel. Ülesanne 5 Arvu arvamise mäng Üks mängija mõtleb arvu etteantud piirides ja teine katsub seda ära arvata. Meie ülesandes - arvuti mõtleb arvu ja inimene hakkab arvama. Arvuti vastab igale arvamisele ja täpsustab, kas pakutud arv on liiga suur või liiga väike. Kuidas arvuti arvu mõtleb? Selleks on juhuslike arvude generaator. Näiteks sobib funktsioon randint(a, b). Funktsioon tagastab juhusliku täisarvu vahemikust [a .. b] Kasutamise näide: arv = randint(1,10) Sel juhul saab arv täisarvulise väärtuse vahemikust [1..10] Funktsioon randint() paikneb moodulis random, mis tuleb importida ning funktsiooni käivitamisel kirjutada nime ette random. Üldiselt juhuslike arvude "tootmiseks" tuleb generaator kõigepealt algväärtustada, milleks on funktsioon seed(). See peab tagama, et programmi uuel käivitamisel tekiks teistsugune juhuslike arvude jada. Pythonis kaasneb random mooduli importimisega automaatselt seed()-i ühekordne käivitamine. Võtame ka teadmiseks, et arvude jada ei saa juhuslikum kui seed()-i iga "arvu tegemise" eel korrata. Pigem vastupidi. Järelikult ei ole ka import-lauset õige programmi keskele paigutada. Millal mäng lõpetada? a) arv arvatakse ära b) kui liiga palju arvatakse (näiteks üle 6 korra), siis programm teatab, et nii rumal ikka olla ei saa, et niiiii kaua seda ühte õnnetut arvu arvata. Kui arvuvahemik on 1 .. 100, siis mitme pakkumisega peaks arv kindlasti arvatud saama? Kui see tehtud, tuleb terve mäng veel korduma panna - Kas soovid veel mängida? NB! See tähendab uue tsükli lisamist mängutsükli ümber. Ära püüa mängutsüklit kõike tegema panna. Juhuslike suuruste funktsioonimaailm on üpris kirev ja selle kohta saab lugeda Pythoni dokumentatsiooni lehel: https://docs.python.org/3/library/random.html