Ohjelmoinnin perusteet, syksy 1999 Korjauskertomus koetehtävästä 4 Tehtävänanto: 4. Ohjelmoi jonkin pääohjelman avuksi metodit o järjestä(int[] taulu) järjestää taulukon nousevaan järjestykseen o binHae(int[] taulu, int haettava) hakee lukua taulukosta binäärihaulla. Oikeita vastauksia löytyy mm. webbimateriaalin jaksosta 2.8 Taulukko-olioista, alakohdat Ohjelmointitekniikkaa: etsiminen taulukosta ja taulukon järjestäminen. Itse algoritmin osaamisen lisäksi oli tarkoitus osata sijoittaa nuo algoritmit metodiin oikein, esimerkiksi: public static void järjestä(int[] taulu) { } public static int binHae(int[] taulu, int haettava) {} Myös private-ratkaisu on ihan yhtä hyvä. Static vaadittiin, koska kurssilla "pääohjelmalla" on tarkoitettu main-metodia. Staticin unohtamisen on saanut anteeksi selostamalla, että metodi liittyy olioon (1 tapaus). Main-metodia ei pyydetty, mutta jokunen oli sen ohjelmoinut. Pääasiallisesti näitä en edes lukenut, paitsi silloin, kun joku oli tehnyt "erikoisen" metodinmäärittelyn (josta olisi voinut selvitä tekemällä sopivan pääohjelman). Tehtävä oli pääosin osattu erittäin hyvin. Pistesaalis jakautuu periaatteessa siten, että algoritmien osaamisesta on saanut 4 pistettä kummastakin ja implementaatiosta 7. Käytännössä kuitenkaan jako ei ole ihan näin suoraviivaista - esimerkiksi, jos henkilö vertailee indeksejä silloin kun pitäisi vertailla indeksien arvoja, on ilman telepatiaa vaikea päätellä, onko kyseessä looginen virhe vai syntaksivirhe (pisteitä moisesta menee joka tapauksessa ;)). Samoin toteuttamalla vain toisen algoritmin ei ole saanut kuin maksimissaan 9 pistettä, ei 11. Tiettyä järjestysalgoritmia ei kysytty. Vastaajat olivat suosineet vaihtojärjestämistä, mikä onkin yksinkertaisuudessaan hyvä koevastaus. Muutama kuplajärjestäminen oli seassa, hiukan useampi lisäysjärjestäminen ja joukossa 2 mergesortia, joista toinen toimi ja toinen ei. TÄRKEÄ ASIA: Moni oli toteuttanut järjestysalgoritmin metodina, joka palauttaa viitteen int[]-taulukkoon. Tästä ei ole sakotettu pisteitä (olettaen, että metodi palauttaa mitä lupaakin), mutta pistäkää merkille, että palauttaminen ei ole tarpeellista. Koska taulukko on olio, metodin tekemät muutokset siihen näkyvät tietenkin myös sen viitteen kautta, joka kutsuvalla ohjelmalla jo on taulukkoon! (Jos tässä selityksessä oli jotain epäselvää, suosittelen pohtimaan asiaa kunnes se selviää. Tämä on oikeasti oleellista.) Binäärihaun sijaan yritettiin ajoittain esittää jotakin toista hakualgoritmia. Hämmentävän paljon näkyi omituisia versioita, joissa silmukan määrittelynä oli for(int i=0; i