ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Samankaltaiset tiedostot
ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op)

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

ITKP102 Ohjelmointi 1 (6 op)

1. Mitä tehdään ensiksi?

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

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.

Java-kielen perusteet

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

Ohjelmointi 1 C#, kevät 2013,

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Metodien tekeminen Javalla

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

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

ITKP102 Ohjelmointi 1 Tentti

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

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

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

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Ohjelmoinnin jatkokurssi, kurssikoe

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

Ohjelmointi 1 C#, kevät 2014, tentti

11. Javan toistorakenteet 11.1

Java-kielen perusteet

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

Listarakenne (ArrayList-luokka)

13. Loogiset operaatiot 13.1

Ohjelmoinnin perusteet Y Python

Algoritmit 1. Demot Timo Männikkö

Ohjelmoinnin peruskurssi Y1

17. Javan omat luokat 17.1

12. Javan toistorakenteet 12.1

13. Loogiset operaatiot 13.1

Algoritmit 1. Demot Timo Männikkö

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

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

12. Javan toistorakenteet 12.1

Ohjelmointi 2, välikoe

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

7. Oliot ja viitteet 7.1

Java kahdessa tunnissa. Jyry Suvilehto

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 )

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

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

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

7. Näytölle tulostaminen 7.1

Java-kielen perusteet

Ohjelmoinnin perusteet Y Python

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

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

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Ohjelmoinnin perusteet Y Python

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

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 Taulukot ja merkkijonot

17. Javan omat luokat 17.1

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Ohjelmoinnin perusteet Y Python

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

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

1. Omat operaatiot 1.1

Ohjelmoinnin perusteet, kurssikoe

Ohjelmointiharjoituksia Arduino-ympäristössä

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Olio-ohjelmointi Javalla

Java-kielen perusteita

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Ohjelmoinnin perusteet Y Python

Ehto- ja toistolauseet

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Taulukot. Jukka Harju, Jukka Juslin

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

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

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmoinnin perusteet Y Python

Javan perusteita. Janne Käki

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Olio-ohjelmointi Syntaksikokoelma

Java-kielen perusteita

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Taulukoiden käsittely Javalla

Ohjelmoinnin perusteet Y Python

Java-kielen perusteita

C++ rautaisannos. Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout:

Transkriptio:

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti Tentaattori: Antti-Jussi Lakanen 8. kesäkuuta 2018 Yleistä Tentti 1 meni pistekeskiarvon (11.2) perusteella välttävästi. Omasta tehtäväpaperista saa kopion Antti-Jussilta, huone C414.2. Jos en ole paikalla, laita sähköpostia tai soita 040 805 3276. Uusintojen ajankohdat löydät kurssin Korppi-sivulta. Tehtävä Teki Keskiarvo Keskihajonta Tarkastaja T1 23 3.35 0.89 Oscar Calderón T2 20 2.48 1.60 Oscar Calderón T3 22 2.55 1.82 Oscar Calderón T4 21 2.84 2.21 Oscar Calderón Yht 11.2 6.5 Arvosteluasteikko Arvolause Pistemäärä (alaraja) 5 24 4 21 3 18 2 15 1 12 1 http://users.jyu.fi/~anlakane/ohjelmointi1/tentit/2018-06-08-tentti3.pdf 1

Tehtävä 1 (6 p.) Ensimmäinen tehtävä oli kuusiosainen teoriatehtävä, ja tämä tehtävä meni tästä tentistä parhaiten. E-kohdan tehtävänannossa oli virhe, joka otettiin huomioon arvostelussa. a-kohdassa kysyttiin == ja = operaattorien eroa sekä pyydettiin käyttöesimerkki molemmista. == on vertailuoperaattori, kun taas = on sijoitusoperaattori. Tämä kohta osattiin pääosin hyvin. b-kohdassa piti selittää return-lauseen käyttöä. Useimmat tiesivät, että funktiosta palautetaan arvo return-lauseella (0.75 p.). Harvempi mainitsi sen käytön voidaliohjelmissa, joka vaadittiin myös täyden pisteiden saamiseksi (0.25 p.). c-kohdassa piti kertoa while ja do-while silmukoiden ero. Kohta osoittautui muita hankalammaksi. do-while-silmukka eroaa while-silmukasta siinä, että do-while-silmukassa ilmoitetaan ensiksi lauseet (mitä tehdään) ja vasta sen jälkeen ehto (kauanko tehdään). Tämän takia do-while -silmukka suoritetaankin aina vähintään yhden kerran. d-kohdassa annettiin kaksi kokonaislukua joita vertailtiin. Sen ensimmäinen ja suurin haaste oli ymmärtää, että kysyttiin totuusarvoa. Lauseke sieveni muotoon 2 < 2, jonka arvo on false. Myös epätosi hyväksyttiin oikeaksi vastaukseksi. e-kohdassa tehtävänannossa oli virhe. Tehtävänannon piti kuulua seuraavasti: Mikä on lausekkeen 28 / 6 arvo C#-kielessä? Entä lausekkeen 28 % 6? ("Arvo-sana puuttui alkuperäisestä tehtävänannosta.) Molemmissa vastaus on 4. Ensimmäinen on kokonaislukujen jakolasku 28 jaettuna kuudella. Sen vastaus on 4, sillä kokonaislukujen jakolaskun tulos C#-kielessä on kokonaisluku; desimaaliosa yksinkertaisesti leikkautuu pois. Jälkimmäinen on jakojäännös. Vastausten oikeellisuutta arvioitiin sen kysymyksen mukaan, johon tenttijä oli pyrkinyt vastaamaan. Tapauksia oli yllä mainitun lisäksi kysymys: Mitä / ja % tekevät C# kielessä. Pisteen sai myös huomauttamalla tehtävänannon virheestä. f-kohdassa kysyttiin dynaamisten ja ja staattisten tietorakenteiden yhtäläisyyksiä ja eroja. Tähän oltaisiin hyväksytty monenlaista, mutta vastaukset olivat liiankin lyhyitä. Yleensä oli sanottu korkeintaan kaksi asiaa. Molempiin voi tallentaa erilaisia tietorakenteita. Staattisten tietorakenteiden kokoa ei voi muuttaa niiden luomisen jälkeen. Jos dynaamisesn tietorakenteen keskeltä poistaa alkion, niin sen jälkeen tulevien alkioiden indeksi voi muuttua. Staattisten koko määräytyy alussa. Dynaamisen tietorakenteen koko voi muuttua Tehtävä 2 (6 p.) Tämä kokeen vaikein tehtävä. Tehtävänä oli tehdä funktio, joka kääntää annetun merkkijonon. Yleisesti funktion toteutusta ei oltu osattu lainkaan. Puolet pisteistä oli tarjolla aivan funktion perusasioista: paluuarvo, esittelyrivi, parametrin ottaminen; mutta nämäkään asiat eivät olleet yleisesti hallussa. 2

Mallivastaus public static string KaannaJono(string kaannettava) StringBuilder kaannetty = new StringBuilder(); for (int i = 0; i < kaannettava.length; i++) kaannetty.append(kaannettava[kaannettava.length - i - 1]); return kaannetty.tostring(); Pisteytys funktion esittelyrivissä paluuarvona string 1 p. parametrina string-tyyppinen muuttuja 1 p. funktio palautti string-tyyppisen arvon 1 p. luotiin StringBuilder-olio, johon yritettiin kääntää merkkijonoa 1 p. yritettiin kääntää merkkijonoa silmukassa 1 p. funktio käänsi merkkijonon 1 p. toteutus oikein, mutta luotiin olioita silmukan jokaisella kierroksella -1 p. palautettiin StringBuilder-olio -0.5 p. Tehtävänantoon ei kuulunut pääohjelman eikä luokan toteuttaminen eikä niitä huomioitu arvostelussa. Tehtävä 3 (6 p.) Kolmannessa tehtävässä piti tehdä keskiarvoja laskeva funktio kolmella parametrilla: Taulukko, josta keskiarvoja lasketaan; alaraja, joita pienempiä arvoja ei oteta huomioon; yläraja, johon keskiarvon laskeminen lopetetaan. Funktion esittelyrivi oli annettu tehtävänannossa. Mallivastaus /// Funktio laskee taulukon alarajan ylittävien ja ylärajan alittavien /// lukujen keskiarvon. Jos yläraja tulee vastaan, niin laskeminen /// lopetetaan siihen paikkaan. /// <param name="taulukko">taulukko, jonka alkioiden keskiarvoa /// lasketaan</param> 3

