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, võimalusel lahenduste leidmine ja dokumenteerimine. Programmeerimise tehnilistest aspektidest on fookus ülesande dekompositsioonil, massiivide kasutamisel ja 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/
Aruanne peab olema keelekasutuselt ja pikkuselt mõistlik ja jõukohane nii kirjutajale kui lugejale. Väldi põhjendamatult keerukat sõnakasutust (nt mõisted, mida sa ise ei oskaks selgitada) ning tegevuste uhkemaks kirjutamist, kui need tegelikult on.
Aruande põhjaks kasuta kodutöö 1 malli (https://blue.pri.ee/ttu/programmeerimine-i/kodutoo-i/) ning kohanda see sobivaks vastavalt käesoleva kodutöö nõuetele. Aruande sisu peatükid muutuvad jooksvalt koos sinu arengu ning töö fookusega!
Aruande sisu
Aruanne peab sisaldama järgnevaid komponente
- Tiitelleht
- Autorideklaratsioon
- Lühendite ja mõistete sõnastik (vajadusel)
- Sisukord
- Jooniste ja tabelite loetelu (vajadusel)
- Ülesande püstitus ja variant
- 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?
- Sisendi kirjeldus (kust lähteandmed tulevad, mis formaadis need olema peavad, mis järjekorras sisendeid oodatakse ning mis piirangud sisenditele on).
- Programmi töövoog (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 (lihtsustatud riskianalüüs)
- Peab sisaldama probleemi IDd, kirjeldust, olekut ning võimalusel lahendust või ideed kuidas võiks lahendada.
- Meeldetuletus: Kõikide probleemide lahendamine ei pruugi olla sinu praeguses pädevuses, eeskätt on oluline olla võimalikest probleemidest teadlik!
- Tehisaru kasutamine
- 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 selle õppeaine raames kaetud, ja mida sa ei loonud iseseisvalt.
- Viidata tuleb ka sõbralt või kursusekaaslaselt saadud abile: 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 ning ka tavapärast käitumist.
- 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 sisendi klaviatuurilt. 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.
Ülesandevariant sisaldab kahte tekstifaili näitesisenditega. Need on ühtlasi ka sinu esimesed kaks testitavat sisendikomplekti. Sinu programm peab lugema sisendit samas järjekorras nagu etteantud tekstifailides. Andmetüübid kohalda vastavalt failides olevale näidissisendile. 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, kus 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 laiemalt erinevaid võimalike sisendeid, kuid nende lahendamine programmikoodis on osa lisaülesandest.
Sisendfaili struktuur
Sisendfaili esimene arv tähistab sellele vahetult järgneva massiivi liikmete arvu. Maatriksi puhul määravad selle mõõtmed esimesed kaks arvu. Kui programmis küsitakse täiendavat sisendit, paikneb see 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 arv 9 tähistab mitu hinnet eksisteerib. Sellele järgnevad 9 hinnet.
Nõuded koodimisstandardile ja keskkonnale
Loodav programm peab olema kirjutatud C-programmeerimiskeeles. Vaikimisi eeldatakse, et programm on kirjutatud C99 standardile vastavalt. Teiste standardite (C90, C11, C17, C23) kasutamine on lubatud, kui see pakub lisandväärtust. Põhjendus tuleb tuua välja aruandes.
Lisaks C standardteekidele tohid kasutada ka C POSIX ja GNU C teeke ja laiendusi. Teiste teekide kasutamine tuleb eelnevalt õppejõuga kokku leppida!
Esitatud lahendus kompileeritakse ja testitakse arvutiklassis oleva Linuxi seadistusega võrdväärses keskkonnas (nt OpenSUSE SLED-15 SP5 ja GCC-12) või soovitusliku koduse seadistusega (Ubuntu Linux 26.04 ja GCC-15 või uuem). Ühilduvus teiste operatsioonisüsteemidega (Windows, macOS) ei ole vajalik.
Nõuded lahendusele
Programm tuleb koostada lähtuvalt seni õpitud praktikatest. Muu hulgas peavad olema täidetud järgmised 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
- funktsioonide koostamisel lähtu õpitud praktikatest ja koodimisstiili nõuetest
- ükski funktsioon, sh main funktsioon, ei tohi sisaldada lohisevat spagett-koodi
- main() funktsioon peab 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 koodimisstiili nõuetele
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. Lahenduse eest on võimalik ositi punkte teenida, kuid ka selleks peab lahendatu olema dokumenteeritud aruandes.
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 täisarvu 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 kontrollimisel.
Tähtajad
Terviklik kodutöö tuleb esitada hiljemalt 13.12.2026 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.
Kui kodutöö kohta tekib täiendavaid küsimusi või esineb kahtlusi autorluses, märgitakse kodutöö tulemuseks 0 punkti kuni töö eduka kaitsmiseni.
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 PDF formaadis, kõik vajalikud koodifailid programmi kompileerimiseks ning zip failina kokku pakitud testsisendid, 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. Korralikult tehtud töö korral võib tagasiside puududa.
Kodutöö parandamine
Kodutöö tulemust on võimalik parandada kuni kodutöö lukustamise kuupäevani. Arvesta, et kui esitad oma kodutöö vähem kui kaks nädalat enne lukustamise kuupäevas, ei pruugi meil jääda piisavalt aega sinu töö hindamiseks ja sul paranduste sisse viimiseks.
Parandatud kodutööd kuuluvad kaitsmisele.
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 |
