Harjoitustyöt ja ohjelmointiympäristöt

Huomaa

Tämän ohjeen yksityiskohdat on kirjoitettu yliopiston ympäristöä (linux-desktop.tuni.fi) varten. Valitettavasti emme voi testata kaikkia erilaisia ympäristöjä, joten omalla koneella voi jokin asia olla hieman eri tavalla.

Yleistä

Kurssilla on kaksivaiheinen ohjelmointiprojekti, joista kummankin vaiheen tekemiseen annetaan aikaa periodin alusta periodin loppuun saakka.

Projektin ensimmäisestä vaiheesta (PRG1) hyväksytysti läpi pääseminen on edellytys kurssin suorittamiseksi. Projektin toinen vaihe ei ole kurssin läpipääsyn kannalta pakollinen, mutta sen tekemättä jättäminen laskee arvosanaa huomattavasti. Pääsivun Grading-osio näyttää tarkemmin arvionnin yksityiskohdat.

Ohjelmointiprojektin työmäärä riippuu tietenkin opiskelijan ohjelmointitaustasta, mutta työt ovat sen verran haastavia, että vasta viimeisellä viikolla aloittaminen on varma tapa saada aikaan ongelmia. Aloita suunnittelu ja koodaaminen ajoissa!

Projektin deadlinet ovat aina takarajaksi mainitun päivän lopussa klo 23.59. Työ arvostellaan automaattisesti Plussassa.

Ohjelmointiympäristö

Kurssin harjoitustyö tehdään samassa ohjelmointiympäristössä, jota on käytetty kurssilla COMP.CS.110 Ohjelmointi 2. Eli ohjelmointikielenä C++, graafinen käyttöliittymä (tällä kurssilla annetaan valmiina koodina) Qt:lla ja koodin versiohallinta Git:llä.

Oman koneen käyttäminen

Koska harjoitustyöhön kuuluu olennaisena osana ohjelman tehokkuuden arviointi ja testaus, kenties helpointa on koodata työ omalla koneella ja asentaa sinne QtCreator-kehitysympäristö ja Gcc-kääntäjä. Tällä tavoin muiden opiskelijoiden ajamat ohjelmat eivät pääse vaikuttamaan työhösi ja tehokkuustestien tuloksiin. Voit ladata Qt:n kehitysympäristön ilmaiseksi sivulta https://www.qt.io/download (valitse “Downloads for open source users / Go open source” ja seuraavan sivun alapuoliskossa on nappi: “Download the Qt Online Installer”).

  • Huom 1: Qt:n lataus vaatii käyttäjätunnuksen luomisen - yliopiston sähköposti on tähän oikein sopiva.
  • Huom 2: Vaikka tekisitkin harjoitustyön omalla koneellasi, linux-desktopilla kääntymisen testausta suositellaan, koska arvosteluautomaatit käyttävät linuxia.
  • Huom 3: Jos sinulla on jo asennettuna vanhempi versio QtCreator+Gcc-yhdistelmästä, varmistaudu siitä että se on riittävän uusi tukemaan C++17:aa. Suosittelemme päivitystä uusimpaan (Qt 6.x.x).

Jos asennuksessa on ongelmia, yleisohjeita löytyy myös Ohjelmointi 2 -kurssin Plussa-sivuilta.

Ainakin varmasti toimii (jos asennat uusimman Qt 6 version, sen pitäisi myös toimia):

  • Windows 11 Qt 6.6.0 ja tärkeänä tarkistuksena MinGW versio 11 (eli ei 8.jotain vaan 11.jotain), bittisyys tietokoneesi käyttöjärjestelmän mukaan, ensisijaisesti 64-bit
  • Mac OS ARM-prosessorilla: Qt 6.6.0 (toki XCode tai vähintään sen komentojonotyökalut tulee olla asennettuna)
  • Linux (tarkemmin Pop!_OS 22.04 LTS jossa Linux kernel 6): Qt 6.6.0

Etätyöpöytä (virtuaalikone) koodaamiseen

Harjoitustöiden tekemiseen on mahdollista myös käyttää etätyöpöytäyhteyttä linux-desktop.tuni.fi. Koneelta löytyy Git, QtCreator, Gcc yms. työkalut harkkatöiden tekemiseen. Ohjeet etätyöpöydän käyttämiseen löydät Intrasta ja QtCreatorin käyttöön Ohjelmointi 2 -kurssin dokumentaatiosta.

Lopullisten harjoitustöiden tulee toimia kyseisessä ympäristössä. Itse harjoitustyön koodaamisen voi toki tehdä missä ympäristössä tahansa (ja millä työkaluilla tahansa), kunhan ennen palautusta varmistaa toiminnan tarkastusympäristössä.

