Koetehtävän 3a arvosteluperusteet
Tehtävä
Selitä lyhyesti, täsmällisesti ja esimerkkejä antaen
taulukkomuuttuja, taulukko-olio ja indeksointi. (9
pistettä).
Esimerkkivastaus
Taulukkomuuttuja on muuttuja, joka voi sisältää viitteen taulukko-olioon.
Taulukkomuuttujan esittelyn yhteydessä määritellään, minkä tyyppiseen
taulukko-olioon muuttuja voi sisältää viitteen. Esimerkki: int[]
a
esittelee taulukkomuuttujan, jonka nimi on a
ja jonka
arvona voi olla viite int[]
-tyyppiseen taulukko-olioon.
Taulukko-olio on olio, joka sisältää muuttujia. Muuttujien lukumäärä on
tallennettu olion int
-tyyppiseen julkiseen kenttään
length
. Muuttujilla on sama tyyppi. Jos taulukko-olion
muuttujien tyyppi on esimerkiksi int
, taulukko-olion itsensä
tyyppi kirjoitetaan int[]
. Muuttujien haluttu määrä ilmoitetaan
taulukko-olion luontilausekkeessa. Esimerkki: new int[10]
luo
uuden taulukko-olion, jonka tyyppi on int[]
ja joka sisältää 10
int
-tyyppistä muuttujaa.
Indeksointi on tapa, jolla viitataan taulukko-olion muuttujiin. Jokaista
taulukko-olion muuttujaa vastaa int
-tyyppinen arvo, jota
kutsutaan indeksiksi. Pienin indeksi nolla. Suurin indeksi on taulukon
muuttujien määrä vähennettynä yhdellä. Esimerkki: jos a
on
taulukkomuuttuja, joka sisältää viitteen vähintään yksialkioiseen
taulukko-olioon, niin a[0]
viittaa kyseisen taulukko-olion
ensimmäiseen muuttujaan.
Yleiset arvosteluperusteet
Tehtävä on pohjimmiltaan käsitteiden määrittelytehtävä. Kuten aina,
käsitteet määritellään tukeutuen yksinkertaisempiin käsitteisiin, jotka
oletetaan lukijalle tutuiksi.
Vastausta arvosteltaessa oletettiin, että lukija
- tuntee ohjelmointikielen käsitteet tyyppi, muuttuja,
metodi, olio ja kenttä,
- ymmärtää käsitteellä alkio tarkoitettavan jonkin kokonaisuuden
yksittäistä osaa ja
- tuntee käsitteen taulukko sen yleiskielisessä
merkityksessä.
Käsitettä indeksi ei oletettu tunnetuksi.
Jos vastauksessa otettiin käyttöön uusia käsitteitä - esimerkiksi
taulukon koko - ne tuli määritellä.
Vastauksissa puhuttiin usein pelkästään "taulukosta" ottamatta kantaa
siihen, tarkoitettiinko taulukkomuuttujaa, taulukko-oliota vai jotakin aivan
muuta. Arvostelija ei ryhtynyt arvailemaan sanan tarkoitusta, jos sanaa
käytettiin tulkinnanvaraisesti.
Pelkkää ohjelmakoodia ilman selostusta pidettiin liki hyödyttömänä:
lukijan ei voi olettaa pelkästä ohjelmakoodin pätkästä osaavan päätellä mikä
osa koodista vastaa mitäkin käsitettä. Toisaalta hyvin selostettu koodi
saattoi ilmaista tietoja, joita tekstissä ei suoraan sanottu, mutta jotka
olivat helposti pääteltävissä.
Pelkkää kaaviota ilman selostusta pidettiin liki hyödyttömänä: lukijan ei
voi olettaa pelkästä lokerikkokuvasta, numerojonosta ja nuolihässäkästä
osaavan päätellä mikä osa kaaviosta vastaa mitäkin käsitettä. Toisaalta hyvin
selostettu kaavio saattoi ilmaista tietoja, joita tekstissä ei suoraan
sanottu, mutta jotka olivat helposti pääteltävissä.
Väitteet muotoa "monissa kielissä on niin, että..." jätettiin
huomioimatta. Arvostelija ei ryhtynyt käymään läpi kaikkia maailman
ohjelmointikieliä selvittääkseen oliko väite totta vai oliko vastaajan
tietämyksen vajavaisuus vain puettu epämääräisyyden kaapuun.
Yksityiskohtaiset arvosteluperusteet
Oheisessa luettelossa esimerkkivastaus on pilkottu yksittäisiin tietoihin
ja kunkin tiedon viereen on merkitty paljonko kyseisen tiedon kertomisesta
vastauksessa annettiin maksimissaan pisteitä. Kunkin tiedon alla on
esimerkkejä arvostelupäätöksistä.
Jonkin luettelossa mainitun ilmaisutavan esiintyminen vastauksessa ei
automaattisesti takaa mainittua pistemäärä, sillä vastaukset arvioitiin
kokonaisuuksina. Joissakin vastauksissa oli esimerkiksi sisäisiä
ristiriitoja: kun väittää kaikkea mahdollista, jokin väite yleensä osuu
oikeaan, mutta kokonaisuutena arvioiden vastausta ei voi pitää kovin
ansiokkaana. Lisäksi muutamissa vastauksissa sekoitettiin totta ja tarua niin
omaperäisellä tavalla, ettei kyseisten vastausten suoraviivainen
arvosteleminen alla ilmenevin kategorioin ollut mahdollista.
Esimerkkivastauksen ulkopuolisten tietojen mainitsemisesta ei saanut
pisteitä eikä niiden mainitsematta jättämisestä menettänyt pisteitä.
Taulukkomuuttuja
Taulukkomuuttuja on muuttuja,
joka voi sisältää viitteen taulukko-olioon. (1 piste)
Hyväksyttiin
- "joka voi sisältää"-ilmaisun asemesta "joka sisältää", "johon voi
sijoittaa", "johon on sijoitettu", "joka voi saada arvokseen" ja "jonka
arvona on"
- vastaus, jossa puhuttiin taulukko-olion asemesta taulukosta, jos
taulukon olioisuus kävi muuten ilmi
- asian selvittäminen esimerkkiä ansiokkaasti selostamalla, kunhan
taulukkomuuttuja-käsite mainittiin
Hyväksyttiin 0,5 pisteen arvoisena
- "taulukkomuuttuja on muuttuja, joka on taulukko", jos taulukkomuuttujan
luonne kävi muuten ilmi
- "taulukkomuuttuja on muuttuja, jonka tyypiksi on määritelty taulukko",
jos taulukkomuuttujan luonne kävi muuten ilmi
- "taulukkomuuttuja on muuttuja, jota käsitellään, kun taulukkoa
käytetään", jos taulukon olioisuus ei käynyt ilmi
- "taulukkomuuttuja on muuttuja, johon voi sijoittaa taulukon" jos
taulukon olioisuus ei käynyt ilmi
- "taulukkomuuttuja edustaa taulukkotyyppistä oliota"
- "taulukkomuuttuja on viite taulukko-olioon" (muuttuja ei ole viite vaan
viitteen säilytyspaikka)
- "taulukkomuuttuja on taulukolle annettu muuttujan nimi", jos
taulukkomuuttujan luonne kävi muuten ilmi
- vastaus, jossa taulukkomuuttuja oli määritelty hyvin, mutta sen lisäksi
väitettiin virheellisesti, että myös taulukon muuttujia kutsutaan
taulukkomuuttujiksi
Hylättiin
- vastaukset, joissa oli sekoitettu taulukkomuuttuja ja taulukon
muuttujat (eli alkiot)
- vastaukset, joissa oli sekoitettu taulukkomuuttuja ja taulukko-olio,
esimerkiksi "taulukkomuuttuja on ryhmä muuttujia, jonka sisällä olevia
muuttujia käsitellään indeksin avulla"
- "taulukkomuuttuja on muuttuja, jonka arvot ovat taulukko-olion
alkioita"
- "taulukkomuuttuja muodostaa taulukon, esimerkiksi int[5]"
- "taulukkomuuttuja on taulukko-olion metodeissa esiintyvä parametri"
- "taulukkomuuttuja on olioviite eli primitiivi eli neljän byten arvo
keko-osassa muistin data-osaa jonne viitataan byte-coodista joka siis
ladataan .class-tiedostosta"
Taulukkomuuttujan esittelyn
yhteydessä määritellään, minkä tyyppiseen taulukko-olioon muuttuja voi
sisältää viitteen. (0,5 pistettä)
Hyväksyttiin
- ansiokkaasti selostettu esimerkki taulukkomuuttujan esittelystä, jos
toisaalla lisäksi selostettiin, että taulukon muuttujilla on aina sama
tyyppi
Esimerkki: int[] a
esittelee taulukkomuuttujan, jonka nimi on a
ja jonka arvona voi
olla viite int[]
-tyyppiseen taulukko-olioon. (0,5 pistettä)
Hyväksyttiin
- yleistetty esimerkki "tyyppi[] muuttujannimi"
- syntaktisesti oikeelliset ilmaisut, kun vastauksesta käy ilmi, että
koodi esittelee taulukkomuuttujan, vaikka taulukkomuuttuja-käsite
olisikin selostettu hieman virheellisesti
Hylättiin
- kaikki syntaktisesti väärät ilmaisut, esimerkiksi "int[5] a" tai
"int[5]"
- syntaktisesti oikeelliset ilmaisut, kun vastauksesta ei käy ilmi, että
koodi esittelee taulukkomuuttujan (koodi vain "sattuu" sisältämään
taulukkomuuttujan esittelyn)
- syntaktisesti oikeelliset ilmaisut, kun vastauksesta ei käy ilmi, mikä
osa koodista esittelee taulukkomuuttujan ja mikä osa koodista tekee
jotakin muuta
- vastaukset, joissa oli sekä syntaktisesti oikeellisia että vääriä
ilmaisuja
Taulukko-olio
Taulukko-olio on olio, joka
sisältää muuttujia. (1 piste)
Hyväksyttiin
- "taulukko-olio on jono/sarja/ryhmä samantyyppisiä/samankaltaisia
muuttujia"
- alkioista/soluista/lokeroista/sarakkeista/paikoista puhuminen, kun
niistä puhuttiin kuten muuttujista
- kentistä puhuminen
Hyväksyttiin 0,5 pisteen arvoisena
- alkioista/soluista/lokeroista/sarakkeista/paikoista puhuminen, kun
niistä puhuttiin kuten pelkistä arvoista (viittaaminen arvoon on kapeampi
näkökulma kuin viittaaminen arvon säilytyspaikkaan, sillä jälkimmäisessä
tapauksessa arvoa voi myös muuttaa)
- "taulukko-olio on jono/sarja/ryhmä samantyyppisiä/samankaltaisia
arvoja"
- "taulukko-olio sisältää taulukon, joka puolestaan sisältää
muuttujia"
- "taulukko-olio sisältää alkioita/soluja/lokeroita/sarakkeita/paikkoja,
joista kukin sisältää muuttujan"
- "taulukko-olio [voi] sisältää monta samaa muuttujaa"
- "taulukko-olio on muistinpätkä, joka voi sisältää keskenään
samantyyppistä tietoa, esimerkiksi int-lukuja "
- "taulukko-olio voi sisältää yhden tyypin dataa"
- "taulukko on olio, jolla on kenttinään erillisiä samoja
muuttujatyyppejä"
Hylättiin
- "taulukko on aina olio" ilman tarkempaa selitystä
- "taulukko-olio on jonkin taulukkotyypin/taulukkoluokan ilmentymä" ilman
tarkempaa selitystä
- "taulukko-olio on olio, jonka sisällä on taulukko" ilman tarkempaa
selitystä
- "taulukko-olio kokoaa yhteen samanlaisia tyyppejä"
- "taulukko-olio on oliotyyppiseksi määritelty taulukko, jonka alkiot
ovat olioita"
- "taulukko-olio on taulukko, jonka arvoina on olioita"
- "taulukko-olio on taulukossa oleva olio"
- "taulukko-olion alkioiksi voidaan sijoittaa muita taulukko-olioita tai
muuttujia"
- "taulukko-olio on pieni ohjelma, joka hakee ja palauttelee arvoja
taulukoissa"
- "taulukko-olio on taulukko-luokan ulkopuolella sijaitseva joukko
toimintoja, joita voidaan kutsua toteuttamaan taulukko-luokassa
suoritettavia operaatioita"
Muuttujien lukumäärä on
tallennettu olion int
-tyyppiseen julkiseen kenttään
length
. (0,5 pistettä)
Hyväksyttiin
- "taulukon pituuden/koon saa length-kentästä ", jos
pituus/koko-käsitteen yhteys muuttujien lukumäärään tuli selväksi
- vastaukset, joissa periaatteessa oikein selitettyä length-kenttää
väitettiin length-metodiksi tai length-komennoksi
Hylättiin
- "taulukon pituuden/koon saa length-kentästä ", jos
pituus/koko-käsitteen yhteys muuttujien lukumäärään ei tullut
selväksi
- pelkkä length-ilmaisun mainitseminen vaikkapa koodiesimerkissä ilman
selitystä ilmaisun merkityksestä
- "taulukko-olio tietää kokonsa/pituutensa"
Muuttujilla on sama tyyppi. (1
piste)
Hyväksyttiin
- "samankaltaisista/tietyn tyyppisistä muuttujista/alkioista"
puhuminen
- "keskenään samantyyppisistä tiedoista" puhuminen
- asian ilmaiseminen koodiesimerkkiä ansiokkaasti selostamalla
Hyväksyttiin 0,5 pisteen arvoisena
- "muuttujien tyyppi on sama kuin taulukon tyyppi", jos virheellisestä
ilmaisutavasta huolimatta vastaaja osoitti ymmärtävänsä asian
- vastaus, jossa on ansiokkaasti selostettuja esimerkkejä, joissa
samantyyppisyys tulee esille, vaikkei vastauksessa suoraan todeta, että
näin on välttämättä aina
- "taulukko on olio, jolla on kenttinään erillisiä samoja
muuttujatyyppejä"
Hylättiin
- "taulukko-oliolla on tyyppi ja siihen voi sijoittaa vain sen tyyppisiä
muuttujia" (taulukon tyyppi on eri asia kuin taulukon komponenttien
tyyppi; taulukko-oliossa on muuttujia, siihen ei voi sijoittaa
muuttujia)
- "taulukko-olio [voi] sisältää monta samaa muuttujaa"
Jos taulukko-olion muuttujien
tyyppi on esimerkiksi int
, taulukko-olion itsensä tyyppi
kirjoitetaan int[]
. (0,5 pistettä)
Hyväksyttiin
- asian ilmaiseminen koodiesimerkkiä ansiokkaasti selostamalla
Hylättiin
- vastaukset, joissa taulukko-olion tyypin riippuvuus taulukon muuttujien
tyypistä ei tullut selvästi selostetuksi
Muuttujien haluttu määrä
ilmoitetaan taulukko-olion luontilausekkeessa. (0,5 pistettä)
Hyväksyttiin
- taulukon pituudesta puhuminen, jos kävi ilmi, että taulukon pituudella
tarkoitetaan taulukon muuttujien määrää
- taulukon pituudesta puhuminen, jos taulukkoa luonnehdittiin jonona
muuttujia
- taulukon koosta puhuminen, jos kävi ilmi, että taulukon koolla
tarkoitetaan taulukon muuttujien määrää (eikä esimerkiksi taulukko-olioon
mahtuvan tiedon tavumäärää)
- selostukset, joissa taulukko-olioita luotiin vain alustajilla
(silloinhan määrää ei tarvitse eksplisiittisesti mainita)
- vastaus, jossa luontilauseke oli syntaktisesti virheellinen, mutta
vastauksesta kävi ilmi, että muuttujien määrä annetaan taulukko-olion
luomisen yhteydessä
Hylättiin
- pelkkä taulukko-olion luontilauseke ilman selitystä hakasulkeiden
sisällä olevan arvon merkityksestä
- vastaukset, joista voi saada sellaisen käsityksen, että muuttujien
määrä on osa taulukkomuuttujan tai taulukko-olion tyyppiä
- vastaukset, joista voi saada sellaisen käsityksen, että muuttujien
määrää voi muuttaa taulukko-olion luomisen jälkeen
Esimerkki: new
int[10]
luo uuden taulukko-olion, jonka tyyppi on int[]
ja joka sisältää 10 int
-tyyppistä muuttujaa. (0,5 pistettä)
Hyväksyttiin
- myös alustajan käyttö, jos vastaaja osoitti ymmärtävänsä, että alustaja
synnyttää olion
- yleistetty esimerkki "new tyyppi[luku]"
- esimerkki, joss oli virheellisesti käytetty isoja kirjaimia,
esimerkiksi "NEW INT[10]"
Hylättiin
- kaikki syntaktisesti väärät ilmaisut, esimerkiksi "int[3]" ja "[3]"
- virheellisesti yleistetty esimerkki, esimerkiksi "new
taulukko[taulukonkoko]"
- yleistetty, vajavaisesti selostettu esimerkki, esimerkiksi "new
taulukko[x]" jossa osan "x" merkitystä ei selostettu
- syntaktisesti oikeelliset ilmaisut, kun vastaaja ei osoita
ymmärtävänsä, että koodi luo taulukko-olion (koodi vain "sattuu"
sisältämään taulukko-olion luontilausekkeen)
- syntaktisesti oikeelliset ilmaisut, kun vastauksesta ei käy ilmi, mikä
osa koodista luo taulukko-olion ja mikä osa koodista tekee jotakin
muuta
- vastaukset, joissa oli sekä syntaktisesti oikeellisia että vääriä
ilmaisuja
Indeksointi
Indeksointi on tapa, jolla
viitataan taulukko-olion muuttujiin. (1 piste)
Hyväksyttiin
- alkioista/soluista/lokeroista/sarakkeista/paikoista puhuminen, kun
niistä puhuttiin kuten muuttujista
- "taulukon muuttujia käsitellään indeksien avulla" ansiokkaasti
selostettujen käyttöesimerkkien kera
- "indeksointi kertoo mistä taulukon jäsenestä on kyse" ansiokkaasti
selostettujen käyttöesimerkkien kera
- "indeksoinnilla tarkoitetaan sitä miten merkitään tietyn alkion paikka
taulukossa" ansiokkaasti selostettujen käyttöesimerkkien kera
- "indeksoinnin avulla jokaiseen taulukon kohtaan voidaan sijoittaa
sisältö ja se voidaan tarkistaa"
Hyväksyttiin 0,5 pisteen arvoisena
- vastaukset, joissa selostettiin, että indeksoinnilla ilmaistaan
muuttujan (tai alkion tai lokeron tai solun) numero (tai paikka
taulukossa), muttei kerrottu, mitä hyötyä tästä on
- vastaukset, joissa indeksointia kuvattiin tapana viitata arvoon:
viittaaminen arvoon on kapeampi näkökulma kuin viittaaminen arvon
säilytyspaikkaan, sillä jälkimmäisessä tapauksessa on myös mahdollista
muuttaa arvoa
- vastaukset, joissa käytettiin indeksi-käsitettä määrittelemättä sitä,
mutta käsitteen merkitys kävi selvästi ilmi
- indeksien käyttöesimerkki ansiokkaan selostuksen kera ilman
indeksointi-käsitteen täsmällistä määrittelyä
- vastaukset, joissa puhuttiin välillä indekseistä kuin ne olisivat
muuttujia eivätkä muuttujien tunnusnumeroita, mutta asia oli selvästi
ymmärretty oikein
Hylättiin
- "indeksoinnilla voidaan käydä läpi taulukon arvoja"
- "indeksointi on arvon asettamista taulukon alkiolle"
- "indeksointi on alkion paikan eli indeksin hakemista taulukossa" ilman
tarkempaa selitystä
- "indeksointi on arvon liittämistä johonkin paikkaan taulukossa"
(vastaaja tarkoitti uuden arvon asettamista taulukon alkiolle)
- "taulukon indeksi kertoo taulukon kenttien määrän"
- "indeksoinnilla taulukon alkioille määritetään indeksit"
- "indeksoinnilla listataan taulukko-olioiden alkioiden indeksit"
- "indeksointi on taulukon solujen/alkioiden
määrittelyä/määrittämistä"
- "indeksointi on asioiden järjestämistä järjestykseen"
- "indeksointi on arvojen jäsentämistä taulukkomuotoon"
Jokaista taulukko-olion
muuttujaa vastaa int
-tyyppinen arvo, jota kutsutaan indeksiksi.
(0,5 pistettä)
Hyväksyttiin
- vastaukset, joissa indeksi-käsitettä ei oltu määritelty, mutta
muuttujien parittaminen int-arvojen kanssa tuli selväksi
- kokonaisluvuista/järjestysnumeroista/numeroista puhuminen
- "taulukon alkiot on numeroitu 0...n-1 missä n on alkioiden määrä"
- "indeksointi alkaa 0, 1, 2, ..." jos kävi ilmi, että jokaista indeksiä
vastaa yksi muuttuja
- asian selviäminen implisiittisesti vaikkapa ansiokkaasti selostetusta
koodiesimerkistä
Hylättiin
- pelkkä indeksin arvoalueen minimin ja maksimin mainitseminen, ellei
käynyt ilmi, että arvoalueeseen kuuluvat nimenomaan kokonaisluvut
- "jokaisella alkiolla on oma uniikki indeksi" (ei selitä
indeksi-käsitettä muuten kuin yksilöllisyyden kannalta)
- kaaviokuva taulukosta, jossa taulukon indeksit ja muuttujat näkyivät,
mutta joita ei oltu nimetty tai selostettu indekseiksi ja muuttujiksi
Pienin indeksi nolla. (0,5
pistettä)
Hyväksyttiin
- "alkiot on indeksoitu numeroilla nollasta eteenpäin"
- "indeksointi alkaa 0, 1, 2, ..."
Hylättiin
- "taulukot alkavat nollasta"
- kaaviokuva, jossa indeksit näkyivät, mutta joita ei oltu nimetty tai
selitetty indekseiksi.
Suurin indeksi on taulukon
muuttujien määrä vähennettynä yhdellä. (0,5 pistettä)
Hyväksyttiin
- taulukon koosta tai taulukon pituudesta puhuminen, jos kävi selvästi
ilmi, että niillä tarkoitetaan taulukon muuttujien lukumäärää
- asian selviäminen implisiittisesti, esimerkiksi "muuttujat numeroidaan
peräkkäisillä kokonaisluvuilla pienimmän luvun ollessa nolla"
Hylättiin
- "suurin indeksi on taulu.length - 1" jos ei oltu selitetty mitä
ilmaisulla taulu.length tarkoitetaan
- "suurin indeksi on pituus - 1" jos ei oltu selitetty mitä pituudella
tarkoitetaan
- "alkiot on indeksoitu numeroilla nollasta eteenpäin" ellei selvinnyt
että käytettävät numerot ovat peräkkäisiä
- kaaviokuva, jossa taulukon indeksit näkyivät, mutta joita ei oltu
nimetty tai selitetty indekseiksi.
Esimerkki: jos a
on taulukkomuuttuja, joka sisältää viitteen vähintään yksialkioiseen
taulukko-olioon, niin a[0]
viittaa kyseisen taulukko-olion
ensimmäiseen muuttujaan. (0,5 pistettä)
Hyväksyttiin
- virheetön koodiesimerkki, vaikka indeksoinnin käsite olisikin selitetty
väärin
- yleistetty esimerkki "a[indeksi]" tai "muuttujannimi[indeksi]", kun
indeksin merkitys oli selitetty
Hylättiin
- kaikki syntaktisesti väärät ilmaisut
- syntaktisesti oikeelliset ilmaisut, kun vastaaja ei osoita
ymmärtävänsä, että koodi viittaa taulukko-olion muuttujaan (koodi vain
"sattuu" sisältämään muuttujaviittauksen)
- syntaktisesti oikeelliset ilmaisut, kun vastauksesta ei käy ilmi, mikä
osa koodista viittaa taulukko-olion muuttujaan ja mikä osa koodista tekee
jotakin muuta
- vastaukset, joissa oli sekä syntaktisesti oikeellisia että vääriä
ilmaisuja
- yleistetty esimerkki "a[indeksi]" tai "muuttujannimi[indeksi]", kun
indeksin merkitystä ei oltu selitetty
Pisteiden jakauma
Pisteiden jakautuminen vastauksien kesken selviää taulukosta 1. Puolet
vastauksista sai vähintään 5 pistettä, puolet alle 5 pistettä.
Taulukko 1. Pisteiden jakauma
pisteet |
osuus vastauksista (%) |
kumulatiivinen osuus vastauksista (%) |
9 |
10 |
10 |
8 |
7 |
17 |
7 |
7 |
24 |
6 |
12 |
36 |
5 |
14 |
50 |
4 |
11 |
61 |
3 |
10 |
71 |
2 |
12 |
83 |
1 |
3 |
86 |
0 |
14 |
100 |
Tehtävä © 2004 Arto Wikla.
Esimerkkivastaus ja arvosteluperusteet © 2004 Joni Salmi. Tämän
materiaalin käyttö on sallittu vain yksityishenkilöille
opiskelutarkoituksissa. Materiaalin käyttö muihin tarkoituksiin, kuten
kaupallisilla tai muilla kursseilla, on kielletty.