(P) Teatteri

Tavoite: Kertaan STL:n säiliöiden, iteraattorien ja tiedostojen lukemisen toimintaa.

Erityisesti harjoittelen valitsemaan oikean tietorakenteen STL:n tietorakenteiden joukosta. Mahdollisesti harjoittelen myös luokkien käyttöä.

Tehtävän toteuttamiseen on kaksi tapaa:

  1. Voit käyttää luokkia, jolloin todennäköisesti selviät yksinkertaisemmilla STL-säiliöillä, mutta säiliöitä tarvitset silti. Sopivia kandidaatteja luokiksi voisivat olla Teatteri (Theatre tiedostoissa theatre.hh ja theatre.cpp) tai Näytelmä (Play tiedostoissa play.hh ja play.cpp). Voit toteuttaa näistä luokista jommankumman tai molemmat. Jos käytät luokkia, niiden pitää olla järkeviä ja tarpeellisia (ks. 4-kierroksen Tyyliseikkoja ja sieltä Olio-ohjelmointi).
  2. Voit käyttää STL:n säiliöitä ilman luokkia. Tällöin todennäköisesti tarvitset useampia STL-rakenteita toisen STL-rakenteen sisällä.

Ohjeita: Hae ohjelmakoodipohja: templates/07/theatre/ -> student/07/theatre/. Koodipohjassa on lähinnä vain toteutus sellaiselle split-funktiolle, joka osaa käsitellä lainausmerkit oikein.

Toteuta ohjelma, joka lukee käynnistyessään teattereiden ja niiden näytelmiin liittyviä tietoja tiedostosta, tallentaa ne sopivaan tietorakenteeseen ja antaa käyttäjälle mahdollisuuden tehdä hakuja kyseiseen tietorakenteeseen.

Tärkeää

Ennen kuin aloitat, lue huolellisesti koko tehtävänanto. Huomaa erityisesti kohdat Ohjelman toteuttaminen osissa (vaaditut commitit) sekä Erityisvaatimukset.

Kohdasta Arviointi huomaa erityisesti, että ohjelman pitää ensin läpäistä kaikki automaattitestit. Muuten työ ei mene assistenttien arvioitavaksi, eikä siitä saa pisteitä.

Huomautus

Tämän projektin saa (mutta ei ole pakko) tehdä parityönä. Jos et ole vielä luonut ryhmää tai haluat vaihtaa työparia, niin pääset luomaan uuden ryhmän klikkaamalla vasemman reunan valikosta löytyvää linkkiä “Luo uusi ryhmä”. Ryhmän luomisen jälkeen sivun alaosan palautuslaatikkossa on näkyvissä kaksi vaihtoehtoa: “Palauta yksin” / “Palauta ryhmässä”. Ole tarkkana, että valitset oikean vaihtoehdon, koska valintaa ei voi myöhemmin perua. Palautuslaatikkoon tulee vain jommankumman jäsenen Git-repositorion osoite. Kirjoittakaa kooditiedoston kommentteihin molempien nimet ym. muut tiedot.

Ryhmää voi etsiä Kooditorion Discord-linkin kautta (ks. Aikataulu & linkit).

Alkukommentti ja palautteen kieli

Samoin kuin ensimmäisessä projektissa, tässäkin projektissa vaaditaan alkukommentti. Tällä kertaa alkukommenttia ei anneta valmiina, vaan sinun pitää kirjoittaa se itse. Mallia voit katsoa ensimmäisen projektin tehtävänannosta (4.5 (P) Tammi).

Palautteen kieli valitaan palautuslaatikossa (tämän sivun lopussa). Palautteen kielenä on oletuksena suomi, mutta voit vaihtaa sen, jos haluat assistenttien antaman palautteen englanniksi. Kielivalinta määräytyy sen perusteella, minkä kielivalinnan olet tehnyt viimeisimmän palautuksen palautuslaatikossa.

Jos teette parityötä, muistakaa lisätä molempien henkilökohtaiset tiedot.

Ohjelman käsittelemä tieto

