From 9ba573284ccde687b4c190c0f44032eef846410a Mon Sep 17 00:00:00 2001
From: Hong-Phuc Bui <hong-phuc.bui@htwsaar.de>
Date: Thu, 20 Nov 2025 16:20:11 +0100
Subject: [PATCH] Bugfix

---
 textbased-programms/hello-name.js                      |    5 +
 textbased-programms/kreisabschnitt/Kreisabschnitt.js   |   39 +++++++++++++
 textbased-programms/arithmetic-op.html                 |    3 
 textbased-programms/luhn.js                            |   47 +++++++++------
 textbased-programms/drawing-hands.js                   |   14 ++--
 textbased-programms/kreisabschnitt/Kreisabschnitt.html |   18 ++++++
 textbased-programms/kreisabschnitt/kreis.js            |   29 +++++++++
 7 files changed, 124 insertions(+), 31 deletions(-)

diff --git a/textbased-programms/arithmetic-op.html b/textbased-programms/arithmetic-op.html
index 5a3f725..30ab3ba 100644
--- a/textbased-programms/arithmetic-op.html
+++ b/textbased-programms/arithmetic-op.html
@@ -8,7 +8,8 @@
 </head>
 <body>
 
-<label for="argv">Geben Sie 2 Zahlen getrennt von Leerzeichen ein!</label> <input type="text" id="argv" name="argv" />
+<label for="argv">Geben Sie 2 Zahlen getrennt von Leerzeichen ein!</label>
+<input type="text" id="argv" name="argv" />
 <button name="run" id="run" >Rerun</button>
 
 
diff --git a/textbased-programms/drawing-hands.js b/textbased-programms/drawing-hands.js
index 94d68a2..9c6689a 100644
--- a/textbased-programms/drawing-hands.js
+++ b/textbased-programms/drawing-hands.js
@@ -5,16 +5,14 @@
 
 import {terminal} from "./dfhi.js";
 
-const leftHand = () => {
-	return rightHand();
-}
-
-const rightHand = () => {
-	return leftHand();
-}
-
 window.main = (...argv) => {
 	terminal.printl(leftHand() + " draws first!");
 };
 
+const leftHand = () => {
+    return rightHand();
+}
 
+const rightHand = () => {
+    return leftHand();
+}
diff --git a/textbased-programms/hello-name.js b/textbased-programms/hello-name.js
index fd08c53..66d975b 100644
--- a/textbased-programms/hello-name.js
+++ b/textbased-programms/hello-name.js
@@ -7,6 +7,7 @@
 
 
 window.main = (...argv) => {
-	let name = argv[0];
-	terminal.print(`Hallo, ${name}!`)
+    for(let e of argv) {
+        terminal.printl(e);
+    }
 };
