Aufgabe 5 kgV

http://pp.info.uni-karlsruhe.de/lehre/W ... rn/b03.pdf
Antworten
Benutzeravatar
Dit
Beiträge: 12
Registriert: Do 13. Nov 2008, 18:38
Kontaktdaten:

Aufgabe 5 kgV

Beitrag von Dit »

Hallo
Ich brauche Hilfe. Ich will wenigstens die Aufgabe 5 fertigkriegen :(
Könnte mir jemand bitte sagen was ich falsch gemacht habe bzw. ob da was fehlt (wahrscheinlich ganze Menge ...)
Wenn ich das Program teste kommt immer 0 als Ergebnis.
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: auf Anzeigen klicken
public class Kgv {
public static void main (String[] args) {
Euklid kgvtest = new Euklid();
kgvtest.kgvshell();
}
}

class Euklid {
int x;
int y;
int ggT;
int kgV;
int a = x;
int b = y;

void kgvshell () {
Terminal.println("\n\nKleinstes gemeinsames Vielfaches\n");
String eingabezeile = Terminal.askString("kgV> ");
String[] tokens = eingabezeile.split("\\s+");
int x = Integer.parseInt(tokens[0]);
int y = Integer.parseInt(tokens[1]);

Terminal.println("");
Terminal.println("kgV(x,y) = " + kgV);
}
private int kgV (int x, int y) {
this.x = x;
this.y = y;
int ggT= ggT ( x, y );
return ( x*y )/ggT ;
}

private int ggT ( int a, int b ) {
// Schleife
while (b != 0) {
int temp = a;
a = b;
b = temp % a;

}

return a;
}
}
Gruß
Dit :pardon:
Thomas
Administrator
Beiträge: 383
Registriert: Do 23. Okt 2008, 20:16
Wohnort: Karlsruhe
Kontaktdaten:

Re: Aufgabe 5 kgV

Beitrag von Thomas »

beim ggt musst du auf jeden fall noch den ggt definieren wenn einer der zahlen = 0 ist
unr hier Terminal.println("kgV(x,y) = " + kgV); müsste eigentlich stehen + kgV(x,y) sonst hat er ja gar keine zahlen zum berechnen. das wär mir jetzt aufgefallen. du musst übrigens eigentlich net 2 extra klassen für ausgabe und methoden machen. das ne kleine is stand auf dem arbeitsblatt glaub ich, dass wir alles zusammen machen können. also so würd ichs ma ausprobiern.

PS: die exception, wenn nur eine zahl eingegeben wird fehlt noch
Benutzeravatar
Dit
Beiträge: 12
Registriert: Do 13. Nov 2008, 18:38
Kontaktdaten:

Re: Aufgabe 5 kgV

Beitrag von Dit »

Danke! wenigsten rechnet es wenn man 4 und 5 eingibt.

Code: Alles auswählen

kgV> 4 5
kgV(4 5) = 20
Wie kriege ich Komma zwischen 4 und 5 ?

wenn ich z B 91 und 21 eingebe, kommt als Ergebnis ggV von 4 und 5 raus :unknown:
weiß jemand wieso ?
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: auf Anzeigen klicken
public class Euklid {
int x;
int y;
int ggT;
int kgV;
int a = x;
int b = y;
String w;

public static void main (String[] args) {
Euklid kgvtest = new Euklid();
kgvtest.kgvshell();
}

void kgvshell () {
Terminal.println("\n\nKleinstes gemeinsames Vielfaches\n");
w = Terminal.askString("kgV> ");

String[] tokens = w.split("\\s+");
int x = Integer.parseInt(tokens[0]);
int y = Integer.parseInt(tokens[1]);

while (x > 0 && y > 0) {
Terminal.println("kgV(" +this.w + " ) = " + kgV(x,y));
w = Terminal.askString("kgV> ");
}
}
private int kgV (int x, int y) {
this.x = x;
this.y = y;
int ggT= ggT ( x, y );
return ( x*y )/ggT ;
}

private int ggT ( int a, int b ) {
// Schleife
while (b != 0 && a != 0) {
int temp = a;
a = b;
b = temp % a;

}

return a;
}
}
Thomas
Administrator
Beiträge: 383
Registriert: Do 23. Okt 2008, 20:16
Wohnort: Karlsruhe
Kontaktdaten:

Re: Aufgabe 5 kgV

Beitrag von Thomas »

String[] tokens = w.split("\\s+");
int x = Integer.parseInt(tokens[0]);
int y = Integer.parseInt(tokens[1]);

das hier is ausserhalb deiner while schleife, daher hast du immer die gleichen werte für x und y. musst du auch in die while schleife schreiben, damit die neuen werte auch berechnet werden
Benutzeravatar
Dit
Beiträge: 12
Registriert: Do 13. Nov 2008, 18:38
Kontaktdaten:

Re: Aufgabe 5 kgV

Beitrag von Dit »

:)

