c/c++ תרגול קוד יעיל - עמוד 3 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


007המקורי

Recommended Posts

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

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

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

  • תגובות 96
  • נוצר
  • תגובה אחרונה

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

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

מספיקים לך שני משתנים, שיחזיקו את שני המספרים האחרונים בסדרה שחישבת עד כה (כלומר, באיטרציה הראשונה הם יחזיקו את המספרים ה-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";
}

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

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

ארכיון

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


×
  • צור חדש...