نمایش نتایج 1 تا 6 از 6

نام تاپیک: فیبوناچی اعداد بزرگ در C

  1. #1
    کاربر دائمی آواتار mehdi5106
    تاریخ عضویت
    مهر 1385
    محل زندگی
    جوين
    پست
    251

    فیبوناچی اعداد بزرگ در C

    با سلام خدمت همه
    سئوالی داشتم با این عنوان که چطوری میشه فیبوناچی اعداد بزرگ رو بدست آورد و در خروجی نمایش داد البته به صورت نماد علمی نباشه.
    قبلا برنامه ای مشابه همین با عنوان فاکتوریل عدد n دیده بودم حالا می خوام بدونم چطوری می تونم برنامه سری فیبوناچی عددn رو بنویسم.

    و سئوال دیگه اینکه با چه تابعی میشه مدت زمان اجرای برنامه رو محاسبه کرد به این شکل که پس از دریافت یک مقدار تایمر شروع به کار کرده و پس از اتمام برنامه مدت زمان لازم برای اجرا را نمایش دهد.
    اگه نمونه کدی در زمینه دوسئوال فوق ارائه بدین ممنون میشم.

  2. #2
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486
    برای فیبوناچی این ببین

    #include<iostream.h>
    #include<iomanip.h>
    #include<time.h>
    double fibo(int);
    void main()
    {
    int n;
    cin>>n;
    cout<<setiosflags(ios::fixed)<<setprecision(0)<<fi bo(n)<<endl;
    }
    double fibo(int n)
    {
    double a=0,b=1;
    double fib;
    if(n==0 || n==1)
    fib=n;
    else
    {
    for(int i=1;i<n;i++)
    {
    fib=a+b;
    a=b;
    b=fib;
    }
    }
    return fib;
    }
    این برنامه نسبت به تابع بازگشتی فیبوناچی اعداد بیشتری رو محاسبه میکنه. برای نشون دادن بدون نماد علمی هم از setiosflags استفاده کردم که این هم وقتی طول رشته اعداد از یه حدی بالاتر بره دیگه چاپ نمیکنه. و از یه حدی بالاتر باید این دستور رو حذف کنی و به صورت نماد علمی جواب بگیری. در کل اگه بخوای اعداد خیلی بزرگتر رو محاسبه کنی که تو double نمیگنجه باید از آرایه ها استفاده کنی.
    برای مدت زمان اجرا هم اینجا رو ببین:
    https://barnamenevis.org/showthread.php?t=83302

  3. #3
    سلام
    یکی دیگه از راه های حساب عدد فیبوناچی استفاده از عدد طلایی هست که میشه از فرمول زیر عدد فیبوناچی رو بدست آورد:
    fn     =  Phi n / 5½


    اطلاعات بیشتر رو میتونید از لینک زیر بدست بیارید:
    http://goldennumber.net/math.htm

  4. #4
    کاربر دائمی آواتار mehdi5106
    تاریخ عضویت
    مهر 1385
    محل زندگی
    جوين
    پست
    251
    از دوستان به خاطر پاسخهای مناسبشون تشکر می کنم.
    اما به برنامه زیر یه نگاهی بندازید:
    #include<iostream.h>
    #include<conio.h>
    int main()
    {
    clrscr();
    int a[1500];
    int i,f,c=0;
    long int n;
    cout<<"enter the number"<<"\n";
    cin>>n;
    a[0]=0;
    for (i = 2; i < 1500; i++)
    a[i] = 0;
    a[1] = 1;
    for (f = 1; f <= n; f++)
    {
    for (i = 1; i <1500; i++)
    a[i] = f * a[i];
    for (i = 1; i <1500; i++)
    {
    if (a[i] > 9)
    {
    a[i + 1] = a[i + 1] + a[i] / 10;
    a[i] = a[i] % 10;
    }
    }
    }
    for (i =1499 ; i >= 1; i--)
    {
    if(a[i]!=0)
    {
    c=i;
    break;
    }
    }
    cout<<"the fact of this number is:";
    for(i=c;i>=1;i--)
    cout<<a[i];
    getch();
    return 0;
    }


    برنامه فوق فاکتوریل عدد n رو بدست میاره و کامل بدون نماد علمی چاپ می کنه.حالا چطوری تابع فیبوناچی رو روی این الگوریتم پیاده سازی کنم.می خوام با روش برنامه فوق مشکلم در بدست آوردن سری فیبوناچی حل بشه.
    در ضمن آقا عماد لینکی که برای زمان اجرا داده بودین هیچ کدوم از توضیحاتش درست جواب نمی داد.

  5. #5
    احتمالا با این مسایل که به bignum معروفند آشنایی دارید. باید با آرایه کار کنید دیگه. عدد رو رقم به رقم داشته باشید. فقط کافیه جمع رو پیاده سازی کنید.
    در مورد سوال دوم هم: اگه فقط می خواید خودتون بدونید که برنامه چقدر طول کشیده و اگه برنامه رو در لینوکس کامپایل و اجرا می کنبد می تونید از خود دستور time در ترمینال استفاده کنید:

    g++ -o sample samlple.cpp && time ./sample

    که مورد user به درد شما می خوره.
    اما اگه با C++‎ بخواید کار کنید می تونید از clock() استفاده کنید. مثلا این طوری:

    double t0=clock();
    .....
    cout<<(clock()-t0)/CLOCKS_PER_SEC
    ;

    البته دقیق یادم نیست باید چه لایبرری رو اینکلود کنید ولی فکر کنم این بود:

    #include<iomanip>

  6. #6

    پاسخ فیبوناچی اعداد بزرگ در C

    سلام تا فیبوناچی 80 حساب میکنه امتحان کن

    #include<iostream.h>
    #include<conio.h>
    #include<iomanip.h>
    fib(int n);
    int main()
    { clrscr();
    int n;
    double d;
    cin>>n;
    fib(n);
    getch();
    return 0;
    }
    fib(int n)
    {
    int f[81][20];
    int i;
    int j;
    int k=0;
    for(i=0;i<=5;i++)
    for(j=0;j<=20;j++)
    {f[i][j]=0; }
    f[1][0]=1 ;
    f[0][0]=0;
    for (i=2;i<=n;i++)
    {for (j=0;j<=19;j++)
    {
    f[i][j]=(f[i-1][j]+f[i-2][j]+k );
    k=0 ;
    if (f[i][j] >=10)
    {k=f[i][j];
    f[i][j] =f[i][j]%10;
    k=(k-f[i][j])/10;
    }} }
    for (j=19;j>=0;j--)
    cout<<f[n][j];
    }

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •