Skip to content

Viikon 1 kotitehtavat

Matti Luukkainen edited this page Oct 26, 2015 · 2 revisions

1

Piirrä erilliselle A4-lapulle kuva tai tarvittaessa useampia kuvia Ohjelmoinnin perusteiden viidennen viikon tehtävän kellosta.

Huom! Tässä ja seuraavassa tehtävässä sinun ei tarvitse (eikä oikeastaan pidäkään) vielä tietää mitään UMLstä tai mistään muustakaan kuvaustekniikasta. Piirrä vain kuva, joka mielestäsi kuvastaa kelloa. Piirrokset palautetaan laskuharjoitustilaisuudessa, kirjoita piirrokseen myös opiskelijanumerosi!

Kellon ja sen "viisareina" toimivien rajoitettujen laskurien koodi seuraavassa:

public class Kello {
    private YlhaaltaRajoitettuLaskuri tunnit;
    private YlhaaltaRajoitettuLaskuri minuutit;
    private YlhaaltaRajoitettuLaskuri sekunnit;
    
    public Kello(int tunnitAlussa, int minuutitAlussa, int sekunnitAlussa) {
        // luodaan kello joka asetetaan parametrina annettuun aikaan
        tunnit = new YlhaaltaRajoitettuLaskuri(23);
        minuutit = new YlhaaltaRajoitettuLaskuri(59);
        sekunnit = new YlhaaltaRajoitettuLaskuri(59);
         
        tunnit.asetaArvo(tunnitAlussa);
        minuutit.asetaArvo(minuutitAlussa);
        sekunnit.asetaArvo(sekunnitAlussa);
    }
     
    public void etene() {
        // kello etenee sekunnilla
        sekunnit.seuraava();
        if (sekunnit.arvo() == 0) {
            minuutit.seuraava();
            if (minuutit.arvo() == 0) {
                tunnit.seuraava();
            }
        }
    }
     
    public String toString() {
        // palauttaa kellon merkkijonoesityksen
        return tunnit.toString() + ":" + minuutit.toString() + ":" + sekunnit.toString();
    }
}

public class YlhaaltaRajoitettuLaskuri {
    private int arvo;
    private int ylaraja;
 
    public YlhaaltaRajoitettuLaskuri(int ylaraja) {
        this.ylaraja = ylaraja;
        this.arvo = 0;
    }
 
    public void seuraava() {
        if (this.arvo == this.ylaraja) {
            this.arvo = 0;
        } else {
            this.arvo++;
        }
    }
 
    public int arvo() {
        return this.arvo;
    }
 
    public void asetaArvo(int uusiArvo) {
        if (uusiArvo < 0 || uusiArvo > this.ylaraja) {
            return;
        }
 
        this.arvo = uusiArvo;
    }
 
    @Override
    public String toString() {
        String etunolla = "0";
        if (this.arvo > 9) {
            etunolla = "";
        }
        return etunolla + this.arvo;
    }
}

2

Alla on pätkä Java-koodia. Piirrä kuva tai joukko kuvia jotka havainnollistavat ohjelman toimintaa. Myös tämä tehtävä palautetaan laskareissa nimellä ja opiskelijanumerolla varustettuna.

Tämän ja edellisen tehtävän kuvia ei arvostella millään tavalla, haluamme ainoastaan tietää miten opiskelijat hahmottavat ohjelmakoodin visuaalisesti.

public class Kioski {
    public Matkakortti ostaMatkakortti(String nimi) {
        Matkakortti uusiKortti = new Matkakortti(nimi);                        
        return uusiKortti;
    }
    
    public Matkakortti ostaMatkakortti(String nimi, int arvoAlussa) {
        Matkakortti uusiKortti = new Matkakortti(nimi);                      
        uusiKortti.kasvataArvoa(arvoAlussa);
        return uusiKortti;
    }       
}

public class Matkakortti {
    private String omistaja;
    private double arvo;
    private int pvm;
    private int kk;
    
    public Matkakortti(String n){
        omistaja = n;  pvm = 0;  kk = 0;  arvo = 0;
    }         
    
    public void kasvataArvoa(double kasvatus){ 
        arvo += kasvatus; 
    }
    
    public void vahennaArvoa(double vahennys){ 
        arvo -= vahennys; 
    }
    
    public double getArvo(){ 
        return arvo; 
    }   

    public void uusiAika(int p, int k){
        kk = k;
        pvm = p;
    }    
}

public class Lataajalaite {
    public void lataaArvoa(Matkakortti k, double ladattavaArvo) {
        k.kasvataArvoa(ladattavaArvo);
    }
    
    public void lataaAikaa(Matkakortti k, int pvm, int kk) {
        k.uusiAika(pvm, kk);
    }
}



public class Lukijalaite {
    private double RATIKKA = 1.5;
    private double HKL = 2.1;
    private double SEUTU = 3.5;
    
    public boolean ostaLippu(Matkakortti k, int tyyppi){
        double hinta = 0;
        if ( tyyppi == 0 ) hinta = RATIKKA;
        else if ( tyyppi ==1 ) hinta = HKL;
        else hinta = SEUTU;
                                
        if ( k.getArvo()<hinta ) return false;
        k.vahennaArvoa(hinta);
        
        return true;
    }     
}

public class Main {
    public static void main(String[] args) {
        Lataajalaite rautatietori = new Lataajalaite();
        Lukijalaite ratikka6 = new Lukijalaite();
        Lukijalaite bussi244 = new Lukijalaite();   
        
        Kioski lippuLuukku = new Kioski();
        Matkakortti artonKortti = lippuLuukku.ostaMatkakortti("Arto");

        rautatietori.lataaArvoa(artonKortti, 3);
        
        ratikka6.ostaLippu(artonKortti, 0);
        bussi244.ostaLippu(artonKortti, 2);   
    }
}