ITKP102 Ohjelmointi 1 (6 op)

Samankaltaiset tiedostot
ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

1. Mitä tehdään ensiksi?

Ohjelmointi 1 C#, kevät 2014, 2. uusintatentti NIMI:

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Ohjelmointi 1 C#, kevät 2013,

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

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

Ohjelmointi 1 C#, kevät 2014, tentti

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Pisteytys: Eri kommentointitavat tiedetty: 0,5 pistettä, jos puuttuu niin ei voinut saada täysiä pisteitä.

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

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmoinnin jatkokurssi, kurssikoe

1. Omat operaatiot 1.1

17. Javan omat luokat 17.1

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

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

Ohjelmointi 1 C#, kevät 2014, 1. uusintatentti NIMI:

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

17. Javan omat luokat 17.1

Ohjelmoinnin perusteet, kurssikoe

Metodien tekeminen Javalla

Olio-ohjelmointi Javalla

Algoritmit 1. Demot Timo Männikkö

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

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

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Ohjelmoinnin perusteet Y Python

Tietorakenteet (syksy 2013)

Ohjelmointi 2, välikoe

Java-kielen perusteet

Ohjelmoinnin perusteet Y Python

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet

20. Javan omat luokat 20.1

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

7. Näytölle tulostaminen 7.1

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

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 )

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

58131 Tietorakenteet ja algoritmit (syksy 2015)

Taulukot. Jukka Harju, Jukka Juslin

ITKP102 Ohjelmointi 1, syksy 2007

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

Olio-ohjelmointi Syntaksikokoelma

7. Oliot ja viitteet 7.1

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

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

Ohjelmoinnin peruskurssi Y1

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Loppukurssin järjestelyt C:n edistyneet piirteet

Ohjelmoinnin perusteet, 1. välikoe

5. HelloWorld-ohjelma 5.1

12 Mallit (Templates)

Ohjelmoinnin perusteet Y Python

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

Ohjelmoinnin perusteet Y Python

19. Olio-ohjelmointia Javalla 19.1

Ohjelmoinnin perusteet Y Python

Sisällys. 15. Lohkot. Lohkot. Lohkot

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

ITKP102 Ohjelmointi 1, syksy 2007

Java-kielen perusteet

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

15. Ohjelmoinnin tekniikkaa 15.1

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

Ohjelmoinnin perusteet Y Python

Tietotekniikan valintakoe

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

ITKP102 Ohjelmointi 1, syksy 2007

Rajapinta (interface)

Loppukurssin järjestelyt

Apuja ohjelmointiin» Yleisiä virheitä

Pong-peli, vaihe Aliohjelmakutsu laskureita varten. 2. Laskurin luominen. Muilla kielillä: English Suomi

C++11 lambdat: [](){} Matti Rintala

Algoritmit 1. Demot Timo Männikkö

Harjoitus 4 (viikko 47)

Ohjelmoinnin perusteet Y Python

Osoitin ja viittaus C++:ssa

Java-kielen perusteet

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Ohjelmassa on käytettävä funktiota laskeparkkimaksu laskemaan kunkin asiakkaan maksu. Funktio floor pyöristää luvun lähimmäksi kokonaisluvuksi.

14. Hyvä ohjelmointitapa 14.1

7/20: Paketti kasassa ensimmäistä kertaa

Ohjelmointiharjoituksia Arduino-ympäristössä

811120P Diskreetit rakenteet

8/20: Luokat, oliot ja APIt

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta Toteuta Pythonilla seuraava ohjelma:

Transkriptio:

ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 12. huhtikuuta 2019 Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä. Yksi A4-kokoinen lunttilappu on sallittu tässä tentissä. Jos tämä tentti on sinulle syksyn 2018 kurssi-instanssin uusintatentti, niin laita jokaisen vastauspaperin yläreunaan erillinen huomautus: Syksyn 2018 uusinta. 1

