/* ÜBUNG 7 AUFGABE 5 */ #include #include /* Hilfsfunktion, die (unter Windows) das Programm erst beendet, * nachdem (unter Windows) eine Taste gedrückt wurde. War nicht * Teil der Aufgabe, ist aber nützlich. */ void myexit(int code) { #ifdef _WIN32 /* Nur unter Windows: */ system("PAUSE"); /* Auf Tastendruck warten */ #endif /* Ende (Windows-Abfrage) */ exit(code); } /* Hinweis: Durch Ausprobieren wurde ermittelt, dass die von fibo_iter * gelieferten Werte ab x=47 FALSCH werden, da der Wertebereich von * "int" überschritten wird. Folglich müssen wir überprüfen, ob die * Eingabewerte kleiner als 47 sind. */ #define FIBOMAX 47 int fibo_iter(int x) { int fibo_xminus2 = 0; int fibo_xminus1 = 1; int fibo = 0; int zaehler = 2; if(x >= FIBOMAX) {/* Fehlermeldung ausgeben ... */ printf("fibo_iter kann leider nur für Eingaben" " kleiner als %d eine Fibonacci-Zahl berechnen.\n", FIBOMAX); myexit(1); /* und Programm sofort verlassen */ } if(x == 0) return 0; if(x == 1) return 1; while(zaehler <= x) { fibo = fibo_xminus1 + fibo_xminus2; /* Berechnung laut Formel */ fibo_xminus2 = fibo_xminus1; /* setze fibo_xminus2 für nächsten Durchlauf */ fibo_xminus1 = fibo; /* setze fibo_xminus1 für nächsten Durchlauf */ ++zaehler; /* zaehler um 1 erhöhen */ } return fibo; } /* Beispiel-Programm, das fibo_iter() verwendet */ int main() { int zahl; printf("Bitte eine Zahl eingeben: "); scanf("%d", &zahl); printf("Die Fibonacci-Zahl von %d ist %d\n", zahl, fibo_iter(zahl) ); myexit(0); }