ok es rechnnet alles, und das Programm wird beendet wenn man 0 0 eingibt :)
Es kommt aber nicht zu Fehlermeldung (Absturz), wenn ich nur eine Zahl eingebe :(
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: auf Anzeigen klicken
public class Euklid {
int x;
int y;
int ggT;
int kgV;
int a = x;
int b = y;
String w;

public static void main (String[] args) {
Euklid kgvtest = new Euklid();
kgvtest.kgvshell();
}

void kgvshell () {
// Schleife
while (x >= 0 && y >= 0) {
w = Terminal.askString("kgV> ");
String[] wert = w.split("\\s+");
int x = Integer.parseInt(wert[0]);
int y = Integer.parseInt(wert[1]);
if (x == 0 && y == 0 ) {
break;
}

else if (wert.length !=2 ) {
System.out.println( "Fehler! Zwei Zahlen erwartet.");
continue;
}
Terminal.println("kgV(" +this.w + " ) = " + kgV(x,y));
continue;
}

}
private int kgV (int x, int y) {
this.x = x;
this.y = y;
int ggT= ggT ( x, y );
return ( x*y )/ggT ;
}

private int ggT ( int a, int b ) {
// Schleife
while (b != 0 && a != 0) {
int temp = a;
a = b;
b = temp % a;

}

return a;
}
}
ich muss doch mit der Länge von wert arbeiten oder?
Nukleus
Beiträge: 27
Registriert: Mi 12. Nov 2008, 18:44

Re: Aufgabe 5 kgV

Beitrag von Nukleus »

tust du ja, da du
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: auf Anzeigen klicken
else if (wert.length !=2 ) {
System.out.println( "Fehler! Zwei Zahlen erwartet.");
continue;
}
machst. Aber das machst du zu spaet. du muesstest eine ArrayIndexOutOfBoundsException bekommen. Du musst die Laenge von "wert" testen, direkt nachdem du split aufgerufen hast. Wenn split nur ein einzelnes Element liefert anstelle zwei kannst du auch nicht auf das zweite zugreifen.
Thomas
Administrator
Beiträge: 383
Registriert: Do 23. Okt 2008, 20:16
Wohnort: Karlsruhe
Kontaktdaten:

Re: Aufgabe 5 kgV

Beitrag von Thomas »

ich stell mal meinen code rein, weil ich ehrlich gesagt jetzt nicht weiß was falsch is, bin selbst auch en neuling^^. vllt findest du ja selbst was du ändern willst
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: auf Anzeigen klicken

Code: Alles auswählen

public class KgV {

	private KgV() {
	}
	
	private static int ggt(int x, int y) {
	    int a= Math.abs(x);
	    int b= Math.abs(y);
	    int teiler = 0;
	    while (b>=0 ){
            	if (a==0) {
            		teiler = b;
            		break;
            	} else if(b==0) {
            		teiler = a;
            		break;
            	}
            
			int temp = a;
			a = b;
			b = temp % a;
			teiler = a;
		}
		return teiler;
	}
	private static int kgv(int c,int d) {
		int vielfach = 0;
		if(ggt(c,d)==0){
			vielfach = 0;
		} else {
			vielfach = Math.abs((c*d)/ggt(c,d));
		} 
		return vielfach;
		
	}
	public static void main(String[] args) {
		   String eingabezeile = "";
		   String[] tokens = eingabezeile.split("\\s+");
		   int i = 1;
		   int j = 1;
		   while(!(i==0 && j==0)){
			   eingabezeile = Terminal.askString("kgV> ");
			   tokens = eingabezeile.split("\\s+");
			   if (tokens.length!=2){
				   Terminal.println("Error! Es muessen 2 Zahlen eingegeben werden.");
                                continue;
			   } else {
				   i = Integer.parseInt(tokens[0]);
				   j = Integer.parseInt(tokens[1]);
			   }
			   if (i+j!=0){
				   Terminal.println("kgV(" + i + ", " + j + ") = " + kgv(i, j)); 
			   } 
		   }
	}
}
so weit ich jetzt getestet hab läuft alles, das einzige was mich stört sind die 2breaks in der ggt-methode, die will ich gern noch weg haben
Patric
Beiträge: 99
Registriert: Do 23. Okt 2008, 22:41

Re: Aufgabe 5 kgV

Beitrag von Patric »

die Abfrage:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: auf Anzeigen klicken
if (a==0) {
teiler = b;
break;
} else if(b==0) {
teiler = a;
break;
}
brauchst du nicht wenn du mal den alogirthmus durch gehst merkst du das das automatisch von dem gemacht wird, und tu mir ein gefallen zieh mal das "int temp" aus der while raus
Nukleus
Beiträge: 27
Registriert: Mi 12. Nov 2008, 18:44

Re: Aufgabe 5 kgV

Beitrag von Nukleus »

Die Funktion zum Berechnen des ggT gibts auf dem Blatt, sollte in genau 9 Zeilen komplett implementierbar sein ;)
Die kommt ohne ein einziges if aus und braucht nur eine while-Schleife.
Tipp als Anfang:

Code: Alles auswählen

    public int ggT(int a, int b) {
	int tmp;
	while (b != 0) {
// hier fehlen 3 Zeilen
	}
	return Math.abs(a);
    }
Thomas
Administrator
Beiträge: 383
Registriert: Do 23. Okt 2008, 20:16
Wohnort: Karlsruhe
Kontaktdaten:

Re: Aufgabe 5 kgV

Beitrag von Thomas »

ok danke habs jetzt auch ohne if ;)
Antworten

Zurück zu „Blatt 3 - Abgabe 12.12.08“