Arvutiteaduse instituut
  1. Kursused
  2. 2019/20 sügis
  3. Programmeerimiskeeled (MTAT.03.006)
EN
Logi sisse

Programmeerimiskeeled 2019/20 sügis

  • Info
  • Õppekava
  • Moodle
  • Loengud & Praksid
  • Lisamaterjalid
  • Küsi abi! (Fleep)

Kolmas Scala praktikum

Lahendage baastest0 ja baastest1.

Ülesanne 1

Saada aru järgnevast programmist.

object Prog1 {
  def liidaOption(xs: Seq[Option[Int]]): Int = {
    var s = 0
    for (x <- xs){
      x match {
        case Some(y) => s += y
        case None =>
      }
    }
    s
  }

  def liidaKorrutaEither(xs: Seq[Either[Int,Int]]): Int = 0

  def main(args: Array[String]) : Unit = {
    val x = liidaOption(
               Seq(Some(1), None, Some(2), Some(3)))
    printf("x on %d\n", x)

    val y = liidaKorrutaEither(
               Seq(Left(2), Right(3), Left(-1), Left(3)))
    printf("y on %d\n", y)
    assert(y == ((2*3)+(-1))+3)
  }
}

Eelnevas programmis implementeerida liidaKorrutaEither, kus Left väärtused liidetakse ja Right väärtused korrutatakse vahetulemusega.

Ülesanne 2

Saada aru järgnevate klasside definitsioonidest, nii et te suudate sisestada Orwelli raamatu "1984" kirje ja (näiteks) teile kõige rohekem meeldiva Indrek Hargla romaani. (Kasutades vajadusel wikipediat!) Kirjutage need Prog2-e. Vajadusel lisada "case class" ValikulineKuupäev-le,mis väljendab ainult aasta teadmist.

abstract class ValikulineKuupäev

case class Kuupäev(päev: Int, kuu: Int, aasta:Int) 
    extends ValikulineKuupäev 

case object Teadmata extends ValikulineKuupäev {}

class Autor(
    val nimi: String,
    val sünd: ValikulineKuupäev = Teadmata,
    val surm: ValikulineKuupäev = Teadmata){
  var alias : Seq[String] = Seq()
}

class Raamat(autor: Autor,
             pealkiri: String,
             avaldatud: ValikulineKuupäev) {
}

object Prog2 {
  def main(args: Array[String]): Unit = {
  }
}

Ülesanne 3

Muutke eelnevat koodi nii, et oleks võimalik eelnevalt loodud objektides autorite andmeid muuta.

Ülesanne 4

Muutes eelnevat programmi, tehke kaks implementatsiooni, millega saab väljastada 'ValikulineKuupäev' väärtust sõnena. Teadmata peaks vastama sõnele "?" ja teatud kuupäev peaks olema formaadis pp/kk/aaaa.

Nõutud versioonid:

  • nii nagu Javas seda tegema peaks ehk OOP lahendus ja
  • Haskelli moodi lahendus (pattern matching).

Ülesanne 5

Tutvuda järgneva klassi-hierarhiaga. Implementeerida kahel eri viisil koerte klassifitseerimist suuruse ning karva pikkuse järgi. Suuruse klassifitseerida sõnedega: "suur", "väike", "teadmata" ja karva pikkust: "pikk", "lühike" või "teadmata". NB! Iga koer, ka hiljem lisatu, peab saama klassifitseeritud.

  • funktsioonina "... match { case ..." kasutades
  • väljade/meetodite lisamisega klassidesse
abstract class Koer(nimi: String) 
class TšauTšau(nimi: String)   extends Koer(nimi)
class Pommerlane(nimi: String) extends Koer(nimi) 
class Taksikoer(nimi: String)  extends Koer(nimi) 
class LabradorRetriever(nimi: String) extends Koer(nimi) 

object Prog3 {
 def suurusMatch(k:Koer) : String = ???
 def karvMatch(k:Koer) : String = ???

  def main(args: Array[String]): Unit = {
      //...
  }
}
  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused