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

Programmeerimiskeeled 2018/19 sügis

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

Neljas kodutöö: Puu kogumi loomine

Kirjuta immutable kahendpuu Puu alam-klassid ja kompanjonobjekt.

Implementeerida tulevad meetodid: length, lisa, iterator, apply, reverse, +=, clear ja result.

Kui meetodi argument pole mõistlik, visata erind (näiteks NoSuchElementException)

Lisatingimused:

  • reverse peab puud peegeldama: rekursiivselt ära vahetama puu parema ja vasema alampuu.
  • length peab arvutama puus olevate elementide arvu
  • kaasaantud testid ei tohi nurjuda

Kood ja testid:

import scala.collection.{AbstractSeq, SeqLike, mutable}
import scala.collection.generic.{GenericCompanion, GenericTraversableTemplate}
import scala.language.higherKinds

trait PuuOp[+A, +CC[_]] {
  def lisa[B >: A](b: B): CC[B]
}

sealed abstract class Puu[+T]
  extends AbstractSeq[T]
    with GenericTraversableTemplate[T, Puu]
    with SeqLike[T, Puu[T]]
    with PuuOp[T, Puu]
    with Equals
{
  override def companion: GenericCompanion[Puu] = Puu
}

case object Leht extends Puu[Nothing] {
  // ???
}
case class  Haru[A](vasak: Puu[A], v: A, parem: Puu[A]) extends Puu[A] {
  override def toString = s"Haru($vasak, $v, $parem)"
  // ???
}

object Puu extends GenericCompanion[Puu] {
  // ???
}



object PuuTest {
  def main(args: Array[String]): Unit = {
    val a = Puu(1,2,3)
    assert(a.length == 3)

    assert(a contains 1)
    assert(a contains 2)
    assert(a contains 3)
    assert(!(a contains 4))

    assert(a.lisa(4) contains 1)
    assert(a.lisa(4) contains 2)
    assert(a.lisa(4) contains 3)
    assert(a.lisa(4) contains 4)
    assert(!(a.lisa(4) contains 5))

    assert(a.map(_+10).length == 3)
    assert(a.max == 3)
    assert(a.sum == 6)

    val b = Haru(Haru(Leht, 1, Leht), 2, Haru(Leht, 3, Leht))
    val c = Haru(Haru(Leht, 3, Leht), 2, Haru(Leht, 1, Leht))

    assert(b.reverse == c)
  }
}
  • 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