Takaisin kurssin pääsivulle

Kurssikoe 4.6.

Tällä sivulla ovat kurssikokeen 4.6. tehtävät ratkaisuineen. Tehtävät voi usein ratkaista monella eri tavalla, jotka saattavat poiketa paljonkin malliratkaisuista.

Tehtävä 1

Kauppa on auki ma–pe klo 8–21, la klo 8–18 ja su klo 12–21. Tee ohjelma, joka kysyy käyttäjältä viikonpäivän lyhenteen ja tulostaa vastaavan kaupan aukioloajan.

Esimerkki 1:

Anna viikonpäivä: ti
Aukioloaika: 8-21

Esimerkki 2:

Anna viikonpäivä: la
Aukioloaika: 8-18

Ratkaisu

import java.util.*;

public class Aukioloaika {
    private static Scanner input = new Scanner(System.in);

    public static void main(String[] args) {
	System.out.print("Anna viikonpäivä: ");
	String viikonpaiva = input.nextLine();
	int alku = 8;
	int loppu = 21;
	if (viikonpaiva.equals("la")) {
	    loppu = 18;
	}
	if (viikonpaiva.equals("su")) {
	    alku = 12;
	}
	System.out.println("Aukioloaika: " + alku + "-" + loppu);
    }
}

Tehtävä 2

Tee ohjelma, joka tulostaa lähtölaskennan käyttäjän antamasta positiivisesta kokonaisluvusta nollaan asti. Mutta jos käyttäjä antaa luvun, joka on yli 20, ohjelma sanoo "En jaksa laskea!"

Esimerkki 1:

Anna luku: 7
7 6 5 4 3 2 1 0

Esimerkki 2:

Anna luku: 15
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Esimerkki 3:

Anna luku: 24
En jaksa laskea!

Ratkaisu

import java.util.*;

public class Lahtolaskenta {
    private static Scanner input = new Scanner(System.in);

    public static void main(String[] args) {
	System.out.print("Anna luku: ");
	int luku = Integer.parseInt(input.nextLine());
	if (luku <= 20) {
	    for (int i = luku; i >= 0; i--) {
		System.out.print(i + " ");
	    }
	    System.out.println();
	} else {
	    System.out.println("En jaksa laskea!");
	}
    }
}

Tehtävä 3

Tee ohjelma, joka kysyy käyttäjältä nimiä, kunnes käyttäjä antaa tyhjän merkkijonon. Sitten ohjelma tulostaa uudestaan kaikki nimet, joiden pituus on parillinen.

Esimerkki:

Anna nimi: Aino
Anna nimi: Benjamin
Anna nimi: Cecilia
Anna nimi: Daniel
Anna nimi: Elias
Anna nimi:
Parillisen pituiset:
Aino
Benjamin
Daniel

Ratkaisu

import java.util.*;

public class Parilliset {
    private static Scanner input = new Scanner(System.in);

    public static void main(String[] args) {
	ArrayList<String> nimet = new ArrayList<String>();
	while (true) {
	    System.out.print("Anna nimi: ");
	    String nimi = input.nextLine();
	    if (nimi.equals("")) {
		break;
	    }
	    if (nimi.length() % 2 == 0) {
		nimet.add(nimi);
	    }
	}
	System.out.println("Parillisen pituiset:");
	for (String nimi : nimet) {
	    System.out.println(nimi);
	}
    }
}

Tehtävä 4

DNA-ketju on merkkijono, joka muodostuu merkeistä A, C, G ja T. Tee ohjelma, joka kysyy käyttäjältä DNA-ketjun ja etsii pisimmän siinä olevan samaa merkkiä toistavan osan. Voit olettaa, että pisin toistava osa on yksikäsitteinen.

Esimerkki 1:

Anna DNA-ketju: AGCCACTC
Pisin toistava osa: CC (2 merkkiä)

Esimerkki 2:

Anna DNA-ketju: ATGGTCCCTAAAATCCCTGGTA
Pisin toistava osa: AAAA (4 merkkiä)

Ratkaisu

import java.util.*;

public class ToistavaOsa {
    private static Scanner input = new Scanner(System.in);

    public static void main(String[] args) {
	System.out.print("Anna DNA-ketju: ");
	String ketju = input.nextLine();
	int toistavaMaara = 0;
	char toistavaMerkki = 'X';
	int pisinMaara = 0;
	char pisinMerkki = 'X';
	for (int i = 0; i < ketju.length(); i++) {
	    char uusiMerkki = ketju.charAt(i);
	    if (uusiMerkki == toistavaMerkki) {
		toistavaMaara++;
	    } else {
		toistavaMerkki = uusiMerkki;
		toistavaMaara = 1;
	    }
	    if (toistavaMaara > pisinMaara) {
		pisinMaara = toistavaMaara;
		pisinMerkki = toistavaMerkki;
	    }
	}
	System.out.print("Pisin toistava osa: ");
	for (int i = 0; i < pisinMaara; i++) {
	    System.out.print(pisinMerkki);
	}
	System.out.println(" (" + pisinMaara + " merkkiä)");
    }
}

Tehtävä 5

Mitä seuraava koodi tulostaa?

String a = "Aapeli";
String b = "Maija";
a = b;
b = "Uolevi";
System.out.println(a);

Entä mitä seuraava koodi tulostaa?

ArrayList<Integer> a = new ArrayList<Integer>();
ArrayList<Integer> b = new ArrayList<Integer>();
a.add(1);
a.add(2);
b.add(3);
b.add(4);
a = b;
b.add(5);
System.out.println(a);

Ratkaisu

Ensimmäisen koodin tulostus on seuraava:

Maija

Toisen koodin tulostus on seuraava:

[3, 4, 5]

Tehtävä 6

Miksi binäärihaun käyttäminen vaatii, että taulukko on järjestyksessä?

Ratkaisu

Jos taulukko ei ole järjestyksessä, binäärihaku ei välttämättä löydä etsittävää lukua, vaikka se olisi taulukossa. Tarkastellaan esimerkiksi seuraavaa taulukkoa, kun etsittävä luku on 2:

11352

Binäärihaku tarkistaa ensin taulukon keskimmäisen luvun (3) ja hylkää sen perusteella taulukon oikean osan, koska 3 > 2. Kuitenkin luku 2 olisi nimenomaan taulukon oikeassa osassa.

Takaisin kurssin pääsivulle