\ No newline at end of file
diff --git a/textbased-programms/kreisabschnitt/Kreisabschnitt.html b/textbased-programms/kreisabschnitt/Kreisabschnitt.html
new file mode 100644
index 0000000..25df5af
--- /dev/null
+++ b/textbased-programms/kreisabschnitt/Kreisabschnitt.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Kreisabschnitt</title>
+</head>
+<body>
+Fs = <input id="Fs" value="100.1214"></input><br/>
+s = <input id="s" value="49.245363"><br/>
+<button id="run">Calculate</button><br/>
+<p>Ergebnis:</p>
+
+r: <span id="radius"></span><br/>
+alpha: <span id="alpha"></span><br/>
+
+<script src="Kreisabschnitt.js" type="module"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/textbased-programms/kreisabschnitt/Kreisabschnitt.js b/textbased-programms/kreisabschnitt/Kreisabschnitt.js
new file mode 100644
index 0000000..dde02f0
--- /dev/null
+++ b/textbased-programms/kreisabschnitt/Kreisabschnitt.js
@@ -0,0 +1,39 @@
+import {calculateRadius} from "./kreis.js";
+
+const runBnt = document.getElementById("run");
+runBnt.addEventListener("click", () => {
+    try {
+        const fsInput = document.querySelector("#Fs");
+        const sInput = document.querySelector("#s");
+        const [fs, s] = convertInput(fsInput, sInput);
+        console.log({fs, s});
+        const [radius,alpha] = calculateRadius(fs, s);
+        console.log({radius, alpha});
+        const radiusSpan = document.getElementById("radius");
+        radiusSpan.innerText = `${radius}`;
+        const alphaSpan = document.getElementById("alpha");
+        alphaSpan.innerText = `${alpha}`;
+    }catch (e) {
+        showError(e);
+    }
+});
+
+const convertInput = (fsInput, sInput) => {
+    const fs = fsInput.value;
+    const nFs = Number(fs);
+    if(isNaN(nFs)) {
+        //TODO: set styling von fsInput to error
+        throw new Error("Fläche-eingabe ist keine Zahl")
+    }
+    const s = sInput.value;
+    const nS = Number(s);
+    if(isNaN(s)) {
+        //TODO: set styling von sInput to error
+        throw new Error("Sehnenlänge-eingabe ist keine Zahl");
+    }
+    return[nFs, nS];
+}
+
+const showError = (error) => {
+    console.error(error);
+}
\ No newline at end of file
diff --git a/textbased-programms/kreisabschnitt/kreis.js b/textbased-programms/kreisabschnitt/kreis.js
new file mode 100644
index 0000000..bcf7e6d
--- /dev/null
+++ b/textbased-programms/kreisabschnitt/kreis.js
@@ -0,0 +1,29 @@
+export const calculateRadius = (fs, s) => {
+    const alpha = approximateAlpha(fs, s);
+    const radius = s/(2*Math.sin(alpha/2));
+    return [radius, alpha];
+}
+
+const approximateAlpha = (fs, s) => {
+    console.log({fs, s});
+    const Y = 8*fs/(s**2);
+    let left = 0;
+    let right = Math.PI;
+    // f(alpha) = (alpha - sin(alpha)) / (sin^2(alpha/2))
+    const EPSILON = 0.001;
+    let alpha = 0 ;
+    let y = 0;
+    let diff = 2*EPSILON;
+    do{
+        alpha = (left + right)/2;
+        y = (alpha - Math.sin(alpha)) / ( Math.sin(alpha/2)**2 ) ;
+        diff = y - Y;
+        if(diff < 0) {
+            left = alpha;
+        }else{
+            right = alpha;
+        }
+    } while( Math.abs(diff) >= EPSILON);
+    return alpha;
+}
+
diff --git a/textbased-programms/luhn.js b/textbased-programms/luhn.js
index 0e5fa80..f5bbe83 100644
--- a/textbased-programms/luhn.js
+++ b/textbased-programms/luhn.js
@@ -5,25 +5,32 @@
 
 import {terminal} from "./dfhi.js";
 
-window.main = (...argv) => {
-	let sumEvent = 0n;
-	let sumOdd = 0n;
-	let credit = argv[0];
+const checkLuhnNumber = (n) => {
+    let sumEvent = 0n;
+    let sumOdd = 0n;
+    while(n > 0) {
+        sumOdd += (n % 10n);  // modulo division base 10 to get the last digit
+        n = n/10n;            // integer division base 10 to shift credit number one digit to right
+        let rest = n % 10n;   // get the second-last digit
+        let p = rest*2n;
+        sumEvent += (p > 9n) ? (p - 9n) : p;
+        n = n/10n;
+    }
+    return (sumEvent + sumOdd) % 10n;
+}
 
-	let n = BigInt(credit.replace(/[-_\s+]/g, ''));
-	while(n > 0) {
-		sumOdd += (n % 10n);  // modulo division base 10 to get the last digit
-		n = n/10n;            // integer division base 10 to shift credit number one digit to right
-		let rest = n % 10n;   // get the second-last digit
-		let p = rest*2n;
-		sumEvent += (p > 9n) ? (p - 9n) : p;
-		n = n/10n;
-	}
-	console.log({sumOdd, sumEvent});
-	const sum =(sumEvent + sumOdd) % 10n;
-	if (sum === 0n) {
-		terminal.printl(`${credit} may be a valid credit number`);
-	} else {
-		terminal.printl(`${credit} is not a valid credit number`);
-	}
+window.main = (...argv) => {
+    try {
+        let credit = argv[0];
+        let n = BigInt(credit.replace(/[-_\s+]/g, ''));
+        const sum = checkLuhnNumber(n);
+        if (sum === 0n) {
+            terminal.printl(`${credit} may be a valid credit number`);
+        } else {
+            terminal.printl(`${credit} is not a valid credit number`);
+        }
+    }catch (e) {
+        terminal.printl("Die eingegebene Zeichenkette ist keine Credit Nummer");
+        terminal.printl("Erlaubten Zeichen sind Ziffer, Leerzeichen und Bindenstrich");
+    }
 };

--
Gitblit v1.10.0