------------------------------------------------------------------------- Ohjelmoinnin perusteet, 13.06.2000 tehtävä 4 / Averell ------------------------------------------------------------------------- o tyhjiä 7 kpl (noin 10%), keskiarvo 8 pistettä. public class Koe04 { /* Binäärihaku, ks. kirja s. 77 */ private static int hae(int[] luvut, int haettava) { int keski, vasen = 0, oikea = luvut.length-1; do { keski = (vasen+oikea)/2; if (vasen > oikea) return -1; if (luvut[keski] == haettava) return keski; if (haettava < luvut[keski]) oikea = keski - 1; if (haettava > luvut[keski]) vasen = keski + 1; } while (true); } /* Lisäysjärjestäminen, ks. kirja s.80 */ private static void järjestä(int[] luvut) { int jemma, j; for (int i = 1; i < luvut.length; ++i) { jemma = luvut[i]; for (j = i; j > 0 && luvut[j-1] > jemma; j-- ) luvut[j] = luvut[j-1]; luvut[j] = jemma; } } private static void lue(int[] luvut) { System.out.println("Syötä " + luvut.length + " kokonaislukua"); for (int i = 0; i < luvut.length; i++) { System.out.print("Anna " + (i+1) + " luku: "); luvut[i] = Lue.kluku(); } } private static void tulosta(int[] luvut) { for (int i=0; i < luvut.length; i++) System.out.println((i+1) + ": " + luvut[i]); } public static void main(String[] args) { int[] tuhat_taulu = new int[1000]; int haettava, indeksi; char lopetus; lue(tuhat_taulu); järjestä(tuhat_taulu); tulosta(tuhat_taulu); do { System.out.print("\nAnna haettava luku: "); haettava = Lue.kluku(); indeksi = hae(tuhat_taulu, haettava); if (indeksi > -1) System.out.println("Indeksillä " + indeksi); else System.out.println("Ei löydy"); System.out.print("L = lopetus, muut = uusi haku: "); lopetus = Lue.merkki(); } while (lopetus != 'l' && lopetus != 'L'); } } // public class Koe04 4 pist: järjestäminen 4 pist: binäärihaku 5 pist: pääohjelma / muut osat Tehtävä oli osattu hyvin. Joissain ratkaisuissa paistoi ulkoaopettelun leima... Yleisiä virheitä: - keski laskettiin vain kerran ennen silmukkaan menoa - verrattiin etsittävää ja indeksiä keski, ei taulukon alkiota luvut[keski] - taulukon esittelyssä / luonnissa / viittauksessa puutteita - päättymättätön silmukka - yritetty merkkijonolle == -------------------------------------------------------------------------