עבור לתוכן

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

Featured Replies

פורסם

התוכנית אמורה לחשב את המספר ה 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;
}

פורסם

מה זאת אומרת "משהו לא מסתדר"?

מה קורה כשאתה מריץ את התכנית?

על איזה קלטים ניסית אותה?

(וסתם תהיה: למה אתה משתמש ב-while ולא ב-for?)

פורסם
  • מחבר

הכוונה היא

שאת החלק הראשון זה עושה בלי בעייה

ואת החלק השני לא(זה מראה כמו החלק הראשון)

וניסיתי מספרים שלמים מן הסתם

פורסם

אז האלגוריתם שלך לא נכון. הרי מה ההבדל בין fib ו-fib_sum? שתיהן צריכות לעשות אותו דבר, רק שfib_sum צריכה גם לסכום את המספרים.

פורסם

סתם שאלה, לא עדיף לשים גם את הסכום וגם את המספר באותה לולאה?

פורסם

עדיף מאיזו בחינה? זה אמנם יעיל יותר, אבל מה קורה אם אתה צריך רק אחד מהפרמטרים הללו? מה קורה אם אתה רוצה לשנות את אחד הפונקציות?

פורסם

אני רואה C וחושב על מחשב ענתיקה שחייב קוד הכי יעיל :P

אפשר אולי לעשות את הפונקציות בלי לופ (רק הקוד שבתוך הלופ) ואת הפונקציות להכניס ללופ.

זה יכול להיות דבר כזה?

פורסם

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

פורסם
  • מחבר

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

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

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

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

מעשית ב 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;
}
}

ארכיון

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

דיונים חדשים