Helsingin yliopisto / tietojenkäsittelytieteen laitos / Ohjelmointitekniikka (Scala) / © Arto Wikla 2014

Ohjelmointitekniikka (Scala): kurssikoe 28.4.2014

Kirjoita jokaisen vastauspaperisi alkuun kurssin nimi ja kokeen päivämäärä sekä nimesi, opiskelijanumerosi ja myös allekirjoituksesi. Kokeessa mikään lähdemateriaali ei ole sallittu. Arvosana lasketaan kaavalla maksimi(koepisteet+harjoituspisteet,60/45*koepisteet). Kokeesta on saatava vähintään 23 pistettä.
  1. Oletko jo vastannut kurssikyselyyn tai lupaatko varmasti vastata kurssikyselyyn pikimmiten? Kurssipalautelomake löytyy laitoksen opiskelusivun laatikosta "Linkkejä" linkistä "Kurssipalaute". Tämäkin kohta arvostellaan ihan oikeasti! Oikeita vastauksia ovat vain myönteiset: "Olen jo vastannut", "Lupaan varmasti viimeistään huomenna vastata", jne. Rehellisyyttä toivotaan! Rehellisyysprosentteja julkistetaan kurssin pääsivulla. (1 piste)

  2. Selitä täsmällisesti ja pieniä ohjelmaesimerkkejä antaen (12 pistettä):

    1. oliokumppani (companion object) ja luokkakumppani (companion class)
    2. first-class-arvo
    3. osittain sovellettu funktio
    4. Curry-muunnos
    5. vapaa ja sidottu muuttuja
    6. pinoutuva muunnos ja määre abstract override

  3. Mitä seuraava tulostaa:
    val lista =
       for (i <- 1 to 5; j <- i to 5; if (i*j)%2 == 0) yield(i+j)
    lista.foreach(println)
    
    Miksi? Miten kaikki oikein käy? Mistä tekniikasta toisella rivillä on kysymys? Selitä tämä tekniikka ja sen käyttö. Pelkästä tulostuksesta ei saa pisteitä, mutta myös ilman oikeaa tulostusta pisteet ovat tiukassa. (10 pistettä)

  4. Mitä seuraava tulostaa:
    val l = List(1,2,3,4,5)
    val m = Array(6,7,8,9,10)
    var b = 0
    l.foreach(x => {m(b)*=x; b+=1})
    m.foreach(println)
    println(b)
    
    Miksi? Miten kaikki oikein käy? Mistä tekniikasta on kysymys neljännen rivin foreach-operaatiolle annettavassa parametrissa? Selitä tämä tekniikka ja sen käyttö. Pelkästä tulostuksesta ei saa pisteitä, mutta myös ilman oikeaa tulostusta pisteet ovat tiukassa. (10 pistettä)

  5. Kompleksiluvut voidaan ilmaista reaalilukupareina.. Merkitään z1 = (x1, y1), z2 = (x2, y2) ja z = (x, y). Aritmetiikkaa:

    Toteuta kompleksiluvut immutaabelina luokkana, jonka oliokumppani toteuttaa tehdasmetodin. Metodi toString tuottaa tulostusasun: 5.16+2.97i, -5.1-9.978i, 3.141592653589793+2.718281828459045i, jne. Anna myös esimerkkejä luokan käytöstä. (12 pistettä)