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 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

  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/

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)
  • 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.

  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 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!

Koodinäidise vaatamiseks kliki siin
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.