Praktikumi materjal
- Slaidid: Sissejuhatus
- Slaidid: Tere maailm
- Näitelahenduse kommenteeritud versioon: tere koodinäide
- Slaidid: Tingimuslaused
Esitamisele kuuluvad ülesanded
Esimeses praktikumis on kõik uus, mistõttu teeme enamiku praktikumi tööst koos läbi. Praktikumi lõpus saad aga juba sooritada ja kaitsta oma esimese ülesande. Tublimad jõuavad kindlasti ka lahendada lisaülesande.
Ülesanne 1 [W01-1]: Paarsuse kontroll (baasülesanne)
Nõuded
- Kasutajalt küsitakse ja seejärel loetakse sisse täisarv
- Programm väljastab sisestatud arvu
- Programm väljastab, kas sisestatud arv oli paaris või paaritu
NB! Lisaks funktsionaalsetele nõuetele peab vastama programmikood ka stiilinõuetele. Kõige levinumad eksimiskohad stiiliga sellel programmil on treppimisvead (programmi vasakust äärest tühikute arv), tühikute puudumised operaatorite ees ja järel (nt võrdusmärk) ning tühjade ridade puudumine erinevate programmi osade vahel.
Ülesande taust
Jagatise jääke kasutatakse laialdaselt kõiksugu kontrollkoodide arvutamisel. Näiteks kontrollimaks, kas isikukood või pangakaardi number on korrektne.
Meie ülesande jaoks on vajalik jagamine kahega ehk teostame paarsuse kontrolli – kas arv on paaris või paaritu. Paarsuse kontroll on üks lihtsamatest veakontrollidest näiteks andmesides – kas väärtusega ‘1’ bittide arv andmepaketis on paaris või paaritu? Sedasi on võimalik kontrollida, kas andmete ülekandmisel ühest arvutist teise tekkis viga (ja nagu öeldud, vaid väga lihtsad juhud).
Pseudokood
Pseudokood on üks võimalus kirjeldada algoritme. Pseudokood on sarnaselt programmile struktuurne, kuid ei hõlma endas programmeerimiskeeltele omaseid reegleid, mistõttu jääb see võrdlemisi inimloetavaks.
1 2 3 4 5 6 |
Kasutajalt loetakse üks täisarv Kui sisestatud arv on paarisarv Trüki sisestatud arv ja, et tegu on paarisarvuga Muul juhul: Trüki sisestatud arv ja, et tegu on paaritu arvuga Programmi lõpp |
Algoritm
Ülesande algoritm modelleeritakse tunnis koos, et näidata sobilike töövõtteid algoritmi koostamisel – kuidas vormistada tingimuslauset, kontrollvoo noolte murdmisel täisnurkade kasutamist jne. Ülesande kirjelduse terviklikkuse huvides oleme lisanud ühe kahest võimalikust vormistusest ka siia.
Kuidas ülesannet lahendada
Ülesande lahendamisel juhindu nii koostatud algoritmist kui ka slaididel etteantud koodilõikudest. See ülesanne on justkui lego, mis tuleb tükkidest õigesti kokku sobitada.
- Alusta sellest, et lood uue faili. Salvesta see oma P kettale, programmeerimise alamkausta, kasutades faililaiendit .c – näiteks paarsuskontroll.c .
- Nüüd kirjuta maha kõige viimasel slaidil olev koodpõhi (mida näitame sulle ka projektorilt). Pane tähele, et oleme sinna sisse jätnud ka ühe vea! Peaksid seda kohe nägema, kui üritad programmi kompileerida. Paranda viga ära enne kui jätkad ülesande lahendamist. Vajadusel otsi oma tere.c koodist üles sarnane rida (mis viga põhjustab) – sealt leiad ka lahenduse.
- Järgmiseks legotükiks on meil vaja tingimuslause struktuuri. Leia tingimuslausete slaidikomplektist if/else lause struktuur ning kirjuta see enda programmi ümber. Ära kopeeri – kirjutamine on oluline musklimälu tekitamiseks. Kindlasti jälgi ka treppimist ning märksõna if järel olevat tühikut. Koledat koodi kaitsmiselt läbi ei lasta.
- Kolmanda puuduva tükina tuleb välja valida ning korrektselt vormistada tingimuslause tingimus (käib if lausel sulgude sisse). Meenuta, et ülesanne lahendamiseks tuleb kontrollida kas sisestatud arv on paaris või paaritu. Tingimuslausete näited ja jagamise põhimõtted leiad samuti slaididelt. Proovi seejärel programmi kompileerida ja veendu, et vigu poleks!
- Viimaseks tükiks on vaja lisada if ja else lause sisu, et tulemus ekraanile trükkida. Selleks pead kirjutama kaks
printf() funktsiooni väljakutset, mis näeksid välja midagi sarnast:
1printf("The number <.........> is an <........> number\n");
Testimine
Sellel programmil on kaks võimalikku tulemust – arv on paaris või paaritu. Programmi põhjalikuks testimiseks tuleb testida mõlemat juhtu.
Test 1: Paarisarv
1 2 |
Please enter an integer: 2 The number 2 is an even number. |
Test 2: Paaritu arv
1 2 |
Please enter an integer: 19 The number 19 is an odd number. |
Kõik töötas? Väga tubli! Sa oled peaaegu kaitsmiseks valmis.
Meenuta, et kood peab olema loetav. Loetavuse saavutamiseks on kasutusel koodimisstiili reeglid. Võrdle oma koodi varasemate programmidega ja koodinäidetega sellest tunnist. Pööra tähelepanu järgnevale
- Tühikute kasutamine (enne ja pärast matemaatilisi operaatoreid, pärast if märksõna
- Treppimine ehk taane vasakult (loogeliste sulgude vahele jääv kood trepitakse täiendavalt 1 võrra ehk 4 tühiku jagu. Kasutaja sisestuse küsimine ja return lause on seega trepitud 1 võrra, samas if / else sees olevad printf() laused 2 võrra)
- Tühjade ridade kasutamine koodilõikude eraldamiseks (enne main() funktsiooni, enne if lauset, enne return lauset)
Kood töötav ja loetav? Nüüd anna märku, et soovid kaitsta!
Lisaülesanne [W01-2]: Kolme ja viiega jagamine
Enne kui alustad lisaülesande lahendamist, lahenda ära baasülesanne. Lisaülesande lahendamisel tuleb esmalt kaitsta ära baasülesanne, seejärel lisaülesanne.
Loe loogikaavaldiste kasutamise kohta (eng): https://blue.pri.ee/ttu/coding-guides/conditional-statements/#Logical_operators
Nõuded
- Kasutajalt küsitakse ja seejärel loetakse sisse täisarv
- Programm väljastab, kas arv jagus kolmega, viiega, mõlemaga neist või mitte kummagagi ning väljastab leitu.
- Programm leiab jagatise täisosad ja jäägid sellest arvust jagades seda nii kolme kui viiega. Kõik neli tulemust väljastatakse, olenemata sisendist.
- Arvutustehteid (nt jagamisi) tohid teha vaid ühekordselt. Kui tulemust on vaja kasutada mitmes kohas, tuleb need eelnevalt salvestada muutujatesse.
Ülesande taust
Ülesanne põhineb klassikalisel intervjuuküsimusel, mida kasutakse tarkvaraarendajate värbamisel. Tegu on nn FizzBuzz ülesande muudetud versiooniga.
Testimine
Lähtuvalt koostatud tingimustest peab ülesandel olema neli erinevat võimalikku tulemust.
Test 1: Arv, mis jagub nii kolme kui viiega
1 2 3 4 |
Enter a number to check: 15 Divisible by both 3 and 5. By dividing 15 with 3, we get 5 multiples of 3 and a remainder of 0. By dividing 15 with 5, we get 3 multiples of 5 and a remainder of 0. |
Test 2: Arv mis jagub ainult kolmega
1 2 3 4 |
Enter a number to check: 27 Divisible by 3 only. By dividing 27 with 3, we get 9 multiples of 3 and a remainder of 0. By dividing 27 with 5, we get 5 multiples of 5 and a remainder of 2. |
Viimased kaks testi mõtle ise välja. Veendu, et lahendus töötab korrektselt kõigil juhtudel.
Pärast seda tundi peaksid
- Mõistma ainega seotud nõudeid, sh kuidas saada aines hinne
- Oskama sisse logida Linuxisse ülikooli arvutis
- Teadma, mis on peamised rakendused, mida kasutame
- Teadma, kust vajalikku materjali leiab
- Teadma, mis on C keel ja kus seda peamiselt kasutatakse
- Teadma, milline on programmi struktuur ning olema võimeline ka selles lihtsa programmi kirjutama ning käivitama
- Peaksid mõistma järgmiseid programmeerimisega seotud mõisteid ja kontseptsioone
- #include lause teekide lisamiseks programmi, kasutades eelprotsessorit (preprocessor)
- Mis on main() funktsioon, miks ta eriline on
- Täisarvulised muutujad ja kuidas neid deklareerida
- Kuidas väljastada teksti kasutades printf() funktsiooni, vahetada rida, printida välja muutuja sisu
- Kuidas lugeda klaviatuurilt täisarve kasutades scanf() funktsiooni
- Elementaarsed matemaatilised operatsioonid
- Kergemad tingimuslaused (if/else)
- Täisarvu jagatis ja jagamise jääk (moodularvutus)
- Teadma mis on algoritm ja selle olulisemaid omadusi
- Teadma, mis asi on UML modelleerimiskeel ja miks seda kasutatakse
- Oskama koostada lihtsaid UML tegevusdiagramme, kasutades elemente nagu algus, lõpp, siire, hargnemine, koondumine ja kommentaar
Täiendav materjal
- AI kasutamine ülikooli õppetöös üldistatult (jt õigusaktid)
https://taltech.ee/oppetegevuse-juhendid-ja-oigusaktid - Miks on oluline, et algoritmid on kirjeldatud sedasi, et nad on kõigile üheselt arusaadavad.
Youtube: Exact Instructions Challenge – THIS is why my kids hate me. | Josh Darnit
https://www.youtube.com/watch?v=cDA3_5982h8 - Things I Wish I Knew When I Was Learning to Code
https://www.youtube.com/watch?v=TvDFJpGnQZo - “C” Programming Language: Brian Kernighan – Computerphile
https://www.youtube.com/watch?v=de2Hsvxaf8M - C is the greenest programming language
https://hackaday.com/2021/11/18/c-is-the-greenest-programming-language/ - C vs Python 3 – kumb on kiirem?
https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/python3-gcc.html - Programmeerimiskeelte indeks
https://www.tiobe.com/tiobe-index/ - printf käsu selgitused
http://cplusplus.com/reference/cstdio/printf/ - scanf käsu selgitused
http://cplusplus.com/reference/cstdio/scanf/ - UML standardi dokumentatsioon
https://www.omg.org/spec/UML/2.5.1/PDF - Andmetüübid C keeles
https://en.wikipedia.org/wiki/C_data_types