Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- GGT Iterativ bestimmen (http://www.informatikerboard.de/board/thread.php?threadid=1983)


Geschrieben von neuling96 am 05.12.2014 um 13:20:

  GGT Iterativ bestimmen

Hallo,
ich soll den GGT iterativ in java erstellen.
Hier mein Vorschlag:
public static GGT ( int a, int b)
{
while (a != b){
if (a>b) {
a=a-b;
b=b-a;}
}
return a;
}
}



Geschrieben von eulerscheZahl am 05.12.2014 um 14:06:

 

Und für a < b hängen wir in der while Schleife fest, bis der Nutzer ein Erbarmen hat und das Programm beendet?

Der Algorithmus sieht verkehrt aus, wirf mal einen Blick auf das, was Euklid dazu hat.
Mit modulo kommst du übrigens noch schneller ans Ziel.



Geschrieben von neuling96 am 05.12.2014 um 14:22:

 

Zitat:
Original von eulerscheZahl
Und für a < b hängen wir in der while Schleife fest, bis der Nutzer ein Erbarmen hat und das Programm beendet?


Wieso?

Wenn a<b gilt wird doch die Differenz gebildet b=b-a und solange a!=b.



Geschrieben von eulerscheZahl am 05.12.2014 um 14:37:

 

dann fehlt aber ein else.
Derzeit wird bei a>b erst etwas von a abgezogen und dann von b.

Für a < b passiert nichts, aber aus dem while kommst du auch nicht raus, da ja a != b ist.



Geschrieben von neuling96 am 05.12.2014 um 14:42:

 

public static GGT ( int a, int b)
{
while (a != b){
if (a>b) {
a=a-b;
else b=b-a;}
}
return a;
}
}

ich komm aus while raus sobald a=b gilt, und das ist auch das ggt

bsp a= 5 b=2

1 durchgang
a=3
b=2
2 durchgangg
a=1
b=2
3 durchgang
a=1
b=1

schleife beendet , da a!=b false ist


oder a=3,b=6
1)
a=3
b=3
schleife beendet, a!=b false ist

oder habe ich da ein denk fehler



Geschrieben von eulerscheZahl am 05.12.2014 um 14:50:

 

Jetzt (mit else) stimmt dein Vorgehen.
hier ist aber die Klammersetzung falsch:
code:
1:
2:
3:
if (a>b) {
a=a-b;
else b=b-a;}

das wird der Compiler so nicht schlucken - entweder
code:
1:
2:
3:
if (a>b)
    a=a-b;
else b=b-a;

oder
code:
1:
2:
3:
4:
5:
if(a > b) {
    a -= b;
} else {
    b -= a;
}



Geschrieben von neuling96 am 05.12.2014 um 14:51:

 

vielen dank Daumen hoch


Forensoftware: Burning Board, entwickelt von WoltLab GmbH