פורסם 2007 באוגוסט 1418 שנים חשבתי על בניית תוכנית שבודקת אתה המספר עם היא שלמה או לא:בתוכנית הישמשתי ב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;}
פורסם 2007 באוגוסט 1518 שנים קודם כל כשאתה כותב כאן קוד, תשתמש בכפתור של קוד: ככה הקוד ייראה נורמלי: #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.
פורסם 2007 באוגוסט 1518 שנים מחבר קודם כל כשאתה כותב כאן קוד, תשתמש בכפתור של קוד: ככה הקוד ייראה נורמלי: #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?
פורסם 2007 באוגוסט 1518 שנים אתה לא צריך לצטט את ההודעה מעליך.יש שני פתרונות:1. להשתמש בהמרה ל-int ללא משתנה ביניים, כלומר:double x = (int)p;שזה בעצם שקול לקוד הזה:int y = p;double x = y;(השורמה הראשונה מעגלת את המספר ל-int, השנייה מחזירה אותו ל-double אבל כשהוא כבר מעוגל)2. הפונקציה floor:double x = floor(p);שים לב שכדי להשתמש בה, אתה צריך להגדיר#include <cmath>
פורסם 2007 באוגוסט 1618 שנים למה פשוט לא לכתוב:x == (int)x ? puts ("shalem") : puts ("lo shalem");x הוא float כמובן...
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.