Ajatellaan seuraavan kaltaista informaatiota näytelmistä eri teattereissa:

Helsinki
    KOM-teatteri
        Rikkaruoho
            Vilma Melasniemi 10
            Juho Milonoff    4
            Niko Saarela     none
        Nukkekoti/A doll's house
            Aleksi Holkko    30
            Niko Saarela     40
            Vilma Melasniemi 43
        The Pimpsons
            Lotta Kaihua     40
            Ria Kataja       none
    Suomen Komediateatteri
        Viimeinen illuusio
            Janne Kataja     28
            Kiti Kokkonen    17
            Joni Pakanen     23
            Katja Lappi      22
        Ilta pilalla
            Ria Kataja       34
            Kiti Kokkonen    5
Tampere
    Tampereen Teatteri
        Piaf
            Annuska Hannula  7
            Pia Piltz        34
            Arttu Ratinen    2
        Anastasia
            Pia Piltz        1
            Sinikka Sokka    4
            Elina Rintala    3
            Arttu Ratinen    none
        Klaani
            Matti Hakulinen  6
            Eeva Hakulinen   8
            Elina Rintala    7
            Tommi Raitolehto 2
    Tampereen Tyovaen Teatteri
        Saituri/Miser
            Samuli Muje      34
            Auvo Vihro       23
        Evita
            Maija Rissanen   2
            Lari Halme       3
Pori
    Porin Teatteri
        Evita
            Heidi Rantakeisu 7
            Maria Pere       none
        Idan pikajunan arvoitus/Murder on the Orient Express
            Janne Turkki     8
            Maria Palmu      none
            Maria Pere       none

Edellä listatun kaltainen tietomäärä voidaan esittää csv-tiedostona, jonka rivit ovat muotoa:

<paikkakunta>;<teatteri>;<näytelmä>;<näyttelijä>;<vapaiden_paikkojen_määrä>

jossa <vapaiden_paikkojen_määrä> voi olla positiivinen kokonaisluku tai literaalinen merkkijono “none”.

Voit olettaa, että <paikkakunta> koostuu vain yhdestä sanasta. Sen sijaan <teatteri>, <näytelmä> ja <näyttelijä> voivat koostua useista sanoista. Jos sanoja on useita, käyttäjä voi antaa ne lainausmerkkien sisällä, mikä näkyy myöhemmin tulevissa esimerkkiajoissa. (Tosin lainausmerkeistä ei tarvitse sen enempää välittää, koska koodinpohjassa on tätä varten toteutettu split-funktio.)

Voit myös olettaa, että näytelmässä ei ole useita samannimisiä näyttelijöitä.

Näytelmällä voi olla varsinaisen nimen lisäksi toinenkin nimi (alias). Useimmiten varsinainen nimi on näytelmän suomenkielinen nimi, ja alias on sen englanninkielinen vastine. Tällöin nämä kaksi nimeä on eroteltu kauttaviivalla ('/').

Yllä käytetty esimerkki näyttäisi syötetiedostoksi kuvattuna siis esimerkiksi seuraavalta:

Helsinki;KOM-teatteri;Rikkaruoho;Vilma Melasniemi;10
Tampere;Tampereen Teatteri;Piaf;Pia Piltz;34
Helsinki;KOM-teatteri;Rikkaruoho;Juho Milonoff;4
Pori;Porin Teatteri;Evita;Heidi Rantakeisu;7
Helsinki;Suomen Komediateatteri;Viimeinen illuusio;Kiti Kokkonen;17
Helsinki;KOM-teatteri;Rikkaruoho;Niko Saarela;none
Tampere;Tampereen Teatteri;Piaf;Annuska Hannula;7
Helsinki;KOM-teatteri;Nukkekoti/A doll's house;Niko Saarela;40
Tampere;Tampereen Teatteri;Anastasia;Sinikka Sokka;4
Helsinki;KOM-teatteri;The Pimpsons;Lotta Kaihua;40
Pori;Porin Teatteri;Idan pikajunan arvoitus/Murder on the Orient Express;Maria Palmu;none
Helsinki;KOM-teatteri;The Pimpsons;Ria Kataja;none
Helsinki;Suomen Komediateatteri;Viimeinen illuusio;Janne Kataja;28
Tampere;Tampereen Teatteri;Klaani;Matti Hakulinen;6
Helsinki;Suomen Komediateatteri;Viimeinen illuusio;Joni Pakanen;23
Pori;Porin Teatteri;Evita;Maria Pere;none
Helsinki;Suomen Komediateatteri;Viimeinen illuusio;Katja Lappi;22
Helsinki;Suomen Komediateatteri;Ilta pilalla;Ria Kataja;34
Tampere;Tampereen Teatteri;Klaani;Elina Rintala;7
Helsinki;Suomen Komediateatteri;Ilta pilalla;Kiti Kokkonen;5
Tampere;Tampereen Tyovaen Teatteri;Saituri/Miser;Samuli Muje;34
Tampere;Tampereen Teatteri;Piaf;Arttu Ratinen;2
Tampere;Tampereen Teatteri;Anastasia;Pia Piltz;1
Pori;Porin Teatteri;Idan pikajunan arvoitus/Murder on the Orient Express;Janne Turkki;8
Tampere;Tampereen Teatteri;Anastasia;Elina Rintala;3
Tampere;Tampereen Teatteri;Anastasia;Arttu Ratinen;none
Helsinki;KOM-teatteri;Nukkekoti/A doll's house;Aleksi Holkko;30
Tampere;Tampereen Teatteri;Klaani;Eeva Hakulinen;8
Pori;Porin Teatteri;Idan pikajunan arvoitus/Murder on the Orient Express;Maria Pere;none
Tampere;Tampereen Teatteri;Klaani;Tommi Raitolehto;2
Tampere;Tampereen Tyovaen Teatteri;Saituri/Miser;Auvo Vihro;23
Helsinki;KOM-teatteri;Nukkekoti/A doll's house;Vilma Melasniemi;43
Tampere;Tampereen Tyovaen Teatteri;Evita;Maija Rissanen;2
Tampere;Tampereen Tyovaen Teatteri;Evita;Lari Halme;3

Kenttiä on rivillä viisi kappaletta, ja mikään kenttä ei saa olla tyhjä tai muodostua pelkistä välilyöntimerkeistä. Viimeisen kentän on oltava positiivista kokonaislukua (int) esittävä merkkijono tai sana “none”. (Voit ajatella, että none tarkoittaa varausten määrää 0, mutta voit olettaa, että luku 0 ei esiinny syötetiedostossa, vaan nollan tilalla on aina teksti none.)

Huomaa, kuinka rivien ei tarvitse csv-tiedostossa olla missään erityisessä järjestyksessä. Syötetiedostossa ei myöskään käytetä skandinaavisia kirjaimia.

Vaikka vapaiden paikkojen määrä näkyykin aina näyttelijän nimen perässä, se on kuitenkin näytelmäkohtainen tieto. Viimeisin samaa näytelmää koskeva paikkatieto jää aina voimaan. Esimerkiksi näytelmässä Saituri (Miser) on ensin paikkatietona 34 (Samuli Mujeen kohdalla) ja myöhemmin 23 (Auvo Vihron kohdalla). Tällöin lopullinen vapaiden paikkojen määrä on 23.

Ohjelman toiminta

Kun ohjelma käynnistyy, se lukee käyttäjältä syötetiedoston nimen:

Input file: theatres.txt

Mikäli syötetiedostoa ei saa avattua luettavaksi, tulostetaan käyttäjälle teksti:

Error: input file cannot be opened

Tämän jälkeen ohjelman suoritus päättyy ilman mitään muita tulosteita paluuarvoon EXIT_FAILURE.

Mikäli syötetiedosto saadaan avattua, mutta tiedosto ei ole määritelmän mukainen, esimerkiksi kenttä puuttuu täysin tai kentästä puuttuu arvo, tulostetaan käyttäjälle alla näkyvä virheilmoitus ja lopetetaan ohjelman suoritus paluuarvoon EXIT_FAILURE. Jos esimerkiksi edellä esitetyssä syötetiedostossa rivillä 1 lukisikin:

