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), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op)

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

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

1. Mitä tehdään ensiksi?

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

Ohjelmointi 2 / 2010 Välikoe / 26.3

13. Loogiset operaatiot 13.1

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

Ohjelmointi 1 C#, kevät 2014, tentti

Ohjelmointi 2, välikoe

ITKP102 Ohjelmointi 1 Tentti

Ohjelmointi 2 / 2011 Välikoe / 25.3

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

Ohjelmointi 1 C#, kevät 2013,

13. Loogiset operaatiot 13.1

Java-kielen perusteet

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

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

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

Python-ohjelmointi Harjoitus 2

Luento 5. Timo Savola. 28. huhtikuuta 2006

Luokan sisällä on lista

Java-kielen perusteita

Java-kielen perusteita

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

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

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

11. Javan valintarakenteet 11.1

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

Metodien tekeminen Javalla

12. Javan toistorakenteet 12.1

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

Ohjelmoinnin perusteet Y Python

Olio-ohjelmointi Syntaksikokoelma

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

Ohjelmoinnin jatkokurssi, kurssikoe

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

Java-kielen perusteet

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

12. Javan toistorakenteet 12.1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

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

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

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

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

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

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

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

Ohjelmoinnin perusteet Y Python

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

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

Olio-ohjelmointi Javalla

Apuja ohjelmointiin» Yleisiä virheitä

Listarakenne (ArrayList-luokka)

11. Javan toistorakenteet 11.1

Algoritmit 1. Demot Timo Männikkö

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

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

Ohjelmointi 1 Taulukot ja merkkijonot

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

Ohjelmoinnin peruskurssi Y1

Ohjelmointiharjoituksia Arduino-ympäristössä

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

Ohjelmoinnin perusteet, syksy 2006

Ohjelmoinnin perusteet Y Python

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

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Ohjelmoinnin perusteet Y Python

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

7. Oliot ja viitteet 7.1

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

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

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

7. Näytölle tulostaminen 7.1

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten

Tietorakenteet (syksy 2013)

16. Ohjelmoinnin tekniikkaa 16.1

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

Algoritmit 1. Demot Timo Männikkö

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Harjoitus 2 (viikko 45)

Ohjelmoinnin perusteet Y Python

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

1. Omat operaatiot 1.1

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

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

11. Javan valintarakenteet 11.1

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

Transkriptio:

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Yleistä Tentti 1 oli pistekeskiarvon (15.1) perusteella vaikeudeltaan keskitasoa, ehkä hitusen viime vuotta vaikeampi. Omasta tehtäväpaperista saa kopion Antti-Jussilta, huone C414.2. Jos en ole paikalla, laita sähköpostia tai soita 040 805 3276. Papereihin on merkitty virheet, jotka voin käydä kanssasi läpi, tarvittaessa tarkastajan kanssa. Uusintojen ajankohdat löydät kurssin Korppi-sivulta. Tehtävä Teki Keskiarvo Tarkastaja T1 153 3.4 Emma Heikura T2 155 4.2 Simo Rinne T3 153 3.7 Teemu Natunen T4 149 4.0 Emma Heikura Yht 15.1 Arvosteluasteikko Arvolause 5 24 4 21 3 18 2 15 1 12 Pistemäärä (alaraja) 1 http://users.jyu.fi/~anlakane/ohjelmointi1/tentit/2016-04-22-tentti2.pdf 1

Tehtävä 1 (6 p.) Yleiset huomiot Ensimmäinen monivalintatehtävä meni yleisesti ottaen melko hyvin ja oli suoraviivainen arvosteltava. Ehkäpä ennakko-oletusten vastaisesti tämä monivalintatehtävä oli kuitenkin pistekeskiarvon perusteella tentin vaikein. Parhaiten osattiin kohta 3 (jossa piti tunnistaa funktiolle sopiva esittelyrivi). Tehtävästä on vaikea tunnistaa selvästi eniten haasteita aiheuttanutta kohtaa, mutta ensimmäisessä ja kuudennessa kysymyksessä tehtiin hieman enemmän virheitä kuin muissa kohdissa. Lähes kaikki opiskelijat saivat tehtävästä pisteitä, mutta täysiin pisteisiin yllettiin harvoin. Vastausavain 1B 2C 3C 4D 5B 6A Pisteytys ja virheet Tehtävän pisteytys oli yksinkertainen. Oikein menneestä kohdasta myönnettiin piste, väärin menneestä nolla pistettä. Miinuspisteitä ei annettu mistään syystä. Tehtävä 2 (6 p.) Yleiset huomiot Tehtävä meni yleisesti ottaen melko hyvin. Lukujen jakojäännöksiä osattiin tutkia hyvin, mutta monella oli operaattorien merkit hukassa, joista pahimmat sekaannukset esitellään alempana. Vastauksessa piti olla luokka, jonka sisällä on pääohjelma. Muita aliohjelmia ei tarvittu. Luokka sekä pääohjelma piti olla dokumentoitu kurssilla esitettyjen dokumentaatiokäytäntöjen mukaisesti. Malliratkaisu using System; /// @author Simo Rinne /// @version 25.4.2016 /// /// Ohjelma tulostaa riveittäin luvut 1...100 siten, että kolmella /// jaollisten lukujen perään tulostetaan myös "Hip" ja viidellä 2