HUOM! Etätyöpöydällä hae koodisi jonnekin varsinaisen kotihakemistosi alaiseen kansioon (/home/tunnus/…), EI Windows-koneiden verkkolevylle (/intra/home/tunnus)! Verkkolevy ei toimi Linuxissa parhaalla mahdollisella tavalla ja esim. käännetyn ohjelman ajaminen saattaa olla mahdotonta.

Käännös, testaus- ja palautusohje

Kääntäminen

Koska harjoitustyö on C++:aa, täytyy ohjelma tietysti ensin kääntää. Tämän jokainen voi tehdä haluamallaan tavalla, mahdollisuuksia ovat esim.

  • QtCreatorin käyttäminen, jolloin kääntäminen ja ajaminen onnistuu suoraan siellä, ja ohjelmassa on graafinen käyttöliittymä.
  • Komentorivillä kääntäminen, jolloin graafista käyttöliittymään ei tuoteta, vaan ohjelmaa käytetään vain tekstipohjaisesti (esim. g++ -pedantic -Wall -std=c++17 mainprogram.cc mainwindow.cc datastructures.cc -o prg1).

Testaaminen

Ohjelman tulee toimia valmiilla testidatalla, mutta myös omia testiaineistoja kannattaa tehdä ja testata käyttöliittymällä leikkimällä, koska valmis testidata ei pysty testaamaan kaikkea, mikä arvostelussa otetaan huomioon!

Yksittäisiä testejä varten ohjelma täytyy käynnistää siinä hakemistossa, jossa projektitiedosto on. Jos käytät QtCreatoria, projektiin täytyy ensin säätää ohjelman ajohakemisto. Klikkaat QtCreatorin vasemmasta reunasta Projects ja sieltä läheltä yläreunaa tai vasemmasta reunasta (QtCreatorin versiosta riippuen) valitset “Run” (siellä on Desktop-valinnan alla nappulat Build ja Run, joista oletuksena Build on valittuna. Build:llä säädetään kääntämistä, Run:lla ajamista). Nyt ikkunan keskeltä kohdasta Run pitäisi löytyä kenttä “Working directory”. Sen kun vaihdat hakemistoksi jossa projektitiedosto on, niin QtCreator käynnistää ohjelman siellä (uusi QtCreator ja vanha QtCreator).

Ajaessasi ohjelmaa komentotulkilla ilman graafista käyttöliittymää taas siirryt siihen hakemistoon, jossa projektitiedosto on (cd-komento), ja sitten käynnistät ohjelman siitä hakemistosta, johon se on käännetty/kirjoitettu: “./prg1” (ylläolevalla käännöskomennolla). Komentorivillä ohjelmalle voi antaa myös parametrina tiedoston, josta komennot luetaan (jolloin ohjelma lopettaa komennot luettuaan): “./prg1 example-in.txt”.

HUOM! Pääohjelma tulostaa cerr:iin “Program ended normally” viimeisenä toimintonaan. Jos tuota tulostusta ei näy, ohjelma on kaatunut!

STL:n käytön debuggaaminen

Iteraattoreiden mitätöityminen, yli-indeksoinnit ja virheet STL:n algoritmien käytössä ovat tavallisia ja usein vaikeasti löydettäviä virheitä. Onneksi gcc:llä pystyy kääntämään ohjelman myös “debug-STL”-tilassa, jolloin kääntäjä lisää koodiin ylimääräisiä tarkastuksia, jotka pysäyttävät ohjelman virheilmoitukseen monissa STL:n käyttöön liittyvissä virhetilanteissa (ei kuitenkaan aivan kaikissa).

Debug-STL:n käyttämiseksi kääntäjälle täytyy vain antaa sopivat parametrit ja kääntää ohjelma uudelleen. Tämän helpottamiseksi QtCreatoria käytettäessä harjoitustyön .pro-tiedostossa on alussa pois kommentoituna rivi “#QMAKE_CXXFLAGS += -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC”. Poistamalla kommenttimerkki tuon rivin alusta ja kääntämällä koko ohjelma uudelleen (“Rebuild All” Build-valikosta) ohjelma alkaa käyttää lisätarkastuksia. (Jos käytät gcc:tä ilman QtCreatoria, voit lisätä “-D…” -parameterit käännöskomentoon, ts. “g++ -D…”.)

Huomaa, että lisätarkastukset vievät aikaa, joten debug-STL:ää käytettäessä ohjelman suoritus on usein paljon normaalia hitaampaa, usein jopa asymptoottisesti! Pidä siis huoli, että kytket debug-STL:n pois päältä (kommentti takaisin ja rebuild) ennen tehokkuustestien ajamista!

Palautusta lähetetään...