TYÖOHJE 1 OHJELMOINTI-KURSSIN PROJEKTITYÖT Suunnitelma Tämä työohje kuvaa opintojakson Ohjelmointi (T0004) TP02S:lle syksyllä 2003 pidetyn toteutuksen projektitöiden suoritustavan ja aiheet. Projektitöitä tehdään yksi tai kaksi ja niiden vaatima arvioitu työaika on yhteensä 60 tuntia. Ratkaisut toteutetaan C-kielellä. Työt tehdään pääsääntöisesti itsenäisesti. Pari- tai ryhmätyöskentely on mahdollista, jos siitä etukäteen erikseen sovitaan (työsuunnitelmassa), mutta työn on oltava yksin tehtävää selvästi vaativampi ja laajempi, ja kunkin tekijän osuus on oltava selvästi erotettavissa ja etukäteen dokumentoitu. Työhön kuuluu myös projektisuunnitelman tekeminen ja toteutuman seuranta. Suunnitelman ja toteutuman yhtäpitävyys ei vaikuta arvosteluun. Projektista tehdään työsuunnitelma, josta käy ilmi eri valitut tehtävät, niihin varattu työtuntimäärä ja aikataulu. Suunnitelma palautetaan viimeistään tenttitilaisuudessa 16.12.2003 kirjallisena. Työsuunnitelman liitteeksi laaditaan kummastakin tehtävästä lyhyt vaatimusmäärittely eli käytännössä tehtävänasettelun täsmennys, jonka perusteella voidaan todeta täyttääkö ratkaisu etukäteen asetetut vaatimukset. Työn palautus Työt palautetaan 15.2.2004 mennessä, jolloin se arvioidaan normaalisti. Työn saa palauttaa vielä 15.3.2004 asti, mutta viivästyminen otetaan huomioon arvioinnissa. Töitä voi palauttaa vielä tämän jälkeenkin 30.4. 2004 asti, mutta pisteet eivät enää vaikuta kurssin arvosanaan. Tätäkin myöhemmin palautetut työt otetaan huomioon vain erityisen painavista syistä. Projektitöistä tehdään lyhyt paperidokumentti, joka sisältää seuraavat asiat: a) Ratkaisun kuvaus ja ratkaisun mahdolliset rajoitukset. Jos ohjelmakoodi on selkeästi kirjoitettu ja hyvin kommentoitu, tämä kohta voi sisältää vain lyhyen sanallisen tai kuvia apuna käyttävän (esim. lohkokaavio) selostuksen ratkaisusta. Ratkaisu siis kuvataan lyhyesti ja erityisesti kerrotaan sellaiset asiat, jotka eivät ilmene helposti itse ohjelmakoodista. b) käytettyjen tiedostojen kuvaus: käyttötarkoitus ja sisäinen rakenne. c) tietorakenteiden kuvaus: Kuvataan ohjelmassa käytetyt tietueet (struct). Tämä kohta voidaan jättää pois jos a-kohta ja
TYÖOHJE 2 ohjelmakoodi kuvaavat ohjelmassa käytetyt tietueet ja niiden käyttötarkoituksen. d) lyhyt käyttöohje, jonka perusteella ohjelmaa pitää pystyä ajamaan ilman, että perehtyy itse ohjelmakoodiin e) yhteenveto ohjelman toimivuudesta ja laajennusmahdollisuuksista f) vähintään kaksi käyttöesimerkkiä, käyttöesimerkkien tarkoitus on antaa mahdollisimman kattava ja uskottava kuva ohjelman toiminnasta g) ohjelmalistaus h) työaikaraportti Raporttiin voi liittää oman arvionsa siitä, kuinka ohjelma toimii ja mitä parantamisen varaa jäi. Pituus ei ole raportin arviointiperuste. Työ palautetaan lähettämällä ohjelmakoodi ascii-tekstitiedostoina pakattuna yhdeksi.zip tiedostoksi sähköpostilla opettajalle osoitteeseen olli.hamalainen@evtek.fi. Paperidokumentti palautetaan huoneen 1.116 postilokeroon tai (sisä)postitse. Töiden arviointi Projektitöistä voi yhteensä saada enintään 20 pistettä, jotka lasketaan yhteen koepisteiden (enintään 30) ja kotitehtävistä saatujen pisteiden (enintään 10) kanssa. Kurssin arvosana määräytyy näin saadun kokonaispistemäärän perusteella. Kummastakin työstä on saatava hyväksyttävä arvosana eli vähintään 2 pistettä. Projektitöiden arviointiin vaikuttaa tehtävän vaativuus ja laajuus sekä toteutuksen laatu. Laadun arviointiin vaikuttaa ohjelman toteutuksen lisäksi dokumentointi ja määräaikojen noudattaminen.
TYÖOHJE 3 1 YKSINKERTAINEN KORVAUSSALAKIRJOITUS Yksinkertainen korvaussalakirjoitus on menetelmä, jossa käytettävät merkit sekoitetaan siten, että kukin merkki korvataan toisella saman kirjaimiston merkillä. Kutakin merkkiä korvaava merkki on aina sama eli merkistö kuvautuu yksikäsitteisesti itselleen. esim. harjoituksissa esillä ollut Caesarsalakirjoitus on tätä tyyppiä. Tällaista salakirjoitusta voidaan yrittää purkaa laskemalla yksittäisten merkkien lukumäärät tekstissä ja vertaamalla sitä käytetyn kielen tunnettuihin kirjainten esiintymisfrekvensseihin. Jos siis esimerkiksi analysoitavassa tekstissä useimmiten esiintyvä kirjain on R ja tiedetään, että teksti on suomea, R on varsin todennäköisesti I:n vastine, koska I on suomen kielen yleisin kirjain. Myös kirjainparien (digrammien) ja kirjainkolmikoiden (trigrammien) esiintymistiheydet voivat auttaa salakirjoituksen selvittämisessä. Suunnittele ja toteuta ohjelmakokonaisuus, joka tukee salausta ja salauksen purkua seuraavin toiminnoin: käyttäjän antamien korvaussääntöjen mukaan salakirjoitetaan annettu teksti yksinkertaisella korvaussalakirjoituksella lasketaan annetusta tekstitiedostosta yksittäisten merkkien esiintymisfrekvenssit lasketaan annetusta tekstitiedostosta peräkkäin esiintyvien merkkien muodostamien parien esiintymisfrekvenssit ehdotetaan frekvenssien perusteella yleisimmin esiintyville salakirjoitusmerkeille vastineita tulostetaan käyttäjän antamien korvaussääntöjen (arvausten) mukaan muunnettu tiedosto korvaussääntö voi koskea joko yksittäistä merkkiä tai merkkijonoa Voit olettaa, että salakirjoitettu teksti koostuu vain isoista kirjaimista ja tulostaa muunnetut merkit pienillä kirjaimilla. Näin käyttäjä voi nähdä havainnollisesti muunnoksen (muunnosten) tulokset. Suomenkielisessä tekstissä yleisimmin esiintyvät kirjaimet ovat i, t, a, e, s, n ja l. Myös digrammien ja trigrammien esiintymistaajuuksista ja muiden kielten vastaavista ominaisuuksista on olemassa tilastotietoa.
TYÖOHJE 4 2 INTERNET-LINKKIEN REKISTERIOHJELMA Tee ohjelma, jonka avulla voidaan tallettaa, selata ja ylläpitää Internet-linkkejä samaan tapaan kuin selainohjelmien suosikkilinkit toiminnossa (Favoritesvalikko MS Explorer-selaimessa). Internet-linkistä talletetaan vähintään: 1. Käyttäjän antama linkin nimi. 2. Linkin internet-osoite (URL=Uniform Resource Locator) 3. Käyttäjän antama kuvaus linkistä, max 256 merkkiä. 4. Ryhmä, jonka alle linkki halutaan tallettaa. Tämä voi olla myös ei ryhmää, vertaa selaimien toteutukseen. Ohjelman toiminnot ovat vähintään: 1. Uuden linkin lisäys. 2. Linkin tuhoaminen. 3. Linkkien selaus (=toiminto seuraava/edellinen linkki, jonka avulla käyttäjä voi löytää etsimänsä linkin ilman, että täsmälleen muistaa tai tietää linkin tietoja) 4. Linkkien tulostaminen (joko kaikki tai valittu ryhmä). Tulostus valittavissa näyttöön tai tekstitiedostoon. Ohjeita: Linkkien ryhmittelyn toteutuksessa on monta vaihtoehtoa: kiinteät ennalta määritellyt ryhmät, ryhmät määritellään erillisessä tekstitiedostossa (jota käyttäjä voi tarvittaessa editoida) tai ohjelma voi tarjota toiminnot myös ryhmien luomiseksi ja tuhoamiseksi. Jos haluat, voit toteuttaa ryhmiä myös ryhmien sisälle. Tätä ei kuitenkaan vaadita ja sen toteuttaminen vaatii hyvää C-kielen ja ohjelmoinnin rakenteiden hallintaa. Siis älä ryhdy tähän, jos tehtävä tuntuu muutenkin riittävän työläältä. Talleta linkkien tiedot pysyvästi binääritiedostoon tietueina (struct). Tämä on tehokkain ja selkein tapa ohjelmoida tiedostotalletus. Tulostuksen tiedostoon voi tehdä myös HTML-muodossa, jolloin linkkien katselu ja niihin hyppääminen on mahdollista selainohjelmilla. 3 RAJATTOMAN LUKUALUEEN LASKIN Tee laskinohjelma, joka suorittaa laskutoimituksia mielivaltaisen suurilla kokonaisluvuilla (esim. ainakin 50 numeroa pitkillä luvuilla). Periaatteessa laskenta-aluetta ei saa rajoittaa muu kuin käytettävissä oleva tietokoneen muisti.
TYÖOHJE 5 Ohjelmalla pitää pystyä suorittamaan ainakin yhteen- ja vähennyslaskuja. Ohjelman ei tarvitse ymmärtää sulkuja. Jos tehtävä tuntuu liian helpolta, voidaan laskutoimituksiin lisätä kertolasku. Tällöin ohjelman pitää myös osata laskea oikeassa järjestyksessä, eli kertolasku pitää suorittaa ennen yhteen- ja vähennyslaskua. Laskutoimitukset voidaan syöttää ohjelmalle joko vuorovaikutteisesti tai tekstitiedostona. Tekstitiedostossa pitää voida antaa kerralla monta laskutehtävää, jotka kaikki ohjelma suorittaa kun tiedosto annetaan ohjelmalle laskettavaksi. 4 RIVIPOHJAINEN TEKSTINTOIMITIN Tee rivipohjainen tekstintoimitin (editori). Ohjelmalle annetaan parametrina tiedoston nimi (tai se voidaan kysyä vasta kun ohjelma on käynnistynyt). Tiedosto luetaan sisään ja sen ensimmäinen rivi asetetaan valituksi riviksi. Tämän jälkeen ohjelma jää odottamaan komentoja. Komennot ovat seuraavat (saat itse valita niiden nimet ja esitystavat): valitun rivin tulostus ota valituksi riviksi rivi N, jossa N annetaan komennon parametrina poista valittu rivi lisää rivi ennen valittua riviä. Uudelle riville tuleva teksti annetaan komennon parametrina lisää tekstiä valitun rivin loppuun (lisättävä teksti annetaan parametrina) lisää tekstiä valitulle riville M:nnestä merkistä alkaen, jossa M ja lisättävä teksti annetaan parametrina poista valitusta rivistä K merkkiä M:nnestä merkistä alkaen (K ja M annetaan parametrina) poistu ohjelmasta - tallentaa tiedoston takaisin levylle. Periaatteesa käsiteltävien rivien pituutta ja lukumäärää saa rajoittaa vain käytettävissä oleva muisti. Ohje: Voit karsia editorin toimintoja, jos tehtävä tuntuu liian työläältä. 5 TIEDOSTON SELAUSOHJELMA Tehtävänä on kehittää ohjelma, joka avaa minkä tahansa levyllä olevan tiedoston ja joka osaa näyttää sen tiedot sekä heksadesimaalisena että ASCIImuodossa. Käyttäjältä kysytään avattavan tiedoston nimi. Tietojen lukua ja näyttämistä käyttäjä ohjaa yksinkertaisilla komennoilla seuraavasti: 1) käyttäjän pitää voida muuttaa kerralla luettavien tavujen lukumäärää
TYÖOHJE 6 2) käyttäjän pitää voida lukea tietoja tiedostossa eteen- ja taaksepäin 3) käyttäjän pitää voida lukea tietoja halutusta kohdasta Lisäksi ohjelma kertoo aina mistä kohdasta tiedostoa näytetyt tiedot ovat (sijainti tavuina tiedoston alusta). 6 C-KIELISEN OHJELMAN KATSELU INTERNET-SELAIMESSA Tee ohjelma, joka muuntaa C-kielisen ohjelman HTML-muotoon siten, että kaikki C-kielen varatut sanat näytetään lihavoituna (ja/tai käyttäjän antamalla värillä, vertaa harjoituksissa käytetty ohjelmointiympäristö). Ei pakollisena lisäpiirteenä voit ottaa huomioon myös C-kielen kommentit. Niissä voi myös esiintyä C-kielen varattuja sanoja, mutta niitä ei pidä korostaa. Sen sijaan voit korostaa kommentit kokonaisuudessaan jollakin toisella tavalla, esimerkiksi eri värillä kuin varatut sanat. Tarvittavien HTML-komentojen selvittäminen kuuluu tehtävään. Ohje: Voit tehdä ohjelmasta komentopohjaisen. Se voi esimerkiksi tuntea seuraavat komennot: Syöttötiedoston nimen antaminen. Tulostustiedoston nimen antaminen Avainsanojen korostustavan valinta (väri ja lihavointi parametreina) Kommenttien värin valinta (väri parametrina) Ajokomento 7 PROSESSIEN AJOITUKSEN SIMULOINTI Moniajokäyttöjärjestelmässä suoritetaan useita prosesseja rinnakkain. Käytännössä voidaan noudattaa ns. aikaviipaletekniikkaa, missä kukin prosessi saa vuorollaan käyttöönsä pienen aikaviipaleen prosessoriaikaa. Aikaviipale voi olla esim. 200 ms. Koska prosessien kokonaisaikatarpeet vaihtelevat, eri prosessit tarvitsevat eri määrän aikaviipaleita valmistuakseen. Prosessin läpimenoaika järjestelmässä muodostuu näin ollen prosessoriajasta ja odotteluajasta. Prosessien ajoitus eli skedulointi voi perustua lisäksi prioriteettien käyttöön: korkeampiprioriteettiset työt palvellaan aina loppuun ennen kuin aletaan palvelemaan seuraavan alemman prioriteettitason töitä. Jos järjestelmään saapuu suorituksessa olevaa työtä korkeamman prioriteetin työ, se saa seuraavan aikaviipaleen. Yhden prioriteettitason sisällä työt ovat jonossa (FIFO). Ajoitus toimii siten, että käytettyään aikaviipaleen prosessi siirtyy (siirretään) saman prioriteetin omaavien töiden jonon viimeiseksi. Tehtävänä on laatia ohjelma, jolla voit simuloida yllä esitettyä aikaviipaletekniikkaan perustuvaa prioriteettiskedulointia.
TYÖOHJE 7 Ohjelmalla on käyttöliittymä, joka antaa käyttäjälle mm. mahdollisuuden lisätä järjestelmään uusia töitä (yksi kerrallaan) ajaa järjestelmää eteenpäin aikayksikkö kerrallaan (aikayksiköksi voidaan valita aikaviipaleen pituus) 8 MUU OHJELMOINTITEHTÄVÄ Muita mahdollisia aiheita ovat mm. seuraavat 1. Interaktiivinen opetusohjelma (päässälaskutehtäviä vaikeusaste valittavissa, vieraan kielen sanakoe tms.) 2. Peli, joka voi olla esimerkiksi ventti, nopanheitto tai jatsi, jota pelataan konetta vastaan. 3. Tiedostoihin perustuva tilastointi. 4. Sanapeli ("hirsipuu") tai peli, jossa pelaajia on useampia tai opetusohjelman eri osien tilastointi. Myös omia aiheita voi mielellään ehdottaa.
TYÖOHJE 8 OHJELMOINTIOHJEITA 1. Kiinnitä huomiota vakioiden, muuttujien ja funktioiden nimeämiseen sekä funktioiden parametrointiin. Käytä samaa nimeämistapaa kaikkialla ohjelmassa ja pyri valitsemaan tarkoitusta kuvaavat ja itseään selittävät muuttujien ja parametrien nimet. Käytä yksikirjaimisia tunnuksia vain silmukkalaskureissa ja muissa vastaavissa tehtävissä. 2. Kommentoi ohjelma selkeästi: a) Funktioiden eteen kommentti, jossa kerrotaan funktion tehtävä ja kuvataan sen parametrit. b) Käytetyt tietorakenteet (muuttujat, taulukot ja tietueet = struct) kommentoidaan. Kerro tietueen käyttötarkoitus ja yksittäisten kenttien tehtävä. c) Kommentoi erikoiset ratkaisut ja yleensä ohjelmakoodin ymmärtämisen kannalta välttämättömät asiat. d) Käytettyjen ratkaisujen mahdolliset rajoitukset kommentoidaan. e) Muista, että kommentoinnin tarkoitus on auttaa toista henkilöä ymmärtämään ohjelman toiminta. Älä kuitenkaan kommentoi liikaa, vaan suunnittele kommentointi sellaista henkilöä varten joka osaa ohjelmoida C-kielellä.