Fibonacci-Zahlen & kopfgesteuerte Schleifen & Strukt

Status
Nicht offen für weitere Antworten.

alphaChill

Aktives Mitglied
Hallo an alle...


bin gerade dabei ein paar kleine Probleme zu lösen...

Ich würde gern ein Struktogramm für die Fibonacci-Zahlen (bis 13) anlegen (also: 1 1 2 3 5 8)

Mein Ergebnis würde so aussehen:

090908182754_struktog.JPG


Frage: brauche ich tatsächlich eine Eingabe? Ich lege den Wert ja eigentlich bei der Initialisierung fest.


Mein Java-Code sieht wie folgt aus:

Code:
		int z = 0;
		int n = 13;
		int i = 1;
		
		for(i = 1; i < n; i = z + i){
			z = i + z;
			System.out.println(i);
			System.out.println(z);
		}

Die Ausgabe passt auch (1 1 2 3 5 8), aber ich das ganze wie folgt ausführen lasse (mit einem zusätztlichen "System.out.println(i)"), habe ich als Ausgabe folgendes Ergebnis: "1 1 2 3 5 8 13". Gibt es nicht einen Weg, um das im Programmcode zu vereinfachen? Mir gefällt das
Code:
i = z + i){
			z = i + z;
nicht.

Noch eine Frage: Wo kann man Übungen zu kopfgesteueren Schleifen finden, bearbeiten und lernen? Mir geht es hier hauptsächlich um die Anwendung von Struktogrammen.

Gruß alphaChill
 
Kann mir hier keiner helfen?

... entschuldigt, wenn ich aufdringlich erscheine... bräuchte die Antworten bis 18 Uhr...

Gruß alaphaChill
 
also
i = z + i;
und
z = i + z;
kannst du doch wohl kaum vermeiden, wenn das auch im Struktogramm so steht, oder kannst du das beliebig modifizieren?

ansonsten vielleicht eine while-Schleife und zwei gleichberechtige Fibonaccizahlen z1 und z2, die du ganz normal hochaddierst,

zwei Ausgaben in einem Schleifendurchlauf ist in jedem Fall schlecht, so bekommst du ja immer eine gerade Anzahl von Ausgaben, nicht genau so viele wie benötigt

zu Struktugramm-Fragen wirds schwieriger, wer benutzt sowas schon, wenn nicht gerade in einer entsprechenden Hochschul-Vorlesung/ Schulklasse
 
Ja, sowas

i = z + i;
z = i + z;

kann man auch schreiben als

i += z;
z += i;;

aber das bringts ja jetzt nicht so....

Und Übungsaufgaben ... müßt ich auch erst Websuchen. Denk' dir irgendwelche Beispiele aus - vielleicht ganz dediziert, mit der Unterscheidung der Schleifentypen, die sich aus der natürlichen Sprache ergibt:
"Für alle Zahlen ... " oder "Für alle Elemente..." -> for-Schleife
"Solange eine Bedingung erfüllt ist, wiederhole...." -> while-Schleife
Im Gegensatz zu "fußgesteuerten" Schleifen
"Wiederhole.... solange eine Bedingung erfüllt ist" -> do-Schleife
 
Das Struktogramm habe ich selbst erstellt ;-) Wollte wissen, ob man das so stehen lassen kann...
Und die Zahlen sollen über eine Kopfgesteuerteschleife ausgegeben bzw. errechnet werden...
 
2 Sachen:

1. Im Struktogramm wird i=0 gesetzt und im Code i=1 (wobei i=1 richtig ist, da sonst unendlich lange 0 ausgegeben wird).
2. Wenn du im Struktogramm "wiederhole solange i<n" schreibst, warum machst du es im Code nicht genauso und schreibst "while(i<n)"?

Wie SlaterB bereits sagte sind zwei println in einer Schleife nicht zu empfehlen.

Mache es einfach ausführlich, übersichtlich und vor allem richtig:

Code:
int fNminus2 = 0;
int fNminus1 = 1;
int N = 13;
int fN = 0;

System.out.print(fNminus2 + " ");
System.out.print(fNminus1 + " ");
fN = fNminus1 + fNminus2;
fNminus2 = fNminus1;
fNminus1 = fN;

while(fN<N)
{
	System.out.print(fN + " ");
	fN = fNminus1 + fNminus2;
	fNminus2 = fNminus1;
	fNminus1 = fN;
}

Jetzt weißt du auch nach 10 Jahren noch, was du da geschrieben hast (sogar ohne Kommentare).

EDIT: So "musst" du es machen, wenn du eine Kopfgesteuerte Schleife nimmst, zu empfehlen währe aber eine Fußgesteuerte. (Natürlich musst du es nicht so machen, aber es ist verständlicher.)
 
Übrigens ist es sehr interessant über die Fibonacci-Zahlen bei Wikipedia zu lesen, wie sehr Mathematik doch in der Natur Einfluss nimmt... Wahnsinn, unbedingt mal weiterbilden Leute!
 
Ach ne, damit wird die zweite Zuweisung zu spät durchgeführt, sorry!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben