עבור לתוכן

בניית תוכנית

Featured Replies

פורסם

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

בתוכנית הישמשתי ב

int

שמחזיר רק שלמים

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

double

והיא תיבדוק עם ערך שלם או לא

כי אני חושב שמה שעשתי זה כאילו להישתמש בבאג

כאילו אני קולט 34.5 אבל זה מקבל רק את 34 במיספר

וזה כאילו ניצול באג כי בטח שפות תיכנות אחרות עם

מישתנה שקולט רק שלמים מקבל

מיספר נגיד 34.4

אז ביגלל שהוא קולט רק שלמים אז התוכנית תקרוס או משהוא.

#include<iostream>

using namespace std;

int main()

{

int x;

double t;

double y;

double p;

double r;

cout<<"put 2 number"<<endl;

cin>>p;

x=p/1;

t=p/1;

y=x+1;

if(t>x&&t<y)

{

cout<<"lo shalem:"<<t<<endl;

}

else

{

cout<<"shalem:"<<x<<endl;

}

return 0;

}

פורסם

קודם כל כשאתה כותב כאן קוד, תשתמש בכפתור של קוד:

code.gif

ככה הקוד ייראה נורמלי:


#include<iostream>
using namespace std;
int main()
{

int x;
double t;
double y;
double p;
double r;
cout<<"put 2 number"<<endl;
cin>>p;
x=p/1;
t=p/1;
y=x+1;
if(t>x&&t<y)
{
cout<<"lo shalem:"<<t<<endl;

}
else
{
cout<<"shalem:"<<x<<endl;

}
return 0;
}

לא הבנתי מה ניסית לעשות פה עם p/1 (לחלק מספר ב-1 לא משנה אותו...).

מה שעשית זה לא באג, זה פשוט ניצול של השפה (עיגול למטה של מספרים). זה חוקי לחלוטין, רק שקומפיילרים מסויימים יזהירו אותך מפני זה (כי אתה מאבד כאן מידע, והקומפיילר לא יודע אם התכוונת לעשות את זה). בסופו של דבר, הפתרון שלך גם מאוד מסובך... מספיק לך לבדוק אם t>x.

פורסם
  • מחבר

קודם כל כשאתה כותב כאן קוד, תשתמש בכפתור של קוד:

code.gif

ככה הקוד ייראה נורמלי:


#include<iostream>
using namespace std;
int main()
{

int x;
double t;
double y;
double p;
double r;
cout<<"put 2 number"<<endl;
cin>>p;
x=p/1;
t=p/1;
y=x+1;
if(t>x&&t<y)
{
cout<<"lo shalem:"<<t<<endl;

}
else
{
cout<<"shalem:"<<x<<endl;

}
return 0;
}

לא הבנתי מה ניסית לעשות פה עם p/1 (לחלק מספר ב-1 לא משנה אותו...).

מה שעשית זה לא באג, זה פשוט ניצול של השפה (עיגול למטה של מספרים). זה חוקי לחלוטין, רק שקומפיילרים מסויימים יזהירו אותך מפני זה (כי אתה מאבד כאן מידע, והקומפיילר לא יודע אם התכוונת לעשות את זה). בסופו של דבר, הפתרון שלך גם מאוד מסובך... מספיק לך לבדוק אם t>x.

כן אני יודע שלא צריך חלקי אחד וגם y=x+1 .

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

דרך הגב אפשר ליבדוק גם עם אתה מגדיר מישתנים רק בdouble?

פורסם

אתה לא צריך לצטט את ההודעה מעליך.

יש שני פתרונות:

1. להשתמש בהמרה ל-int ללא משתנה ביניים, כלומר:

double x = (int)p;

שזה בעצם שקול לקוד הזה:

int y = p;
double x = y;

(השורמה הראשונה מעגלת את המספר ל-int, השנייה מחזירה אותו ל-double אבל כשהוא כבר מעוגל)

2. הפונקציה floor:

double x = floor(p);

שים לב שכדי להשתמש בה, אתה צריך להגדיר

#include <cmath>

פורסם

למה פשוט לא לכתוב:

x == (int)x ? puts ("shalem") : puts ("lo shalem");

x הוא float כמובן...

ארכיון

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

דיונים חדשים