PR1ET3: Tsüklid

Praktikumi materjal

Esitamisele kuuluvad ülesanded

Selles praktikumis on kaks baasülesannet, mille raames lood kokku viis programmi. Täiendavalt on lahendamiseks pakutud kaks lisaülesannet.

Ülesanne 1 [W03-1]: 5-arvu summa.

Selle ülesande raames tuleb sul luua programm, mis leiab viie kasutaja poolt sisestatud arvu summa. Programm tuleb sul luua 3 korda – üks programm iga tsükli tüübi kohta. Kõik kolm loodavat programmi täidavad sama ülesannet.

Nõuded
  • Programm küsib kasutajalt 5 arvu
  • Kõigi arvude, peale viimase, sisestamise järel näitab programm praegust vahesummat
  • Pärast viimase arvu sisestamist kuvatakse lõppsumma. Vahesummat ei kuvata
  • Programm peab andma kasutajale arusaadava väljundi, mida temalt oodatakse
  • Programmis ei tohi olla maagilisi arve
  • Programmi disain peab olema selline, et kui sama ülesannet tuleks teha 10, 20 või ka 1000 arvu korral, siis selleks peaksid muutma programmikoodis vaid ühte numbrit! Testi seda enne esitamist – tehes muudatuse vaid ühes kohas kogu programmis, peab see töötama näiteks 7 arvuga.
Vihjeid
  • Mõtle hoolikalt läbi, milliseid muutujaid sul vaja on! Olenemata sellest, mitme arvu summat sa leiad, on muutujate arv alati sama.
  • Tsüklite puhul on soovitatav loendamist alustada nullist. Seda kuna arvutite puhul hakatakse loendama nullist ning väga paljud süsteemid sõltuvad sellest. Tavaline arvutikasutaja aga hakkab loendama ühest. Selleks
    • (i + 1) võtab muutuja i väärtuse ning kasutab seda suurendatud väärtust konkreetse tehte juures. Küll aga ei suurenda see i enda väärtust. Sedasi saame ajutiselt kasutada ühe võrra suuremat väärtust. Näiteks printf("%d", i + 1);
    • Operatsioonid nagu i++, ++i, i += 1 ja i = i + 1 jällegi suurendavad i väärtust jäädavalt.
Testimine

Järgnevalt on kujutatud näide oodatavast programmi väljundist

Ülesanne 2 [W03-2]: Kassasüsteem kontrolliga

Selle ülesande käigus lisame mõned elementaarsed veakontrollid eelmisel nädalal tehtud tunnitööle. Aluskoodiks võid kasutada nii enda eelmise nädala programmi kui ka meie poolt antud valmislahendust.

Tunnitöö 2 aluskood: https://blue.pri.ee/ttu/files/iax0583/aluskoodid/3_1_cashier_starter_loop.c

Nõuded

Programmi tuleb lisada järgnev funktsionaalsus:

1. Kliendikaardi ja lisasoodustuse saamise kontroll.

  • Küsi sisestust senikaua kuniks sisestatakse kas 1 või 0.
  • Kui sisestus polnud sobilik – st polnud 1 või 0, kuva veateade!
  • Soovitus: Kasuta realisatsiooniks järelkontrolliga tsüklit.

2. PIN-koodi tohib sisestada kuni 3 korda.

  • Kui programmi jooksul on PIN koodi 3 korda valesti sisestatud, kuva veateade ja sulge programm.
  • Kui enne kordade arvu täitumist sisestatakse õige PIN kood, kontrolli jääki ja soorita võimalusel tehing.
  • Soovitus: kasuta eelkontrolliga loendavat tsüklit ja katkestust.
Näidis oodatavast tulemusest

Lisaülesanded

Lisaülesanne 1 [W03-3]: Mario torn
  • Kasutades üksteise sisse paigutatud tsükleid, loo trellidest treppide kujutis, kokku 13 trepiastet
  • Treppide ülemises otsas peab olema mehike
    Vihje: ASCII stickman
  • Kõige ülemise astme laius peab olema piisav, et mehikesel oleks jalgealune stabiilne. Iga järgnev aste on ühe võrra laiem.
  • Iga rea lõpus näita, mitu tellist kulus rea jaoks ja palju on kokku kulunud.
  • Joondus peab nii nagu järgneval näidisel!
Lisaülesanne 2 [W03-4]: Torni peegeldus ja kõrgus
  • Küsi kasutajalt platvormi kõige alumise astme laius (vahemikus 7 – 20)
  • Trepid on sel korral peegeldatud kujul, täpselt nii nagu Mario mängus.
  • Kõige madalam trepiaste peab algama ekraani vasakust osast. Sellele ei tohi eelneda tühikuid.
Vihjeid

Pärast tundi peaksid 

  • Teadma, mis sammud läbitakse selleks, et meie kirjutatavast lähtekoodist saaks arvuti poolt jooksutatav masinkood
  • Teadma, mis asi on #define makro ja kuidas see töötab
  • Teadma, mis asi on maagiline number ning kuidas neid likvideerida
  • Teadma probleemidest, mis kaasnevad algväärtustamata muutujatega
  • Oskama kasutada kõiki kolme tüüpi tsükleid kindla korduste arvuga.
  • Oskama luua tsüklit, mille korduste arv pole piiratud
  • Teadma, kuidas inkrementeerida ja dekrementeerida.
  • Teadma, mis vahe on eel- ja järelkontrolliga tsüklitel
  • Suutma koodiplokke korrektselt üksteise sisse panna (nt tingimuslause tsükli sees, tsükkel tsükli sees, …)
  • Oskama kasutada kontrollauseid break; ja continue;
  • Teadma, et me EI KASUTA goto lauset ning miks me seda ei tee
  • Oskama kasutada avaldist või konstanti printf argumendina
  • Oskama modelleerida tsükleid UMLis

Täiendav materjal