Nõuded loodavale rakendusele
Loodav rakendus peab jälgima kõiki parimaid praktikaid, mida on tutvustatud Programmeerimine 1 aines ning esimestel nädalatel Programmeerimine 2 aines.
Keerukamad lahendused ning õppeaines katmata teemade rakendamine on lubatud, kui need on korrektselt dokumenteeritud ning aruandes on põhjendatud motivatsioon nende kasutamiseks sedasi, et lugejale on ilmne töö autori kompetents nende teemade valdamises.
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 eelmainituid tuleb eelnevalt kokku leppida õppejõuga!
Esitatud lahendus kompileeritakse ja testitakse laboris 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.
Lahenduse üldised nõuded
- Programmi lähtekood peab olema tükeldatud enamaks kui üheks failiks. Täpne failide arv ja jaotus on autori otsustada.
- Minimaalselt peab olema rakendus tükeldatud koodi- ja päisefailiks
- Mitme .c koodifaili puhul tuleb lisada Makefile oma lahenduse kompileerimiseks
- Andmefaili nimi loetakse programmi käsurea argumendina
- Programmi käitumine olukorras, kus andmefaili nime ei anta, on töö autori otsustada. Valitud käitumine peab olema dokumenteeritud!
- Käsurea argumentide haldamise võid ise kirjutada või kasutada unistd.h või argp.h teeke.
- Programmi töö tulemus kuvatakse nii ekraanil kui salvestatakse väljundfaili
- Väljundfailis kuvatakse vaid ülesande tulemus
- Ekraanile tuleb kuvada ülesande tulemus. Täiendavalt tohib ekraanile kuvada ka vahetulemusi ja muud vajalikku informatsiooni, sh küsida kasutajalt vajaminevat sisendit.
- Väljundfaili nimetus on arendaja otsustada
- Programm peab töötama sisendfailidega, mille kirjete arv ei ole kindlaks määratud – st mõne rea lisamise või kustutamise tulemusel peaks programm jätkuvalt edukalt töötama.
- Maksimaalse ridade arvu defineerimine on lubatud. Kui sisendfailis on rohkem andmeid, ei ole nende lugemine vajalik.
- Dünaamilise mälu kasutamine ei ole nõutud – seda vaatame tulevikus. Kui oskad seda korrektselt teha, võid seda kasutada (st vajaliku koguse küsimine, kontroll, vabastamine jms)
- Andmed loetakse failist ja hoiustatakse programmi sees struktuuridest ( struct ) koosnevas massiivis. Ülesandes võib olla nõutud ka alamstruktuuri kasutamine. Programmis kasutatavatesse struktuuridesse võid lisada täiendavad välju, sh alamstruktuure. Samuti võid luua täiendavaid struktuure, kui see abistab ülesande lahendusele kaasa. NB! See ei tähenda, et tohiksid sisendfaili lisada välju!
- Juhul kui ülesandes on kasutatakse kodeeritud väärtusi (nt olek, piletitüüp, …), mis on keerulisemad kui tõene/väär, tuleks need kodeerida kasutades loendeid ( enum )
- Programm peab pakkuma mõistlikku kasutajakogemust (UX – user experience)
- Programm peab teavitama kasutajat vigade esinemisel arusaadavalt. Vea kirjeldus peab olema võimalikult täpne (abistav probleemi lahendamisel). Kõik veateated kirjutatakse stderr standardvoogu.
- Kui kasutajalt oodatakse täiendavat sisendit, peab selle päring olema arusaadav. Kui sisend peab olema kindlalt vormindatud, tuleb kasutajale kuvada eelnevalt sobilik vorming. Võimalusel lisada ka näide oodatavast sisendist.
- Kui programm sisaldab otsingut, filtreerimist või grupeerimist, peab kriteeriumile vastavate tulemuste puudumine olema kasutajale arusaadavalt väljendatud konkreetse teateaga.
Sisendfaili nõuded
- Andmefailis peavad olema ainult ülesande variandis kirjeldatud andmeväljad.
- Töö autor loob sisendfaili andmemudeli vastavalt enda parimatele oskustele ja teadmistele. Sinna hulka kuuluvad andmeväljade eraldaja, järjekord, sisu, keerukus jne. Töö autor dokumenteerib andmemudeli ja selle loomisel tehtud otsused programmiga kaasa antavas dokumendis.
- Töö autor koostab andmefaili vastavalt kirjeldatud andmemudelile. Loodud andmefail laetakse üles koos esitatava tööga. Andmefailis peab olema vähemalt 10 kirjet. Kui autor esitab tööga mitu andmefaili erinevate olukordade näitamiseks, kehtib pikkuse piirang vaid ühele neist.
Aruande mall
Aruande malliks kasuta Programmeerimine 1 kodutöö 1 raames välja toodud malli (https://blue.pri.ee/ttu/programmeerimine-i/kodutoo-i/) ning kohanda see ise sobivaks antud kodutööle.
Aruanne
Aruande sisuline pool (sisendfaili kirjeldus, lahenduse kirjeldus ning käivitamise juhend) peab jääma vahemikku 3 – 6 lehekülge.
Rõhk on korralikult struktureeritud dokumentatsioonil! Väldi jutustamist (erandina kokkuvõte).
- Tiitelleht
- Autorideklaratsioon
- Lühendite ja mõistete sõnastik (vajadusel)
- Sisukord
- Jooniste ja tabelite loetelu (vajadusel)
- Ülesande püstitus (variant)
- Lahenduse detailne kirjeldus (väldi tekstimüüre!)
- Programmi lühikirjeldus – st mida teeb?
- Programmi töövoog (mis järjekorras mida tehakse, lühidalt ja üldistatult. Väldi detailidesse minekut! Maksimaalselt pool lehekülge).
- Struktuuride kirjeldus (iga struktuuri kohta)
- Struktuuri eesmärk
- Iga struktuuri liikme kohta nimi, andmetüüp ja kirjeldus.
- Eriolukordade analüüs ja lahendamine
- Probleemi kirjeldus
- Probleemi seisukord (kas lahendatud, leitud alternatiivne võimalus või on see jätkuvalt aktuaalne)
- Kui probleem on lahendatud, siis kuidas selle lahendasid
- Andmefaili struktuuri kirjeldus
- Ühe kirje struktuur (andmeväljade järjekord, andmevälja ja andmekirje eraldajad, …)
- Iga andmevälja kirjeldus – nimetus, andmetüüp, näidisväärtus, kirjeldus, piirangud nende olemasolul (nt pikkus, vahemik, keelatud väärtused)
- Ühe andmerea näidis
- Programmi kasutusjuhend. Kirjelda kõiki võimalike käsureaargumentide kombinatsioone ja käivitusvõimalusi, mis on toetatud.
- Lisaülesanne (kui lahendasid lisaülesande)
- 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
- Kui kasutasid tehisintellekti (nt ChatGPT), peab selle kasutus olema viidatud – mis ulatuses ja mille jaoks kasutasid
- 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.
- Viitamiseks kasutatakse IEEE stiili
- Ekraanitõmmis(ed) töötavast programmist
- Ekraanitõmmised võivad olla esitatud kas lisana või põimituna lahenduse kirjelduse sisse
- Ekraanitõmmistel peab näitama nii programmi tööd tavaolukorras kui eriolukordades
Lisaülesanne boonuspunktide teenimiseks
Kodutöö eest on võimalik saada kuni 2 boonuspunkti. Boonuspunktide saamiseks peavad lisafunktsioonid olema kirjeldatud aruandes. Lisaülesannete osalise lahendamise eest on samuti võimalik punkte saada.
Boonuspunktide saamiseks tuleb lisaks ülesande baasnõuetele täita järgmised nõuded
- Põhjalik käsureaargumentide tugi
- Programmi peab saama kasutada ilma käsureaargumente andmata, kasutades vaikeväärtusi
- Peab toetama käsureaargumendina erineva sisendfaili nime andmist
- Peab toetama käsureaargumendina erineva väljundfaili nime andmist
- Peab toetama käsureaargumendina ekraanile väljastuse välja lülitamist
- Peab toetama käsureaargumendina faili väljastuse välja lülitamist
- Sinu ülesanne on mõelda välja mõistlik viis kuidas toetada ühte või enamat käsureaargumenti korraga oma programmis mõistlikult (see võib tähendada nt sisend ja väljundfaili määramist ning ekraanile väljastuse välja lülitamist).
- Programmi vaikimisi seadistus peab olema hoiustatud eraldiseisvas seadefailis, mis antakse rakendusega kaasa. Rakenduse töö ajal hoiustatakse seadistusi eraldi struktuuri sees
- Seade fail sisaldab minimaalselt sisendfaili nime, väljundfaili nime, väljastuse seadistust.
- Seadefaili väärtusi kasutatakse juhul kui käsureaargumente ei edastatud
- Edastatud käsureaargumendid kirjutavad üle seadefailis määratud vaikimisi väärtused. St kui käsureaargumendina edastatakse ainult uus sisendfaili nimetus, kasutatakse jätkuvalt seadefailis olevat väljundfaili nimetust ning väljundi seadistusi.
- Programm peab tagama mõistliku võimekuse hoida ära probleeme vigasest andmefailist. Näiteks ebaloogilised väärtused, vale andmetüüp, poolik andmerida
- 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.
- Selgita oma lähenemist sisendi kontrollile, et rakendus valet tüüpi sisendi korral katki ei läheks.
Enne esitamist veendu (tüüpvead)
- Andmefaili nimi koodis vastab esitatavale andmefaili nimele, andmefaili nõuded on täidetud
- Dokumentatsioon on korralikult struktureeritud ja vastab püstitatud nõuetele (sisupunktid)
- Koodis on esmane veakäsitlus ja arusaadav kasutajakogemus
- Programm on korralikult funktsioonideks tükeldatud
- Kõik funktsioonid omavad kommentaare funktsiooni ees (kirjeldus, parameetrid, tagastus)
- Andmed liiguvad funktsioonidesse ja tagasi kasutades parameetreid ning tagastust. Globaalmuutujate kasutamine pole lubatud (erandiks on iseseisva teegi loomine, soovi korral küsi täpsustusi)
- Kood jälgib aines ettemääratud koodimisstiili nõudeid. Alternatiivina tohib kasutada teisi laialtlevinud koodimisstiile, mida kasutatakse C-keelsete programmide koostamiseks – nt Linuxi Kerneli koodimsistiil.
- Kood on korralikult trepitud, koodis on piisavalt tühikuid ja tühje ridu määratud kohtades, et tagada koodi hea loetavus.
- Kood on korrektselt kommenteeritud. Sealjuures on kommenteeritud ka kõik koodifaili päised ja funktsioonid
- Kõikide funktsioonide, makrote, muutujate, … nimed on arusaadavad ja selgitavad mida neis hoitakse.
- Koodimisstiil on järjepidev kogu töö ulatuses
- Puuduvad maagilised arvud
- jne
Tähtajad
Terviklik kodutöö tuleb esitada hiljemalt 16.03.2025 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 punkti. 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
Kodutöö esitatakse Moodle kursuses Kodutöö 1 ülesande alla.
Esitada tuleb järgnevad failid
- Dokumentatsioon Adobe PDF formaadis
- Kõik vajalikud koodifailid (.c ja .h) programmi kompileerimiseks. Mitme .c koodifaili kasutamisel ka Makefile.
- Sisendfailid rakenduse kasutamiseks..
Failide nimed peavad algama HW1_Eesnimi_Perenimi_üliõpilaskood.
Näide (eraldi failid):
HW1_Anti_Tiib_112211IACB.c
HW1_Anti_Tiib_112211IACB.h
HW1_Anti_Tiib_112211IACB_sisend.txt
HW1_Anti_Tiib_112211IACB_aruanne.pdf
Rakenduse koodifailid ja sisendid on lubatud esitada .zip arhiivina. PDF dokument peab olema Moodlesse üles laetud eraldi failina.
Näide:
HW1_Anti_Tiib_112211IACB_rakendus.zip
HW1_Anti_Tiib_112211IACB_aruanne.pdf
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 protsess.
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.