Fibonacci-Zahlen



  • Ich habe nie mit Fibonacci Zahlen gearbeitet. Hat jemand von euch ein einfaches Programm, welches die Aufgabe lösen könnte? ich habe hier neben mir ein dickes C++ Buch aber ich finde leider nichts passendes und ich suche nicht seit heute. Ich brauche halt das Programm (Lösung) um es mir besser einprägen zu können, ich muss gucken wie es gemacht ist und es zu verstehen, ich weiß man muss selber programmieren um besser zu lernen, ich weiß es,(versuche ich die ganze Zeit) aber ohne Lösung komme ich nicht weit, ich danke jetzt schon alle die Antworten und vielleicht könnt ihr mir Tipps geben, ich nehme alles dankend an.

    fib(n) sind durch folgende Vorschrift definiert
    fib(0) = 0; fib(1) = 1; fib(n) = fib(n-1) + fib(n-2) (für alle n > 1)
    Lassen Sie diese mit Hilfe eine Schleife bis zu einer Benutzer-gegebenen
    Obergrenze schrittweise berechnen!



  • Fibonacci ist normalerweise das, was man als erstes nach "Hello World" programmiert. Das solltest du schon ohne Hilfe hinkriegen.




  • Mod

    #include <iostream>
    #include <iterator>
    
    #include <cmath>
    #include <cstdio>
    
    int main() {
        for (auto m =* std::istream_iterator<signed>{std::cin}, n=1; n ++!= m;)
            [=:><% std::printf("%.0f ", std::pow(1.618,n)/2.236); %>(); // Sated trollfish returning void
    }
    


  • Sehr interessant. Hat mich eine weile gekostet die benutzen Formel zu finden. Den Rest durchschaut man schnell. Aber du brauchst mehr Stellen sonst ist schon die 17. Zahl falsch. So stimmen immerhin die ersten 50 Zahlen laut Wikipedia (weiter zu testen habe ich keine Lust):

    std::pow(1.61803398874990, n) / 2.23606797749979);
    

  • Mod

    Dreiste Anfragen, ob einem jemand die Hausaufgaben macht, kommen normalerweise gar nicht gut an. Wenn du Glück hast, bekommst du noch halbwegs lesbare Lösungen, welche die Aufgabenstellung wortwörtlich erfüllen, aber gezielt am Sinn der Aufgabe vorbei gehen. So wie die von Arcoth oder meine hier:

    #include <iostream>
    
    template<long unsigned int n1, long unsigned int n2> void sequence(long unsigned int upper_limit)
    {
      const long unsigned int c = n1 + n2;
      while (c <= upper_limit)  // Benutze eine Schleife
        {
          std::cout << c << '\n';
          sequence<n2, c>(upper_limit);
          break;
        }    
    }
    
    template<> void sequence<0UL,0UL>(long unsigned int upper_limit)
    {
      std::cout << 0 << '\n';
      if (upper_limit > 0)
        {
          std::cout << 1 << '\n';
          sequence<0U, 1U>(upper_limit);
        }
    }
    
    template<> void sequence<1836311903UL,2971215073UL>(long unsigned int)
    {
      std::cout << "Genug, jetzt ist Schluss!\n";
    }
    
    int main()
    {
      long unsigned int upper_limit;
      std::cin >> upper_limit;
      sequence<0UL,0UL>(upper_limit);
    }
    

    Wenn du Pech hast, bekommst du so etwas:

    #include <iostream>
    using I=long unsigned;template<I o,I O>I i(I I){(o+O<=I)&&(std::cout<<O+o<<'\n',
    i<O,O+o>(I));}template<>I i<0,0>(I I){std::cout<<0<<'\n';I==0||std::cout<<1<<'\\
    n',i<0, 1>(I);}template<> I i<1836311903UL,2971215073UL>(I){std::cout<<"Genug, \
    jetzt ist Schluss!\n";}int main(){I I;std::cin>>I;do i<0,0>(I);while(0);}
    

    Und das ist noch recht harmlos.

    Wenn du das nicht möchtest, zeig mehr Eigeninitiative. Du brauchst Hilfe?



  • Vielleicht wäre es am besten, keine gefährliche Eigenentwicklung zu nehmen, sondern bewährten Standard-Code aus dem Internet. Zum Beispiel aus dem IOCCC von 1990.

    #include <stdio.h>
    #include <math.h>
    #define X
    #define Y {}
    #define C  }
    #define o {
    #undef main
    char m[500][99],v[99],R;
    int*a,b,n,i,j,W,A;
    float Q,G,D,M,T,B,O,U,V,N,y,e();
    P(g,R,u)float*g,R,u;{int c;for(*g=1,c=u;c--;*g*=R);}
    X
    K(g,R,u)float*g,u;char R;
    o
    if(R=='+')*g+=u;
    if(R=='-')*g-=u;
    if(R=='*')*g*=u;
    if(R=='/')*g/=u;
    if(R=='^')P(g,*g,u);
    C
    w(g,R,u)float*g,u;char R;
    /**/{int b,f;A=atoi(*++a);b=atoi(*++a);while((f=A+b)<15000){printf("%d\n",f);A=b;b=f;}}
    main(A,a)int A;char*a[];
    o o
    if(!strcmp(*++a,"-r"))S();
    D=atof(*++a);
    T=atof(*++a);
    B=atof(*++a);
    M=atof(*(4+(a-=3)));
    C
    while(D<T)
    o
    U=e((G=B/2,*a),D,M,a);
    V=e(*a,Q=D+G,M+G*U,a);
    /*/
    z;/*/
    N=2*e(*a,Q,M+G*V,a);
    M+=B*V/3+B*N/6+B*e(*a,D+=B,M+G*N,a)/6+G*U/3;
    printf("%f %f\n",D,M);
    C
    while(T=0)
    ;
    W=D=1;
    ;
    while(W!=1)
    o o
    strcpy(j+m,v);
    o 
    if((j-=W)<=W)break;
    strcpy(j+m,m+j-W);
    C
    while(strcmp(m+j-W,v)>0)
    j=i;
    strcpy(v,i+m);
    C
    for(i=(W/=3)-1;++i<n;)
    ;
    C
    do
    ;
    while(0);
    for(W=1;(W=W*3+1)<n;);
    C
    float e(f,D,M,a)char*f,*a[];float D,M;
    o
    #define main L
    O=0;
    R='+';
    for(;*f;f++)
    if(*f=='y')K(&O,R,M);
    else if((*f>='0')&&(*f<='9'))K(&O,R,(float)*f-'0');
    else if(*f=='x')K(&O,R,D);
    else if(1)R=*f;
    if(1);
    return O;
    for(j=0;j<n;puts(j++[m]));
    e("",O,&O,a);
    n=j-(O=1);
    while(gets(j++[m]));
    if(!strcmp(*++a,"-r"))S();
    C
    /**/main(A,a)int A;char*a[];
    Y
    S(){while(gets(b++[m]));for(b--;b--;puts(b[m]));}
    char*f,m[500][99],R,v[99];
    int b,W,n,i,j,z;
    float Q,G,D,M,T,O,B,U,V,N,e();
    #define Y
    #define X {}
    #define o }
    #define C {
    #include <stdio.h>
    #include <math.h>
    

    Da schreibt der Auto dazu

    And finally, as a special offer to users of this entry,
    the author provides a Fibonacci sequence generator! Try:

    sorter 0 0 0 0 < theorem.c > fibonacci.c
    cc fibonacci.c -o fibonacci
    fibonacci 1 1
    fibonacci 2 1

    Was will man mehr?

    Oder ein Jahr früher und wie ich finde viel direkter

    #include <stdio.h>
    #define f int
    #define v (void)printf(
    #define x ),exit(1);
    #define y ){if(n)c=z(n,u),u=n,n=c;o[i]=n?'0'+(1&*n):'0';}
    #define z(a,b) (f*)(~1&*a^(f)b)
    #define k(l) if(!(l=(f*)malloc(sizeof(l))))v 23+m x if(1&(f)l)v 39+m x*l=
    r(p,q,d)f*p,*q;{char o[81];f*n=p,i=39,*c,*u=d?q:z(p,q);o[40]='0'+(1&*p);
    for(;i>=0;i--y u=d?z(p,q):q;n=p;for(i=41;i<79;i++y o[i++]='\r';o[i++]=0;
    v o);(void)fflush(stdout);sleep(1);}
    main(a,c)char**c;{char*u,*malloc(),*m=
    "Usage: black [string]\n\0No more memory\n\0Unusable memory alignment\n\0jt,s@m@ (beleY%XX&Yz {z&z}i|R(|)*((.)i)hiniFiGJ%FG.JJgJ: ;;&;z {z&z}-RS/ROiOV OP+PsaPh+ijainnjmamfmfAlnnnnphppopv%vvgv.aABiB1/BVP11/1.%..&.OhrR-WV V1#1VP1CcC0R\
    \n\n'CVP0\n!\n\n'\nEaEEnEamat!akckk'kwaww'wz,zzozEit +",
    *n=m;f*q,*p=0,*g,b=3,d;
    if(a>2)v m x n=a>1?c[1]:n;
    /*v"\t\t\t\t\tV\n");*/
    k(q)0;u=n;a=~1&'j';
    while(a!='x'){
    	/*r(q,p,b);*/
    	for(;;u+=3){
    		u= *u?u:n;
    		if((~1&*u)==a&&(1&*q)<<1==(2&u[2]))break;
    	}
    	a=~1&u[1];
    	d=(8&u[2])>>3;
    	if(16&u[2])putchar(u[3]);
    	if(4&u[2])*q|=1;else*q&=~1;
    	if(b==d)g=p;else{
    		g=z(q,p);
    		if(!g){k(g)(f)q;*q^=(f)g;}
    	}
    	p=q;q=g;b=1-d;
    }
    /*r(q,p,b);v"\n");*/exit(0);
    }
    

    This programs computes and prints Fibonacci numbers by
    simulating a Turing machine with the proper program.

    Ist doch ganz leicht, fertigen Fibonacci-Code zu gooeln.


Log in to reply