GGT - Codeerklärung gesucht

Status
Nicht offen für weitere Antworten.

dehlen

Bekanntes Mitglied
Hallo ich brauch mal wieder eure Hilfe =)

Habe hier folgenden Codeschnipsel:
Java:
private int ggt() 
        { 
                int a = zähler; 
                int b = nenner; 
                int rest; 

                while(b!=0) 
                { 
                        rest = a%b; 
                        a = b; 
                        b = rest; 
            } 

           return a;

verstehe obigen Code nicht so ganz könntet ihr mir vielleicht helfen und mir das ganze mal erläutern.. ?
Danke!


Also ich verstehe es im Moment so :
es werden 3 ints deklariert
so
dann kommt die while schleife also
solange b nicht 0 ist
soll er der variablen rest den Wert von a Rest b zu teilen
a soll den wert von b annehmen
und
b soll den Wert von Rest annehmen
sodass sozusagen a = der rest ist und somit a der gekürzte Bruch ist
wenn das dann abgeschlossen wurde soll er a zurückgeben, sodass man den gekürzten Bruch erhält..
ist das soweit richtig ?
also das ist eine Methode zum kürzen von Brüchen mithilfe des GGT .. danke für die Antworten =)
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
> Never argue with ..

ok, sagen wir einfach: ja, alles richtig
(sorry ;) )

edit:
wobei..
> sodass man den gekürzten Bruch erhält..
man erhält a = der GGT zweier Zahlen, das ist nicht der Bruch
 

nrg

Top Contributor
wie du das im Moment verstehst, ist schon soweit richtig. Der letzte Satz geht nicht ganz hervor:
> sodass sozusagen a = der rest ist und somit a der gekürzte Bruch ist

Also ein Bruch hat für mich immernoch einen Zähler und Nenner (ausser Nenner = 1). Somit kann a alleine ja nicht der gekürtze Bruch sein. Ausserdem ist hier auch nicht a der Rest sondern b.

Aber mal davon abgesehen, ist der Code imho totaler schmarrn... Das hat nichts mit Kürzen von Brüchen zu tun. (nimmt man z.b. 6/3, was 2 Ganze wären, kommt 3/0 raus)
 

Landei

Top Contributor
Vielleicht ist hier eine "rekursive" Erklärung verständlicher:

1) Gegeben sei ein a und ein b mit a >= b.
2) Falls a ohne Rest durch b teilbar ist, ist b der gesuchte ggT. Fertig.
3) Falls ein Rest bei der Division von a und b bleibt, ist der ggT von a und b gleich dem ggT von b und Rest (*). Benenne b in a um und Rest in b und beginne bei 1)

(*) Warum das funktioniert, ist nicht ganz trivial und hat mit Idealen und Ringen sowie der Eindeutigkeit der Primzerlegung zu tun.

Der obige Algorithmus macht im Prinzip das gleiche, nur mit einer Schleife statt mit Rekursion. Obwohl das Prinzip einfach ist, scheint besonders der "Umbenennen"-Teil vielen Einsteigern Probleme zu machen.

Ab besten vollziehst du das mal mit Papier und Bleistift an ein paar Beispielen durch

a = 24, b = 15
24 / 15 = 1, Rest 9.
Also "altes b" = "neues a" = 15, Rest = "neues b" = 9
15 / 9 = 1, Rest 6
Also "altes b" = "neues a" = 9, Rest = "neues b" = 6
9 / 6 = 1, Rest 3
Also "altes b" = "neues a" = 6, Rest = "neues b" = 3
6 / 3 = 2, Rest 0.
Das letzte b = 3 ist der gesuchte ggT.
 
Zuletzt bearbeitet:

henpara

Bekanntes Mitglied
man sollte noch erwähnen, daß "zähler, nenner" als bezeichnung falsch verstanden werden kann, besser wäre groessereZahl und kleinereZahl. dann erkennt man eher, daß hier ein GGT berechnet wird, statt eines Bruches (zähler, nenner).
 

