Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Samankaltaiset tiedostot
Metodien tekeminen Javalla

Ohjelmointi 2 / 2010 Välikoe / 26.3

Taulukoiden käsittely Javalla

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

1. Kun käyttäjä antaa nollan, niin ei tulosteta enää tuloa 2. Hyväksy käyttäjältä luku vain joltain tietyltä väliltä (esim tai )

Rajapinta (interface)

1. Mitä tehdään ensiksi?

Java-kielen perusteet

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

11. Javan toistorakenteet 11.1

ITKP102 Ohjelmointi 1 (6 op)

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Java-kielen perusteita

Ohjelmointi Tunnilla 1 (5) Viikko 7 tuntitehtäviä: metodien tekeminen Javalla

ITKP102 Ohjelmointi 1 (6 op)

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Java-kielen perusteita

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin perusteet, syksy 2006

Ohjelmoinnin perusteet, kurssikoe

Ohjelmointi 2 / 2011 Välikoe / 25.3

8. Näppäimistöltä lukeminen 8.1

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Java-kielen perusteet

Ohjelmoinnin jatkokurssi, kurssikoe

1. Omat operaatiot 1.1

Metodien tekeminen Javalla

12. Javan toistorakenteet 12.1

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

58131 Tietorakenteet ja algoritmit (syksy 2015)

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Listarakenne (ArrayList-luokka)

12. Javan toistorakenteet 12.1

8. Näppäimistöltä lukeminen 8.1

Olio-ohjelmointi Javalla

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

C:\MyTemp\ohj1\ohjdemot\k2012\demot\vastaukset\demo11\PP1\TokaPisin.cs 1 using System; 2 using System.Collections.Generic; 3 using System.

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

YHTEYSSUHDE (assosiation)

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

Ohjelmointi 1 C#, kevät 2013, 2. tentti

Ohjelmointi 2, välikoe

1 Tehtävän kuvaus ja analysointi

17. Javan omat luokat 17.1

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

public static void main (String [] args)

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Tietotekniikan valintakoe

7. Näytölle tulostaminen 7.1

Mikä yhteyssuhde on?

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Taulukot. Taulukon käsittely. Tämän osan sisältö. Esimerkki. Taulukon esittely ja luonti. Taulukon alustaminen. Taulukon koko

Luokat ja oliot. Ville Sundberg

Sisältö. 2. Taulukot. Yleistä. Yleistä

11. Javan valintarakenteet 11.1

Lista luokan sisällä

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

12. Näppäimistöltä lukeminen 12.1

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Java-kielen perusteita

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

14. Hyvä ohjelmointitapa 14.1

Ohjelmoinnin perusteet, 1. välikoe

9. Periytyminen Javassa 9.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Standardi- ja tietorakenneluokkia

ITKP102 Ohjelmointi 1, syksy 2007

5. HelloWorld-ohjelma 5.1

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

11. Javan valintarakenteet 11.1

Poikkeustenkäsittely

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Ohjelmointi 1 C#, kevät 2013,

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sopimuspohjainen olio-ohjelmointi

13. Hyvä ohjelmointitapa (osa 1) 13.1

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

OHJ2k12 välikoe

4. Luokan testaus ja käyttö olion kautta 4.1

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2

Ohjelmointityö 3. Mikko Laamanen

13. Loogiset operaatiot 13.1

ITKP102 Ohjelmointi 1, syksy 2007

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Periytyminen (inheritance)

Luokan muodostimet (Constructors)

Javan GUI Scratchaajalle

Vahva koostumussuhde (Composition)

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

Transkriptio:

