PDA

View Full Version : سوال: دنباله فیبونانچی



بانوی ایران
پنج شنبه 28 آبان 1388, 02:06 صبح
سلام


next=0



latest=1
sum=latest+next
while (sum<1000)
next=latest
latest=sum
sum=latest+next
wend



این دنباله برام چی رو چا÷ میکنه؟

latest یاnext؟
و دیگه اینکه یکی به من فرمول ریاضیه دنباله فیبونانچی رو بگه
و اینکه
اگر مثلا کوچکترین عدد 4 رقمی دنباله رو بخوام
درسته که حلقه ی while همین تعداد که نوشتم باشه و بعد که ازش میایم بیرون یه دور دیگه اون دستورای توی whileرو بنویسم که اجرا کنه و بعد نتیجه رو چا÷ کنه؟

shask00l
پنج شنبه 28 آبان 1388, 17:43 عصر
f(0)=0
f(1)=1

f(n)=(f(n-1)+f(n-2))
یعنی

f(2)=f(1)+f(0)
,
f(10)=(f(9)+f(8))

بانوی ایران
جمعه 29 آبان 1388, 00:45 صبح
ممنون کسی میتونه به سوالات دیگم جواب بده؟

shask00l
جمعه 29 آبان 1388, 02:53 صبح
این دنباله برام چی رو چا÷ میکنه؟
latest یاnext؟

این دنباله اعدادی به این ترتیب چاپ میکنه..
1 1 2 3 5 8 13 21 34 55 ..........
بهتره برای چاپ از sum استفاده کنی ....



و دیگه اینکه یکی به من فرمول ریاضیه دنباله فیبونانچی رو بگه

گفتم


و اینکه
اگر مثلا کوچکترین عدد 4 رقمی دنباله رو بخوام

همینجوری برو جلو تا برسی به اعداد 4 قمی.



درسته که حلقه ی while همین تعداد که نوشتم باشه و بعد که ازش میایم بیرون یه دور دیگه اون دستورای توی whileرو بنویسم که اجرا کنه و بعد نتیجه رو چا÷ کنه؟


جواب میده .. ولی چه فایده ای داره ؟ :متفکر:

بانوی ایران
جمعه 29 آبان 1388, 14:08 عصر
این دنباله اعدادی به این ترتیب چاپ میکنه..
1 1 2 3 5 8 13 21 34 55 ..........
بهتره برای چاپ از sum استفاده کنی ....


گفتم

همینجوری برو جلو تا برسی به اعداد 4 قمی.



جواب میده .. ولی چه فایده ای داره ؟ :متفکر:
اخه میخوام دنباله جوری باشه که معین باشه
یعنی سوال گفته کوچکترین عضو Nرقمی دنباله رو بنویس
من که نمیتونم بشینم هی داده بدم به دستگاه ببینم کجا میرسه به اولین عضو Nرقمی میخوام خود الگوریتم بهم جواب بده

shask00l
جمعه 29 آبان 1388, 15:05 عصر
میخوام خود الگوریتم بهم جواب بده

:افسرده: .............

دوست عزیز ... برای انجام این کار باید خروجی های این تابع رو چک بکنید . با if یا switch ..
به عنوان مثال اگه بخایم اولین عدد 5 رقمی رو پیدا کنیم(n=5) باید خروجی تابع رو بعد از هر دور چک کنیم که بزرگتر از 9999 نباشه . اگر بزرگتر از این عدد شد یعنی اولین عدد پنج رقمی پیدا شده .

بانوی ایران
جمعه 29 آبان 1388, 20:14 عصر
:افسرده: .............

دوست عزیز ... برای انجام این کار باید خروجی های این تابع رو چک بکنید . با if یا switch ..
به عنوان مثال اگه بخایم اولین عدد 5 رقمی رو پیدا کنیم(n=5) باید خروجی تابع رو بعد از هر دور چک کنیم که بزرگتر از 9999 نباشه . اگر بزرگتر از این عدد شد یعنی اولین عدد پنج رقمی پیدا شده .
منم همینو میگم
توی دستور whileاومدم sum<1000
بعد که از حلقه میاد بیرون یه بار دیگه اجرا میشه تا اولین عدده 4 رقمی رو بده
البته الگوریتممو تغییر دادم که نخوام از حلقه بیام بیرون همون توی حلقه به جواب میرسم

shask00l
جمعه 29 آبان 1388, 22:55 عصر
#include<stdio.h>
#include<conio.h>

void main()
{
int g99=1,g999=1,g9999=1,g99999=1,g999999=1;
int cx=0,cy=50;
long int a=0,b=1,s;
clrscr();

while(cx!=cy)
{
s=a+b;
printf("\n%ld",s);

if(s>99 && g99){printf(" is the first 3digit");g99=0;getch();}
if(s>999 && g999){printf(" is the first 4 digit");g999=0;getch();}
if(s>9999 && g9999){printf(" is the first 5 digit");g9999=0;getch();}
if(s>99999 && g99999){printf(" is the first 6 digit");g99999=0;getch();}
if(s>999999 && g999999){printf(" is the first 7 digit");g999999=0;getch();}

a=b;
b=s;
cx++;
}
getch();
}

