Tehtävän 1 arvosteluperusteet ja esimerkkiratkaisu: Täysiin pisteisiin riitti toimiva vuorovaikutteinen ohjelma, jossa oli osattu tehdä riittävät tarkistukset (ainakin nollalla jako poissuljettu). Tehtävänannon mukaisesti käyttäjän täytyi voida laskea ohjelman avulla useampia nopeuksia. Pisteytys jaoteltiin suurinpiirtein seuraavasti: Ohjelmakokonaisuus 6p Käyttäjän syöttämien arvojen tarkistukset 4p (2 per arvo) Vuorovaikutus ja toistomahdollisuus 2p Pisteitä vähennettiin tavallisimmista virheistä seuraavasti: 1 piste: - Ohjelmasilmukan lopetusehto ei toimi, tuloksena esim. ikuinen silmukka tai kertasuoritus - Muuttujia määritelty main-metodin ulkopuolella ja yritetty käyttää main-metodissa - Luokkamääritys unohtunut - Nollalla jako mahdollinen tarksituksista huolimatta (eli ajan arvoksi sallittu tarkistuksissa nolla). 2 pistettä: - Ohjelmalla ei voi laskea usemapia nopeuksia - Kun käyttäjä antaa virheellisen arvon, uutta arvoa pyydetään vain kerran tai tarkistukset eivät toimi kunnolla - Yritys viitata toisen metodin sisäiseen muuttujaan 3 pistettä: - Tarkistetaan, antoiko käyttäjä virheellisen arvon ja tulostetaan virheilmoitus, mutta ei pyydetä uutta arvoa 4 pistettä: - Käyttäjän antamia arvoja (matka ja aika) ei ole tarkistettu ollenkaan Muista pahoista syntaksi- tai ajatusvirheistä vähennettiin pisteitä harkinnan mukaan. Jos vastauksessa oli eksplisiittisesti sallittu matkan arvoksi nolla tai negatiivinen luku ja ajan arvo tarkistettiin, ei pisteitä vähennetty tarkistusten osalta. Vuorovaikutteisessa sovelluksessa olisi hyvä ilmoittaa käyttäjälle virheellisestä syötteestä, mutta virheilmoituksen puuttumisesta tarkistusten yhteydessä ei vähennetty pisteitä. Tehtävä oli yleisesti ottaen osattu hyvin, pistekeskiarvo oli 8,6. Seuraava koodinpätkä on varsin minimaalinen esimerkkiratkaisu. Tämäntapainen toimiva ohjelma riitti täysiin pisteisiin, eli aliohjelmien käyttö ei ole välttämätöntä näin pienessä ohjelmassa. public class Nopeudet { public static void main(String[] args) { double matka, aika; char jatko; System.out.println("***Sovellus nopeuksien laskemiseen***\n"); do { do { System.out.println("Anna matka kilometreinä " + "(ei negatiivinen luku): "); matka = Lue.dluku(); if (matka < 0) System.out.println("Matka ei voi olla negatiivinen."); } while (matka < 0); do { System.out.println("Anna aika tunteina " + "(positiivinen luku): "); aika = Lue.dluku(); if (aika <= 0) System.out.println("Ajan täytyy olla suurempi " + "kuin nolla."); } while (aika <= 0); System.out.println("Nopeus oli: " + matka/aika + " km/h"); System.out.println("Paina l jos haluat lopettaa, " + "muilla merkeillä jatketaan."); jatko = Lue.merkki(); } while (jatko != 'l'); } }