3. labor: tsüklid

Labori materjal

Esitamisele kuuluvad ülesanded

Selles laboris on 2 baasülesannet, mille raames lood kokku 5 programmi. Täiendavalt on laboris 2 lisaülesannet, mis tohib olla kirjutatud ühe programmina.

Ülesanne 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äidis oodatavast tulemusest
Nõuded
  • Programm küsib kasutajalt 5 arvu.
  • Pärast arvu sisestamist kasutaja poolt tuleb väljastada praegune summa.
  • Pärast viimase arvu sisestamist kuvatakse lõppsumma. Vahesummat enam ei kuvata.
  • Programm peab andma kasutajale arusaadava väljundi mida temast 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.

Ülesanne 2: kassasüsteem tsüklitega

Selle ülesande juures 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: [ kassaregister ]

Näidis oodatavast tulemusest

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.

Lisaülesanded

Lisaülesanne 1: 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: 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