oopuebung/uebung01/RationalProgram.scala
2025-04-14 23:08:06 +02:00

92 lines
2.6 KiB
Scala

package oop
import oop.RationalProgram.Rational
object RationalProgram:
case class Rational(val numerator: Int, val denominator: Int);
def newRational(num: Int): Rational =
new Rational(num, 1)
def newRational(num: Int, denom:Int = 1): Rational =
if (denom == 0) throw new Exception("Nenner darf nicht negativ sein")
reduce(num, denom)
def reduce(num:Int, denom:Int): Rational =
val newnum = if denom < 0 then -num else num
val newdenom = if denom < 0 then -denom else denom
val g: Int = ggT(newnum.abs , newdenom)
new Rational(newnum / g, newdenom /g)
def ggT(nom: Int, denom: Int): Int =
if denom == 0 then nom else ggT(denom, nom % denom)
def getNum(r: Rational): Int =
r.numerator
def getDenom(r: Rational): Int =
r.denominator
def add(r1: Rational, r2:Rational): Rational =
newRational(getNum(r1) * getDenom(r2) + getNum(r2) * getDenom(r1),
getDenom(r1) * getDenom(r2))
def sub(r1: Rational, r2:Rational): Rational =
newRational(getNum(r1) * getDenom(r2) - getNum(r2) * getDenom(r1),
getDenom(r1) * getDenom(r2))
def add(r: Rational, i: Int): Rational =
add(r, newRational(i))
def sub(r: Rational, i: Int): Rational =
sub(r, newRational(i))
def mult(r1: Rational, r2: Rational): Rational =
newRational(getNum(r1) * getNum(r2),
getDenom(r1) * getDenom(r2));
def div(r1: Rational, r2: Rational): Rational =
newRational(getNum(r1) * getDenom(r2),
getDenom(r1) * getNum(r2));
def mult(r1: Rational, num: Int): Rational =
mult(r1, newRational(num))
def div(r1: Rational, num: Int): Rational =
div(r1, newRational(num))
def printRational(r: Rational): Unit =
if (r.denominator == 1) then println(r.numerator)
println(r.numerator + "/" + r.denominator)
def lessThan(r1: Rational, r2:Rational): Boolean =
val num1 = r1.numerator * r2.denominator
val num2 = r1.denominator * r2.numerator
return num1 < num2
def greaterThan(r1: Rational, r2: Rational): Boolean =
val diff = sub(r2, r1)
diff.numerator < 0
def greaterThanOrEquals(r1: Rational, r2: Rational): Boolean =
!lessThan(r1,r2)
def lessThanOrEquals(r1: Rational, r2: Rational): Boolean =
!greaterThan(r1, r2)
def graterThan(r: Rational, i: Int): Boolean =
greaterThan(r, newRational(i))
def isEqual(r1: Rational, r2: Rational): Boolean =
lessThanOrEquals(r1,r2) && greaterThanOrEquals(r1,r2)
def main(args: Array[String]): Unit =
val one = newRational(1)
val two = newRational(2)
val three = newRational(3)
val four = newRational(4)
val vierdrittel = div(four, three)
val bruch = div(two, vierdrittel)
val ergebniss = add(one, bruch)
printRational(ergebniss)