Helsinki;KOM-teatteri;Rikkaruoho;10

tai:

Helsinki;KOM-teatteri;Rikkaruoho;;10

tai:

Helsinki;KOM-teatteri;Rikkaruoho;   ;10

niin ohjelma tulostaisi:

Error: empty field in line 1

Virheilmoitukseen tulostetaan siis myös rivinumero, joten syötetiedoston rivit pitää laskea.

Ohjelma jäsentelee tiedostosta lukemansa rivit ja tallentaa eri kirjastojen kirjatiedot sopivaan sisäiseen tietorakenteeseen. Tietorakenne on ohjelmoijan itsensä päätettävissä, kunhan se noudattaa kaikkia kohdassa Erityisvaatimukset asetettuja lisäehtoja.

Kun tiedosto on luettu, ohjelma aloittaa varsinaisen suorituksensa. Aina kun käyttäjältä odotetaan syötettä, tulostetaan rivin alkuun komentokehote the> (ja välilyönti):

the>

Tähän kehotteeseen ohjelman käyttäjä voi syöttää seuraavia käskyjä:

  • quit - Ohjelman suoritus päätty paluuarvoon EXIT_SUCCESS ilman, että ohjelma tulostaa mitään.

  • theatres - Tulostaa aakkosjärjestyksessä allekkain kaikki tunnetut teatterit. Esimerkiksi:

    the> theatres
    KOM-teatteri
    Porin Teatteri
    Suomen Komediateatteri
    Tampereen Teatteri
    Tampereen Tyovaen Teatteri
    the>
    
  • plays - Tulostaa allekkain kaikki näytelmät aakkosjärjestyksessä. Vaikka sama näytelmä löytyisi useasta teatterista, näytelmän nimi tulostetaan vain kerran. Jos näytelmällä on alias, myös se tulostetaan seuraavasti (erottimena ***):

    the> plays
    Anastasia
    Evita
    Idan pikajunan arvoitus *** Murder on the Orient Express
    Ilta pilalla
    Klaani
    Nukkekoti *** A doll's house
    Piaf
    Rikkaruoho
    Saituri *** Miser
    The Pimpsons
    Viimeinen illuusio
    the>
    
  • theatres_of_play <näytelmä> - Komento tulostaa teatterit, joissa annettua näytelmää esitetään. Teatterit tulostetaan niiden nimien mukaisessa aakkosjärjestyksessä:

    the> theatres_of_play "Ilta pilalla"
    Suomen Komediateatteri
    the> theatres_of_play Evita
    Porin Teatteri
    Tampereen Tyovaen Teatteri
    the>
    

    Esimerkissä näkyy lainausmerkkien käyttö, kun näytelmän nimi koostuu useammasta sanasta. Vaikka nimi koostuisi vain yhdestä sanasta, silloinkin voitaisiin käyttää lainausmerkkejä. Esimerkiksi komennot theatres_of_play Evita ja theatres_of_play "Evita" tuottavat saman tuloksen.

    Komennossa voi käyttää joko näytelmän varsinaista nimeä tai aliasta, mutta ei niiden yhdistelmää:

    the> theatres_of_play Saituri
    Tampereen Tyovaen Teatteri
    the> theatres_of_play Miser
    Tampereen Tyovaen Teatteri
    the> theatres_of_play Saituri/Miser
    Error: unknown play
    the>
    

    Näytelmää ei myöskään löydy sen nimen osalla, vaan nimi tai alias pitää antaa kokonaan. Virheilmoituksista kerrotaan enemmän osiossa Virhetilanteet.

  • plays_in_theatre <teatteri> - Komento tulostaa annetun teatterin näytelmät niiden nimien mukaisessa aakkosjärjestyksessä:

    the> plays_in_theatre "Tampereen Teatteri"
    Anastasia
    Klaani
    Piaf
    the>
    
  • plays_in_town <paikkakunta> - Komento tulostaa annetun paikkakunnan sellaiset näytelmät, joissa on paikkoja vapaana. Jos näytelmällä on alias, myös se tulostetaan (erottimena ---). Tulostuksessa käytetään ensin teatterin mukaista aakkosjärjestystä, ja lisäksi saman teatterin näytelmät tulostetaan näytelmän nimen mukaisessa aakkosjärjestyksessä Myös vapaiden paikkojen määrä tulostetaan:

    the> plays_in_town Helsinki
    KOM-teatteri : Nukkekoti --- A doll's house : 43
    Suomen Komediateatteri : Ilta pilalla : 5
    Suomen Komediateatteri : Viimeinen illuusio : 22
    the>
    

    Jos paikkakunnalla ei ole yhdessäkään näytelmässä vapaita paikkoja, tulostetaan ilmoitus:

    the> plays_in_town Pori
    No plays available
    the>
    
  • players_in_play <näytelmä> [<teatteri>] - Komento tulostaa annetussa näytelmässä esiintyvät näyttelijät. Samannimisiä näytelmiä voi olla eri teattereissa, joten komennolle voidaan antaa toisena parametrina haluttu teatteri. Jos teatteri annetaan, tulostetaan vain kyseisestä teatterista löytyvän näytelmän näyttelijät. Jos teatteria ei anneta, annetun näytelmän näyttelijät tulostetaan kaikista teattereista, joista näytelmä löytyy. Joka tapauksessa komento tulostaa ensin teatterin nimen ja sitten näyttelijän nimen alla näkyvällä tavalla. Tulostus noudattaa ensin teatterin mukaista aakkosjärjestystä, ja saman teatterin näyttelijät tulostetaan etunimen mukaisessa aakkosjärjestyksessä. Esimerkiksi:

    the> players_in_play Evita "Tampereen Tyovaen Teatteri"
    Tampereen Tyovaen Teatteri : Lari Halme
    Tampereen Tyovaen Teatteri : Maija Rissanen
    the> players_in_play Evita "Porin Teatteri"
    Porin Teatteri : Heidi Rantakeisu
    Porin Teatteri : Maria Pere
    the> players_in_play Evita
    Porin Teatteri : Heidi Rantakeisu
    Porin Teatteri : Maria Pere
    Tampereen Tyovaen Teatteri : Lari Halme
    Tampereen Tyovaen Teatteri : Maija Rissanen
    the>
    

    Näytelmää voi etsiä joko varsinaisella nimellä tai aliaksella, samoin kuin komennossa theatres_of_play:

    the> players_in_play Saituri
    Tampereen Tyovaen Teatteri : Auvo Vihro
    Tampereen Tyovaen Teatteri : Samuli Muje
    the> players_in_play Miser
    Tampereen Tyovaen Teatteri : Auvo Vihro
    Tampereen Tyovaen Teatteri : Samuli Muje
    the> players_in_play Saituri/Miser
    Error: unknown play
    the>
    

