Wtf is Casting ?

Wtf is Casting ?

אני מנסה לעשות שיעורי בית בC .. אבל כרגיל מהרגלי בVB אני שוב נתקבל בדברים מאוד מוזרים.. בVB אם הייתי מחלק שתי אינטג'רים ומכנים לFLOAT או משהוא בסגנון.. לא היה בעיה.. משום מה בC הוא מחליט בטפשותו לעגל את הערך לפני, אחר כך להכניס לFLOAT ערך עגול.. זכור לי כי באחד מן ההרצאות שלי, למדתי משהוא בנושא CASTING ז"א לגרום לשפה לא לעגל... לצערי לא הצלחתי למצוא את הנושא בספר C שלי.. ואני לא מצליח להזכר איך עושים את זה.. מישהוא יכול לעזור לי שהמחשב לי יעגל את המספר ?
 

selalerer

New member
הענין הוא כזר:

כשהקומפיילר רואה int מחולק בint (או שעושים לו כל פעולה אחרת) מבחינתו התוצאה היא int. הוא לא מתייחס לאן הערך מושם אח"כ, דבר ראשון הוא עושה את החישוב, ההשמה זה מבחינתו פעולה נפרדת לחלוטין. אז מה עושים? אומרים לו לחלק int בfloat ואז הוא יודע שהתוצאה היא float ואין בעיה. אפשר לעשות את זה בדרך הארוכה:
int n1=12; int n2=7; float r1,result; r=n2; result=n1/r; //instead of n1/n2.​
או בדרך הקצרה, ממש לומר לו שהוא float, הכתיב הוא סוגריים לפני הערך והסוג משתנה שאתה רוצה שהוא יהיה:
int n1=12; int n2=7; float result; result=n1/(float)n2;​
יש גם עוד דרך ממש ארוכה, ע"י שימוש ב % (מודולו) אבל זה כבר ממש טיפשי
.
 
למה? ככה :

1. היא מקנה הרגלי תיכנות רעים מאד. 2. אם משתמשים בה ורק בה במשך זמן ממושך - כשתחזור ל C++,C, JAVA אתה תעשה שגיאות של מתחילים כמו לא לשים ; בסוף שורה, לא להכריז על משתנים.. 3. ה"שפה" הזו מייבשתאת המוח ! 4. היא מרגילה אותך לכך שהכל ממומש ו"זה כבר עשו". 5. היא מאד מאד לא גמישה. 6. זו חרא של שפה (ולכן היא מסריחה) היא טובה רק ליצירת אפליקציות כמו לומדות וכו'. אני משתדל לא לגעת בה אם יש לי ברירה.
 
אני מקווה שאף אחד מפורום תכנות VB

לא ייראה את ההודעה הזה... ואם כן, שיידע שאמרתי את זה רק בגלל שאני לא אוהב את אימפריית הרשע של מייקרוסופט. ואם מישהו ממייקרוסופט נכנס לכאן, שיידע שאת המשפט הקודם אמרתי רק בגלל שVB היא באמת חרא של שפה.
 
אבל אני מפורום VB ../images/Emo4.gif

אני לומד C רק בגלל שהטכניון רוצה.. מצידי הייתי נשאר עם VB... מדהים שכל אחד אומר שVB לא שפה.. אני לא רואה הבדל ביצרת משחק שחמט בVB ובC.. בדיוק אותם IFים סתם ככה כל יודעי הC משחקים את עצמם.. אגב, ראיתי שחמט בפלאש.. מדהים איך בנו את זה.. פלאש שפה מאוד לא נוחה לעבוד.
 
רק אל תיעלב!../images/Emo13.gif

תראה, יש שפות כמו C שבהן אתה ממש מתעסק עם פוינטרים, מערכים דינאמיים,... socket-ים, אתה יכול להגדיר טיפוסים חדשים, מחלקות כמו ב ++C, אתה מרגיש שאתה עושה משהו. לבד. יש שפות כמו JAVA שבהן מימשו בשבילך דברים, אבל עדיין אתה יכול לממש אותם לבד. עכשיו כשאני חושב על זה, זו כנראה אחת הסיבות העיקריות שאני לא אוהב VB - היא מאד נוקשה. עשו בה הכל. אתה לא יכול לשנות את זה. ואם כן, תצטרך להשתמש בפונקציות API וגם הן לא תמיד יעזרו. עשו שם הכל וכשאתה מתכנת בה, אתה סתם משתמש בזה. נכון שגם ב VB אפשר לעשות דברים מסובכים ויפים, אבל ב 90% מהמקרים, הקוד יהיה פחות "יפה" מקוד ב C או ++C. אמרת בעצמך שאם היית יכול, היית נשאר עם VB - כי זה נוח. כי "זה כבר עשו".
 

KKnDoIt

New member
טוב... -->

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

באמת מעניין אותי לדעת מה יכול לגרום לבן אדם לא לשנוא אותה...
 
גם ב VB אין class-ים. ../images/Emo3.gif

ביקשתי סיבות לאהוב את VB, לא לשנוא את C ...... (נראה אותך כותב מערכת הפעלה ב VB
)
 
אז אפשר לשנוא את שתיהן? ../images/Emo6.gif

אני לא אוכל לכתוב מערכת הפעלה בVB כי אני לא יודע VB.... (רק בסיסי ביותר)
 

IP yuval

New member
זה קל -

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

selalerer

New member
ככה, ככה, גם הרבה תוכניות שנכתבות ב

++C לא יוכלו לעבוד על שני המחשבים שיש לך בבית.
 

KKnDoIt

New member
בו נראה:

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

KKnDoIt

New member
אני לא מוסר הסברים פורמליים, כי

אני לא מבין את הדברים בצורה מספיק מדוייקת. אבל כדי לפתור את הנקודה הספציפית, נניח שהקוד שלך הוא כזה:
int a, b; double result; result = a /b ;​
במקרה כזה, החלוקה תהיה חלוקה בשלמים. דרך אגב, הקומפיילר לא מעגל, אלא משמיט את החלק הלא-שלם. כדי לפתור את הבעיה, אתה אכן יכול להשתמש ב- Casting:
int a, b; double result; result = (double)a /b ;​
 
למעלה