Tentti / 18.12 Vastaa yhteensä neljään tehtävään (huomaa että tehtävissä voi olla useita alakohtia), joista yksi on tehtävä 5. Voit siis valita kolme tehtävistä 1 4 ja tehtävä 5 on pakollinen. Vastaa JOKAISEN tehtävänumeron vastaus erilliselle konseptipaperille (joka tehtävälle eri tarkastaja). Jos vastaat kaikkiin viiteen, tarkastajilla on oikeus valita 4 huonointa vastausta. Tenttiaika 4 tuntia. 1. Java-koodi 1a). Selvitä perustellen, mitä alla oleva ohjelma tulostaa. (3 p): public class Hypercool { public static void main(string[] args) { int a = 1; int b = 1; System.out.print("1"); for (int i = 0; i < 10; i++) { System.out.print(" " + a); int d = a; a += b; b = d; 1b) Käyttäjätunnusgeneraattori. Täydennä alla oleva aliohjelma teetunnus. Huom! Koodi on pala isompaa ohjelmaa. (3 p) * Muuttaa kirjaimen käyttäjätunnukseen kelpaavaksi. * Kirjain muutetaan pieneksi ja skandeista poistetaan pisteet. * Tuntemattomat kirjaimet ja mahdolliset välimerkit korvataan * 1-merkillä. * @param c muutettava kirjain * @return käyttäjätunnukseen kelpaava kirjain * muutakirjain(' ') === '1'; * muutakirjain('2') === '1'; * muutakirjain('a') === 'a'; * muutakirjain('b') === 'b'; * muutakirjain('a') === 'a'; * muutakirjain('ä') === 'a'; * muutakirjain('ö') === 'o'; * muutakirjain('ö') === 'o'; public static char muutakirjain(char c) { final String mitka = "åäö"; final String miksi = "aao"; char lc = Character.toLowerCase(c); int i = mitka.indexof(lc); if ( i >= 0 ) return miksi.charat(i); if ( lc < 'a' ) return '1'; demot091.odt/17.12.2009 1/6

if ( lc > 'z' ) return '1'; return lc; * Aliohjelma muuttaa nimen käyttäjätunnukseksi. * Käyttäjätunnus muodostetaan yhdistämällä käyttäjän * etunimen ensimmäinen kirjain ja sukunimen ensimmäiset * seitsemän merkkiä, jolloin käyttäjätunnuksesta tulee 8 merkkiä pitkä. * Jos sukunimessä ei ole seitsemää merkkiä, sukunimi otetaan mukaan * kokonaisuudessaan. * Kirjaimet ä, ö ja å korvataan kirjaimilla a, o ja a. * Käyttäjätunnus sisältää ainoastaan pieniä kirjaimia. * @param etunimi muutettavan nimen etunimi * @param sukunimi muutettvan nimen sukunimi * @return nimien perusteella muodostettu käyttäjätunnus * teetunnus("martta","hänninen") === "mhannine" * teetunnus("åke","ek") === "aek" * teetunnus("björn","björnström") === "bbjornst" public static String teetunnus(string etunimi, String sukunimi) { /// TÄYDENNÄ TÄMÄ... 2. Matriisin transpoosi Matriisin (= 2-ulotteinen taulukko) transpoosi saadaan, kun alkuperäisin matriisin rivit muutetaan sarakkeiksi ja päinvastoin. Esimerkkejä: 5 2-8 2 7 5 1 1 4-3 12 27 transpoosi 2 4-8 -3 2 12 7 27 --------------------------------------------------- 2 5 2-4 -4 10 transpoosi 5 10 2a) Kirjoita matriisin transpoosin muodostamisesta algoritmi suomeksi. (2 p) 2b) Toteuta algoritmisi Java-kielellä. Tee siis (funktio)aliohjelma, joka palauttaa parametrina saamansa matriisin transpoosin. Matriisi annetaan ja palautetaan 2-ulotteisena taulukkona. Javadoc-kommentteja ei poikkeuksellisesti tarvitse kirjoittaa. (4 p) 3. Java-kielen rakenteesta Vastaa alla oleviin kysymyksiin lyhyesti. demot091.odt/17.12.2009 2/6

3a) Miten Java-ohjelmalle viedään parametreja komentorivillä ja miten käyttäjän antamat parametrit saadaan selville ohjelmakoodissa? (1p) 3b) Mitkä ovat oliotietotyyppisten ja alkeistietotyyppisten muuttujien erot ja yhtäläisyydet? (1p) 3c) Mitä pitää ottaa huomioon eri tietotyyppejä yhtäsuuruusoperaattorilla vertailtaessa? (1p) 3d) Mitä tarkoittaa ylivuoto ja kuinka se pitää ottaa huomioon? (1p) 3e) Minkä tietotyypin valitsisit seuraaville tiedoille? Perustele vastauksesi. Anna muuttujille myös nimi. (1p) i. mansikoiden määrä kiloina ii. henkilötunnus iii. vuosiluku iv. onko kurssilla tilaa 3f) Mitä eroa on String- ja StringBuilder-olioilla? (1p) 4. Yleistä Java-tietoa Vastaa alla oleviin kysymyksiin lyhyesti (max. sivu/vastaus) 4a) Mitä on kommentointi ja miksi koodia kannattaa kommentoida? Anna esimerkki Javadoctyylisestä kommentista aliohjelmaan joka tutkisi onko sana palindromi (sama sana luki sen kumminpäin tahansa) vai ei. (2p) 4b) Mitä toistorakenteita Java-kielessä on ja miten ne eroavat toisistaan? Anna jokaiseen mielekäs käyttökohde. (2p) 4c) Kuinka Java-koodi muuttuu suoritettavaksi ohjelmaksi? Mikä on Java-virtuaalikoneen tehtävä? Mitä hyötyä Javan virtuaalikoneesta on? (2p) 5. Rakkausprosentti - Alla esimerkki rakkausprosentin laskemisesta, eli LOVES sanan alle kirjoitetaan montako kertaa kukin kirjain löytyy tutkittavista nimistä. Sitten lukuja lasketaan pareittain yhteen uudelle riville niin kauan, että jäljellä on kaksi numeroa. Yli 9 olevat luvut muutetaan yksinumeroiseksi luvuksi summaamalla luvun numerot keskenään. demot091.odt/17.12.2009 3/6

