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