Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

11

12.04.2016, 17:11

Wenn du die 13. Fibonacci-Zahl berechnen willst, bist du dir sicher, dass auf dem Weg dorthin nur 5 berechnet werden sollen?
Edit: Und benutze den Debugger. Du hast da Variablen, die sich nicht ändern. Sollen sie sich nicht ändern? Dann mach sie zu konstanten? Sollen sie sich ändern? Dann ist dein Code falsch.

Nein, ich wollte es so machen, dass man eine beliebige Zahl eingibt und dann alle Fibonacci-Zahlen bis zu der eingegebenen Zahl bekommt. Bei meinem Beispiel sollte eigentlich jede Zahl bis 13 ausgegeben (1, 2, 3, 5, 8, 13) werden.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

12

12.04.2016, 18:09

Die wichtigsten Zeilen, die für den Fehler verantwortlich sind.

C-/C++-Quelltext

1
2
3
        num = temp1 + temp2;
        temp2 = num;
        temp1 = temp2; // entspricht temp1 = num;
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

13

12.04.2016, 18:21

Mal allgemein. Natürlich kann man Fibonacci rekursiv und was weiß ich nicht wie alles lösen. Es geht aber auch bedeutend einfacher.
N0 = 1
N1 = 1
N2 = N1 + N0
N3 = N2 + N1
N4 = N3 + N2
N5 = N4 + N3
und so weiter. Wenn man das mal genauer betrachtet fällt einem auf dass man für einen Wert Nn im Prinzip nur die zwei Vorgänger benötigt. Das ganze lässt sich also im Prinzip mit Zwei Variablen als Speicher lösen, welche die letzten beiden Berechneten Werte enthalten. Etwas einfacher ist es wenn man anstatt zwei separater Variablen ein Array verwendet. Man kann das ganze auch mit 3 Werten umsetzen, wobei man dann immer den aktuellen und die beiden vorausgehenden Werte speichert. Das fällt vielleicht für den Anfang etwas leichter. Im Prinzip würdest du einfach beide Werte des Arrays addieren und in die Stelle des Arrays schreiben welche den ältesten Wert hat. Welche Position die richtige ist würde sich mit Hilfe von Modulo recht einfach bestimmen lassen. Die Lösung verbraucht wenig Speicher und viel weniger Platz auf dem Stack.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

MitgliedXYZ

Alter Hase

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

14

12.04.2016, 18:51

Eine alternative zur rekursiven Lösung ist noch die Formel von Moivre/Binet.

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

15

12.04.2016, 22:19

Wenn du die 13. Fibonacci-Zahl berechnen willst, bist du dir sicher, dass auf dem Weg dorthin nur 5 berechnet werden sollen?
Edit: Und benutze den Debugger. Du hast da Variablen, die sich nicht ändern. Sollen sie sich nicht ändern? Dann mach sie zu konstanten? Sollen sie sich ändern? Dann ist dein Code falsch.

Nein, ich wollte es so machen, dass man eine beliebige Zahl eingibt und dann alle Fibonacci-Zahlen bis zu der eingegebenen Zahl bekommt. Bei meinem Beispiel sollte eigentlich jede Zahl bis 13 ausgegeben (1, 2, 3, 5, 8, 13) werden.

Das klingt unsinnig. Dann müsste der User wissen, ob die eingegebene Zahl eine Fibonacci-Zahl ist. Ansonsten kommt es zu unerwartetem Verhalten oder Fehlermeldungen durch das Programm.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

16

12.04.2016, 22:21

Die wichtigsten Zeilen, die für den Fehler verantwortlich sind.

C-/C++-Quelltext

1
2
3
        num = temp1 + temp2;
        temp2 = num;
        temp1 = temp2; // entspricht temp1 = num;

An dem Code ist noch wesentlich mehr falsch, siehe mein Kommentar
Und benutze den Debugger. Du hast da Variablen, die sich nicht ändern. Sollen sie sich nicht ändern? Dann mach sie zu konstanten? Sollen sie sich ändern? Dann ist dein Code falsch.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