nrg

Top Contributor
das schon eher (edit @Andi_CH). einen Bruch kürzen ist in einer methode imho eh blöd darstellbar (ausser man liefert einen String oder ein int-Array). Aber dafür hat man ja Klassen (langeweile auf der Arbeit):
Java:
public class FractionReducer {
	
	private int numerator, denominator;
	
	public FractionReducer(int numerator, int denominator) {
		this.numerator = numerator;
		this.denominator = denominator;
	}
	
	public int getNumerator() {
		return numerator;
	}
	
	public int getDenominator() {
		return denominator;
	}
	
	public void reduce() {
		for (int i = Math.min(numerator, denominator); i > 1; i--) {
			if (numerator % i == 0 && denominator % i == 0) {
				numerator /= i;
				denominator /= i;
				break; // auf Wunsch von Landei
			}
		}
	}
	
	public static void main(String[] args) {
		FractionReducer fr = new FractionReducer(10, 15);
		fr.reduce();
		System.out.println(fr.getNumerator() + "/" + fr.getDenominator());
	}
}
 
Zuletzt bearbeitet:

Landei

Top Contributor
@nrg: Dein reduce() ist so ziemlich die verschwenderischste Implementierung, die man finden kann. Die Berechnung des ggT ist wesentlich effizienter.
 

nrg

Top Contributor
oh man wie kleinlich. dann macht man in die for-schleife im if halt noch ein break....

edit: was vllt aber noch hinzuzufügen ist: ich hab zu meiner Schande gar nicht gecheckt, dass der Code ansich wohl doch nicht so ein Schmarrn ist. war viel zu sehr bei dem Bruch als Ganzes und hab das mitm ggt erst nach deinem Post gemerkt (meinen letzten Post hatte ich nach Andi_CH Post angefangen zu schreiben)
 
Zuletzt bearbeitet:

dehlen

Bekanntes Mitglied
ok danke für eure antworten... also
zusammenfassung für mich ... meine erklärung war fast richtig... :D

aber der Code ist nicht zum kuerzen geeignet ?!... wenn ja verbesserungsvorschläge?

Danke
 

henpara

Bekanntes Mitglied
sinnvollerweise kürzt man ja mit dem ggT... insofern kannst du dir deine (saudumme) Frage hoffentlich selbst beantworten :lol:
 

Andi_CH

Top Contributor
ok danke für eure antworten... also
zusammenfassung für mich ... meine erklärung war fast richtig... :D

aber der Code ist nicht zum kuerzen geeignet ?!... wenn ja verbesserungsvorschläge?

Danke

Hm - also nach der chaotischen, kreativen Phase ein Neustart?

Möchtest du eine Klasse Bruch mit Zähler und Nenner und einer Operation "kürzen" die den Bruch optimal kürzt?
Darin kann dein Ansatz einen GGT zu finden möglicherweise vewendet werden.
 

dehlen

Bekanntes Mitglied
ja genau das meinte ich .. wich wollte keine vorschläge wie ich den ggt verwenden kann sondern wie ich meine fassung verbessern kann...

Wäre sowas hier besser ?

Java:
 private static int ggt(int zahl1, int zahl2) {
   while (zahl2 != 0) {
     if (zahl1 > zahl2) {
       zahl1 = zahl1 - zahl2;
     } else {
       zahl2 = zahl2 - zahl1;
     }
   }
   return zahl1;
 }

Was haltet ihr von der Fassung
 

dehlen

Bekanntes Mitglied
ok habe es nun rekursiv mit modulo gelöst... denke ich :D
Java:
 public static int ggT (int x, int y) {
	    if(y != 0) return ggT(y, x % y);
	    return x;
	}
}

Ist das nun eine bessere Methode?

Also wenn ich das ausführe bekomme ich zumindest keinen syntax error.... hätte nur gern gewusst ob diese Methode nun effizienter ist als meine erste ?!
 