/// <param name="alaraja">vain tätä suuremmat luvut huomioidaan /// keskiarvossa</param> /// <param name="ylaraja">jos tämä tulee vastaan, niin laskeminen /// lopetetaan ja palautetaan edeltävien lukujen keskiarvo</param> /// <returns>keskiarvo</returns> public static double Keskiarvo(double[] luvut, double alaraja, double ylaraja) double summa = 0; int lukumaara = 0; for (int i = 0; i < luvut.length; i++) if (luvut[i] <= alaraja) continue; if (luvut[i] >= ylaraja) break; summa += luvut[i]; lukumaara++; if (lukumaara == 0) return alaraja; return summa / lukumaara; Yleisiä virheitä Saatu summa oli jaettu taulukon pituudella. Funktio ei palauttanut arvoa. Funktiota ei oltu dokumentoitu. Pisteytys Taulukon alkiot osattu laskea yhteen 1p Keskiarvo oli laskettu 1p Dokumentaatio oikein 1p Funktio palautti luvun 1p Alaraja huomioitu 1p Yläraja huomioitu 1p Keskiarvon laskeminen perustui taulukon pituuteen -0.5p Tehtävä 4 (6 p.) Neljännessä tehtävässä piti tulostaa suurin käyttäjän antamasta kolmesta kokonaisluvusta. Console.ReadLine- ja int.parse-funktiot oli annettu tehtävänannossa ohjeina. 4

Tehtävätyyppi oli tuttu edellisestä uusintatentistä ja ehkäpä siksi sujui ohjelmointitehtävistä parhaiten. Vaikka suurinta lukua on kurssilla etsitty jo ennen taulukoita ja silmukoita niin ne tarjoavat luonnollisemman tavan tehtävän ratkaisuun. Mallivastaus kuitenkin näyttää tehtävän suorittamisen tentissä yleisemmin käytetyllä menetelmällä (ilman silmukoita ja listoja) ja bonus-tehtävän mallivastaus näyttää, miten sama tehtäisiin silmukalla ja listalla. Vapaaehtoista bonusta ei oltu juurikaan tehty. Mallivastaus using System; /// Ohjelma kysyy käyttäjältä kokonaislukuja ja tulostaa niistä suurimman. public class SuurinLuku /// Pääohjelma kerää käyttäjän luvut public static void Main() Console.WriteLine("Anna ensimmäinen luku"); string luku = Console.ReadLine(); int eka = int.parse(luku); Console.WriteLine("Anna toinen luku"); luku = Console.ReadLine(); int toka = int.parse(luku); Console.WriteLine("Anna kolmas luku"); luku = Console.ReadLine(); int kolmas = int.parse(luku); Console.WriteLine("Suurin luku on " + SuurinKolmesta(eka, toka, kolmas)); /// Funktio palauttaa suurimman parametreina saaduista luvuista. /// <param name="eka">ensimmäinen luku</param> /// <param name="toka">toinen luku</param> /// <param name="kolmas">kolmas luku</param> /// <returns></returns> public static int SuurinKolmesta(int eka, int toka, int kolmas) int isoin = eka; if (isoin < toka) isoin = toka; if (isoin < kolmas) isoin = kolmas; return isoin; 5

Yleisiä virheitä Syntaksivirheet esimerkiksi kaksoisvertailu if (eka < toka > kolmas) ReadLine-funktion paluuarvoa ei tallennettu muuttujaan. int.parse-funktion tulosta ei tallennettu muuttujaan Pisteytys Syötteiden lukeminen 1p Syötteiden parsetus 1p Suurimman luvun selvittäminen 3p Suurimman luvun tulostaminen 1p sisäkkäiset if-lauseet -1p if (a < b && b < c) -rakenteita kohdeltiin kuten sisäkkäisiä if-lauseita. Bonus mallivastaus using System; using System.Collections.Generic; /// Ilmoittaa, mikä käyttäjän antamista luvuista on suurin. public class SuurinLuku /// Kysytään lukuja, kunnes tulee tyhjä merkkijono public static void Main() string lukujonona; List<int> luvut = new List<int>(); for (int i = 1; ; i++) Console.WriteLine("Anna " + i + ". luku tai paina Enteriä"); lukujonona = Console.ReadLine(); if (lukujonona.length < 1) break; luvut.add(int.parse(lukujonona)); Console.Write("Suurin annetuista luvuista on "); Console.Write(SuurinKaikista(luvut)); 6

/// Etsii listan suurimman alkion. /// <param name="luvut">lista, jonka alkioita tutkitaan</param> /// <returns>suurin alkio</returns> private static int SuurinKaikista(List<int> luvut) int suurin = int.minvalue; foreach (var luku in luvut) if (suurin < luku) suurin = luku; return suurin; 7