Tehtävä 1 (6 p.) Valitse jokaisesta kohdasta (1 6) täsmälleen yksi vaihtoehdoista (a d). Kukin kohta on yhden pisteen arvoinen. Perusteluita ei tarvitse eikä pidä kirjoittaa. 1. Mikä seuraavista väittämistä pitää paikkansa C#:ssa? (a) Muuttujan näkyvyyttä aliohjelman sisällä voi rajoittaa. (b) Samanniminen muuttuja kahdessa eri aliohjelmassa aiheuttaa käännösvirheen. (c) Muuttujan arvon muuttaminen sen näkyvyysalueen sisällä aiheuttaa käännösvirheen. (d) Mikäli for-silmukan määrittelyrivillä on alustettu i-niminen muuttuja, tulee seuraavassa for-silmukassa käyttää eri nimistä muuttujaa. 2. Mikä seuraavista väittämistä pitää paikkansa C#:ssa? Ohjelmassa voi olla... (a) vain yksi saman niminen aliohjelma. (b) useita samannimisiä aliohjelmia, joiden parametrien nimet eroavat toisistaan. (c) useita samannimisiä aliohjelmia, joilla on sama määrä parametreja, mutta niiden tyypit eroavat toisistaan. (d) useita samannimisiä aliohjelmia, joiden parametrit ovat täysin samat, mutta joiden paluuarvojen tyypit eroavat toisistaan. 3. Mikä seuraavista väittämistä pitää paikkansa C#:ssa? (a) On mahdollista, että aliohjelmakutsun argumentteina on pelkkiä aliohjelmakutsuja. (b) Jos aliohjelmassa kutsutaan toista aliohjelmaa, tulee kutsussa antaa vähintään yksi argumentti. (c) Jos aliohjelman paluuarvon tyyppi on jotain muuta kuin void, niin sillä tulee olla vähintään yksi parametri. (d) Aliohjelman parametrimuuttujan nimi täytyy olla sama kuin aliohjelmakutsun argumenttina olevan muuttujan nimi. 4. Mitä seuraava koodi tulostaa? StringBuilder sb1 = new StringBuilder("Koira"); StringBuilder sb2; sb2 = sb1; sb1 = sb1.append(" istuu"); Console.WriteLine(sb1 + " " + sb2); (a) "Koira istuu Koira" (b) "istuu istuu" (c) "Koira istuu" (d) "Koira istuu Koira istuu" 5. Mitä alla olevista vaihtoehdoista seuraa siitä, että aliohjelma on määritelty voidtyyppiseksi? 2

(a) Aliohjelmaa ei voi kuormittaa. (b) Aliohjelmalla ei ole parametreja. (c) Aliohjelmalla ei voi tehdä rekursiota. (d) Aliohjelmakutsu ei voi olla toisen aliohjelmakutsun argumenttina. 6. Mikäli funktion paluuarvon tyypiksi on määritelty double, mikä seuraavista pitää paikkansa? (a) Paluuarvo voi sisältää listan double-lukuja. (b) Paluuarvo voidaan sijoittaa int-tyyppiseen muuttujaan. (c) Mikäli funktiossa on lause return "2"; ohjelma ei käänny. (d) Funktiolle annettavan argumentin tai argumenttien tulee olla double-lukuja. Tehtävä 2 (6 p.) 1. Anna lyhyet esimerkit kolmesta erilaisesta C#:n toistorakenteesta. (1 p.) 2. Laske yhteen 8-bittiset binääriluvut 1011 1011 ja 0100 1101. Ilmoita vastaus 8- bittisenä binäärilukuna ja kymmenjärjestelmän lukuna. (1 p.) 3. Oheisen funktion pitäisi palauttaa parametrina saatujen lukujen keskiarvo. Funktiossa on kuitenkin joitain vikoja. Mainitse ainakin neljä eri asiaa, jotka vaativat korjausta, ja kerro miten ne tulee korjata. (2 p.) public static void keskiarvo(list luvut) int summa = 0; for (int i = 0; i <= luvut.length; i++) summa =+ luvut(i); return summa / luvut.length; 4. Tutki koodia Liitteessä A. Mitä pääohjelma tulostaa? (2 p.) (a) 6 (b) 14 (c) 24 (d) 36 3

Tehtävä 3 (6 p.) Valitse jokaisesta kohdasta (1 6) täsmälleen yksi vaihtoehdoista (a d). Kukin kohta on yhden pisteen arvoinen. Perusteluita ei tarvitse eikä pidä kirjoittaa. 1. Tutki koodia Liitteessä B. Mikä väittämistä pitää paikkansa? (a) Jos toinen jonoista on tyhjä merkkijono (string-olio, jossa ei ole yhtään merkkiä), ohjelma kaatuu. (b) Jos toinen jonoista on tyhjä merkkijono, tulosjonon pituus on 0. (c) Jos jonot ovat eri pituisia, tulee tulosjonon pituudeksi sama kuin lyhyemmän jonon pituus. (d) Jos jonot ovat eri pituisia, tulee tulosjonon pituudeksi jono1 ja jono2 yhteenlaskettu pituus. 2. Tutki koodia Liitteessä B. Minkä merkkijonon funktio palauttaa kutsuttaessa UusiJono("OHJ", "1");? (a) 1 (b) O1 (c) OHJ1 (d) O1H1J1 3. Mikä seuraavista väittämistä pitää paikkansa C#:ssa? (a) Aliohjelmassa voi olla enintään yksi return-lause. (b) Lause if ( c == 89) on syntaktisesti oikein. (c) Taulukon koko voi muuttua sen esittelyn jälkeen. (d) Luvun int i = 4; toinen potenssi saadaan kirjoittamalla iˆ2. 4. Mitä tulostaa Console.WriteLine((true false)&&!true 2<3);? (a) False (b) True (c) (true false)&&!true 2<3 (d) Ei mitään, ohjelma ei käänny. 5. Mikä seuraavista väittämistä pitää paikkansa C#:ssa? (a) Jos meillä on funktiokutsu F(5.2), tulee funktion F paluuarvon olla tyyppiä double. (b) Funktion paluuarvo täytyy aina sijoittaa johonkin muuttujaan. (c) Funktion paluuarvo voi olla eri tyyppiä kuin sen parametrit. (d) Funktion paluuarvon tyypin määrittämisen voi halutessaan jättää kirjoittamatta. 6. Mitä tulostaa Console.WriteLine("1"+ 5 + 6);? (a) 156 (b) 111 (c) 12 (d) Ei mitään, ohjelma kaatuu. 4

