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

Vom Fragesteller als hilfreich ausgezeichnet

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. 

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

0
@keinname123123

Ö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.

0
@ceevee

while (b !== 0) {

So ist es richtig. In der Zeile hab ich mich verschrieben.

0
@ceevee

das macht nix, danke dir, war wohl etwas zu schlampig :D

0
@ceevee

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);}


0

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;
};

Woher ich das weiß:Studium / Ausbildung – Ausbildung Fachinformatiker Anwendungsentwicklung

ok danke ich schau mal

0

zu dem ersten link: sieht gut aus, aber was ist das immer mit public void und so??

0
@keinname123123

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.

0
@LudwigSchindler

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. 

0
@LudwigSchindler

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;
*/
};
0

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;
*/
};
0
@keinname123123

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". ;)

0

vielleicht ist der Code in diesem Fall gleich (kann weder Java noch javascript), aber der Fragesteller sucht nach einem "javscript"-Programm, nicht nach Java.

0