Zuletzt bearbeitet:

dehlen

Bekanntes Mitglied
Oh ok... Naja auch egal sie funktioniert ja und von daher.. :d
Muss noch für ne Arbeit lernen deswegen sollte ich mich eigentlich nicht von diesem Problem aufhalten lassen... Wollte ja eigentlich nur den Code verstehen und das habe ich ja jetzt :)
Die Verbesserung ist ja einfach nur noch ne "Schönheitsoperation"
Also vielen dank für die antworten
 
V

Verzweifelt :S

Gast
Hallo,
hab das bisher mitverfolgt und hätte noch so ne kleine Bitte wenn es geht.
Ich schreibe morgen eine Info Klausur und habe immer noch keine zusammenfassung über Sinn und Verwendung von Java.
Also wann man String nimmt, was void/main heißt, wann private/public...usw.
Unser Lehrer hat das offensichtlich nicht für so wichtig gehalten bzw nur ganz kurz am Rande erklärt.
Wäre wirklich nett wenn mir einer kurz mal ne Erklärung für die verschiedenen Sachen schreiben könnte.
LG
Laura
schonmal DANKE im voraus
 
G

Gast2

Gast
hm, das sind alles Grundlegende Elemente vom Java.
Das soll man dir bis morgen erklären? Behaupte mal zu sagen dass das nichts wird.

Hast du irgendwelche vorkenntnisse in java?
 
V

Verzweifelt :S