17

13.04.2016, 04:35

Das klingt unsinnig. Dann müsste der User wissen, ob die eingegebene Zahl eine Fibonacci-Zahl ist. Ansonsten kommt es zu unerwartetem Verhalten oder Fehlermeldungen durch das Programm.

Nein, ich wollte es so machen, dass man eine beliebige Zahl eingibt und dann alle Fibonacci-Zahlen bis zu der eingegebenen Zahl bekommt. Bei meinem Beispiel sollte eigentlich jede Zahl bis 13 ausgegeben (1, 2, 3, 5, 8, 13) werden.

Warum soll es dabei zu Fehlverhalten kommen? In der Uni hatten wir am Anfang mal die Aufgabe alle Primzahlen bis 100 auszugeben. Die 100 ist auch keine Primzahl. Niemand spricht davon dass die obere Schranke inklusive sein muss. Wenn du alle Fibonacci Zahlen bis zur 25 haben möchtest dann muss die 25 ja nicht zwangsweise eine Fibonaccizahl sein. Du möchtest eben nur alle Fibonaccizahlen haben die kleiner gleich der 25 sind. Daran ist nichts falsch.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

18

13.04.2016, 09:25

Das klingt unsinnig. Dann müsste der User wissen, ob die eingegebene Zahl eine Fibonacci-Zahl ist. Ansonsten kommt es zu unerwartetem Verhalten oder Fehlermeldungen durch das Programm.

Nein, ich wollte es so machen, dass man eine beliebige Zahl eingibt und dann alle Fibonacci-Zahlen bis zu der eingegebenen Zahl bekommt. Bei meinem Beispiel sollte eigentlich jede Zahl bis 13 ausgegeben (1, 2, 3, 5, 8, 13) werden.

Warum soll es dabei zu Fehlverhalten kommen? In der Uni hatten wir am Anfang mal die Aufgabe alle Primzahlen bis 100 auszugeben. Die 100 ist auch keine Primzahl. Niemand spricht davon dass die obere Schranke inklusive sein muss. Wenn du alle Fibonacci Zahlen bis zur 25 haben möchtest dann muss die 25 ja nicht zwangsweise eine Fibonaccizahl sein. Du möchtest eben nur alle Fibonaccizahlen haben die kleiner gleich der 25 sind. Daran ist nichts falsch.

Liegt wahrscheinlich an meiner Denkweise, die bei sowas mathematischem dann oft auch Mathematik anwendet, und da gibt es kein Element in der Fibonaccifolge, das 25 ist.
Am Ende würde man ja eine Funktion fibonacci(n) haben und die sollte dann meines Erachtens die n-te Fib.-Zahl liefern.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

19

13.04.2016, 09:29

Liegt wahrscheinlich an meiner Denkweise, die bei sowas mathematischem dann oft auch Mathematik anwendet, und da gibt es kein Element in der Fibonaccifolge, das 25 ist.
Am Ende würde man ja eine Funktion fibonacci(n) haben und die sollte dann meines Erachtens die n-te Fib.-Zahl liefern.

Ist doch im Ermessen des Programmierers, wie er sein Programm definiert. Sehe da kein Problem bei alle Fib Zahlen bis zu einem Maximum von x auszugeben.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

20

13.04.2016, 09:45


Liegt wahrscheinlich an meiner Denkweise, die bei sowas mathematischem dann oft auch Mathematik anwendet, und da gibt es kein Element in der Fibonaccifolge, das 25 ist.
Am Ende würde man ja eine Funktion fibonacci(n) haben und die sollte dann meines Erachtens die n-te Fib.-Zahl liefern.

Auch in der Mathematik könnte man das so definieren. fibonacci(n) könnte die Menge aller Fibonacci Zahlen <= n zurück geben, was genau dieser Aufgabenstellung hier entspricht. Das ist alles schon ok soweit.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige