نمایش نتایج: از شماره 1 تا 5 , از مجموع 5

موضوع: فیبوناچی اعداد بزرگ در c

  1. #1
    مدیر بازنشسته
    تاریخ عضویت
    2010/01/09
    محل سکونت
    *گیلان-املش*
    سن
    31
    نوشته ها
    5,954

    New 1 فیبوناچی اعداد بزرگ در c

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

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

  2. #2
    مدیر بازنشسته
    تاریخ عضویت
    2010/01/09
    محل سکونت
    *گیلان-املش*
    سن
    31
    نوشته ها
    5,954

    پیش فرض

    برای فیبوناچی این ببین
    کد:
    #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 نمیگنجه باید از آرایه ها استفاده کنی.
    برای مدت زمان اجرا هم اینجا رو ببین:
    زمان اجرای برنامه - جامعه برنامه نویس

  3. #3
    مدیر بازنشسته
    تاریخ عضویت
    2010/01/09
    محل سکونت
    *گیلان-املش*
    سن
    31
    نوشته ها
    5,954

    پیش فرض

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

  4. #4
    مدیر بازنشسته
    تاریخ عضویت
    2010/01/09
    محل سکونت
    *گیلان-املش*
    سن
    31
    نوشته ها
    5,954

    پیش فرض

    از دوستان به خاطر پاسخهای مناسبشون تشکر می کنم.
    اما به برنامه زیر یه نگاهی بندازید:
    کد:
    #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
    مدیر بازنشسته
    تاریخ عضویت
    2010/01/09
    محل سکونت
    *گیلان-املش*
    سن
    31
    نوشته ها
    5,954

    پیش فرض

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

    کد:
    g++ -o sample samlple.cpp && time ./sample
    که مورد user به درد شما می خوره.
    اما اگه با C++‎ بخواید کار کنید می تونید از clock() استفاده کنید. مثلا این طوری:
    کد:
    double t0=clock();
    .....
    cout<<(clock()-t0)/CLOCKS_PER_SEC
    ;

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

    کد:
    #include<iomanip>

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

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