Gast
Ja also klar ich hab ein halbes jahr lang info unterricht
und programmieren klappt ja auch
aber halt so alles ma generell...der hat uns das immer nur für die aufgabe erklärt und nich allgemein das is ja mein problem...
-.-
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Codeerklärung benötigt Java Basics - Anfänger-Themen 12
P Hilfe gesucht Java Basics - Anfänger-Themen 11
Scappy Java Lernpartner gesucht! Java Basics - Anfänger-Themen 40
K Spieleidee gesucht für Informatikprojekt - JAVA (BlueJ)? Java Basics - Anfänger-Themen 15
I Wasserzeichen API gesucht Java Basics - Anfänger-Themen 2
S Anfängeraufgaben gesucht Java Basics - Anfänger-Themen 29
U BestPractise für Deployment unter Windows gesucht Java Basics - Anfänger-Themen 12
R OOP Einfaches Programmierbeispiel für Assoziation, Aggregation und Komposition gesucht Java Basics - Anfänger-Themen 10
S ProgrammierHilfe dringend gesucht ( Icon bewegen) Java Basics - Anfänger-Themen 9
W Neues Lern-Projekt gesucht Java Basics - Anfänger-Themen 8
CT9288 Permanent laufender loop mit Eingabefunktion gesucht Java Basics - Anfänger-Themen 1
der_Schokomuffin Hilfe gesucht beim Thema Objekte übergeben! Java Basics - Anfänger-Themen 2
der_Schokomuffin Hilfe gesucht: String wird auf null gesetzt! Java Basics - Anfänger-Themen 17
O Lösungsansatz gesucht Java Basics - Anfänger-Themen 4
Y Konkrete Hilfe gesucht - Anzahl der Stellen einer eingegebenen Zahl überprüfen Java Basics - Anfänger-Themen 5
W Erste Schritte Rechnen mit Schleifen? Denkanstoß gesucht Java Basics - Anfänger-Themen 15
V Erste Schritte Hilfe gesucht beim einstieg in Java und erste Aufgaben aus der Berufsschule Java Basics - Anfänger-Themen 9
R Spotify API gesucht Java Basics - Anfänger-Themen 3
M Java Insel Aufgaben von der DVD gesucht Java Basics - Anfänger-Themen 2
M Open Source Projekt mit Unit Tests gesucht Java Basics - Anfänger-Themen 5
T Gesucht: Tutorial im Anschluß an Gailer-net bzw. Bradley Kjell Java Basics - Anfänger-Themen 0
Salo Datentypen "Doppelt" List(e) ("gesucht") Java Basics - Anfänger-Themen 6
D Array mit Zufallszahlen, dann sortieren: Hilfe gesucht! Java Basics - Anfänger-Themen 1
D Klassen Gesucht: Einfache Beispiel-Klasse für einen Datentyp Java Basics - Anfänger-Themen 7
G Bei Mouseover Grafik ändern, gutes Vorgehen gesucht Java Basics - Anfänger-Themen 0
E Brauche eine Antwort zum Thema RegEx ( Alternative zur Lösung auch gesucht ) Java Basics - Anfänger-Themen 5
cyro Best Practice Bessere Alterative zu ArrayList gesucht Java Basics - Anfänger-Themen 3
C Lösung für RegEx in Java gesucht Java Basics - Anfänger-Themen 2
E Event gesucht Java Basics - Anfänger-Themen 1
D Kürzel für a = a && b gesucht Java Basics - Anfänger-Themen 12
E Hilfe zur Performance Verbesserung gesucht Java Basics - Anfänger-Themen 1
A Best Practice Ideen für kleines Anfängerschulprojekt gesucht Java Basics - Anfänger-Themen 4
E Mein eigener Listener (Hilfe gesucht) Java Basics - Anfänger-Themen 2
C Hilfe für Spielerweiterung gesucht Java Basics - Anfänger-Themen 4
C Hilfe für Kommentar-Zapper gesucht / Umgang mit Console Java Basics - Anfänger-Themen 0
M Datenstruktur gesucht Java Basics - Anfänger-Themen 3
S Projekt-Idee für testgetriebene Entwicklung gesucht Java Basics - Anfänger-Themen 2
G Möglichkeit zum Auslesen von Webseiten gesucht. Java Basics - Anfänger-Themen 10
K Gutes Java 3D Game Tutorial gesucht Java Basics - Anfänger-Themen 6
O Java - "Learning by doing" - Übungsaufgaben gesucht. Java Basics - Anfänger-Themen 5
F JavaLernpartner gesucht Java Basics - Anfänger-Themen 13
J Erste Schritte Java "Lehrer" gesucht Java Basics - Anfänger-Themen 22
K Hamstersimulator / Hamster Modell Lösungen gesucht Java Basics - Anfänger-Themen 3
J Erste Schritte If-Else Idee gesucht Java Basics - Anfänger-Themen 6
A Datentypen Mehrdimensionaler Datentyp gesucht Java Basics - Anfänger-Themen 4
P Java anfänger tutorial gesucht Java Basics - Anfänger-Themen 12
M Sortieralgoritmus für großes Array gesucht Java Basics - Anfänger-Themen 10
P Kontrollstrukturen Ergebnis gesucht Java Basics - Anfänger-Themen 10
S Mathe Lib gesucht Java Basics - Anfänger-Themen 2
B Regulärer Ausdruck gesucht Java Basics - Anfänger-Themen 6
D Java Quiz gesucht Java Basics - Anfänger-Themen 7
G Regex für 1 und 2 gesucht Java Basics - Anfänger-Themen 18
A Befehl gesucht....wie komme ich an Folgendes Objekt? Java Basics - Anfänger-Themen 6
R Passende Collection gesucht Java Basics - Anfänger-Themen 11
Y Regexp gesucht Java Basics - Anfänger-Themen 6
R Java-Anfänger-Projekt-Begleiter gesucht Java Basics - Anfänger-Themen 18
Binary.Coder Bluej ähnlicher Inspektor gesucht Java Basics - Anfänger-Themen 3
C Klassen Array-Klasse gesucht Java Basics - Anfänger-Themen 4
J "Java 2 Standart Edition SDK" Gesucht Java Basics - Anfänger-Themen 4
C Buch für Einsteiger gesucht Java Basics - Anfänger-Themen 2
M einfache Übungsaufgaben gesucht Java Basics - Anfänger-Themen 7
D Quelle für Java-Grundlagen gesucht Java Basics - Anfänger-Themen 16
T Datentypen Liste für boolean gesucht Java Basics - Anfänger-Themen 4
S Datentypen geignetes java konstrukt gesucht Java Basics - Anfänger-Themen 5
U OOP Tutorials gesucht Java Basics - Anfänger-Themen 4
D gesucht: Map nur mit doppelten Keys Java Basics - Anfänger-Themen 10
V Datentypen Methode gesucht, String zu Double mit Rechenoperatoren Java Basics - Anfänger-Themen 11
Tandibur sinnvolles Speichermodell gesucht Java Basics - Anfänger-Themen 6
M Lösungsansatz für Aufgabe gesucht. Java Basics - Anfänger-Themen 21
A Regex gesucht Java Basics - Anfänger-Themen 2
B Alternative zu einem Array gesucht Java Basics - Anfänger-Themen 3
S kreative Schlaue funktion für optionsfeld (html) gesucht... Java Basics - Anfänger-Themen 4
T Komplexität gesucht Java Basics - Anfänger-Themen 10
N Hibernate "Hello World" Tutorial gesucht Java Basics - Anfänger-Themen 9
O RegEx-Ausdruck gesucht Java Basics - Anfänger-Themen 2
U Icon mit Pfeil und Menupunkten gesucht Java Basics - Anfänger-Themen 3
E Methode gesucht die eine Abfolge von Ereignissen festsetzt. Java Basics - Anfänger-Themen 3
G Datenstruktur gesucht Java Basics - Anfänger-Themen 14
O Mal wieder ein Regex-Ausdruck gesucht! Java Basics - Anfänger-Themen 5
N Flexiblen Datenspeicher (Array... oder so) gesucht Java Basics - Anfänger-Themen 6
D Java Tutorial zur Netzwerk / Datenbankprogrammierung gesucht Java Basics - Anfänger-Themen 2
L Implementation gesucht - ArrayList.iterator() Java Basics - Anfänger-Themen 3
O Regulärer Ausdruck gesucht Java Basics - Anfänger-Themen 2
chewbacca Literaturempfehlung gesucht. Java Basics - Anfänger-Themen 2
M Kombinatorik - Algorithmus gesucht Java Basics - Anfänger-Themen 35
A Regex gesucht Java Basics - Anfänger-Themen 3
E Java Einführung gesucht. Java Basics - Anfänger-Themen 7
G TrayIcon für JSF-Applikation -> Tutorial gesucht Java Basics - Anfänger-Themen 4
T Designpattern gesucht Java Basics - Anfänger-Themen 3
J Nachhilfe oder Ähnliches gesucht ! Programm für Berchng. ! Java Basics - Anfänger-Themen 7
G Zugriff auf Webservice -> Tutorial gesucht Java Basics - Anfänger-Themen 2
A Tutorial zur Datenbankanbindung gesucht Java Basics - Anfänger-Themen 2
Q Beste Komponenten für 3-Schichten-Architektur gesucht Java Basics - Anfänger-Themen 7
D Übungsaufgaben gesucht Java Basics - Anfänger-Themen 4
M Zwei Lösungsvorschläge für eine Aufgabenstellung gesucht Java Basics - Anfänger-Themen 3
H Konstruktor gesucht Java Basics - Anfänger-Themen 6
1 Ansatz/Hilfe für ein Tool gesucht Java Basics - Anfänger-Themen 4
G Rätsel: Vorschlag für einen sinnvollen Algorythmus gesucht. Java Basics - Anfänger-Themen 13
G Idee bzw. Hilfe gesucht Java Basics - Anfänger-Themen 6
U ArrayIndexOutOfBoundsException - dringend Hilfe gesucht Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben