Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » Java-Problem mit Iterationen » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 10 Beiträge
whileLoop

Habs jetzt anders geschachtelt und schaue da, es stimmt verwirrt verwirrt

Vielen Dank nochmal für deine Hilfe!!!
whileLoop

Danke für deine Hilfe. Ich geb einfach die erste Iteration aus, dann steht da 1000.

Das Problem ist, dass ich es genau so abgeben muss, dass die gleichen Werte rauskommen. Mit der zusätzlichen Variable stimmts leider auch nicht. Kann ich evtl das If und die whiles irgendwie anders "stapeln", damit evtl ein anderes Fileßkomma-Ergebnis rauskommt?

Das ist die Fehlermeldung, wenn ich es online abgebe:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
>> Input <<
a: 0.11378184001643404, b: 0.09161173587992272
>> Expected output <<
Iterationen: 1000
Rand: 0.34828184001665297

>> Your output <<
Iterationen: 1000
Rand: 0.36555184001667024
eulerscheZahl

In Zeile 11 muss es heißen if (x*x + y*y <= 4), das ändert aber nichts an der Ausgabe.

Bei a hast du deutlich erkennbare Rundungsprobleme. Die kannst du so ein Stück weit in den Griff kriegen (beachte die Variable f):
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
double a = 0.2; double b = 0.2;
double x = 0; double y = 0;
int n = 0; double f = 0;
while (x*x+y*y <= 4) {
	while (x*x+y*y <= 4 && n < 1000) {
		 double xtemp = x*x-y*y+a;
		 double ytemp = 2*x*y+b;
		x = xtemp;
		y = ytemp;
		n++;
	}              
	if (x*x+y*y <= 4) {
		x = 0;
		y = 0;
		a = 0.2 + (++f * 0.0001);
		n = 0;
	}
}

Der Schleifenzähler ist aber immer noch bei 445 statt bei 1000.
whileLoop

Leider bin ich doch noch nicht ganz fertig, meine Aufgabe hat sich erweitert:

Erhöhen Sie danach den Wert a schrittweise um 0.00001, bis die Anzahl der Iterationen kleiner als 1000 wird. Geben Sie dann a aus. Falls die Iterationen vorher schon unter 1000 waren, bleibt a unverändert.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
      while (x*x+y*y <= 4) { 
      
         while (x*x+y*y <= 4 && n < 1000) {
            xtemp = x*x-y*y+a;
            ytemp = 2*x*y+b;
            x = xtemp;
            y = ytemp;
            n++;
         }
                 
         if (n == 1000) {
            x = 0;
            y = 0;
            a = a+0.00001;
            n = 0;
         }
      }


Die Ausgabe sollte so ausschauen:
code:
1:
2:
3:
4:
5:
6:
a:
0.2
b:
0.2
Iterationen: 1000
Rand: 0.3757


Meine sieht so aus:
code:
1:
2:
3:
4:
5:
6:
a:
0.2
b:
0.2
Iterationen: 445
Rand: 0.3757000000001757


Steck jetzt schon ne ganze Weile, ich hatte auch schon die Ausgabe Iterationen: 1000 - Rand: 0.39323000000019326
Aber das ist ebenfalls nicht richtig.

Hast du eine Idee eulerscheZahl?
whileLoop

ja klar.

Danke eulerscheZahl Daumen hoch Daumen hoch Daumen hoch
eulerscheZahl

code:
1:
while (x*x+y*y <= 4 && n < 1000)

1. muss es <= 4 heißen, da nur bei > 4 gestoppt werden soll.
2. kommt ein UND zwischen die Bedingungen.
Dann kommt auch eine 9 raus.
whileLoop

Hey danke, mein Code schaut so aus:
code:
1:
2:
3:
4:
5:
6:
7:
8:
      
while (x*x+y*y < 4 || n < 1000) {
        xtemp = x*x-y*y+a;
        ytemp = 2*x*y+b;
        x = xtemp;
        y = ytemp;
        n = n+1;
}


Und am Anfang alles Null gesetzt, double Variablen gegeben, etc. Trotzdem wird der falsche Output geliefert, für a=0.4 b=0.4 sollen 9 Interationen rauskommen.
eulerscheZahl

code:
1:
2:
3:
4:
5:
6:
7:
x=0; y=0;
while (...) {
    x_temp = ...
    y_temp = ...
    x = x_temp;
    y = y_temp;
}
whileLoop

Okay danke erstmal für deine Hilfe, also wenn ich das jetzt richtig verstanden habe, gebe ich x und y vorerst den Wert 0 und speichere sie dann unter einer Hilfsvariable ab. Okay, aber wie setzt sich die Formel zusammen x = x_temp * x_temp - y_temp * y_temp + a ??

LG
eulerscheZahl

Variablen initialisieren: a,b einlesen, x,y,Schleifenzähler zu 0 setzen.
In der Schleife: x_temp und y_temp berechnen (sonst würdest du ja eine Variable überschreiben, von der du noch den alten Wert brauchst). Die Ergebnisse dann dem x und y zuweisen. Schleifenaustrittsbedingungen prüfen, fertig.
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen.