diff --git a/.gradle/6.6.1/executionHistory/executionHistory.lock b/.gradle/6.6.1/executionHistory/executionHistory.lock index cee59fb..7fcba07 100644 Binary files a/.gradle/6.6.1/executionHistory/executionHistory.lock and b/.gradle/6.6.1/executionHistory/executionHistory.lock differ diff --git a/.gradle/6.6.1/fileHashes/fileHashes.lock b/.gradle/6.6.1/fileHashes/fileHashes.lock index 64b86c9..ef5f67b 100644 Binary files a/.gradle/6.6.1/fileHashes/fileHashes.lock and b/.gradle/6.6.1/fileHashes/fileHashes.lock differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 5067241..2c23ab3 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/kotlin/Calculator.kt b/src/main/kotlin/Calculator.kt new file mode 100644 index 0000000..ef916dd --- /dev/null +++ b/src/main/kotlin/Calculator.kt @@ -0,0 +1,41 @@ +class Calculator { + init { + var running = true + println("Welcome to the calculator, enter a mode") + while(running) { + println("sides - enter all sides | angle - enter one angle and one side | exit - exit") + when (readLine()) { + "sides" -> { + println("Enter all 3 sides, one after the other") + println("a") + val a = readLine() + println("b") + val b = readLine() + println("c") + val c = readLine() + if (a != null && b != null && c != null) + println(Triangle(a.toDouble(), b.toDouble(), c.toDouble())) + } + "angles" -> { + println("Enter the values") + println("angle name") + val aname = readLine() + println("angle value") + val angle = readLine() + println("side name") + val sname = readLine() + println("side length") + val len = readLine() + if (aname != null && angle != null && sname != null && len != null) + println(Triangle(aname, angle.toDouble(), sname, len.toDouble())) + } + "exit" -> running = false + } + } + } +} + + +fun main() { + Calculator() +} \ No newline at end of file diff --git a/src/main/kotlin/Triangle.kt b/src/main/kotlin/Triangle.kt new file mode 100644 index 0000000..0ae2672 --- /dev/null +++ b/src/main/kotlin/Triangle.kt @@ -0,0 +1,110 @@ +import kotlin.math.PI +import kotlin.math.asin +import kotlin.math.cos +import kotlin.math.sin + +class Triangle() { + + private var a = Side(0.0, "a") + private var b = Side(0.0, "b") + private var c = Side(0.0, "c") + + private var alpha = Angle(0.0, "alpha") + private var beta = Angle(0.0, "beta") + private var gamma = Angle(90.0, "gamma") + + init { + + } + + constructor(angleName: String, angleD: Double, sideName: String, side: Double) : this() { + val angle = angleD.toRadians() //thanks kotlin + + when (angleName) { + "alpha" -> { + assignSides(::sin, ::cos, angle, sideName, side) + } + "beta" -> { + assignSides(::cos, ::sin, angle, sideName, side) + } + else -> { + throw IllegalArgumentException("Illegal angle $angle") + } + } + calculateAngles() + } + + constructor(vararg sides: Double) : this() { + a = Side(sides[0], "a") + b = Side(sides[1], "b") + c = Side(sides[2], "c") + calculateAngles() + } + + private fun assignSides( + func1: (Double) -> Double, + func2: (Double) -> Double, + angle: Double, + sideName: String, + side: Double + ) { + when (sideName) { + "a" -> { + a = Side(side, "a"); + c = Side(a / func1(angle), "c") + b = Side(c * func2(angle), "b") + } + "b" -> { + b = Side(side, "b") + c = Side(b / func2(angle), "c") + a = Side(c * func1(angle), "a") + } + "c" -> { + c = Side(side, "c") + a = Side(c * func1(angle), "a") + b = Side(c * func2(angle), "a") + } + } + } + + private fun calculateAngles() { + alpha = Angle(asin(a.length / c.length).toDegree(), "alpha") + beta = Angle(asin(b.length / c.length).toDegree(), "beta") + gamma = Angle(180 - beta.angle - alpha.angle, "gamma") + if(gamma.angle != 90.0){ + throw java.lang.IllegalArgumentException("Invalid Angles") + } + } + + private fun Double.toDegree() = this * 180 / PI + private fun Double.toRadians() = this * PI / 180 + + + override fun toString(): String { + return "Sides: $a, $b, $c Angles: $alpha $beta $gamma" + } + + + + class Side(length: Double, name: String) { + val length = length + val name = name + + operator fun times(other: Double) = this.length * other + operator fun div(other: Double) = this.length / other + + override fun toString(): String { + return "$name = ${"%.2f".format(length)}" + } + } + + class Angle(value: Double, name: String) { + val angle = value + val name = name + + + override fun toString(): String { + return "$name = ${"%.2f".format(angle)}" + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/main.kt b/src/main/kotlin/main.kt index dfc7772..91d136c 100644 --- a/src/main/kotlin/main.kt +++ b/src/main/kotlin/main.kt @@ -1,7 +1,11 @@ -import kotlin.math.* -import kotlin.reflect.KFunction - fun main() { + + Calculator() + + //test() +} + +fun test(){ val triangle = Triangle(4.0, 3.0, 5.0) println("alpha: a: ${Triangle("alpha", 53.13, "a", 4.0)}") println("alpha: b: ${Triangle("alpha", 53.13, "b", 3.0)}") @@ -13,98 +17,6 @@ fun main() { println("\nOriginal$triangle") } -class Triangle() { - - var a = Side(0.0, "a") - var b = Side(0.0, "b") - var c = Side(0.0, "c") - - var alpha = Angle(0.0, "alpha") - var beta = Angle(0.0, "beta") - var gamma = Angle(90.0, "gamma") - - init { - - } - - constructor(angleName: String, angleD: Double, sideName: String, side: Double) : this() { - val angle = angleD.toRadians() //thanks kotlin - - when (angleName) { - "alpha" -> { - assignSides(::sin, ::cos, angle, sideName, side) - } - "beta" -> { - assignSides(::cos, ::sin, angle, sideName, side) - } - else -> { - throw IllegalArgumentException("Illegal angle $angle") - } - } - calculateAngles() - } - - constructor(vararg sides: Double) : this() { - a = Side(sides[0], "a") - b = Side(sides[1], "b") - c = Side(sides[2], "c") - calculateAngles() - } - - private fun assignSides(func1: (Double) -> Double, func2: (Double) -> Double, angle: Double, sideName: String, side: Double){ - when (sideName) { - "a" -> { - a = Side(side, "a"); - c = Side(a / func1(angle), "c") - b = Side(c * func2(angle), "b") - } - "b" -> { - b = Side(side, "b") - c = Side(b / func2(angle), "c") - a = Side(c * func1(angle), "a") - } - "c" -> { - c = Side(side, "c") - a = Side(c * func1(angle), "a") - b = Side(c * func2(angle), "a") - } - } - } - - private fun calculateAngles() { - alpha = Angle(asin(a.length / c.length).toDegree(), "alpha") - beta = Angle(asin(b.length / c.length).toDegree(), "beta") - gamma = Angle(180 - beta.angle - alpha.angle, "gamma") - } - - private fun Double.toDegree() = this * 180 / PI - private fun Double.toRadians() = this * PI / 180 - override fun toString(): String { - return "Sides: $a, $b, $c Angles: $alpha $beta $gamma" - } -} - -class Side(length: Double, name: String) { - val length = length - val name = name - - operator fun times(other: Double) = this.length * other - operator fun div(other: Double) = this.length / other - - override fun toString(): String { - return "$name = ${"%.2f".format(length)}" - } -} - -class Angle(value: Double, name: String) { - val angle = value - val name = name - - - override fun toString(): String { - return "$name = ${"%.2f".format(angle)}" - } -} \ No newline at end of file