Satz des Pythagoras

deni100

Aktives Mitglied
Java:
package satz;

public class haupt {

	public void eingabe() {
		
		int a;
		int b;
		int c;
		int d;
		int ausgabe ;
		a= 0;
		b =0;
		c =0;
		d = 0;
		ausgabe = c*2;
		
		for (b=0;((a*2)*(b*2)==ausgabe);b++){
				
			
			if (b<=9){
				a++;
				b=0;
				
			}
			if ((a*2)*(b*2)==ausgabe){
			System.out.println (ausgabe);
			
			}
			
			
		}		
		
		
	}

}


Hallo ich muss mit einem Algorithmus (Implementation), dabei muss ich den Satz des Pythagoras anwenden.

also (a*2)*(b*2)==(C*2)

Ich muss also die Triples herausfinden :S.
Was mache ich falsch ?
 

XHelp

Top Contributor
Was musst du machen?
Es schadet übrigens nicht dir anzugucken, wie der Satz des Pythagoras richtig lautet

P.S. Klassennamen werden groß geschrieben. Warum lautet deine Methode zur Berechnung
Code:
eingabe
? oO
 
S

SlaterB

Gast
zur Sicherheit ob du nicht noch viel mehr falsches eingebaut hast am besten mal testen..
a=3, b=4, c=5 ist immer gute Kombi
 

deni100

Aktives Mitglied
zur Sicherheit ob du nicht noch viel mehr falsches eingebaut hast am besten mal testen..
a=3, b=4, c=5 ist immer gute Kombi

Die Aufgabe ist :
Gesucht sind alle Zahlen a, b und c von 1 bis zu einer Obergrenze due eub sikches Tripel erzeugen.

Ich glaube ich habe die variable c bisschen falsch gemacht und die Obergrenze nicht angesetzt :S


Was denkt ihr, sollte ich lieber versuchen es mit einer Zählerschleife oder mit ner while Schleife zu machen ? Eher Zählerschleife oder nicht ?
 
Zuletzt bearbeitet:

deni100

Aktives Mitglied
Java:
package satz;

public class haupt {

	public void Eingabe() {
		
		int a;
		int b;
		int c;
		int d;
		int ausgabe ;
		a= 0;
		b =0;
		c =0;
		d = 0;
		ausgabe = (int) Math.pow(c, 2);
		
		while ((a*2)+(b*2)!=ausgabe){//for (d=0;(a*2)+(b*2)==ausgabe;d++){
			c++;
			if (c<=9){
				b++;
				c=0;
				if (b<=9){
					a++;
					b=0;
				}
				
				}
				
			}
			
		if ((a*2)+(b*2)==ausgabe){
			System.out.println (ausgabe);
			
		}
		
	}
}

Was ist wieder falsch daran ?
 
Zuletzt bearbeitet:

XHelp