- Varsinainen tehtävä: Lisää alla olevaan ohjelmaan puuttuva aliohjelma ja täydennä ne kohdat, joissa lukee TÄYDENNÄ siten, että syntyy toimiva rakkausprosentin laskeva ohjelma. Laita vastauspaperiin T ja numero siitä, monettako "aukkoa" täydennät (aukkojen arvot arvostelussa eivät ole yhtä suuria) (6p) - Vapaaehtoinen lisäbonus: Keksi kaksi sanaa, joilla saat maksimaalisen prosentin (1p). package tentti09; import java.util.scanner; * Ohjelma kysyy kaksi nimeä ja laskee nimien perusteella * kaksinumeroisen rakkausprosentin. Rakkausprosentti lasketaan * laskemalla "LOVES"-sanan jokaisen kirjaimen lukumäärät kummassakin * nimessä. Esimerkiksi nimissä "Lotta" ja "Esko" on yhteensä * <pre> * 1 kpl L-kirjainta * 2 kpl O-kirjaimia * 0 kpl V-kirjainta * 1 kpl E-kirjainta * 1 kpl S-kirjainta. * Suur- ja pienaakkosilla ei ole merkitystä. * Kirjaimien lukumäärät summataan vierekkäisten kirjaimien lukumäärien * kanssa yhteen, jolloin jäljelle jää neljä lukumäärää. * Jos lukumäärien summasta tulee kaksi- tai useampinumeroinen, * niin silloin luvun numerot summataan yhteen * (esimerkiksi luvusta 12 tulee 3). * Vierekkäisten kirjaimien lukumäärien summaamista jatketaan kunnes * jäljellä on kaksi lukua. Nämä kaksi lukua muodostavat rakkausprosentin. * @author Ohj1 tuntiopet * @version 16.12.2009 public class Rakkauslaskuri { Sana jonka kirjaimiin verrataan public static final String RAKKAUSSANA = "LOVES"; * Laskee yhteen luvun numerot * @param luku tutkittava luku * @return luvun numeroiden summa demot091.odt/17.12.2009 4/6

T1 T2 T3 T4 * summaanumerot(0) === 0 * summaanumerot(12) === 3 * summaanumerot(123) === 6 * summaanumerot(78) === 15 public static int summaanumerot(int luku) { int summa = 0; int n = luku; while ( n > 0 ) { summa += n % 10; n = n / 10; return TÄYDENNÄ; * Muuttaa luvun yksinumeroikseksi laskemalla luvun numerot * yhteen niin kauan että tulos on yksinumeroinen. * @param luku tutkittava luku * @return luvun numeroiden summa (aina yksi numero) * yksinumeroinensumma(1) === 1; * yksinumeroinensumma(12) === 3; * yksinumeroinensumma(123) === 6; * yksinumeroinensumma(78) === 6; public static int yksinumeroinensumma(int luku) { int tulos = luku; while ( tulos > 9 ) tulos = summaanumerot(täydennä); return tulos; * Laskee taulukon vierekkäiset luvut yhteen ja palauttaa * uuden taulukon, jossa on vierekkäisten lukujen summa. * Jos summan luvusta tulee kaksi tai useampinumeroinen, * sen numerot lasketaan yhteen kunnes se on yksinumeroinen. * @param a laskettava taulukko * @return vierekkäisten summa (yhtä lyhyempi kuin a) * Arrays.toString(laskeVierekkaisetYhteen(new int[]{1)) === "[]"; * Arrays.toString(laskeVierekkaisetYhteen(new int[]{1,1)) === "[2]"; * Arrays.toString(laskeVierekkaisetYhteen(new int[]{2,3,5)) === "[5, 8]"; public static int[] laskevierekkaisetyhteen(int[] a) { int[] a2 = new int[a.length - 1]; // Lukujen määrä vähenee aina yhdellä. for (int i = 0, j = 1; j < a.length; i++, j++) { a2[i] = yksinumeroinensumma(täydennä); return TÄYDENNÄ; demot091.odt/17.12.2009 5/6

* Laskee kuinka monta mitäkin sanan kirjainta löytyy jonosta. * @param sana jonka kirjaimia tutkitaan * @param jono josta kirjaimia etsitään * @return kirjainten lukumäärät kokonaislukutaulukossa * #import java.util.arrays; * Arrays.toString(laskeKirjaimet("apu","saapas")) === "[3, 1, 0]"; * Arrays.toString(laskeKirjaimet("apu","")) === "[0, 0, 0]"; * Arrays.toString(laskeKirjaimet("Apua","saapas")) === "[0, 1, 0, 3]"; public static int[] laskekirjaimet(string sana,string jono) { int[] a = new int[sana.length()]; for (int si = 0; si < a.length; si++) { char c = sana.charat(si); T5 int lkm = 0; for (int ji=0; ji<jono.length(); ji++) TÄYDENNÄ // jos sama kirjain paikoissa si ja ji kasvata lkm a[si] = lkm; return a; T6 * Lasketaan sanojen rakkausprosentti. * @param nimi1 * @param nimi2 * @return nimien rakkausprosentti * * laskerakkausprosentti("lotta","esko") === 86 * laskerakkausprosentti("viivi-loviisa","lasse-sylvester") === 39 TÄYDENNÄ * Lasketaan rakkausprosentti käyttäjän syötteistä * @param args ei käytössä public static void main(string[] args) { System.out.println("Ohjelma laskee kahdesta nimestä rakkausprosentin."); Scanner scan = new Scanner(System.in); System.out.print("Anna ensimmäinen nimi: "); String nimi1 = scan.nextline(); System.out.print("Anna toinen nimi: "); String nimi2 = scan.nextline(); System.out.printf("Rakkausprosenttinne on %d!%n", laskerakkausprosentti(nimi1, nimi2)); demot091.odt/17.12.2009 6/6