Labori materjal
- Slaidid: Preprotsessor ja kompileerimine
- Slaidid: Tsüklid
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
See programm liidab kokku 5 kasutaja poolt sisestatud arvu ning kuvab jooksvalt vahesummasid. Sisesta arv 1 / 5 9 Vahesumma on 9 Sisesta arv 2 / 5 3 Vahesumma on 12 Sisesta arv 3 / 5 2 Vahesumma on 14 Sisesta arv 4 / 5 1 Vahesumma on 15 Sisesta arv 5 / 5 5 Lõppsumma on 20 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Enter purchase total: 59.99 Did client present loyalty card? 1 - yes 0 - no 3 Error! Enter 1 for yes or 0 for no! Did client present loyalty card? 1 - yes 0 - no 1 Apply extra discount? 1 - yes 0 - no 0 Invoice total: 53.99 Please enter card PIN code: 3333 Error! Incorrect PIN code! You have 2 attempts left! Please enter card PIN code: 1234 Purchase complete! New account balance is 46.01 Thank you, come again! |
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!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
O -|- | / \ row total ### 3 3 #### 4 7 ##### 5 12 ###### 6 18 ####### 7 25 ######## 8 33 ######### 9 42 ########## 10 52 ########### 11 63 ############ 12 75 ############# 13 88 ############## 14 102 ############### 15 117 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Enter base width [7 - 20]: 25 Error! Allowed base width is 7 - 20! Enter base width [7 - 20]: 13 O -|- | / \ row total ### 3 3 #### 4 7 ##### 5 12 ###### 6 18 ####### 7 25 ######## 8 33 ######### 9 42 ########## 10 52 ########### 11 63 ############ 12 75 ############# 13 88 |
Vihjeid
- Ülesanne põhineb ideel, et saame tsükleid paigutada tsüklite sisse
- Mis tähemärk on nähtamatu?
- Tekst ja numbreid on võimalik joondada ja polsterdada
https://blue.pri.ee/ttu/koodimisjuhendid/printf-kasutamine/
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
- Magic number (programming)
https://en.wikipedia.org/wiki/Magic_number_(programming) - C preprocessor
https://en.wikipedia.org/wiki/C_preprocessor - GOTO, Goto & Goto – Computerphile
https://www.youtube.com/watch?v=FGAWniPGKjc - Bjarne Stroustrup Quotes
https://www.stroustrup.com/quotes.html - Loops in C and C++
https://www.geeksforgeeks.org/loops-in-c-and-cpp/ - C break and continue
https://www.programiz.com/c-programming/c-break-continue-statement