/// jaollisten lukujen perään "Hei". Jos luku on jaollinen kolmella /// sekä viidellä, niin luvun perään tulostetaan "HipHei". class HipHei /// Pääohjelma. public static void Main() for (int i = 1; i <= 100; i++) Console.Write(i + " "); if (i % 3 == 0) Console.Write("Hip"); if (i % 5 == 0) Console.Write("Hei"); Console.WriteLine(); // Rivinvaihto. Pisteytys ja virheet Monet olivat turhaan tarkastaneet erikseen onko luku kolmella sekä viidellä jaollinen. Tästä tuli yleensä pitkä if-ketju, josta saattoi helposti unohtua else välissä olevien if-lauseiden edestä: if (i % 3 == 0 && i % 5 == 0) Console.WriteLine(i + " HipHei"); if (i % 3 == 0) Console.WriteLine(i + " Hip"); if (i % 5 == 0) Console.WriteLine(i + " Hei"); else Console.WriteLine(i); Ongelmana tuossa on se, että kolmella sekä viidellä jaollisten lukujen kohdalla tulostuu 15 Hip 15 Hei 15 HipHei Oikeanlaisen tulosteen olisi saanut laittamalla kahden jälkimmäisen if sanan eteen else, eli näin: if (i % 3 == 0 && i % 5 == 0) Console.WriteLine(i + " HipHei"); else if (i % 3 == 0) Console.WriteLine(i + " Hip"); else if (i % 5 == 0) Console.WriteLine(i + " Hei"); else Console.WriteLine(i); 3

Vastauksissa oli aika sekaisin käytetty yhtä tai kahta &-merkkiä if-lauseiden ehdoissa. Loogisissa lauseissa ja-operaattorina on sallittua käyttää yhtä tai kahta &-merkkiä, mutta niiden toiminnassa on yksi pieni ero (jolla ei onneksi ole merkitystä tämän tehtävän kannalta). Yksittäin käytettynä se laskee kummankin puolen lopullisen arvon ja päättelee vasta sitten onko lopputulos true vai false. Kahdella &-merkillä lopputulos lasketaan minimaalisella evaluaatiolla, eli lopputulos on suoraan false, jos operaattorin vasemman puolen arvoksi tulee false. Tyhjästä paperista, tai ohjelmasta, joka ei selvästi tee mitään järkevää tuli suoraan nolla pistettä. Pisteitä vähennettiin seuraavista asioista: Jokin operaattorimerkki kirjoitettu väärin, 0.5 p. Jaollisuuden testaus tehty väärin, 1 p. Dokumentaatio puuttuu kokonaan, 1 p. Dokumentaatio puuttuu osittain tai tehty väärin, 0.5 p. Luokka tai pääohjelma puuttuu, 1 p. Ratkaisu on turhan monimutkaisesti tehty (esim. käytetty taulukkoja tai liikaa ehtoja), 1 p. Ohjelma toimii väärällä tavalla ja tulostaa jotain muuta kuin mitä sen pitäisi. Toiminnan vääryydestä riippuen 0.5 p. 2 p. (esim. rivinvaihto väärässä paikassa tai välilyönti puuttuu 0.5 p, samoja lukuja tulostetaan useasti tai Hip tai Hei tulostetaan liian monesti 1 p.) Tulostus alkaa väärällä luvulla tai päättyy väärään lukuun, 0.5 p. Nimeämiset tehty väärin (esim. luokka tai pääohjelma kirjoitettu pienellä alkukirjaimella), 0.5 p. Merkittäviä syntaksivirheitä (esim. puolipiste luokan tai pääluokan esittelyrivin päätteksi), 0.5 p. Osa oli saanut jostain käsityksen, että silmukoita käyttäessä on pakko käyttää taulukoita myös. Turhasta taulukoiden käytöstä vähennettiin pisteitä. Yleisin ongelma jaollisuuden testaamisessa oli se, että ehdossa luki vain i % 5. Tuo laskee jakojäännöksen, mutta ei itsessään kelpaa ehdoksi. Jakojäännöksestä pitää vielä tutkia onko se tasan nolla, eli i % 5 == 0. Esimerkkitulosteessa oli välilyönti numeron jälkeen. Koska sen laittamista ei erikseen vaadittu tehtävänannossa ja koska monelta se puuttui tai oli hankala tulkita onko välilyöntiä laitettu vai ei, niin päädyin lopulta siihen, että välilyönnin pois jättämisestä ei vähennetä pisteitä. Dokumentaatiosta @author ja @version merkinnät puuttuivat monelta, mutta tästä ei vähennetty pisteitä. Pienistä syntaksivirheistä, esimerkiksi yksittäisestä puuttuvasta sulusta tai satunnaisista unohtuneista puolipisteistä ei vähennetty pisteitä. Hyvin monelta puuttui alusta using System; mutta sen laittamatta jättämisestä ei vähennetty pisteitä. Hyvin pienistä virheistä dokumentaatiossa ei vähennetty pisteitä. Operaattorien merkit olivat monella hukassa. Yleisimmät virheet olivat seuraavanlaisia: 4

