[NBD] Ćwiczenia 1

EDIT: Rozwiązanie zadania 7 zmienione na wersję używającą 'case class’ – zgodnie z wykładem.

Rozwiązanie, zawiera komentarze, więc nie oddawać bez czytania i zrozumienia, bo jak się o coś zapyta to z kodu nie ma szans zrozumieć jak to działa:

import scala.collection.mutable.ListBuffer

object Lab1 {
  def main(args: Array[String]): Unit =
  {
    val days = List("Poniedzialek", "Wtorek", "Sroda", "Czwartek", "Piatek", "Sobota", "Niedziela")

    // 1 A
    var ret = ""
    for (day <- days) {
      ret += day + "\n"
    }
    println("1 A")
    println(ret)

    // 1 B
    ret = ""
    for (day <- days) {
      if (day.startsWith("P")) {
        ret += day + "\n"
      }
    }
    println("1 B")
    println(ret)

    // 1 C
    ret = ""
    days.foreach { day => ret += day + "\n" }
    println("1 C")
    println(ret)

    // 1 D
    ret = ""
    var i = 0
    while (i < days.length) {
      ret += days(i) + "\n"
      i += 1
    }
    println("1 D")
    println(ret)

    // 1 E
    println("1 E")
    println(generateList(days, ""))

    // 1 F
    println("1 F")
    println(generateListReverse(days, ""))

    // 1 G
    println("1 G left")
    println(days.foldLeft("")(_ + "\n" + _ ))
    println("1 G right")
    println(days.foldRight("")(_ + "\n" + _))

    // 1 H
    println("1 H")
    println(days.foldRight("\n") { (element, input) => if (element.startsWith("P")) input + element+ "\n" else input })

    // 2
    val priceMap = Map("Jablko" -> 100, "Pomidor" -> 200)

    println("2")
    println(priceMap.map({case(a,b) => a -> b * 0.9}))

    // 3
    println
    println("3")
    val tuple3 : (String, Int, Double) = ("Al", 42, 200.0)
    printTuple3(tuple3)

    // 4
    println
    println("4")
    val cenaPomidora : Option[Int] = priceMap.get("Pomidor")
    if (cenaPomidora.isDefined) {
      println("Cena pomidora: " + cenaPomidora.get)
    } else {
      println("Nie ma ceny Pomidora w cenniku.")
    }

    // 5
    println
    println("5")
    var element = "Sobota"
    println(element, dayDescription(element))
    element = "Poniedzialek"
    println(element, dayDescription(element))
    element = "Test"
    println(element, dayDescription(element))

    // 6
    println
    println("6")
    val konto1 = new KontoBankowe()
    val konto2 = new KontoBankowe(300)
    println(konto1.stanKonta, konto2.stanKonta)

    konto1.wplata(111)
    konto2.wplata(222)
    println(konto1.stanKonta, konto2.stanKonta)

    konto1.wyplata(11)
    konto2.wyplata(22)
    println(konto1.stanKonta, konto2.stanKonta)

    // blad przy ustalaniu wartosci, 'readonly'
    // konto1.stanKonta = 3
    // konto1._stanKonta = 3

    // 7
    println
    println("7")
    val osoba1 = Osoba("Jan", "Kowalski")
    val osoba2 = Osoba("Piotr", "Nowak")
    val osoba3 = Osoba("Michal", "Nieznajomy")
    println(getHelloMessage(osoba1))
    println(getHelloMessage(osoba2))
    println(getHelloMessage(osoba3))

    // 8
    println
    println("8")
    println(filterZeros(List(0, 0, 0, 1, 4, 6, 0, 4, 9, 0, 4, 5, 0, 0, 0)))

    // 9
    println
    println("9")
    println(increaseByOne(List(1, 3, 6, 2)))

    // 10
    println
    println("10")
    println(magicFilter(List(-15, -5, 0, 5, 15, -13, 13, 12)))
  }

  // 1 E
  def generateList(days: List[String], ret: String): String =
  {
    if (days.nonEmpty) {
      return generateList(days.tail, ret + days.head + "\n")
    }
    ret
  }

  // 1 F
  def generateListReverse(days: List[String], ret: String): String =
  {
    if (days.nonEmpty) {
      return generateListReverse(days.tail, days.head + "\n" + ret)
    }
    ret
  }

  // 3
  def printTuple3(tuple3: (String, Int, Double)): Unit =
  {
    println("String: " + tuple3._1, "Int: " + tuple3._2, "Double: " + tuple3._3)
  }

  // 5
  def dayDescription(dayName: String): String = dayName match {
    case "Poniedzialek" => "Praca"
    case "Wtorek" => "Praca"
    case "Sroda" => "Praca"
    case "Czwartek" => "Praca"
    case "Piatek" => "Praca"
    case "Sobota" => "Weekend"
    case "Niedziela" => "Weekend"
    case _ => "Nie ma takiego dnia"
  }

  // 6
  class KontoBankowe(poczatkowyStanKonta: Int) {
    def this() = this(0)
    private var _stanKonta: Int = poczatkowyStanKonta

    def wplata(kwota : Int): KontoBankowe = {
      this._stanKonta += kwota
      this
    }

    def wyplata(kwota : Int): KontoBankowe = {
      this._stanKonta -= kwota
      this
    }

    def stanKonta : Int = this._stanKonta
  }

  // 7
  case class Osoba(imie: String, nazwisko: String) {
    def nazwa : String = imie + " " + nazwisko
  }
  def getHelloMessage(osoba: Osoba): String = osoba match {
    case Osoba("Jan", "Kowalski") => "Witaj Jan!"
    case Osoba("Piotr", "Nowak") => "Czesc Piotr!"
    case _ => "Witaj nieznajomy"
  }

  // 8
  def filterZeros(list: List[Int]): List[Int] = {
    var newList = new ListBuffer[Int]()
    list.foreach { element => if (element != 0) newList += element }
    newList.toList

    // krotka wersja:
    // return list.filter(v => v != 0)
  }

  // 9
  def increaseByOne(numbers : List[Int]) : List[Int] = {
    numbers.map((d) => d+1)
  }

  // 10
  def magicFilter(list: List[Int]): List[Int] = {
    var newList = new ListBuffer[Int]()
    list.foreach { element => if (-5 <= element && element <= 12) newList += scala.math.abs(element) }
    newList.toList
  }
}

											
Ten wpis został opublikowany w kategorii Bez kategorii. Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *