Aiheita: algoritmi ja sen tila, ensimmäisen Java-ohjelman kirjoitus, kääntäminen ja suoritus (tehtävien 1, 2 ja 3 algoritmit on itse asiassa kirjoitettu Scala-kielellä ja ne siis voi myös suorittaa tietokoneella)
var a = 1; var b = 2; var c = 3; var d = readInt a = (b-d)*a b = a+(b+(c+(d+1)*c)*b)*a a = readInt; c = readInt println(a-c) c = c+c*c println(c)
var e = 1; var s = 1; while (e < 25) { println(e); var a = s; s = e+s; e = a; }
var a = 0.0 println("töttöröö") var b = readInt var c = b; while (c>0) { var d = readInt a = a + d; c = c - 1; } if (b==0) println("heissulivei") else println(a/b);Kirjoita algoritmi uudelleen siten, että muuttujilla on nimet, joiden avulla algoritmin tehtävän voi ymmärtää helpommin! Täydennä algoritmia myös tulostusoperaatioin, jotka kertovat, mistä on kysymys. Ketä ensimmäinen parannus palvelee? Entä toinen?
public class Viisas { public static void main(String[] args) { System.out.println("Hyvää päivää!"); System.out.println("Minä olen tietokone."); System.out.println(" ========="); System.out.println("Luulethan, että olen hyvin viisas?"); } }[Sama Scalalla:
println("Hyvää päivää!") println("Minä olen tietokone.") println(" =========") println("Luulethan, että olen hyvin viisas?")]
Aiheita: aritmeettisia lausekkeita, kirjoittamista, lukemista, loogisia lausekkeita, if-lause
int i = 2, j, k = 3; double p, r = 4.3; String m, n = "Pluto", o; j = i + 10*(k+i); k = j/3; p = j/5; i = k*i/2; p = p/r/2; i++; ++i; --j; j--; p++; ++p; k += 1; r -= 100; m = n + 10 + 110; o = 10 + 100 + n; m = n + (10+100); o = (12+100) + n; m = n + (10-120); o = (100-10) + n;
Missä miehet /// ratsastaa \\\ * ei kuulu 'susien' "ulvontaa" * vaan vain lampaiden määintää... & mää'intää *
Käytä kuvaavia muuttujan nimiä ja ohjelmoi keskustelu selkeäksi. Kommentoi ohjelma ja kiinnitä muutenkin huomiota ohjelman selkeään ulkoasuun. Miksi ohjelman ulkoasun on tärkeää olla selkeä? Kenelle se on tärkeää? Miksi ohjelman tulostuksen on tärkeää olla selkeää ja helposti ymmärrettävää? Kenelle tämä on tärkeää?
int a, b, c; double p, q, r;Kirjoita looginen lauseke eli totuusarvoinen lauseke seuraaviin tapauksiin:
Aiheita: valintaa ja toistoa, if-, for-, while- ja do-lause
******** ******** ********Saat olettaa, että käyttäjä todellakin syöttää oikean tyyppisiä tietoja, kuten kaikissa kurssin tehtävissä, ellei muuta pyydetä. Mutta varaudu siihen että luvut ovat arvoltaan sopimattomia. Negatiivinen luku ei kelpaa leveydeksi tai korkeudeksi. Virhetilanteessa ohjelma antaa virheilmoituksen ja pyytää uutta lukuparia kunnes saa kelvollisen.
Tämän jälkeen ohjelma selvittää ja ilmoittaa pelin tuloksen:
Mikään ei estä kayttäjää syöttämästä eli arvaamasta samaa lukua useampaankin kertaan; tällöin sekä riski hävitä että mahdollinen voitto kasvavat.
Tehtävän ratkaisuksi riittää toteuttaa yhden luvun arvaaminen, ts. yksi pelikerta.
Satunnaisluvun väliltä 0-9 saa arvottua seuraavasti:
int koneenLuku = (int)(10*Math.random());(Ei tuota lauseketta vielä tarvitse ymmärtää, kunhan vaan käyttää...)
Toteuta tämä "käyttäjän kannalta kriittinen uhkapeliohjelma" siten, että virheellisiin syöttötietoihin varaudutaan. Syöttötiedot voivat tässä tapauksessa olla virheellisiä kahdella periaatteessa erilaisella tavalla:
Ohjelman pitää virhetilanteessa antaa virheilmoitus ja pyytää uusia lukuja kunnes saa kelvolliset.
Aiheita: metodit pääohjelman pikku apulaisina eli private static -metodit, parametrivälitystä, ensimmäinen oma olio
Sijoita metodit johonkin luokkaan ja ohjelmoi myös pääohjelma, joka havainnollistaa metodien käyttöä.
Laadi myös testipääohjelma, joka tarjoaa käyttäjälle "potenssien laskentapalvelun".
Mallinna radio luokkana Radio. Säätimet toteutetaan metodeina, eli ns. aksessoreina. Luokassa on oltava myös aksessorit, joilla radion tilaa voi tutkia. Tietorakenteet (muuttujat) pidetään tietenkin Radio-olion käyttäjältä piilossa. Niihin pääsee siis käsiksi vain säädellysti aksessoreja käyttäen. Miten virheelliset käyttöyritykset hoidetaan? Miten metodit siis toimivat, jos annetaan virheellinen voimakkuus tai kanava?
Esittele Radio-luokan käyttöä pääohjelmalla, joka "käyttää radioita". Tässä tehtävässä ei tarvitse varautua ei-numeerisiin syötteisiin. Itse asiassa syötteitä ei välttämättä tarvita lainkaan.
"Mallinnus" tässä tarkoittaa vain sitä, että säätimiä voi säätää ja niiden arvoja tutkia aksessorimetodeilla Ohjelman kytkeminen todellisen radion käyttöliittymäksi olisi ihan toinen juttu... Käytä kurssimateriaalin esimerkkiä Kuulaskuri ratkaisusi mallina.
Aiheita: luokkien määrittelyä, olioiden luontia ja käyttöä
Toteuta luokka SekuntiLaskuri:
Varusta luokka metodilla toString(), jonka ansiosta olion arvo saadaan tulostettua muodossa minuutit:sekunnit, siis esimerkiksi "7:53".
Laadi erillinen pääohjelmaluokka SekuntiLaskuri-luokan testaamiseen. Tässä pääohjelmassa ei tarvitse varautua virheellisiin syötteisiin. Itse asiassa syötteitä ei välttämättä tarvita lainkaan.
Toteuta laite luokkana MinMax, jolla on konstruktorin lisäksi seuraavat aksessorit:
Laadi luokkaan myös pääohjelmametodi, joka havainnollistaa ja esittelee luokan toimintaa. Tässä tehtävässä ei tarvitse varautua ei-numeerisiin syötteisiin. Itse asiassa syötteitä ei välttämättä tarvita lainkaan.
Huomaa ettei laitteen alkutilaa voi päätellä esimerkiksi siitä, että minimi ja maksimi olisivat nollassa. Onhan nimittäin mahdollista, että pitkälläkin mittausjaksolla lämpötila pysyttelee sitkeästi nollassa ja suurin ja pienin mitattu lämpötila todella on 0o C! Totuusarvoinen yksityinen kenttä voisi olla hyvä idea alkutilassa olon tietämiseen...
Hyvän ohjelmointityylin mukaisesti laivan tietorakenteet piilotetaan käyttäjältä, joka siis pääsee vain aksessoreilla ohjaamaan laivaa. Miten virheellisiin parametrien arvoihin tulisi suhtautua? Varusta luokka tavalliseen tapaan toString()-metodilla, jotta laivan tilan tulostaminen on vaivatonta.
Ohjelma tulostaa joka operaation jälkeen laivan tilan. Tässä tehtävässä ei tarvitse varautua numeeristen syötteiden ei-numeerisuuteen.
Aiheita: luokkia, olioita, olioita luokan kenttinä, taulukoita, etsintää, järjestelyä,
Laadi luokka Viljavarasto viljavaraston toteutukseksi. Toteuta siilot Pikkuvarasto-olioina.
Viljavaraston siilot on siis toteutettava Pikkuvarasto-olioina! Uusissa viljavarastoissa nimittäin siilot saatetaan toteuttaa uudella tekniikalla. Kun Viljavarasto on ohjelmoitu yksittäisen siilon sisäistä rakennetta tietämättä, uuteen siilotekniikkaan voidaan siirtyä ohjelmoimalla vain Pikkuvarasto-luokka uudelleen!
Esittele luokka "testipääohjelmametodilla", so. luokkaan itseensä sijoitetulla public static void main(String[] args) -metodilla, joka luo ilmentymiä luokasta ja kokeilee operaatioiden toimintaa erilaisissa tilanteissa.
Tässä tehtävässä viljavaraston siilot toteutettiin Pikkuvarasto-olioina. Näin siis jo käytössä olevaa valmista ohjelmakoodia ns. uudelleenkäytettiin. PikkuVarasto-luokka ei ehkä kuitenkaan ole kaikkein tarkoituksenmukaisin tapa toteuttaa siiloja? Millainen luokka - nimeltään vaikkapa Siilo - olisi mielestäsi mahdollisimman käyttökelpoinen juuri tämän tehtävän ratkaisussa? Miten Viljavarasto-luokan toteutus muuttuisi?
int arvottu = (int)(39*Math.random()) + 1;