GGT

K

kneitzel

Gast
Bitte poste hier Code in Code Tags und keine Bildschirmfotos. (Vor allem bitte keine Fotos von einem Bildschirm - das ist ja noch schlechter erkennbar als Bildschirmfotos selbst...)

Und Du musst r initialisieren ehe Du es in einem Vergleich nutzt. Wenn Du den Inhalt der Schleife mindestens einmal durchlaufen lassen willst, dann wäre eine do while Schleife denkbar....
 

Christian9

Mitglied
Soweit hat es funktioniert aber ich habe da einen Fehler was den Auswurf betrifft. Ich habe als Eingabe a und b aber am Ende kommt ja a und b gleich raus . Ich dachte wenn ich nur nach A abfrage passt es - geht aber nicht. Wer kann ggf. helfen ? Danke und Gruss
* @version 1.0 from 12/5/2020
* @author
*/

public class GGT1 {
public static int euklid (int a int b ) {
int r = 1;
while (r!=0){

r=a&b;
a=b;
b=r;
}
return a;

} // end of while
public static void main(String[] args) {
int a;

a= InOut.readInt("GroessterTeiler");
System.out.println(euklid(a,b));

} // end of main

} // end of class GGT1
 
K

kneitzel

Gast
Evtl. solltest Du erst einmal sagen, was Du genau berechnen möchtest. Ich nehme an, dass Du den Größten Gemeinsamen Teiler mittels des euklidischen Algorithmus berechnen willst?

Dann sag doch erst einmal in eigenen Worten, wie der Algorithmus funktioniert. Und dann kann man einmal die Operatoren anschauen, die man da so von Java benötigt. Das binäre und (in Java der & Operator) wird nicht benötigt ...
 

Christian9

Mitglied
Danke, ja, In meinem Struktogramm habe ich fuer die Eingabe a, b
r = 1
Solange r nicht 0 sieht die Schleife vor r<= Rest a/b / a,<- b und b<-r Ausgabe a … Das ist alles soweit klar . Was mir nicht klar ist, da ich 2 EIngaben habe, b und a, wie ich dann bei der Ausgabe machen soll… Ich Weiss man koennten das auch komplett anders aufsetzen doch die Vorgabe war dieses Struktogramm…. Danke
 
K

kneitzel

Gast
Wie berechnest Du denn in Java den Rest der Operation a / b? Und was ist a & b?

Und deine main Methode ist auch nicht komplett. Da hast Du ja nur die Eingabe von a. Wo kommt denn das b her, das Du im euklid Aufruf verwendest? Aber das ist ein zweiter Punkt um den wir uns kümmern können, wenn Du die Java Operationen einmal nachgeschlagen hast.
 

Christian9

Mitglied
  1. Hallo, ja es muss a%b heissen.
  2. b kommt aus der EIngabe int b
  3. Was mache ich . Nehmen wir an a 252 und b 70 dann ist mein erster rest 42 . b wird mein neues a und der Rest ( r ) wird mein b. r ist die Differenz von a und b . Das ist soweit denke ich richtig da es die Logik ist das ich das solange mache bis am Ende a und b gleich sind un r = o . Dann gehe ich aus der Schleife wieder raus , habe meinen Wert und nun ist mein Problem wie bringe ich das zum Ausdruck da ich 2 Eingabewerte hatte ( a und b ) . Wenn ich beim Ausdruck einfach b weglasse ( da a und b gleich sind ) geht es nicht. Ich denke da fehlt was und wir hatten bisher immer nur einen Eigabewert und das ging sich dann auf. Hier bei 2 nicht.
 
K

kneitzel

Gast
Ja genau. Das hört sich gut an, das sollten die Änderungen sein, die am gepusteten Code notwendig sind.

Also dann nur noch im Code umsetzen und du hast es :)
 
K

kneitzel

Gast
Stop, hatte deine Beschreibung nicht gut genug gelesen ... 1. und 2. sind die Punkte, die im Code angepasst werden sollen ...

Bezüglich der Beschreibung: a und b müssen nicht gleich sein. Der Rest der Division ist 0 - das ist die Bedingung.

Also als Beispiel: a ist 9, b ist 3 ... 9 ist durch 3 teilbar. Also sind wir fertig.

Und deine Methode ist ja richtig mit den zwei Eingabewerten. Daher verstehe ich gerade Dein Problem nicht.
 

mihe7

Top Contributor
@Christian9 Für Code bitte hier im Editor die Schaltfläche ganz links verwenden:
Java:
public class GGT1 {
    public static int euklid (int a int b ) {
        int r = 1;
        while (r!=0){
            r=a&b;
            a=b;
            b=r;
        }
        return a;
    } // end of while

    public static void main(String[] args) {
        int a;
        a= InOut.readInt("GroessterTeiler");
        System.out.println(euklid(a,b));
    } // end of main

} // end of class GGT1

Dann sieht man z. B. gleich, dass der Kommentar "end of while" deplaziert ist :) Hat natürlich nichts mit dem Problem zu tun.
 

Christian9

Mitglied
Danke ! Mein Problem ist hier:

} // end of while
public static void main(String[] args) {
int a;

a= InOut.readInt("GroessterTeiler");
System.out.println(euklid(a,b));

Was mache ich mit b da das System immer fordert wenn ich es so eingebe int b da auch steht. Aber das klappt nicht. Wie kann man das loesen ? InOut - hatten wir gestern schon gesprochen ist tatsaechlich eine Java Klasse - auf Windows …
 
K

kneitzel

Gast
Derzeit hast du da eine Variable a deklariert und fragst nach einer Zahl die dann in a gespeichert wird.
So musst du auch die Variable b deklarieren und dann nach der zweiten Zahl fragen.
 
K

kneitzel

Gast
Ein Punkt ist noch nicht beachtet:
Es werden Zwei Zahlen eingegeben. Es muss gelten a>b. Wenn aber nun die größere Zahl als zweites eingegeben wird, dann musst du die Zahlen noch tauschen, ehe du die Schleife startest.
 
K

kneitzel

Gast
Wobei ich mich gerade frage, ob das notwendig ist. Im ersten Durchlauf tauscht er ja automatisch:
a % b ist a, wenn a < b
Und dann haben wir im nächsten Durchlauf ja a ist b und b ist Rest und damit ja a, also getauscht.

Daher wundert mich, dass die Beschreibung, die ich gelesen hatte, den Tausch erwähnt hat ...
 

Neue Themen


Oben