סדרת פיבונאצ'י ב C - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

סדרת פיבונאצ'י ב C


Styx

Recommended Posts

התוכנית אמורה לחשב את המספר ה Nי בסדרת פיבונאצ'י

ואת הסכום של כל המיספרים עד הערך ה Nי

משהו לא מסתדר שם

#include <stdio.h>
#include <conio.h>

int fib (int n); // 1st func
int fib_sum (int r); //2nd func

int main ()
{
int num;
printf("enter an intger (fib number)\n");
scanf("%d", &num);
printf("%d\n", fib (num));
printf("%d\n", fib_sum (num));


getch();
return 0;


}

int fib (int n) // 1st func. definition
{
int first=0, second=1, last;
int i=3;
while (i<=n)
{
last = first + second;
first = second;
second=last;
i++;
}
return last;
}
int fib_sum (int r) //2nd func
{
int pre=0, sec=1, help,sum;
int i=3;
while (i<=r)
{
sum=pre+sec;
help=sec;
sec=sum;
pre=help;

i++;
}
return sum;
}

קישור לתוכן
שתף באתרים אחרים

אלגוריתם דינמי פותר את הבעייה (את שניהם) בזמן ריצה לינארי.

לא יודע מזה אומר

אם מישהו יכול להסתכל בפונקצייה השנייה

כי הגיונית זה עובד

מעשית ב C משהו שם מתחרבש

:xyxthumbs:

קישור לתוכן
שתף באתרים אחרים

למה החלטת ש"הגיונית זה עובד"? הבעיה היא לא "מעשית ב-C", אלא יש לך שגיאה באלגוריתם.

תתאר במילים מה האלגוריתם שלך עושה.

חוץ מזה שגם הפונקציה fib לא עובדת נכון (מה קורה כשמכניסים לה קלט שקטן מ-3?)

קישור לתוכן
שתף באתרים אחרים

חוץ מזה שגם הפונקציה fib לא עובדת נכון (מה קורה כשמכניסים לה קלט שקטן מ-3?)

האמת שאפשר לפתור את זה בצורה אלגנטית אם עושים מאתחלים אצלו בקוד את Last להיות שווה ל-n

כלומר last = n באתחול.

אם n גדול או שווה ל-3, זה לא ישנה כלום כי יש לך הצבה למשתנה הזה בתחילת הלולאה. עבור ערכי n קטנים הערך שווה ל-n (נכון לערכים ה-0,1,2 בלבד)

שאלה שיותר מעניינת אותי, אם אתה יודע לחשב את הערך של המספר פיבונאצ'י במקום ה-n, למה אתה צריך פונקציה שמחשבת אותו מחדש בשביל הסכום?

תחשוב איך אתה יכול להשתמש בפונקציה שכבר כתבת...

קישור לתוכן
שתף באתרים אחרים

האמת שאפשר לפתור את זה בצורה אלגנטית אם עושים מאתחלים אצלו בקוד את Last להיות שווה ל-n

כלומר last = n באתחול.

אם n גדול או שווה ל-3, זה לא ישנה כלום כי יש לך הצבה למשתנה הזה בתחילת הלולאה. עבור ערכי n קטנים הערך שווה ל-n (נכון לערכים ה-0,1,2 בלבד)

שאלה שיותר מעניינת אותי, אם אתה יודע לחשב את הערך של המספר פיבונאצ'י במקום ה-n, למה אתה צריך פונקציה שמחשבת אותו מחדש בשביל הסכום?

תחשוב איך אתה יכול להשתמש בפונקציה שכבר כתבת...

תודה לא חשבתי על זה

אני אנשה לעשות תיקונים

הצלחתי-זה היה הרבה יותר קל ממה שחשבתי


#include <stdio.h>
#include <conio.h>

int fib (int n); // func declration


int main ()
{
int num,fib_sum=0,i,help;
printf("enter an intger (fib number)\n");
scanf("%d", &num);
printf("%d\n", fib (num));

fib_sum=fib(num+2)-1;


printf("%d", fib_sum);


getch();
return 0;


}

int fib (int n) // 1st func. definition
{
int first=0, second=1, last;
int i=3;
if (n<3)
last=n;
else
{
while (i<=n)
{
last = first + second;
first = second;
second=last;
i++;
}
return last;
}
}

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...