اینو همینجوری نوشتم . بهتر از اینم میشه نوشت ضمنا نوع LONG برای این محاسبات یه مقداری کوچیکه .پیشنهاد میکنم از C#‎‎ استفاده کنی.

پ.ن :ضمنا اگر مجبورید که این برنامه رو با c بنویسید .. برای حل مشکل اندازه ی نوع long میتونید از جمع کردن بوسیله ی رشته ها استفاده کنید . این روش دیگه محدودیتی نداره ضمنا توی همین forum اگه بگردی تابع آماده براش پیدا میکنی .

بانوی ایران
جمعه 29 آبان 1388, 23:21 عصر
#include<stdio.h>
#include<conio.h>

void main()
{
int g99=1,g999=1,g9999=1,g99999=1,g999999=1;
int cx=0,cy=50;
long int a=0,b=1,s;
clrscr();

while(cx!=cy)
{
s=a+b;
printf("\n%ld",s);

if(s>99 && g99){printf(" is the first 3digit");g99=0;getch();}
if(s>999 && g999){printf(" is the first 4 digit");g999=0;getch();}
if(s>9999 && g9999){printf(" is the first 5 digit");g9999=0;getch();}
if(s>99999 && g99999){printf(" is the first 6 digit");g99999=0;getch();}
if(s>999999 && g999999){printf(" is the first 7 digit");g999999=0;getch();}

a=b;
b=s;
cx++;
}
getch();
}

اینو همینجوری نوشتم . بهتر از اینم میشه نوشت ضمنا نوع LONG برای این محاسبات یه مقداری کوچیکه .پیشنهاد میکنم از C#‎‎‎ استفاده کنی.

پ.ن :ضمنا اگر مجبورید که این برنامه رو با c بنویسید .. برای حل مشکل اندازه ی نوع long میتونید از جمع کردن بوسیله ی رشته ها استفاده کنید . این روش دیگه محدودیتی نداره ضمنا توی همین forum اگه بگردی تابع آماده براش پیدا میکنی .
این برنامه ای که خودم نوشتم

#include <stdio.h>
#include <stdlib.h>
main(void)
{
int N;
int f0=0;
int f1=1;
int f=f1+f0;
printf("enter N\n");
scanf("%d", &N);
while (f<N)
{
f0=f1;
f1=f;
f=f1+f0;
}
printf("f=%d\n", f);
system("pause");
return 0;
}
که Nرو میدم 1000 وقتی میخوام کوچکترین عدد 4 رقمی رو داشته باشم و....

مزیت این که شما نوشتید نسبت بهش چیه؟
من با long بلد نیستم کار کنم اگر حوصله دارید برام توضیح بدید که چی کار میکنه

shask00l
شنبه 30 آبان 1388, 02:47 صبح
مزیت این که شما نوشتید نسبت بهش چیه؟
برنامه ای که من نوشتم تمام اعداد این سری رو چاپ میکنه و اولین عدد از هر سری رو مشخص میکنه . مثلا اولین عدد 2 رقمی 3 رقمی یا 4 رقمی . نسبت به برنامه شما مزیتی نداره مشه گفت که هدفشون یکیه ولی با دو روش پیاده سازی شدن .
برنامه ای که شما نوشتید درسته و مشکلی نداره . وقتی برنامه رو اجرا کردید برای مقدار n به تعداد مورد نیاز 9 وارد کنید . مثلا برای اولین عدد 3 رقمی 99 وارد کنید یا برای اولین عدد 4 رقمی 999 وارد کنید .

ضمنا کاربرد نوع long به این صورته که ...... به دلیل اینکه نوع int فقط 2بایت حجم داره اعداد بیشتر از 32767 و کوچکتر از 32768- توش جا نمیشه .. به همین دلیل از نوع long int یا unsigned long int استفاده میشه که محدودش خیلی بزرگ تره . 4294967295 ... این عدد ماکزیمم اندازه ی نوع unsigned long هستش . اگر به محدوده ی بزرگتر نیاز دارید باید از توابع ریاضی رشته ای استفاده کنید .

yasamin gol
سه شنبه 03 آذر 1388, 14:52 عصر
#include <iostream.h>
long fib(long);
void main()
{
long r,n;
cin>>n;
r=fib(n);
cout<<r;
{
long fib(long n)
}
if (n==0||n==1)
return n;
else
return fib(n-1)+fib(n-2);
{


من این برنامه رو با C++‎‎ نوشتم میخواستم چک کنید که درسته یا نه
ممنون

qwerty11
سه شنبه 03 آذر 1388, 19:27 عصر
برنامتون که درسته ، اما وقتی که n یه کم بزرگ بشه خیلی خیلی سرعتش کم میشه !! مثلاً وقتی که n=15 باشه میتونی ببینی که سرعت برنامت خیلی پایینه !

shask00l
چهارشنبه 04 آذر 1388, 07:23 صبح
من این برنامه رو با C++‎‎‎ نوشتم میخواستم چک کنید که درسته یا نه
ممنون

برای نوع بازگشتی تابع از unsigned long استفاده کنید . محدودش بزرگ تره .