PR1ET1: Tere maailm

Praktikumi materjal

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.

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.

  1. Alusta sellest, et lood uue faili. Salvesta see oma P kettale, programmeerimise alamkausta, kasutades faililaiendit .c  – näiteks paarsuskontroll.c .
  2. 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.
  3. 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.
  4. 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!
  5. 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:
    Märka, et jätsime kaks kohatäidet. Ühte neist peab tulema sisestatud arv, teise vastus kas tegu on paaris või paaritu arvuga.
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

Test 2: Paaritu arv

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

Test 2: Arv mis jagub ainult kolmega

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