Valitse toinen seuraavista tehtävistä Valitse ja tee (vain) toinen alla olevista tehtävistä a tai b. Jos kuitenkin teet molemmat tehtävät, tenttitulokseesi huomioidaan se tehtävä josta sait vähemmän pisteitä. Dokumentaatiokommentit on näissä tehtävissä kirjoitettava XML-tageilla kurssin käytännön mukaisesti. Tehtävä 4, vaihtoehto a (6 p.) Collatzin konjektuuri on Lothar Collatzin vuonna 1937 esittämä ratkaisematon matemaattinen ongelma joka on määritelty seuraavasti: n/2, jos n on parillinen f(n) = 3n + 1, jos n on pariton. Eli jos funktiolle annetaan mikä tahansa parillinen luku, se jaetaan kahdella. Mikäli luku on pariton, kerrotaan se kolmella ja lisätään saatuun lukuun yksi. Tuloksena saadun luvun perusteella lasketaan lukujonon seuraava luku. Tätä toistetaan. Esimerkiksi jos lähdetään liikkeelle luvusta 3, päädytään ketjuun 3 10 5 16 8 4 2 1 4 2 1.... Toistaiseksi ei ole löydetty ainuttakaan lukua jonka ketju ei lopulta päättyisi edellä olevaan lukujen 4, 2 ja 1 muodostamaan ikuiseen silmukkaan. Toteuta funktio Collatz, joka ottaa parametrina yhden luvun. Tämä luku toimii lukujonon ensimmäisenä lukuna. Funktio palauttaa listan, joka sisältää tämän ensimmäisen luvun, ja kaikki lukujonon seuraavat luvut. Funktion suoritus lopetetaan, kun luku 1 tulee ensimmäisen kerran vastaan. Funktiota voi kutsua esimerkiksi seuraavasti: List<int> luvut = Collatz(3); Console.WriteLine(String.Join(" ", luvut)); Tästä saadaan tulostus: 3 10 5 16 8 4 2 1 Tehtävä 4, vaihtoehto b (6 p. + 2 p.) Tee klassista Hirsipuu-peliä varten funktio, jonka avulla voidaan näyttää alkuperäisestä lauseesta arvatut merkit. Funktion nimi on NaytaArvatut, jolla on kaksi parametria: alkuperäinen lause, joka sisältää oikean vastauksen, sekä arvatut kirjaimet, joka on joukko käyttäjän jo arvaamia merkkejä. Esimerkiksi jos funktiolle annetaan argumentteina Alkuperäinen lause: "Tulevaisuus on nyt! Oletko valmis?" Arvatut kirjaimet: a, l, o, j, t, u niin funktio palauttaa merkkijonon "Tul**a**uu* o* **t! Ol*t*o *al***?". Päätä itse parametrien tyypit ja nimet. Luokkaa tai using-lauseita ei tarvitse kirjoittaa. Voit olettaa, että arvattujen kirjainten joukko sisältää pelkästään pienaakkosia. Saat 2 bonuspistettä, mikäli erikoismerkit (kuten huutomerkit ja kysymysmerkit) sekä välilyönnit ovat aina mukana tulosjonossa yllä olevan esimerkin mukaisesti, vaikka ne eivät olisikaan arvattujen kirjainten joukossa. Kuitenkin, 6 pistettä on mahdollista saada vaikka tätä käsittelyä erikoismerkeille ei olisikaan toteutettu. Vinkki 1: String.IndexOf. Vinkki 2: Char.ToLower. 5

Liite A Luokka, using-lauseet ja dokumentaatiot on jätetty pois tilan säästämiseksi. public static void Main() int summa = HassuSumma(6, 12, 2); Console.WriteLine(summa); public static int HassuSumma(int alku, int loppu, int askel) int summa = 0; if (askel <= 0) return 0; for (int i = alku; i < loppu; i += askel) summa += i; return summa; Liite B Luokka, using-lauseet, pääohjelma ja dokumentaatiot on jätetty pois tilan säästämiseksi. public static string UusiJono(string jono1, string jono2) int pituusmin = Math.Min(jono1.Length, jono2.length); StringBuilder sb = new StringBuilder(); for (int i = 0; i < pituusmin; i++) sb.append(jono1[i]); sb.append(jono2[jono2.length - 1 - i]); return sb.tostring(); 6