Ich brauche ein Programm(JavaScript), dass Brüche kürzt, habe aber ein Problem damit, den ggT herauszufinden. Hat jemand ne Idee wie man das machen könnte ?
3 Antworten
https://de.wikipedia.org/wiki/Euklidischer_Algorithmus
In dem Wikipedia-Artikel sind einige Pseudocodes drin, die musst du nur noch in die Programmiersprache deiner Wahl übersetzen.
Öhm... nö, so ein Algorithmus kann nicht veralten. Euklid ist schon seit ein paar Jahren tot und trotzdem funktioniert sein Algorithmus noch.
https://de.wikipedia.org/wiki/Euklidischer\_Algorithmus#Iterative\_Variante
wäre übersetzt in JavaScript ungefähr so (habs jetzt nicht getestet)
======================
function euklid(a, b) {
while (a !== b) {
var h = a % b;
a = b;
b = h;
}
return a;
}
======================
a und b müssen zwei Zahlen sein, der Rückgabewert ist der größte Teiler. Ich hab jetzt leider keine Zeit, um zu schauen, wie sich die Funktion in deinen Code integrieren lässt.
das macht nix, danke dir, war wohl etwas zu schlampig :D
ich hab bei meiner seite mal als zähler(z2) 10 und als nenner(n2) 5 genommen, aber er hat mir dann10 ausgespuckt, und das macht keinen sinn.
hier der Code:
var n2, z2;
function kuerzen() {
n2 = document.getElementById("nennerVonKuerzen").value;
z2 = document.getElementById("zaehlerVonKuerzen").value;
function euklid(z2, n2) {
while (n2 !== 0) {
var h = z2 % n2;
z2 = n2;
n2 = h;
}
return z2;
}
alert(z2);}
hier ist mein schon geschriebener Code:
sorry für die verrutschten zeilen , das macht gutefrage.net automatisch xD
n2 = nenner
z2 = zähler
h braucht man garnet, war ein exp. von mir
var n2, z2, h;
var tvonn2 = [];
var tvonz2 = [];
function kuerzen() {
n2 = document.getElementById("nennerVonKuerzen").value;
z2 = document.getElementById("zaehlerVonKuerzen").value;
// Zaehler == nenner = 1/1
if (z2 == n2) {
document.getElementById("nennerVonKuerzen").value = 1;
document.getElementById("zaehlerVonKuerzen").value = 1;
}
//Teiler von Zaehler ausgeben
for (var i = 1; i < z2; i++) {
if (z2%i == 0) {
tvonz2.push((z2/i));
}
}
//Teiler von Nenner ausgeben
for (var i = 1; i < n2; i++) {
if (n2%i == 0) {
tvonn2.push((n2/i));
}
}
//Grössten geimeinsamen Teiler finden
/*Das Programm ist nur da um herauszufinden, ob es einen
gleichen Teiler im Nenner und im Zähler gibt, mir fehlt halt noch, dass wenn es mehrere
gleiche gibt dass das Programm dann den Größten nimmt :D*/
var g_Teiler = [];
var i2 = 0;
function g_Teiler_finden() {
for (var i = 0; i < tvonz2.length; i++) {
if (tvonz2[i] == tvonn2[i2]) {
g_Teiler.push(tvonz2[i]);
break;
} else {
continue;
}
}
}
do {
i2++;
g_Teiler_finden();
} while (i2 < tvonn2.length);
document.getElementById("zaehlerVonKuerzen").value = z2/g_Teiler;
document.getElementById("nennerVonKuerzen").value = n2/g_Teiler;
};
Du könntest Google benutzen...
https://st-page.de/2015/01/27/java-ggt-groesster-gemeinsamer-teiler/
https://wiki.zum.de/wiki/Java/ggT
...
zu dem ersten link: sieht gut aus, aber was ist das immer mit public void und so??
Nimm lieber den dritten Link oder so, das ist etwas übersichtlicher.
"public" (=öffentlich) heißt, dass die Methode auch von anderen Klassen aus aufgerufen werden kann.
"void" (=nichts) heißt, dass es keinen Rückgabewert gibt, bzw. dass der Rückgabetyp "nichts" ist. Würde dort "String" stehen, würde die Methode einen String zurückgeben.
In der Frage geht's übrigens um JavaScript, nicht um Java. public gibt's in JavaScript erst neuerdings (also seit ES6) und Rückgabetypen existieren in der Sprache überhaupt nicht.
der dritte link in meinem Code:
var tvonn2 = [];
var tvonz2 = [];
function kuerzen() {
n2 = document.getElementById("nennerVonKuerzen").value;
z2 = document.getElementById("zaehlerVonKuerzen").value;
// Zaehler == nenner = 1/1
if (z2 == n2) {
document.getElementById("nennerVonKuerzen").value = 1;
document.getElementById("zaehlerVonKuerzen").value = 1;
}
//Teiler von Zaehler ausgeben
for (var i = 1; i < z2; i++) {
if (z2%i == 0) {
tvonz2.push((z2/i));
}
}
//Teiler von Nenner ausgeben
for (var i = 1; i < n2; i++) {
if (n2%i == 0) {
tvonn2.push((n2/i));
}
}
//Grössten geimeinsamen Teiler finden
/*Das Programm ist nur da um herauszufinden, ob es einen
gleichen Teiler im Nenner und im Zähler gibt, mir fehlt halt noch, dass wenn es mehrere
gleiche gibt dass das Programm dann den Größten nimmt :D*/
int zahl1 = document.getElementById("zaehlerVonKuerzen").value;
int zahl2 = document.getElementById("nennerVonKuerzen").value;
public class Ggt {
/*
* Berechnung des ggT zweier Zahlen
* nach dem Euklidischen Algorithmus
*/
private static int ggt(int zahl1, int zahl2) {
while (zahl2 != 0) {
if (zahl1 > zahl2) {
zahl1 = zahl1 - zahl2;
} else {
zahl2 = zahl2 - zahl1;
}
}
return zahl1;
}
/*
* Hauptprogramm:
*/
public static void main(String[] args) {
/*
* Kommandozeilenargumente einlesen
* Aufruf: "ggt "
*/
int ersteZahl = Integer.parseInt(args[0]);
int zweiteZahl = Integer.parseInt(args[1]);
// berechne ggT mit der Funktion "ggt()"
int ergebnis = ggt(ersteZahl, zweiteZahl);
// Ausgabe des Ergebnisses:
System.out.println("Der ggT von " + ersteZahl +
" und " + zweiteZahl + " ist: " + ergebnis);
}
}
/*var g_Teiler = [];
var i2 = 0;
function g_Teiler_finden() {
for (var i = 0; i < tvonz2.length; i++) {
if (tvonz2[i] == tvonn2[i2]) {
g_Teiler.push(tvonz2[i]);
break;
} else {
continue;
}
}
}
do {
i2++;
g_Teiler_finden();
} while (i2 < tvonn2.length);
*/
/*
document.getElementById("zaehlerVonKuerzen").value = z2/g_Teiler;
document.getElementById("nennerVonKuerzen").value = n2/g_Teiler;
*/
};
also bei mir eingebaut(der 2. link) sieht das jetzt so aus:
haut nicht hin, was habe ich falsch gemacht??
var n2, z2, h;
var tvonn2 = [];
var tvonz2 = [];
function kuerzen() {
n2 = document.getElementById("nennerVonKuerzen").value;
z2 = document.getElementById("zaehlerVonKuerzen").value;
// Zaehler == nenner = 1/1
if (z2 == n2) {
document.getElementById("nennerVonKuerzen").value = 1;
document.getElementById("zaehlerVonKuerzen").value = 1;
}
//Teiler von Zaehler ausgeben
for (var i = 1; i < z2; i++) {
if (z2%i == 0) {
tvonz2.push((z2/i));
}
}
//Teiler von Nenner ausgeben
for (var i = 1; i < n2; i++) {
if (n2%i == 0) {
tvonn2.push((n2/i));
}
}
//Grössten geimeinsamen Teiler finden
/*Das Programm ist nur da um herauszufinden, ob es einen
gleichen Teiler im Nenner und im Zähler gibt, mir fehlt halt noch, dass wenn es mehrere
gleiche gibt dass das Programm dann den Größten nimmt :D*/
int zahl1 = document.getElementById("zaehlerVonKuerzen").value;
int zahl2 = document.getElementById("nennerVonKuerzen").value;
public class GGT {
private static int ggt(int zahl1, int zahl2) {
while (zahl2 != 0) {
if (zahl1 > zahl2) {
zahl1 = zahl1 - zahl2;
} else {
zahl2 = zahl2 - zahl1;
}
}
return zahl1;
}
public static void main(String[] args) {
int ersteZahl = 20;
int zweiteZahl = 10;
int ergebnis = ggt(ersteZahl, zweiteZahl);
alert("Der GGT von " + ersteZahl +
" und " + zweiteZahl + " ist: " + ergebnis);
}
}
/*var g_Teiler = [];
var i2 = 0;
function g_Teiler_finden() {
for (var i = 0; i < tvonz2.length; i++) {
if (tvonz2[i] == tvonn2[i2]) {
g_Teiler.push(tvonz2[i]);
break;
} else {
continue;
}
}
}
do {
i2++;
g_Teiler_finden();
} while (i2 < tvonn2.length);
*/
/*
document.getElementById("zaehlerVonKuerzen").value = z2/g_Teiler;
document.getElementById("nennerVonKuerzen").value = n2/g_Teiler;
*/
};
Alles, was du eingefügt hast (also ab
public class GGT {
, ist Java und kein JavaScript. Besser funktioniert es, wenn du die Methode "ggt" zu einer function machst (also
function ggt(int zahl1, int zahl2) {
, dort dann alles bis hinter das return übernimmst und den Rest von dem, was du eingefügt hast, wieder löschst - auch die main-Methode brauchst du nicht. ggt() musst du dann sicherlich noch irgendwo aufrufen.
"haut nicht hin" ist keine Fehlerbeschreibung und es gibt einen Unterschied zwischen "programmieren" und "raten". ;)
vielleicht ist der Code in diesem Fall gleich (kann weder Java noch javascript), aber der Fragesteller sucht nach einem "javscript"-Programm, nicht nach Java.
hab ich schon probiert, ist leider alles so veraltet dass ich da nimmer durch blick und dann kann ich es auch net in meinen Code einbauen