Kodutöö II

Kodutöö üldnõudedKodutöö ülesande variantNäidislahendus

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

  1. Jooksutatav käsurealt kasutades voo suunamist vastavalt etteantud sisendile
  2. 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)
  • 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.

  1. Kasutades programmi läbi voo suunamise. See tekitab nõuded sisendi järjestusele programmis, lähemalt kirjeldatud “sisendfaili struktuur” osas.
  2. 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!

Koodinäidise vaatamiseks kliki siin

Programmikoodi näide ei vasta täielikult ülesande põhinõuetele. Näiteks on sisendi kontroll liialt leebe.

Algoritmi näidise vaatamiseks kliki siin

Algoritmis oodatakse vaid andmetöötlust ja tulemuste saavutamiseks olulist osa. Sisendi lugemist ega valideerimist ei ole vaja kajastada, samuti pole vaja algoritmi lisada lisaülesannete osa (nt käsureaargumente). Näidis on inglise keeles, kuid lubatud on nii eesti kui ingliskeelsed lahendused.

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

Testimisprotsess väljundiga
Test 2: Väljaspool lubatud vahemikku voo suunamisega

Testsisend

Testimisprotsess väljundiga
Test 3: Klaviatuurilt sisend

Sisendit eraldi faili kujul ei ole, sisestus toimub klaviatuurilt. Programmi väljund peab olema kasutajale arusaadav.