עבור לתוכן

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

Featured Replies

פורסם

ואם לא היית יודע בזמן כתיבת הקוד כמה איברים הולכים להיות בסדרה? (לדוגמה, אם מספר האיברים בסדרה היה נקבע ע"י קלט מהמשתמש)

באופן כללי כשפותרים בעיה, נסה לשמור את הפתרון "גנרי". כמו שמקודם אמרתי שהפתרון שלך היה עובד רק אם היו מבקשים מספר שמתחלק ב-3, גם עכשיו הפתרון עובד ספציפית עבור המספר 16.

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

טוב על הבעיה הגנרית יש פיתרון (החלפתי עם המישתנה c)

אבל איך עוצרים תלולאה הזאת אחרי התנאי (את זה אני בודק עשכיו ולא הולך לי משהו)


#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<=c;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;

*תוקן הקוד (המישתנה c בימקום ערך הn של הסידרה)

פורסם

יש שתי אופציות. קודם כל, הביטוי האמצעי ב-for הוא התנאי של הלולאה, כלומר הלולאה ממשיכה כל עוד הוא אמת. לכן אפשר לעצור את הלולאה ע"י שינוי התנאי הזה. אופציה שנייה היא להשתמש בפקודה break שפשוט יוצאת מהלולאה.

פורסם
  • מחבר

חשבתי על זה :

break לא מתאים

הוספתי i_fib גדול שווה c ---כדי לסיים תלולאה (לא עובד)

קשה קשה :D

 #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<=c;i_fib++)

{

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



if (res >= 2 )
cout << c <<"lo reshoni\n";
i_fib >= c;// זה התוספת
}
else
cout << c <<" reshoni\n";

}

char f;
cin >> f;
return 0;

}

פורסם

התוספת שהכנסת חסרת משמעות - הפעולה =< רק משווה, ולא משנה ערך של שום דבר.

break גם יכולה להתאים.

חוץ מזה, שים לב לדבר מיותר - אתה תמיד בודק אם המספר c מתחלק ב-1, אבל זה תמיד נכון - כל מספר מתחלק ב-1.

פורסם
  • מחבר

*יש טעות בקוד.

  #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=2;i_fib<=(c-1);i_fib++)

{

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

if (res > 0)
cout << c <<"lo reshoni\n";

else

cout << c <<" reshoni\n";

}
// continue;
}

char f;
cin >> f;
return 0;

}

פורסם
  • מחבר

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

using namespace std;

int main()

{
int a=1,b=0,i=0,c=0;
cout << "reshoni white out titels";
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=2;i_fib<=(c-1);i_fib++)

{

if (c%i_fib == 0)
{
res++;
if (res > 0)

cout << c <<"lo reshoni\n";
// if (res = 0)
// cout << c <<"reshoni";
break;
}


}



//else

// cout << c <<" reshoni\n";

}

}

char f;
cin >> f;
return 0;

}

זה הקוד הכי טוב בנתיים :nixweiss:

פורסם
  • מחבר

קלוט מספר והדפס את מיספר סיפרותיו.

זה הקוד.

יעיל?

עריכה: אגב אפשר לעשות את זה עם "for"?

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

using namespace std;

int main()

{
int num=0,res=0,i=0;
cout << "enter number !";
cin >> num ;

while (num > i )
{ num = (num / 10);
i++;
if (num==1)
i++;
}
cout <<i<< endl;




char f;
cin >> f;
return 0;


}

פורסם

אפשר יותר טוב.

פורסם
  • מחבר

לאיזו שאלה אתה מיתיחס?אתה יכול לכוון אותי קצת?

פורסם

קודם כל יש לך IF מיותר בתוך הלולאה. תנסה לכתוב את כל הלולאה מחדש.

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

פורסם

בשביל מה אתה בודק אם המספר גדול מ-i?

ובשביל מה צריך if בתוך הלולאה?

פורסם
  • מחבר

קלוט מיספר והדפס את סכום סיפרותיו.

1 service pack :lol: (או יותר נכון ליפני 1 service pack

קימבנתי את התוכנית הקודמת עם התוכנית הנוכחית.

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

בנתיים ככה התוכנית עובדת.

הקוד.

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

using namespace std;

int main()

{
double num=0;
int i=0;
cout << "enter number !";
cin >> num ;

while (num > i )
{ num = (num / 10);
cout << num << "num while"<<endl;
i++;
if (num<i)
i++;

}
cout <<i<< endl;


cout << "enter only !the same number!" << endl;
cin >> num;
int n=0,sum=0,res_int=0;
double res_double=0 ,num2=0 ;
for (n= 0;n<=(i);n++)
{
res_double = (num / 10);
cout << res_double << " double" << endl;
num=res_int =(num / 10);
cout << res_int << " int" << endl;
num2=res_double - res_int;
cout << num2 << " num2" << endl;
num2=((num2)*10);
cout << num2 <<" num2*10" << endl;
sum=sum +num2;
}
cout << sum << " sum digits" << endl;
char f;
cin >> f;
return 0;


}

פורסם

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

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

פורסם

התוכנית אבל לא עובדת

תנסה מה מספר הספרות במספר 234

ובקשר לגירסא החדשה הסתבכת קצת

num%10 זאת סיפרת האחדות כל פעם.

תשתמש בזה

האלוגריתם עצמו פשוט

כל עוד המספר שונה מ0

הוסף את ספרת האחדות לסכום

העלם את ספרת האחדות

הגדל את מונה הספרות ב1

ארכיון

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

דיונים חדשים