**1.** Tee ohjelma, joka kysyy viiden tuomarin mäkihyppypisteet (käsittääkseni 0-20). Sen jälkeen ohjelma tulostaa pisteiden keskiarvon, suurimman ja pienimmän arvon ja lisäksi pisteet vielä kertaalleen. Tuloste alla. {{ java:taulukot:tuomari.jpg }} **2.** Tee ohjelma, joka kysyy todistusarvosanoja. Arvosanojen lukumäärä kysytään käyttäjältä. Arvosanat ovat kokonaislukuja 4-10. Tee ohjelmaan varmistus siitä, että arvosana on oikea. Ohjelma tulostaa syötön jälkeen tähdillä arvosanojen lukumäärän ja keskiarvon. Kuva alla. //Vihje Voit käyttää taulukkoa, jonka indeksi kuvaa arvosanaa. Siis jos käyttäjä syöttää numeron 5, niin kasvata yhdellä indeksillä olevaa lukua. (Siis suomeksi: jos käyttäjä antaa 5, niin laatikkoon, jonka otsikko on 5 laitetaan pallo. Lopuksi pallojen lukumäärä lasketaan).// {{ java:taulukot:taulukot.jpg }} **3.** Lottonumerot voidaan arpoa kahdella tavalla: - Arvotaan luku taulukkoon. Katsotaan, onko se jokin edellisistä. Mikäli on, arvotaan uusi. Mikäli ei ole, niin se käy. Tätä toistetaan kymmenen kertaa (7 ja 3 lisänumeroa). Tässä taulukon koko on kymmenen, tyyppi voisi olla int. Ratkaisu johon pitää lisätä samojen numeroiden esto. Lopullinen ratkaisu, jossa numerot järjestetään. - Arvotaan luku 1-39. Katsotaan, onko luvun osoittamassa "lokerossa" pallo. Mikäli ei ole, niin laitetaan pallo luvun osoittamaan "lokeroon". Jos on, niin arvotaan uusi luku. Tässä taulukon koko on 39, tyyppi voisi olla boolean. Toteuta arvonta kummallakin tavalla. Kummassa on helpompi tulostaa numerot suuruusjärjestyksessä? Lisää jompaan kumpaan tapaan erottelu siitä, mitkä ovat varsinaisia numeroita ja mitkä lisänumeroita. **4.** Tee ohjelma, joka järjestää taulukon numerot suuruusjärjestykseen ILMAN EDELLISESSÄ TEHTÄVÄSSÄ KÄYTETTYÄ java.util-KIRJASTOA. Käytä hyväksesi vaikka edellisessä lottotehtävässä arvottua taulukkoa. Tee ohjelma, joka kysyy käyttäjältä, montako lukua hän tahtoo syöttää. Sen jälkeen kysytään luvut ja tulostetaan ne näytölle suuruusjärjestyksessä. Lisäksi voidaan tulostaa lukujen summa ja keskiarvo. **5.** Tee ohjelma, joka kysyy käyttäjältä (vaikkapa 10) lukuja. Sen jälkeen ohjelma lajittelee luvut vaihtolajittelulla. (Vihje: voit käyttää kahta for-silmukkaa). ===== Vaihtolajittelu ===== Ensimmäistä lukua verrataan jälkimmäisiin. Jos järjestys on väärä, niin luvut vaihtavat paikkaa. Tällöin lopuksi pienin (suurin) luku tulee ensimmäiseksi. Sen jälkeen toista lukua verrataan jälkimmäisiin ja vaihdetaan järjestystä jos on tarvis. Kokeile eri lajittelualgoritmeja oheisella pääohjelmalla. import java.util.Date; class LajitteluTesti { public static void main(String[] args) { VaihtoLajittelija vaihto = new VaihtoLajittelija(); QuickSortLajittelija quick = new QuickSortLajittelija(); ShellLajittelija shell = new ShellLajittelija(); KuplaLajittelija kupla = new KuplaLajittelija(); LisaysLajittelija lisays = new LisaysLajittelija(); ValintaLajittelija valinta = new ValintaLajittelija(); int KOKO; try { KOKO = Integer.parseInt(args[0]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Voit antaa argumenttina taulukon koon. Oletus on 50."); KOKO = 50; } finally {} int[] lajiteltava = new int[KOKO]; int[] arvottu = new int[KOKO]; for (int i = 0; i < KOKO; i++) { arvottu[i] = (int)Math.rint(KOKO*Math.random()); } kopioi(arvottu, lajiteltava); /* Taulukon arvot pitää kopioida indeksi indeksiltä, koska jos annetaan komento arvottu[] = lajiteltava[] taulukoista tulee samat! (Eli jos toista taulukkoa muutetaan, niin toinenkin taulukko muuttuu! Siis jos toinen taulukko lajitellaan, niin toinenkin taulukko muuttuu lajitelluksi (ja ohjelma lajittelisi valmiiksi lajiteltuja taulukoita)!) */ System.out.println("Alkuperäinen taulukko:"); tulosta(lajiteltava); vaihto.lajittele(lajiteltava); System.out.println("Vaihtolajittelu:"); tulosta(lajiteltava); kopioi(arvottu, lajiteltava); quick.lajittele(0, KOKO - 1, lajiteltava); System.out.println("Quick-lajittelu:"); tulosta(lajiteltava); kopioi(arvottu, lajiteltava); shell.lajittele(lajiteltava); System.out.println("Shell-lajittelu:"); tulosta(lajiteltava); kopioi(arvottu, lajiteltava); kupla.lajittele(lajiteltava); System.out.println("Kuplalajittelu:"); tulosta(lajiteltava); kopioi(arvottu, lajiteltava); lisays.lajittele(lajiteltava); System.out.println("Lisäyslajittelu:"); tulosta(lajiteltava); kopioi(arvottu, lajiteltava); valinta.lajittele(lajiteltava); System.out.println("Valitalajittelu:"); tulosta(lajiteltava); } static void tulosta(int[] tulostettava) { for (int k = 0; k < tulostettava.length; k++) { System.out.print(tulostettava[k]); if (k < tulostettava.length - 1) System.out.print(","); else System.out.print("\n"); } } static void kopioi(int[] mista, int[] mihin) { for (int k = 0; k < mista.length; k++) { mihin[k] = mista[k]; } } } Osoitteesta http://java.sun.com/applets/jdk/1.1/demo/SortDemo/example1.html löytyy graafinen esimerkki lajittelelujen toiminnasta.