2016-10-12 4 views
-4

ich kämpfe mit meinem Programm ausgibt. Es sollte n Fibonacci-Zahlen ausgeben, jede in einer neuen Zeile. Wenn die Fibonacci-Nummer den Bereich von unsigned int überschreitet, sollten Sie das Programm einfach beenden. Außerdem sollten Sie auf einer neuen Zeile drucken, wie viele Fibonaccis von "n" angezeigt werden. HierIch versuche, ein Programm zu schreiben, das "n" (Eingabe) fibonacci Zahlen

ist der Code so weit:

#include<iostream> 
#include<limits> 

using namespace std; 

int main() 
{ 
    unsigned int n; 

    cout << "Please enter the amount of fibonaccis you would like to compute: " << endl; 
    cin >> n; 

    unsigned int next=1; 
    unsigned int current=0; 
    unsigned int c = current; 
    unsigned int temp; 
    unsigned int counter=1; 

    //This bool returns true as soon as an overflow occurs 
    bool overflow; 

/*This bool checks, whether the newly computed 
    number is bigger than the previous number 
    (which may not be the case if an overflow occurs)*/ 

    bool nextBigger; 



    /*Somehow, I could only handle the first 
    inputs by using "bruteforce". 
    If I tried to combine it with the "main loop", 
    it got all messy. */ 

    if(n==0) 
    { 
    std::cout << "0" << " of " << n << endl; 
    } 

    else if(n==1) 
    { 
    std::cout << "0" << endl << "1 of " << n << endl; 
    } 

    else if(n==2) 
    { 
    std::cout << "0" << endl << "1" << endl << "2 of " << n << endl; 
    } 

    else 
    { /* This for-loop increases (at least it should) a counter 
     by one for each computation of a valid fibonacci number*/ 

     for(counter=1;counter<n;++counter) 
     { 

     overflow = (c > (std::numeric_limits<unsigned int>::max()-temp)); 

     if(!overflow && nextBigger) 
     { 
      cout << next << endl; 

     } 

     else 
     { 
      break; //If overflow or next number < previous number, exit program 
     } 

     temp = next; //temp is storage variable for next 
     c = current; //storage variable for current 
     next += current; //next is being altered: it becomes the new fibonacci number 
     current = temp; //current gets value of temp(value of next before being altered) 
    } 

    nextBigger = (next > current); 

    cout << counter << " of " << n << endl; //Output of how many fibonaccis were computed 
} 

    return 0; 
} 

So, hier ist das Ding. Ich habe es in CodeBlocks programmiert, wo es perfekt funktionierte. Aber dann habe ich versucht, es in Codeboard hochzuladen (als Aufgabe). In Codeboard funktionierte es plötzlich gar nicht. Vielleicht hat es mit den verschiedenen Compilern zu tun, aber ich habe wirklich keine Ahnung, wie ich dieses Problem beheben könnte. Ich bin also ziemlich verwirrt und ich wäre sehr dankbar für Hinweise, Ideen, Korrekturen oder Inspirationen.

(Ich bin ein Anfänger, so hoffe ich, den Code verständlich und lesbar ist. Ich für Verbesserungsvorschläge offen bin.)

+2

Erhalten Sie eine Fehlermeldung? Falsches Ergebnis? Oder was funktioniert sonst nicht genau? – deviantfan

+3

Sie müssen uns mehr als ['* nicht funktioniert *'] geben (http://importblogkit.com/2015/07/does-not-work/). – Biffen

+1

Willkommen bei Stack Overflow! Es klingt, als müssten Sie lernen, wie Sie einen Debugger verwenden, um durch Ihren Code zu gehen. Mit einem guten Debugger können Sie Ihr Programm Zeile für Zeile ausführen und sehen, wo es von dem, was Sie erwarten, abweicht. Dies ist ein essentielles Werkzeug, wenn Sie programmieren wollen. Weiterführende Literatur: [Wie kleine Programme zu debuggen] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) –

Antwort

0

auf den Code der Suche scheint es, den Körper der if-Anweisung

if(!overflow && nextBigger) 
    { 
     cout << next << endl; 
    } 

wird nie ausgeführt. Vielleicht drucken Sie die Werte für overflow und nextBigger bei jeder Schleifeniteration, damit Sie debuggen können, was passiert.

Verwandte Themen