Top Contributor
Du hast 3 Werte und bei diesen 3 Werten gibt es eine Obergrenze... Trivialste Lösung wäre wohl:
Java:
for (int a = 1;a<grenzeA;a++) {
  for (int b = 1;b<grenzeB;b++) {
    for (int c = 1;c<grenzeC;c++) {
 

deni100

Aktives Mitglied
Du hast 3 Werte und bei diesen 3 Werten gibt es eine Obergrenze... Trivialste Lösung wäre wohl:
Java:
for (int a = 1;a<grenzeA;a++) {
  for (int b = 1;b<grenzeB;b++) {
    for (int c = 1;c<grenzeC;c++) {



Ja ,aber die müssen nicht parallel sondern, erst muss c bis 10 , danach wieder auf 0 und b auf 1 und b auf 10 dann wird a 1 und b wieder 0 usw...
 

XHelp

Top Contributor
Übrigens: ein Dreick mit Seitenlänge 0 ist ein wenig sinnbefreit.
Es sind 3 verschachtelte Schleifen. Mach doch in der Mitte ein Sysout, wo du a,b und c ausgibst, dann wird es dir vllt klarer.
 

Tain

Mitglied
habe ich es übersehen oder kam bisher nicht Math.pow vor die man fürs potenzieren benötigt

musst einfach nur Math.Pow(BasisA,Hoch) + Math.Pow(BasisB,Hoch) == Math.Pow(BasisC,Hoch) abfragen
 

henpara

Bekanntes Mitglied
leider bischen offtopic, aber:
Übrigens: ein Dreick mit Seitenlänge 0 ist ein wenig sinnbefreit.

wenn es nur darum geht Lösungen zur Gleichung a^2+b^2=c^2 zu finden geht die 0 als Wert schon klar, ist zwar trotzdem recht sinnbefreit, aber sicherlich eine Lösung, man könnte sie allgemein als "triviale Lösung" extra betrachten :D

OT:
die while schleife wird, wie bone2 auch schon angemerkt hat garnicht benutzt, da 0+0 immer = 0 ist.
 

henpara

Bekanntes Mitglied
Java:
      int a;
        int b;
        int c;
        int d;
        int ausgabe ;
        a= 0;
        b =0;
        c =0;
        d = 0;
        ausgabe = (int) Math.pow(c, 2);
Das ist aus seinem letzten längeren Codeschnipsel.
ich sehe da:
a=b=c=d=ausgabe(0^2)=0
und somit auch a^2+b^2=ausgabe^2. (0+0=0)

siehe hier
Java:
while ((a*2)+(b*2)!=ausgabe){
 

mariusbopp

Bekanntes Mitglied
oO ich steh grade auf dem schlauch

du hast doch nicht nur (int) Math.pow(c, 2) sondern auch (int) Math.pow(a, 2) (int) Math.pow(b, 2)

was auch jeweils nicht 0 wäre oder

wenn man die werte dann jeweils in ne var schreibt und die dann addiert kommt doch dann auch nicht 0 raus

du hast ja dann eig ausg=(int) Math.pow(a, 2)+(int) Math.pow(b, 2) und ausg==c wenn es dann so ist
 
Zuletzt bearbeitet:
B

bone2

Gast
das letzte was Deni100 geschrieben hat ist logisch völlig sinnbefreit und löst in keinster weise die aufgabe, die lösung wurde ja schon gegeben, mit drei zählschleifen ineinander. schauen wie hoch die zahlen maximal werden sollen und in der mitte ein
Java:
if (Math.pow(a,2)+Math.pow(b,2) == Math.pow(c,2) {
    system.out.print("tripel " + a + b + c)
}
 

mariusbopp

Bekanntes Mitglied
ja genau so seh ich das nämlich auch...deswegen verstehe ich das von "henpara" nicht so...???:L
edit habe die ganze zeit meinem stat seinen gelesen dann macht es natürlich sinn!!!

sorry
 
Zuletzt bearbeitet:

deni100

Aktives Mitglied
Java:
package satz;
import grundgeruest.*;
public class haupt {

	public void Eingabe() {
		int grenzeA=20;
		int grenzeB=20;
		int grenzeC=20;		
		int a =1;
		int b =1;
		int c =1;		
		for ( a = 1;a<grenzeA;a++) {					
			
			for ( b = 1;b<grenzeB;b++) {					
				
				for ( c = 1 ;c<grenzeC;c++){
																									
				}				
				
				}				
			
			if ((a*a)+(b*b)==(c*c))
				System.out.println  ("Diese Zahlen sind ein Triple: "+a+"² + "+b+"² = "+c+"²");
					
				       
						
			}
				
	}//Eingabe
		
}//Class

Wo ist denn der Fehler ?
 
Zuletzt bearbeitet:

Landei

Top Contributor
das letzte was Deni100 geschrieben hat ist logisch völlig sinnbefreit und löst in keinster weise die aufgabe, die lösung wurde ja schon gegeben, mit drei zählschleifen ineinander. schauen wie hoch die zahlen maximal werden sollen und in der mitte ein
Java:
if (Math.pow(a,2)+Math.pow(b,2) == Math.pow(c,2) {
    system.out.print("tripel " + a + b + c)
}

Und auch das ist ein fehlerhaftes Idiom, auch wenn es in diesem Fall (für kleine Werte) funktionieren wird. Ein Test wie [c]Math.pow(0.3, 2) == 0.09[/c] geht nämlich in die Hose. Fließkomma-Zahlen sollten nie direkt mit == verglichen werden, sondern man sollte sich immer gegen kleine (auf der Ungenauigkeit der binären Darstellung beruhende) Abweichungen absichern, z.B. mit [c]Math.abs(a-b) < epsilon[/c] wobei epsilon eine kleine positive Zahl wie 0.0000001 ist.

Bei ints treten solche Probleme nicht auf, also ist der Vergleich [c]a*a + b*b == c*c [/c] der Math.pow()-Variante hier eindeutig überlegen (übrigens auch bezüglich der Performance).
 

deni100

Aktives Mitglied
Java:
package satz;
import grundgeruest.*;
public class haupt {

	public void Eingabe() {
		int grenzeA=20;
		int grenzeB=20;
		int grenzeC=20;		
		int a =1;
		int b =1;
		int c =1;
		int zaehler=1;
		
		for ( a = 1;a<grenzeA;a++) {			
			
			if ((a*a)+(b*b)==(c*c))
				System.out.println  ("Diese Zahlen sind ein Triple: "+a+"² + "+b+"² = "+c+"²");
				zaehler++;
			for ( b = 1;b<grenzeB;b++) {			
				
				if ((a*a)+(b*b)==(c*c))
					System.out.println  ("Diese Zahlen sind ein Triple: "+a+"² + "+b+"² = "+c+"²");
					zaehler++;
				
				for ( c = 1 ;c<grenzeC;c++){
					if ((a*a)+(b*b)==(c*c))
						System.out.println  ("Diese Zahlen sind ein Triple: "+a+"² + "+b+"² = "+c+"²");
						zaehler++;												
					
				}	//For C			
				
			}//For B
			
			      
			
		}//For A		
			System.out.println ("Das waren die Zahlentriple");
			
			
		
			
			
	}//Eingabe
	
	
	
}//Class

Habs nun endlich herausgefunden :D.
 

Landei

Top Contributor
Das zählt definitiv falsch, so wäre es richtig:
Java:
package satz;
import grundgeruest.*;
public class haupt {
 
    public void Eingabe() {
        int grenzeA=20;
        int grenzeB=20;
        int grenzeC=20;     
        int zaehler=1;
        for (int a = 1; a<grenzeA; a++) {            
            for (int b = 1;b<grenzeB;b++) {            
                for (int c = 1 ;c<grenzeC;c++){
                    if ((a*a)+(b*b)==(c*c))
                        System.out.println  ("Diese Zahlen sind ein Triple: "+a+"² + "+b+"² = "+c+"²");
                        zaehler++;                                              
                }
            }
        }
        System.out.println ("Das waren die Zahlentriple");
    }
}
 

deni100

Aktives Mitglied
Das zählt definitiv falsch, so wäre es richtig:
Java:
package satz;
import grundgeruest.*;
public class haupt {
 
    public void Eingabe() {
        int grenzeA=20;
        int grenzeB=20;
        int grenzeC=20;     
        int zaehler=1;
        for (int a = 1; a<grenzeA; a++) {            
            for (int b = 1;b<grenzeB;b++) {            
                for (int c = 1 ;c<grenzeC;c++){
                    if ((a*a)+(b*b)==(c*c))
                        System.out.println  ("Diese Zahlen sind ein Triple: "+a+"² + "+b+"² = "+c+"²");
                        zaehler++;                                              
                }
            }
        }
        System.out.println ("Das waren die Zahlentriple");
    }
}

Achso okey muss also das nur einmal in der letzten Schleife schreiben :D
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben