Kodutöö 2 raames tuleb sul luua tarkvaraline lahendus vastavalt ülesande variandile ja kodutöö nõuetele. Loodud lahendus tuleb dokumenteerida.
Selle ülesande raames on fookuseks põhjalikum veaohtlike olukordade tuvastamine, analüüs ning võimalusel lahenduste leidmine ja dokumenteerimine. Programmeerimise tehnilistest aspektidest on ülesanded fokusseeritud massiivide kasutamisel, ülesande funktsioonideks tükeldamisel ning kõiksugu veaohtlike olukordade lahendamisel.
Ülesande testimise käigus on oluline, et programm on
- Jooksutatav käsurealt kasutades voo suunamist vastavalt etteantud sisendile
- Arusaadav ka siis, kui programm pannakse käima tavapäraselt, st sisestades andmeid käsitsi klaviatuurilt vastavalt programmi poolt esitatud küsimustele
Aruanne
Kodutöö raames tuleb esitada põhjalik aruanne tehtud töö kohta. Aruande kvaliteet on osa kodutöö hindest.
Aruanne peab vastama IT teaduskonna lõputöö juhendile. Malli kasutamise kohta oleme koostanud lühijuhendi, mille leiad siit: https://blue.pri.ee/ttu/ressursid/aruande-vormistamise-juhend/
Aruande malliks kasuta Kodutöö 1 raames välja toodud malli (https://blue.pri.ee/ttu/programmeerimine-i/kodutoo-i/) ning kohanda see sobivaks vastavalt selle kodutöö nõuetele.
Aruande sisu
- Tiitelleht
- Autorideklaratsioon
- Lühendite ja mõistete sõnastik (vajadusel)
- Sisukord
- Jooniste ja tabelite loetelu (vajadusel)
- Ülesande püstitus ja variant
- Loodud lahenduse kirjeldus
- Kirjelduse teksti osa pikkuseks on 2 – 4 A4 lehekülge, millele lisanduvad joonised. Kirjeldus peab olema arusaadavalt struktureeritud.
- Mis on su programmi eesmärk – st mida teeb?
- Programmi sisendi kirjeldus (kust lähteandmed tulevad, mis formaadis need olema peavad, mis järjekorras sisendeid oodatakse ning mis piirangud sisenditele on).
- Programmi töövoog (mis järjekorras mida tehakse, lühidalt ja üldistatuna, esita loendina)
- Programmi lahenduse algoritm UML tegevusdiagrammina. Algoritmis kajasta vaid andmetöötlust ja tulemuse saavutamiseks vajalikke samme. Ära kajasta sisendi lugemist ega lisaülesannete nõuetest tulevaid tegevusi! Vaata näidist!
- Eriolukordade analüüs ja nende lahendamine (lihtsustatud riskianalüüs), esita tabelina
- Analüüsi olukordi (nt sisendeid), mis tekitavad vigu või probleeme sinu programmis
- Paku võimalik lahendus või lahendused leitud probleemidele (kui on võimalik). Võid võrrelda ka konkureerivaid lahendusi.
- Märgi üles probleemi olek – näiteks võib skaala olla tuvastatud, lahendus pakutud, aktsepteeritud, lahendatud
- NB! Siin peavad olema kirjeldatud ka olukorrad, mida autor ei ole võimeline seniste teadmiste põhjal lahendama, kuid on neist teadlik – sellsel juhul olen olek “tuvastatud”
- Kokkuvõte
- Kirjuta mõni lause oma lähenemisest ülesandele ja tööprotsessi kohta
- Kirjuta mõni lause ülesandest ja selle keerukusest sinu jaoks
- Kui võimalik, hinda ülesande sooritamise ajalist mahtu
- Kas soovitad ülesannet kasutada ka tulevikus? Kas ja mida muudaksid?
- Täiendavad kommentaarid, emotsioonid, mõtted
- Kasutatud kirjandus (vajadusel)
- Viitamiseks kasutatakse IEEE stiili
TalTechi juhend: https://haldus.taltech.ee/sites/default/files/2024-05/IEEE_stiilis_viitamine_2024%20%281%29.pdf
Ametlik juhend: https://journals.ieeeauthorcenter.ieee.org/wp-content/uploads/sites/7/IEEE_Reference_Guide.pdf - Kõik mis ei olnud kaetud selle õppeaine raames ja mida sa ei loonud iseseisvalt.
- Ka näiteks sõbra või kursusekaaslase abi tuleks viidata: https://libraryguides.vu.edu.au/ieeereferencing/personalcommunication
- Tehisaru kasutamine peab olema viidatud korrektselt vastavalt ülikooli seatud reeglitele
- Viited allikatele peavad olema täpsed. Näiteks viitena stackoverflow.com või google.com ei sobi.
- Viitamiseks kasutatakse IEEE stiili
- Lisa: Ekraanitõmmis(ed) töötavast programmist
- Ekraanitõmmisel peab olema näidatud kuidas kasutad programmi kasutades voo suunamist! Jäta käsk vähemalt ühel pildil nähtavaks.
- Ekraanitõmmised peaksid illustreerima erinevaid situatsioone millega sinu programm toime tuleb
- Ekraanitõmmised võivad olla esitatud töö lisades või põimitud lahenduse kirjelduse sisse. Põimides ekraanitõmmised põhiosa sisse võid põhiosa pikendada piltidele kulunud ruumi arvelt.
Märkus: Kui kasutad tunnis seni läbi võtmata võtteid ja keelelisi konstruktsioone, pead nende tööpõhimõtte ja kasutuse eelised lahenduses selgitama aruandes, mille arvelt võid lahenduse kirjeldust pikendada..
Nõuded sisendile
Loodavat rakendust võidakse kasutada kahte moodi.
- Kasutades programmi läbi voo suunamise. See tekitab nõuded sisendi järjestusele programmis, lähemalt kirjeldatud “sisendfaili struktuur” osas.
- Kasutades programmi tavapäraselt, st käivitades selle ja trükkides klaviatuurilt sisendit. See tekitab vajaduse kasutajale selgete käskluste ja tagasiside andmiseks.
Maksimaalselt peab loodud programm töötama 15 andmeüksusega. St 1-mõõtmelise massiivi korral on sellel maksimaalselt 15 liiget, 2-mõõtmelise massiivi puhul 15 x 15. Massiive võib olla mitu.
Koos oma ülesande variandiga saad ka 2 tekstifaili näidissidenditega, mis on ühtlasi ka sinu esimesed 2 sisendikomplekti mida pead testima. Sinu programm peab lugema sisendit samas järjekorras nagu etteantud sisendfailides. Andmetüübid kohalda vastavalt failides olevale näidissidendile. Esitatavas lahenduses oodatakse, et oled koostanud ka täiendavaid sisendfaile veaolukordade testimiseks!
Osa sinu ülesandest on analüüsida ja lahendada situatsioone, millega su programm võib silmitsi seista. Näiteks pead mõtlema mida teha olukorras kui kasutaja soovib sulle anda vaid 1 sisendi? -55 sisendit? 100 sisendit? Loodav programm peab suutma toime tulla ebasobiliku sisendiga, minimaalselt sama (oodatava) andmetüübi piires. Veaohtlike olukordade analüüs peab kajastama ka laiemaid juhtumeid, kuid nende lahendamine koodis on osa lisaülesandest.
Sisendfaili struktuur
Sisendfailis on esimene number alati sellele vahetult järgneva massiivi liikmete arv. Kui tegu on maatriksiga, määravad selle mõõtmed esimesed kaks numbrit. Kui programmis küsitakse veel täiendavat sisendit, peab see paiknema pärast massiivi liikmeid.
Näiteks ülesandes, kus tuleb leida tudengite keskmine hinne, võiks olla sisendfail järgnev: 9 1 0 4 5 5 3 5 4 2
Esimene number 9 ütleb mitu hinnet on, millele järgnevad 9 hinnet.
Nõuded koodimisstandardile ja keskkonnale
Loodav programm peab olema kirjutad C programmeerimiskeeles. Kasutada tohib C90 ja C99 koodistandardeid. Uuemate standardite (C11, C17, C23) kasutamine on lubatud, kui see pakub lisandväärtust (nt lihtsustab mingit tegevust). Põhjendus tuleb tuua välja aruandes.
Lisaks C standardteekidele tohid kasutada ka C POSIX ja GNU C teeke ja laiendusi. Teiste teekide kasutamine väljaspool eelmainituid tuleb eelnevalt kokku leppida õppejõuga!
Esitatud lahendus kompileeritakse ja testitakse arvutiklassis oleva Linux seadistusega võrdväärses keskkonnas (nt OpenSUSE SLED-15 SP5 ja GCC-12) või soovitusliku koduse seadistusega (Ubuntu Linux 24.04 ja GCC-13). Ühilduvus teiste operatsioonisüsteemidega (Windows, MacOS) ei ole vajalik.
Nõuded koodile
Programm tuleb koostada lähtuvalt seni õpitud praktikatest. Muuhulgas peavad olema täidetud järgnevad nõuded
- Koodis puuduvad globaalmuutujad, goto laused
- Programm peab lugema oma sisendi stdin standardvoost. Sinu programmi testitakse nii sisendvoo suunamisega kui ka otse käsurealt käivitades ja trükkides sisendit klaviatuurilt.
- Koodis puuduvad kasutamata komponendid (nt teegifailid, muutujad mida ei kasuta)
- Kood on tükeldatud funktsioonideks
- lähtuvalt seni õpitud praktikatest ja koodimisstiili nõuetest
- ükski funktsioon, sh main funktsioon, ei tohi sisaldada lohisevat spagett-koodi
- main() funktsioon olema koodi kõige esimene funktsioon, enda loodud funktsioonid peavad paiknema pärast main() funktsiooni
- soovi korral võid kasutada päisefaili
- Kood vastab esitatud koodimisstiilile, muuhulgas (kuid mitte ainult!)
- Koodimisstiil on ühtlane kogu faili ulatuses
- Failil on korrektne päis koos autori andmete, kuupäeva ja lühikirjeldusega
- Kood on kommenteeritud
- Kõik nimetused (muutujad, makrod, funktsioonid, ..) on arusaadavad ning kirjutatud korrektses stiilis
- Kood on trepitud, koodiread on lubatud maksimaalse pikkusega ja tühikud vajalikes kohtades
Lisaülesanne boonuspunktide teenimiseks
Kodutöö eest on võimalik saada kuni 15 boonuspunkti. Boonuspunktide saamiseks peavad lisaülesande raames tehtud täiendused olema aruandes kirjeldatud. Boonuspunkte on võimalik ka saada osaliselt, kui kõik nõuded ei ole täidetud.
Boonuspunktide saamiseks tuleb lisaks ülesande baasnõuetele täita järgmised nõuded
- Rakendus peab toetama järgnevaid käsureaargumente
- -i=file_name ja --input=file_name – Programm loeb sisendi etteantud failist ning kuvab kohe vastuse ekraanile
- -p=interactive ja --prompt=interactive – Programm loeb sisendi stdin standardvoost. Programm peab selgelt väljendama mida kasutaja sisestama peab ning kuvama veateateid. Tegu on vaikeolekuga.
- -p=disabled ja --prompt=disabled – Programm loeb sisendi stdin standardvoost. Programm ei tohi esitada kasutajale ühtegi küsimust sisendite kohta. Ekraanil kuvatakse vaid tulemused.
- --help – Kuvab juhised programmi kasutamiseks kasutades klassikalist abilehe struktuuri ja stiili (vt näited nt grep --help või man grep )
- Programm ei tohi katki minna kui numbri asemel antakse talle kogemata näiteks tekst.
- Aruandesse tuleb lisada nummerdatud esimese astme pealkiri “Lisaülesanne”, milles
- Kirjelda lisaülesande raames lisatud funktsionaalsus.
- Kirjuta kuidas lähenesid käsureargumentide lisamisele ja kontrollile.
- Kirjuta kuidas otsustasid, mis on oluline kuvada abilehel.
- Selgita oma lähenemist sisendi kontrollile, et rakendus valet tüüpi sisendi korral katki ei läheks.
Tähtajad
Terviklik kodutöö tuleb esitada hiljemalt 14.12.2025 23:59:59 (kohalik aeg)
Kodutöö tähtaja ületamisel vähendatakse töö eest saadavat lõpptulemust 1 punkti võrra iga esitamistähtajast üle läinud päeva eest. Maksimaalselt vähendatakse tulemust 50 punkti võrra, st esitades töö 60 päeva hiljem kaotad ikkagi kuni 50 punkti.
Kui kodutöö kohta tekib täiendavaid küsimusi või esineb kahtlusi autorluses, hinnatakse kodutöö tulemusega 0 punkt. Sellisel juhul tuleb punktide saamiseks kodutöö kaitsta.
Vajadusel rakendatakse [Vääritu käitumise menetlemise korda].
Viimane päev kodutöö esitamiseks ja kaitsmiseks on märgitud sissejuhatavatel slaididel. Pärast antud kuupäeva kodutöid esitada ei ole võimalik!
Esitamine
Esitada tuleb dokumentatsioon Adobe PDF formaadis, kõik vajalikud koodifailid programmi kompileerimiseks ning arhiiv testsisenditega, kuhu oled lisanud ka enda loodud sisendfaile.
Failide nimed peavad algama K2_Perenimi_üliõpilaskood.
Näiteks:
K2_Jalakas_112211IACB_kood.c
K2_Jalakas_112211IACB_aruanne.pdf
K2_Jalakas_112211IACB_sisendid.zip
Kodutöö tuleb esitada Moodle kaudu.
Tulemused ja tagasiside
Pärast töö kontrollimist leiad Moodlest oma punktid ning tagasiside (nähtav vaid hinnetelehet!). Korralikult tehtud töö korral võib tagasiside puududa.
Kodutöö parandamine
Kodutöö tulemust on võimalik parandada kuni Jaanuari kuu 10. tööpäevani.
Kodutöö parandamiseks vaata esmalt läbi oma töö tagasiside. Seejärel võta ühendust õppejõuga, et kokku leppida parandamise protsessis.
NB! Kui töö parandamise käigus osutub vajalikuks enama kui poole töö muutmine, loetakse seda uue töö esitamiseks, millelt võidakse arvestada maha hilinemine vastavalt paranduse esitamise kuupäevale.
NB! Tegu on vaid osalise näitega demonstreerimaks üldist kodutöö struktuuri, sisestust, testimist, algoritmi ja koodimisstiili. Konkreetsete nõuete kohta loe nõuete alt!
Testimise näidised
Testimiseks kasutan mitut erinevat andmefaili katmaks erinevaid olukordi, millega rakendus on võimeline toime tulema
Test 1: Ootuspärane sisend voo suunamisega
Testsisend
|
1 2 3 4 5 |
4 Hulk 19 Thor 4 Cpt.America 12 Hawkeye 6 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
risto@risto-wk-tux:~/git/IAX0583/HW2$ ./HW2_Heinsar_112233IASB < tests/test_1_valid_inp Enter avenger count between 1 and 10 Enter the name and disposed of count for avenger 1: Enter the name and disposed of count for avenger 2: Enter the name and disposed of count for avenger 3: Enter the name and disposed of count for avenger 4: Total number of avengers in mission was 4 Average baddies disposed of was: 10.25 The following avengers were slacking off: Thor 4 Hawkeye 6 |
Test 2: Väljaspool lubatud vahemikku voo suunamisega
Testsisend
|
1 2 3 4 5 6 7 8 9 |
19 0 -5 5 Falcon 2 Hulk 24 Thor 3 Cpt.America 5 Hawkeye 21 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
risto@risto-wk-tux:~/git/IAX0583/HW2$ ./HW2_Heinsar_112233IASB < tests/test_2_err_range Enter avenger count between 1 and 10 I'm sorry, I can't handle that :( Enter avenger count between 1 and 10 I'm sorry, I can't handle that :( Enter avenger count between 1 and 10 I'm sorry, I can't handle that :( Enter avenger count between 1 and 10 Enter the name and disposed of count for avenger 1: Enter the name and disposed of count for avenger 2: Enter the name and disposed of count for avenger 3: Enter the name and disposed of count for avenger 4: Enter the name and disposed of count for avenger 5: Total number of avengers in mission was 5 Average baddies disposed of was: 11 The following avengers were slacking off: Falcon 2 Thor 3 Cpt.America 5 |
Test 3: Klaviatuurilt sisend
Sisendit eraldi faili kujul ei ole, sisestus toimub klaviatuurilt. Programmi väljund peab olema kasutajale arusaadav.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
risto@risto-wk-tux:~/git/IAX0583/HW2$ ./HW2_Heinsar_112233IASB Enter avenger count between 1 and 10 3 Enter the name and disposed of count for avenger 1: Hulk 15 Enter the name and disposed of count for avenger 2: Thor 30 Enter the name and disposed of count for avenger 3: Falcon 5 Total number of avengers in mission was 3 Average baddies disposed of was: 16.6667 The following avengers were slacking off: Hulk 15 Falcon 5 |
