Fibonacchi !???



  • Hi habe also so n kleines Programm und ja möchte dass das ergebnis als fibonacchi wiedergegeben wird. also kann mir wer helfen? also zurzeit schauts so aus, also ganz anders. im label4 soll das ergebnis dann aufscheinen!

    {
    int summe, zahl, grenze;
    if (Key==13)
       {
        grenze=StrToInt(Edit1->Text);
    
        Label4->Caption="";
        for(zahl=1,summe=0;zahl<=grenze;zahl++)
        {
         summe=summe+zahl;
         Label4->Visible=true;
         if(zahl<grenze)
          {
           Label4->Caption=Label4->Caption+zahl+"+";
          }
          else
          {
           Label4->Caption=Label4->Caption+zahl+"="+IntToStr(summe);
          }
        }
    
       }
    }
    

    Also bitte bitte bitte helft mir!!!!!



  • gehts dir nur darum die Fibonnaci zahlen zu haben oder willst du sie wirklich über die definition der Zahlen ausrechnen lassen, ansonsten muss ich mal schauen, in den alten vorlesungsheftern steht noch die lösung der Rekursion drinnen. da kann man die zahlen direkt berechnen ohne die CPU erstmal durch die ganzen schleifen zu jagen, ne rekursive Lösung wäre auch möglich nur hier wohl die denkbar schlechteste.





  • danke Raven2 für den lösungsvorschlag.
    naja ich kenn mich ja wenig aus... könntest du das alles so in meinen Code oben einbauen, dass es dann auch wirklich stimmt !?? Bitteeee!!! Aber bitte so in meiner Form... Das wär echt sooo nett!!!!!



  • hast du das überhaupt selber geschrieben oder abgetippt ? oder warum soll man es noch wie du formatieren ?
    drück halt mal bissel mehr code raus oder zeig mehr ansätze, oder wie soll ich sehen was du mit Labe14 machen willst ?

    ps. dumme namenwahl



  • in der schule zusammen gemacht.. ich finds sehr kompliziert

    und es heißt nich Labe14 sondern Label4

    ja ich hätts gern so wie ich den ansatz hab weil ich es sonst nicht richtig versteh ...



  • Mach ich doch gerne:

    if (Key==13)
       {
        unsigned n=StrToInt(Edit1->Text);
    
        Label4->Caption="";
        Label4->Visible=true;
    
    	unsigned result = 1;
    	unsigned tmp1 = 1, tmp2 = 1;
        Label4->Caption = IntToStr(result);
    
        if( n > 1 )
           Label4->Caption = Label4->Caption + " " + IntToStr(result);
    
    	for( unsigned i = 3; i <= n; ++i )
    	{
    		result = tmp1 + tmp2;
                Label4->Caption = Label4->Caption + " " + IntToStr(result);
    		tmp1 = tmp2;
    		tmp2 = tmp2 + 1;
    	}
    
       }
    

    Edit:
    jetzt passt auch die Formatierung



  • danke.. ne allerletzte frage hätt ich noch:

    also was genau ist

    unsigned tmp1
    

    bei mir???
    also in meiner schreibweise.. !?



  • Gar nichts, da du tmp1 und tmp2 nicht hast.
    Dein Algorithmus ist fehlerhaft, daher kannst du das so gar nicht vergleichen.
    Du benutzt den Schleifenzähler und die summe um die nächste Zahl zu berechnen, das geht aber so nicht.



  • ja hab das jetzt so gemacht. einfach statt tmp1,.. int zahl1 genommen

    {
     int summe, zahl, grenze;
      int zahl1, zahl2;
    if (Key==13)
       {
        grenze=StrToInt(Edit1->Text);
    
        Label3->Caption="";
        Label3->Visible=true;
    
        summe = 1;
        zahl1 = 1, zahl2 = 1;
        Label3->Caption = IntToStr(summe);
    
        if(zahl>1)
           Label3->Caption=Label3->Caption+","+IntToStr(summe);
    
        for(zahl=3;zahl<=grenze;zahl++)
        { 
            summe = zahl1 + zahl2;
                Label3->Caption=Label3->Caption+","+IntToStr(summe);
            zahl1=zahl2;
            zahl2=zahl2+ 1;
        }
    
       }
    
       }
    

    aber muss man nicht den IF befehl in die for-schleife reinmachen oder ist das egal?



  • Nein, das ist nur dazu da, weil die 1 zwei mal in der Reihe auftaucht, wenn die Grenze größer wie 1 ist, dann steht da "1 1 " und danach kann man es ja normal ausrechnen.



  • Fibonacci ⚠


Anmelden zum Antworten