Kun käyttäjän syöttämä komento on suoritettu, ohjelma tulostaa kehotteen uudelleen. Tätä jatketaan kunnes käyttäjä syöttää käskyn quit.

Virhetilanteet

Mikäli käyttäjän syöte on virheellinen, tulostetaan virheeseen liittyvä virheilmoitus, minkä jälkeen ohjelma palaa odottamaan käyttäjän syötettä. Ohjelman suoritus ei siis pääty käyttäjän virheelliseen syötteeseen.

Käyttäjän syöttäessä tuntemattoman komennon, tulostetaan virheilmoitus:

the> xx
Error: unknown command
the> xx yy
Error: unknown command
the>

Mikäli komennolle annetaan väärä määrä parametreja, tulostetaan virheilmoitus seuraavasti:

the> plays KOM-teatteri
Error: wrong number of parameters
the>

Komennoille theatres_of_play ja players_in_play annetaan parametrina näytelmän nimi. Jos annettua näytelmää ei löydy, tulostetaan virheilmoitus:

the> theatres_of_play xx
Error: unknown play
the> players_in_play xx
Error: unknown play
the> players_in_play xx "Porin Teatteri"
Error: unknown play
the>

Kuitenkin jos jälkimmäisen komennon (players_in_play) jälkimmäistä parametria (teatteria) ei löydy, tulostetaan virheilmoitus:

the> players_in_play xx yy
Error: unknown theatre
the> players_in_play Evita yy
Error: unknown theatre
the>

Toisin sanoen, jos vapaaehtoinen (optionaalinen) parametri annetaan, sen pitää olla jokin olemassa oleva teatteri. Tämä (optionaalisen parametrin mukanaolo ja oikeellisuus) tarkistetaan siis ensin. Vasta sitten tutkitaan ensimmäisen parametrin oikeellisuus.

Komento plays_in_theatre saa parametrinaan teatterin nimen ja komento plays_in_town paikkakunnan nimen. Jos näitä ei löydy, tulostetaan virheilmoitukset vastaavasti:

the> plays_in_theatre xx
Error: unknown theatre
the> plays_in_town xx
Error: unknown town
the>

Erityisvaatimukset

Seuraavia vaatimuksia on noudatettava, mikäli haluaa työstä hyväksytyn arvosanan:

  • Syötetiedoston saa lukea vain kerran ohjelman suorituksen aikana.
    • Tästä syystä sinun pitää lukea tiedoston tiedot STL:n tietorakenteisiin. Sen jälkeen kaikki haut, lisäykset ja poistot pitää kohdistua valittuihin tietorakenteisiin (eikä siis syötetiedostoon).
  • Minkä STL-tietorakenteen tai tietorakenteiden yhdistelmän valitsetkin työhösi, sinun on käytettävä ainakin yhtä map-rakennetta. Tämän map-rakenteen on oltava osana sitä rakennetta, johon tiedostosta luettu informaatio talletetaan myöhempiä hakuja varten.

Vihjeitä

  • Muista, että oletuksena ohjelma käännetään build-hakemistoon. Testaamista varten kannattaa siirtää mahdolliset syötetiedostot tähän samaan hakemistoon.
  • Voit käyttää syötetiedoston ja käyttäjän antamien syötteiden paloitteluun koodipohjan split-funktiota.
  • Muistathan, missä järjestyksessä map- ja set-rakenteiden alkiot käydään iteraattorilla läpi.
  • Kierrokselta 5 löytyy esimerkkejä STL-säiliöiden yhdistelemisestä (ks. 05/examples/).
  • Kierrokselta 3 löytyy esimerkkejä luokkien käytöstä (ks. Plussa-materiaali ja viikkoharjoitukset).

Ohjelman toteuttaminen osissa

Ohjelman toteutus muodostuu pääpiirteiltään seuraavista osista:

  • tietorakenteen valinta ja tiedoston lukeminen tietorakenteeseen
  • mahdollisesti luokan tai luokkien toteuttaminen
  • käyttöliittymä
  • hakualgoritmit.

Mieti tarkasti, missä järjestyksessä nuo kannattaa toteuttaa, jotta voit toteuttaa ja testata ne yksi kerrallaan, ennen kuin siirryt seuraavaan vaiheeseen. Vähimmäisvaatimuksena versionhallinnan käyttämiselle on, että nämä 3-4 osaa on toteutettu omina committeinaan, mutta parempi tietenkin olisi että committeja olisi enemmän.

Yllä luetellut commitit saa jakaa useampaan osaan.

Arviointi

Jotta työ päätyisi assistenttien arvioitavaksi, sen pitää ensin läpäistä automaattitestit. Automaattitestit eivät hyväksy ohjelmaa, jonka kääntäminen tuottaa varoituksia. Jos saat automaattitesteistä 0 pistettä, myös lopullinen pistemääräsi on 0, eikä työ mene assistenttien arvioitavaksi.

