JavaScript ggT und kgV berechnen

Spartan-117

Cadet 3rd Year
Registriert
Nov. 2010
Beiträge
41
Hallo

Ich benutze folgenden Code zum berechnen des ggT(grösster gemeinsamer Teiler) und kgV(kleinstes gemeinsames Vielfaches):
(Ich bin nicht so der JS-Crack, also bitte keinen perfekten Code erwarten. :P)

Code:
<script type="text/javascript" language="javascript">
function ggT(z1,z2) {
	var m = z1;
	var n = z2;
	var r = 1;
	while(r != 0) {
		if(m < n) {
			var h = m;
			m = n;
			n = h;
		}
		r = m - n;
		m = n;
		n = r;
	}
	return m;
}
function kgV(z1,z2) {
	kgv = (z1 * z2 / ggT(z1,z2));
	return kgv;
}
function calcGGT() {
	zahl1 = document.mathForm.z1.value;
	zahl2 = document.mathForm.z2.value;
	ggt = ggT(zahl1,zahl2);
	$('.res').html('Der ggT von ' + zahl1 + ' und ' + zahl2 + ' ist: <b>' + ggt + '</b>');
}
function calcKGV() {
	zahl1 = document.mathForm.z1.value;
	zahl2 = document.mathForm.z2.value;
	kgv = kgV(zahl1,zahl2);
	$('.res').html('Das kgV von ' + zahl1 + ' und ' + zahl2 + ' ist: <b>' + kgv + '</b>');
}
</script>
<span class="res"></span><br /><br />
<form name="mathForm">
<input type="text" name="z1" />
<input type="text" name="z2" /><br /><br />
<input type="button" name="ggt" value="ggT berechnen" onclick="calcGGT();" />
<input type="button" name="kgv" value="kgV berechnen" onclick="calcKGV();" />
</form>

Nur leider funktioniert dies nicht so ganz.

Also mein Problem ist, das dieses Script bei Zahlen wie 1024 und 256 stehen bleibt. Aber z.B. bei 1071 und 1029 funktioniert. Ich kann keinen Fehler entdecken, jedoch haben doch diese Zahlen wie 256, 512, 1024 etc. doch eine "spezielle" Bedeutung.

Ich würde gerne wissen, wieso es nur bei solchen Zahlen stehen bleibt, und wie ich diesen Fehler reparieren kann. :)

P.S. jQuery ist vorhanden. =)

Vielen Dank,
Spartan-117
 
Versuch vielleicht mal statt "r != 0" ein weniger scharfes "r > 0" - wobei es schon merkwürdig wäre, wenn es da zu irgendwelchen Rundungsproblemen kommen würde... hast du verschiedene Browser probiert?

Hab den ggT mal mit 1024 und 256 durchgespielt und scheint durchaus richtig implementiert zu sein...

Edit:
Ok, Problem is einfach begründet... es liegt nicht an den 2er-Potenz-Zahlen sondern ganz einfach daran, dass JavaScript nicht streng typisiert ist...
Der Vergleich "if (m< n) {" ist ein String-Vergleich, also es vergleicht nur die Texte, und 1 ist nun mal vor der 2 also ist 1024 "kleiner" als 256 - zumindest wenn man es in einer Art alphabetischer Betrachtung -, und kein Werte-Vergleich. Du musst die Felder vorher in Zahlen umwandeln lassen... denke SelfHTML könnte da helfen...

Edit2:
so sieht das dann aus
Code:
	zahl1 = parseInt(document.mathForm.z1.value);
 
Zuletzt bearbeitet:
Dass ich nicht selbst darauf gekommen bin... :P
Naja, ich bin ja noch am lernen. ^^

Danke vielmals! :)
 
Zurück
Oben