עבור לתוכן

c/c++ תרגול קוד יעיל

Featured Replies

פורסם

1. ישנם אלגוריתמים למציאת איברים (במיוחד איברים בעלי אינדקס גדול) בסדרות פיבונצ'י, אבל זה קצת פחות טריויאלי מסכום של טור חשבוני, אתה תמיד יכול לחפש בויקיפדיה.

2. לא, תחשוב שאם היית קובע ששני האיברים הראשונים הם 594 ו-456 היית מקבל סדרה שונה.

  • תגובות 96
  • צפיות 8.5k
  • נוצר
  • תגובה אחרונה
פורסם
  • מחבר

תודה גבר! :)

פורסם

הפתרון שלך עובד, אבל שים לב שהוא עובד רק כי 15 מתחלק ב-5. מה אם לדוגמה יאמרו לך להדפיס את 16 האיברים הראשונים? או לחילופין, מה אם יבקשו ממך לקלוט מספר n מהמשתמש ואז יאמרו לך להדפיס את הn המספרים הראשונים?

פורסם
  • מחבר

אתה יכול לכוון אותי לפיתרון יותר כללי?(בלוק של קוד שיריץ מיספר פיבו אחד לכל סיבוב בלולאה). :bash:

פורסם

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

פורסם
  • מחבר

היתכוונת ל3 ו 5 (רשמת 3 ו4)זה אמור להיות סכום הזוגות ולא מיספרים עוקבים, אלה אם כן היתכונת N מיספרים.

בכל אופן מצאתי את הפיתרון לכל N.

תודה על ההכונה. :)

 #include "stdafx.h"
#include <iostream>

using namespace std;

int main()

{
int a=1,b=0,i=0,c=0;

for(i=0;i<=16;i++)
{
c=a+b;
b=a;
a=c;

cout << c << endl;

}

char f;
cin >> f;
return 0;



}

פורסם

התכוונתי שאלה המיקומים של המספרים בסדרה, לא הערכים שלהם (בגלל אמרתי המספרים ה-3 וה-4 ולא המספרים 3 ו-4).

אבל כן, זה הפתרון שכיוונתי אליו.

אגב, מומלץ שתערוך את הכותרת למשהו יותר מתאים (הכותרת המקורית לא ממש רלוונטית...)

פורסם

רק לשם התירגול כדאי שתחשוב איזה פיתרון עדיף כשאתה מחפש בדרך הזו מספרי פיבונצ'י בעלי אינדקס גדול יחסית... נגיד 50, הקודם שבו אתה מחשב 3 מספרי פיבונצי בכל איטרצייה או הנוכחי שבו אתה מחשב רק אחד בהנחה שהקוד שלך מתקמפל בלי אופטימיזציות.

פורסם

בשביל יעילות יש פתרון הרבה יותר טוב, אבל הוא משתמש בידע באלגברה לינארית...

פורסם

צודק, אבל אם נתעלם לרגע מהאלגוריתם זו דווקא בעייה נחמדה אם מסתכלים עליה כ-code kata.

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

אישית אם הייתי מראיין מועמד לעבודה כמתכנת c++ אני חושב שזו שאלה בהחלט ראוייה ושווה לשבת לחשוב עליה (יש הרבה פתרונות עם זמן ריצה הרבה יותר טוב משימוש בנוסחא תחת תנאים מסויימים ודווקא אותם אני ארצה לשמוע, את ההנחות, את היתרונות והחסרונות שבכל שיטה)

פורסם
  • מחבר

טוב(שניצל) אמרת פיבו עם מיספרים ראשוניים ....אז הרמתי תכפפה :nixweiss:

התוכנית סורקת מיספרי פיבו וקובעת האם הם ראשוניים או לא ראשוניים.

השאלה היא האם הקוד יעיל?

 
#include "stdafx.h"
#include <iostream>

using namespace std;

int main()

{
int a=1,b=0,i=0,c=0;

for(i=0;i<=16;i++)
{
c=a+b;
b=a;
a=c;

cout << c << endl;



int res=0,i_fib=1;

if ((c>0)&&(i_fib>0))
for(i_fib=1;i_fib<=1272;i_fib++)

{

if (c%i_fib == 0)
res++;
}


if (res <= 2 )
cout << c <<" reshoni\n";
else
cout << c <<"lo reshoni\n";

}

char f;
cin >> f;
return 0;



}

פורסם

מתי אמרתי מספרים ראשוניים?

בכל מקרה, יש דרכים יותר יעילות לבדוק ראשוניות. קודם כל, ברגע שמצאת שהמספר מתחלק במספר שאינו עצמו או 1, אז אתה יכול לעצור את הלולאה, כי הוא בטוח לא ראשוני.

חוץ מזה, מאיפה הבאת את המספר 1272?

והערה קטנה לגבי הקוד: תמיד תמיד תמיד אחרי if/for/while שים סוגריים מסולסלים - גם אם אתה מפעיל רק פקודה אחת. כלומר, במקום כזה דבר:

if (res <= 2)
cout << "blabla";
else
cout << "blublu";

תכתוב ככה:

if (res <= 2) {
cout << "blabla";
} else {
cout << "blublu";
}

הסיבה לכך היא פשוטה: זה הופך את הקוד לברור יותר ומונע טעויות בעתיד. חוץ מזה, תדאג להזחה נכונה של הקוד.

פורסם
  • מחבר

אופס :kopfpatsch: טעות (זה 2584 בימקום)

בקשר להיתיעלות שהצעת- אני מנסה , מקווה להצליח.

פורסם
  • מחבר

ערך של איבר n16 בסידרה :bash: (זה לא בסדר?).

ארכיון

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

דיונים חדשים