Ehtolauseissa ja-operaattorina käytetty jotain muuta kuin & tai && -merkkejä. Yleisin virheellinen vaihtoehto oli käyttää pilkkua. Pienempi tai yhtä suuri kuin -merkki oli kirjoitettu matemaattisessa muodossa, eli. C#-kielessä pienempi tai yhtä suuri kuin vertailu tehdään pienempi kuin - merkillä ja yhtä suuri kuin -merkillä, jotka on kirjoitettu siten, että yhtä suuri kuin -merkki on jälkimmäisenä, eli näin: <=. Yhtäsuuruuden vertailussa oli käytetty vain yhtä =-merkkiä kahden sijaan. Jakojäännöstä oli yritetty laskea jollain muulla kuin %-operaattorilla. Yleisin virheellinen vaihtoehto oli käyttää kauttaviivaa. Tehtävä 3 (6 p.) Yleiset huomiot Tehtävä meni yleisesti ottaen aika hyvin. Parhaiten osattiin Tulosta-metodi sekä tehtävän b-kohta. Eniten haasteita aiheutti eri alkioiden lisääminen uuteen listaan ja erilukujaenintaanparametrin huomioiminen. Malliratkaisu public class T3 public static void Main() int[] luvut = 1, 4, 3, 1, 1, 5, 4, 2, 10, 7 ; int erilukujaenintaan = 5; int[] eriluvut = EriLuvut(luvut, erilukujaenintaan); Tulosta(eriLuvut); /// Etsii parametrina viedystä taulukosta kaikki eri alkiot /// ja palauttaa ne taulukkona. Eri alkioita etsitään korkeintaan /// erilukujaenintaan parametrin verran. /// <param name="luvut">taulukko, josta etsitään</param> /// <param name="erilukujaenintaan">eri alkioiden maksimimäärä</param> /// <returns></returns> /// <example> /// <pre name="test"> /// int[] luvut = 1, 2, 4, 8, 1, 2, 4, 8, 10; /// String.Join(" ", T3.EriLuvut(luvut, 2)) === "1 2" /// String.Join(" ", T3.EriLuvut(luvut, 4)) === "1 2 4 8" /// String.Join(" ", T3.EriLuvut(luvut, 5)) === "1 2 4 8 10" 5

/// String.Join(" ", T3.EriLuvut(luvut, 9)) === "1 2 4 8 10" /// String.Join(" ", T3.EriLuvut(luvut, 0)) === "" /// int[] luvut2 = 1; /// String.Join(" ", T3.EriLuvut(luvut2, 1)) === "1" /// String.Join(" ", T3.EriLuvut(luvut2, 9)) === "1" /// String.Join(" ", T3.EriLuvut(luvut2, 0)) === "" /// int[] luvut3 = ; /// String.Join(" ", T3.EriLuvut(luvut3, 0)) === "" /// String.Join(" ", T3.EriLuvut(luvut3, 100)) === "" /// </pre> /// </example> public static int[] EriLuvut(int[] luvut, int erilukujaenintaan) List<int> eriluvut = new List<int>(); foreach (int luku in luvut) if (eriluvut.count < erilukujaenintaan &&!eriluvut.contains(luku)) eriluvut.add(luku); //foreach ( int luku in luvut) // // if (erilukujaenintaan <= eriluvut.count) // break; // if (eriluvut.contains(luku)) // continue; // eriluvut.add(luku); // return eriluvut.toarray(); /// Tulostaa taulukon kaikki alkiot samalle riville välilyönnillä /// eroteltuina. /// <param name="luvut">tulostettava taulukko</param> public static void Tulosta(int[] luvut) String vali = ""; foreach (int luku in luvut) Console.Write(vali + luku); vali = " "; 6