Assistentti arvioi ja pisteyttää automaattitestit läpäisseistä (=1 p) sekä tehtävänannon erikoisvaatimukset täyttävistä töistä viimeisen määräajan puitteissa tehdyn commitin seuraavien arviointikriteerien mukaan:

  • Ratkaisun yleisperiaate: 0-30 pistettä:
    • Tehtävän osaamistavoitteet on saavutettu.
    • Ohjelmakoodi on jaettu funktioita, luokkia ja/tai metodeita käyttäen loogisiksi kokonaisuuksiksi, jotka ovat sopivan pituisia.
    • Jos luokkia ja olioita on käytetty, ne on toteutettu olio-ohjelmoinnin periaatteita noudattaen (ks. 4-kierroksen Tyyliseikoista kohta Olio-ohjelmointi).
    • Tietorakenne ei sisällä toisteista eikä turhaa tietoa. Valittuja tietorakenteita on käytetty järkevästi.
    • Ohjelmakoodi ei sisällä turhaa toisteisuutta eikä muutakaan turhaa.
    • Ohjelmakoodi ei sisällä tarpeettomia rajoitteita tai oletuksia tai muita väkinäisiä ratkaisuita.
    • Ohjelmarakenteet on toteutettu helposti ymmärrettäviksi.
    • Ohjelmakoodissa ei ole käytetty globaaleja muuttujia (globaalit const-vakiot ovat OK).
    • Ohjelman toimintaa ei lopeteta exit-funktiota käyttäen.
  • Ohjelmointityyli: 0-10 pistettä:
    • Muuttujat ja funktiot nimetty selkeästi ja kuvaavasti. Nimeämisessä on käytetty vain yhtä kieltä, ei esim. suomea ja englantia sekaisin.
    • Ohjelmassa on käytetty nimettyjä vakioita taikalukujen sijasta.
    • Ohjelmakoodi on asemoitu siististi.
    • Koodirivien pituus on enintään 80 merkkiä.
    • Jokaisen tiedoston alussa on kommentti, josta käy ilmi tiedoston tarkoitus, työn tekijä(t) ja muut tarvittavat tiedot. (ks. 1-projektin tehtävänanto kierrokselta 4).
    • Jokaisen funktion/metodin alussa (otsikkotiedostossa jos sellainen on) on kommentti, joka kuvaa sen toiminnan, paluuarvon ja parametrit.
    • Kommentteja on muutenkin tarpeellisissa kohdissa.
    • Kommentit liittyvät toteutettuun ohjelmaan eivätkä johonkin sen vanhempaan versioon.
    • Kaikki kommentit on kirjoitettu samalla kielellä (fi/en), mutta kommentoinnissa saa käyttää eri kieltä kuin muuttujien ym. nimissä.
    • Kaikki muuttujat on alustettu.
    • Kääntäjä ei anna koodia käännettäessä varoituksia.
  • Versionhallinnan käyttö: 0-10 pistettä:
    • Committeja on riittävä määrä.
    • Commit-viestien sisältö on selkeä ja kuvaava.

Huomautus arvioinnista

Automaattitesteillä tarkistetaan, toimiiko ohjelma. Assistentit taas kiinnittävät huomiota tyyliseikkoihin ym. yllä lueteltuihin kriteereihin. Periaatteessa on siis mahdollista, että täysin toimivasta ohjelmasta saa nolla pistettä, jos ohjelma ei täytä yllä lueteltuja vaatimuksia.

Erityisesti tyylivaatimuksista on kerrottu tämän kierroksen aikaisemmassa materiaaliosiossa.

Huomautus arvosteltavan työn versiosta

Arvosteluun otetaan ohjelman se versio, josta on tehty viimeisin onnistunut Plussa-palautus (määräaikaan mennessä). Onnistuneella palautuksella tarkoitetaan palautusta, joka on läpäissyt automaattitestit.

Ensimmäisen onnistuneen Plussa-palautuksen jälkeen haluat todennäköisesti vielä korjailla koodisi tyyliä (esim. lisätä kommentteja), jos vain palautusaikaa on vielä jäljellä.

Muista lopuksi kuitenkin tämä: Kun olet palauttanut viimeisen version Gittiin, palauta se vielä kerran Plussaan.

A+ esittää tässä kohdassa tehtävän palautuslomakkeen.