Kodutöö 2 raames tuleb sul luua tarkvaraline lahendus vastavalt variandis antud teemale ja nõuetele. Loodud lahendus tuleb dokumenteerida.
Sellel ülesandel on kaks põhilist fookust. Esiteks funktsioonide loomine, kasutamine ja dokumenteerimine. Teiseks põhjalikum veaohtlike olukordade tuvastamine, analüüs ning võimalusel lahenduste leidmine ning nende dokumenteerimine.
Testimiseks tuleb kasutada voo suunamist.
NB! Videosse jäänud lehekülg ei pruugi kajastada kõige viimast versiooni ülesannete nõuetest! Veendu, et kõik nõuded on täidetud vastavalt praeguse ülesandelehe versioonile.
Aruande mall
Aruande malliks kasuta Kodutöö 1 raames välja toodud malle (https://blue.pri.ee/ttu/programmeerimine-i/kodutoo-i/) ning kohanda see ise sobivaks antud kodutööle.
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 pikkusega 2 – 4 A4 lehekülge. Kirjeldus peab olema arusaadavalt struktureeritud. Kasuta selleks tabeleid, jooniseid, loendeid, alampealkirju jt struktuurseid elemente. Kirjeldus ei tohi olla üks suur müür teksti!
- Mis on su programmi eesmärk – st mida teeb?
- Programmi lähteandmete 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 üldistatult).
- Eriolukordade analüüs ja nende lahendamine
- Analüüsi olukordi (nt sisendeid), mis tekitavad vigu või probleeme sinu programmis.
- Selgita kuidas iga olukorra lahendasid ning põhjenda miks otsustasid just selle lahenduse kasuks (võid näiteks võrrelda alternatiiviga).
- NB! Siin peavad olema kirjeldatud ka olukorrad, mida pole autor suutnud olemasolevate teadmiste põhjal lahendada oma programmis, kuid on teadlik nende olemasolust.
- Kokkuvõte
- Kirjuta mõni lause oma tööprotsessi kohta.
- Kirjuta mõni lause ülesandest ja selle keerukusest.
- Kui võimalik, hinda ülesande ajalist mahtu.
- Täiendavad kommentaarid, emotsioonid, mõtted.
- Kasutatud kirjandus (vajadusel)
- 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
- Kui kasutasid tehisintellekti (nt ChatGPT), peab ka selle kasutus olema viidatud.
- Viited allikatele peavad olema täpsed. Näiteks viitena stackoverflow.com või google.com ei sobi. Viide peab olema konkreetsele leheküljele kust informatsioon pärineb.
- 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 pandud lisana, kuid võivad olla ka põimitud lahenduse kirjelduse sisse. Sellisel juhul võid kirjelduse lehekülje jagu pikema teha.
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 sinu programm töötama 15 sisendiga. St 1-dimensioonilise massiivi puhul võib olla suuruseks maksimaalselt 15 liiget, 2-dimensioonilise massiivi puhul 15 x 15.
Koos oma ülesande variandiga saad ka 2 tekstifaili näidissidenditega. Sinu programm peab lugema sisendit samas järjekorras nagu etteantud sisendfailides. Need 2 faili on ka sinu esimesteks testfailideks.
Osa sinu ülesandest on analüüsida ja lahendada situatsioone, millega su programm võib silmitsi seista. Näiteks pead läbi mõtlema mida teha olukorras kui kasutaja soovib sulle anda vaid 1 sisendi? või hoopis 100?
Lisaks peab loodav programm peab suutma toime tulla ebasobiva sisendiga sama andmetüübi piires! Näiteks oodates positiivset täisarvu sisestab kasutaja hoopis negatiivse täisarvu.
Küll aga ei testi me sinu programmi olukordades, kus sisendid antakse vales järjekorras või mõnes teises andmetüübis. Näiteks kui ootad sisendiks täisarvu, siis saad garanteeritult täisarvu (me ei proovi sisendis anda sulle täisarvu asemel näiteks tähemärke).
Sisendfaili struktuur
Sisendfailis on esimene number alati sellele järgneva massiivi liikmete arv. Kui tegu on maatriksitega, siis selle suuruse määravad esimesed 2 numbrit.
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. Kokkuleppel tohib kasutada ka uuemaid standardeid (nt C11, C17).
Lisaks C standardteekidele tohid kasutada ka C POSIX ja GNU C teeke. Teiste teekide kasutamine väljaspool eelnimetatut ainult kokkuleppel!
Loodav programm peab töötama Linux keskkonnas. Eelistatud on operatsioonisüsteemist sõltumatu lahendus. Kood kompileeritakse ja testitakse laboris oleva Linux seadistusega võrdväärses keskkonnas (nt OpenSUSE SLED-15 SP5 või Ubuntu Linux 24.04 koos GCC-13 kompilaatoriga).
Nõuded koodile
- Kood peab lähtuma seni õpitud praktikatest.
- Programm peab lugema oma sisendi stdin standardvoost. Me testime sinu programmi nii sisendvoo suunamisega kui otse käsurealt käivitades ja trükkides sisendit klaviatuurilt.
- Koodis puuduvad kasutamata komponendid (nt teegifailid, muutujad).
- Koodis on realiseeritud vähemalt minimaalselt nõutud funktsioonid. Enamikes variantides on mõistlik neid rohkem teha.
- Kui koodis tekib kordusi, siis tuleb selle asemel luua funktsioon ning seda korduvalt kasutada.
- Andmevahetus toimub funktsioonidega ainult edastavate parameetrite ja tagastuse kaudu. Globaalmuutujate kasutamine pole lubatud!
- Funktsioonide prototüübid asuvad faili päises, funktsioonide sisu pärast main() funktsiooni. Eraldi päisefaili kasutamine on soovi korral lubatud (tulevikuteema).
- Täidetud on kõik koodimisstiilis etteantud nõuded, muuhulgas:
- Kõik funktsioonid on kommenteeritud kasutades standartset kommentaari kuju (kirjeldus, parameetrid, tagastus).
- Kõik funktsioonid, muutujad ja preprotsessori makrod on arusaadavalt nimetatud ja korrektselt vormistatud.
- Faili päises on kommentaar mis kirjeldab programmi, autorit jne
Lisaülesanne boonuspunktide teenimiseks
Kodutöö eest on võimalik saada kuni 2 boonuspunkti. Lisaülesannete osalise lahendamise eest on samuti võimalik punkte saada, kuniks see on dokumenteeritud nõuetekohaselt.
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 täiendav esimese astme nummerdatud pealkiri “Lisaülesanded”.
- 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 15.12.2024 23:59:59 (kohalik aeg)
Kodutöö tähtaja ületamisel vähendatakse lõpptulemust 1 punkti võrra igal hilinetud nädala kohta. Maksimaalselt vähendatakse tulemust 5 punkti võrra, st esitades töö 7 nädalat hiljem kaotad ikkagi 5 punkti töö tulemusest.
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 Kodutoo_II_Eesnimi_Perenimi_üliõpilaskood.
Näiteks:
Kodutoo_II_Anti_Tiib_112211IACB_kood.c
Kodutoo_II_Anti_Tiib_112211IACB_aruanne.pdf
Kodutoo_II_Anti_Tiib_112211IACB_sisendid.zip
Kodutöö tuleb esitada Moodle kaudu: https://moodle.taltech.ee/mod/assign/view.php?id=565109
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 kodutööde lukustamise kuupäevani. 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 miinuspunktid vastavalt esitamise ajale.
NB! Tegu on vaid osalise lahendusega demonstreerimaks üldist kodutöö struktuuri, sisestust, testimist ja koodimisstiili. Konkreetsete nõuete kohta loe nõuete alt!
Testimiseks kasutan mitut erinevat andmefaili katmaks erinevaid olukordi, mis tekkida võivad.
Test 1
1 2 3 4 5 |
4 Hulk 19 Thor 4 Cpt.America 12 Hawkeye 6 |
Test 2
1 2 3 4 5 6 7 8 9 |
19 0 -5 5 Falcon 2 Hulk 24 Thor 3 Cpt.America 5 Hawkeye 21 |