/// Etsitään taulukon pisin sana. /// <param name="sanat">käytettävä taulukko</param> /// <returns>pisin sana</returns> /// <example> /// <pre name="test"> /// string[] sanat = ; /// T3.PisinJono(sanat) === ""; /// string[] sanat2 = "kissa", "kani", "käärme"; /// T3.PisinJono(sanat2) === "käärme"; /// string[] sanat3 = "koira", "kissa", "lehmä"; /// T3.PisinJono(sanat3) === "koira"; /// </pre> /// </example> public static string PisinJono(string[] sanat) string pisin = ""; foreach (string sana in sanat) if (sana.length > pisin.length) pisin = sana; return pisin; Pisteytys ja virheet a) kohdan EriLuvut-aliohjelma (yht. 2p) Aliohjelma kommentoitu oikein, 0.5p Aliohjelman esittelyrivi ja ohjelman runko kunnossa, 0.5p Erilukujen lisääminen silmukassa uuteen listaan, 0.5p erilukujaenintaan-parametrin huomioiminen tuloksessa, 0.5p a) kohdan Tulosta-aliohjelma (yht. 1p) Aliohjelman esittelyrivi ja ohjelman runko kunnossa, 0.5p Aliohjelma tulostaa taulukon oikein, 0.5p b) kohdan PisinJono-aliohjelma (yht. 3p) Aliohjelma kommentoitu oikein, 0.5p Aliohjelman esittelyrivi ja ohjelman runko kunnossa, 1p Pisimmän sanan etsiminen silmukassa oikein, 1p Aliohjelma toimii tyhjällä taulukolla, 0.5p 7

Kokonaispisteet koostuivat yllä olevien kriteerien mukaan mutta tehtävää katsottiin myös kokonaisuutena. Mikäli aliohjemissa oli selkeitä virheitä, siitä tuli miinuspisteitä joko 0.25 tai 0.5 pistettä verran riippuen virheen vakavuudesta. Yleisimpiä huomioita EriLuvut aliohjelmassa oli, että monikaan ei ollut käyttänyt listaa vaan taulukkoa. Uuden taulukon luonnissa käytettiin monesti kokona erilukujaenintaan muuttujaa, joka ei ole täysin väärin ajateltu. Siinä ei kuitenkaan oteta silloin huomioon sitä, jos alkuperäisestä taulukosta ei löydykään tarpeeksi montaa alkioita täyttämään uutta taulukkoa. Joissakin ratkaisuissa EriLuvut aliohjelma oli toteutettu siten, että alkuperäinen taulukko järjestettiin kasvavaan järjestykseen ja siitä poimittiin alkiot uuteen taulukkoon / poistettiin ylimääräiset alkiot alkuperäisestä taulukosta. Mikäli tehtävässä meni muuttamaan alkuperäistä taulukkoa, tuli siitä pistevähennyksiä -0.5 pisteen verran. EriLuvut aliohjelman testit olivat Bonustehtävänä ja niistä sai yhden pisteen, mikäli oli testannut useampaa erilaista taulukkoa ja verrannut tulosta oikein. Monikaan ei osannut verrata tulosta ja sai tällöin vain 0.5 p. bonusosioista. Mikäli testejä oli tehnyt vain samantyyppisille testitapauksille, sai korkeintaan 0.5 p. tehtävästä. PisinJono-aliohjelma osattiin yleisesti ottaen hyvin. Joissakin vastauksissa oli mennyt taulukon indeksit sekaisin itse taulukon sisällön kanssa ja tämän seurauksena tehtävän pisteet jäivät vähäisiksi. Toinen selkeästi tässä tehtävässä esiinnoussut seikka oli aliohjelman toimiminen tyhjällä taulukolla. Useassa vastauksessa sijoitettiin heti alussa taulukon ensimmäinen alkio muuttujaan (esim. String pisin = sanat[0];) ja verrattiin jatkossa taulukon eri alkioiden pituuksia muuttujan pisin pituuteen. Mikäli taulukossa ei ole yhtään alkioita, tulisi sijoituksessa IndexOutOfRangeException. Tehtävä 4 (6 p.) Yleiset huomiot Toinen monivalintatehtävä meni yleisesti ottaen hyvin ja oli suoraviivainen arvosteltava. Tehtävästä saatiin keskimäärin enemmän pisteitä kuin ensimmäisestä monivalinnasta. Virheet jakautuivat melko tasaisesti eri kohdille, joskin kohta kaksi osoittautui muita hiukan haastavammaksi. Kaksi opiskelijaa jätti lisäksi kokonaan vastaamatta kohtaan kolme, jossa tunnistettiin luvun -15 binäärilukuesitystä. Keskimäärin tehtävästä netottiin 4 pistettä. Vastausavain 1A 2A 3A 4E 5B 6C Pisteytys ja virheet Tehtävän pisteytys oli yksinkertainen - oikein menneestä kohdasta myönnettiin piste, väärin menneestä nolla pistettä. Miinuspisteitä ei annettu mistään syystä. 8