לגבי c - מה פירוש unsigned int long?

BravoMan

Active member
משתנה שמכיל מספר שלם חיובי ממש ארוך


שפת C מאפשרת לך סוג של קיצור, לכתוב long בלבד או short בלבד, כאשר בפועל הכוונה בשני המקרים היא לסוג של int והשם המלא של הטיפוסים האלה הוא long int ו-short int.
&nbsp
unsigned, שיכול להתווסף לכל טיפוס שלם כולל char אומר שבמקום לפרש אותם כמייצגים מספר שלילי בשיטת משלים ל-2 מפרשים אותם כמכילים מספר חיובי גדול, וכך הלכה למעשה מגדילים את כמות המספרים החיוביים שהמשתנה יכול להכיל על חשבון השליליים.
 

tom1992

New member
תודה, ושתי שאלות נוספות:

לגבי משתני double ו-float, אם נניח אני רוצה להדפיס אותם ולא מגדיר מראש כמה ספרות אחרי הנקודה, האם זה באופן ידפיס לי מס' ספרות אחרי הנקודה?

ובמה שונה הגדרת struct ב-C לעומת ++C?
 

BravoMan

Active member
השאלה הראשונה שלך לא ברורה

אבל אם התכוונה "כמה ספרות אחרי הנקודה יודפסו ברירת מחדל?" התשובה היא: תלוי בפונקציה שאתה משתמש ובספרייה הסטנדרטית שבאה עם הקומפיילר שלך.
אאל"ט זה לא חלק מהתקן, אבל בד"כ 6 ספרות אחרי הנקודה.
&nbsp
לגבי ה-struct, ההבדל הוא שב-++C ל-struct יש למעשה יכולות של class.
יכולים להיות לו בנאים, איברים פרטיים וכו'.
&nbsp
בעוד של-class אם לא מציינים אז כל איבר הוא private, ב-struct זה הפוך - ברירת המחדל היא public.
 

tom1992

New member
לא הבנתי את הסברך לגבי ה-struct....

הטרמינולוגיה שבה השתמשת זרה לי . מה פירוש class? מה פירוש public?
(הפירוש המעשי ולא הפירוש המילולי
)
 

BravoMan

Active member
אני מבין שרק התחלת ללמוד ++C

אם תרם למדת את נושא המחלקות והעצמים ב-++C לא אוכל להסביר לך אותו בהודעת פורום אחת פשוטה.
עד שתלמד אותו, מבחינתך אין שום הבדל בין struct ב-C ל-struct ב-++C.

כשתלמד את נושא ה-object oriented, החלק הענייני והחשוב ב-++C, אז גם תבין את המושגים.

בהצלחה!
 

BravoMan

Active member
אז איך ייתכן שאינך יודע מה זה class

ומהם private ו-public???
&nbsp
אלה חלקים אינטגרלים מהשפה!
האם למדת בעצמך? אם כן, כנראה פספסת המון, ובעצם למדת רק את הקצה של הקצה.
&nbsp
אם עשית קורס רשמי באוניברסיטה או מכללה, אני לא מאמין שלא כיסו שם את המושגים האלה וכל מה שקשור בהם.
 

tom1992

New member
אלה מושגים מ ++C?

אגב, לא למדתי עצמאית כלל וכלל! אני לומד במסגרת אקדמאית!
 

BravoMan

Active member
לא רק שאלה מושגים ב-++C, אלה מושגים מרכזיים!

בלעדיהם, כמעת ואין הבדל בין C ל-++C.
אם אתה לומד ++C במסגרת אקדמאית ועוד לא למדת על מחלקות ועצמים, זה אומר שלא למדת ++C.
או שרק התחלת ואתה רחוק מסיום אפילו קורס בסיסי, או שהקורס שלמדת אינו קורס ++C אלא רק במקרה משתמש בשפה, או שמשהו שמוסד שלך מאוד מסריח...
&nbsp
לומר שלמדת ++C ואתה לא יודע מה זה class, זה כמו לומר שאתה למדת לנהוג אבל אין לך מושג מה היא "ידית הילוכים"!
 

tom1992

New member
למדתי מבוא למדמ"ח וכעת לומד תכנות מתקדם..

באקדמית יפו.
 

BravoMan

Active member
סתם מתוך סקרנות:

יש לך קישור לסיליבוס של הקורס?
נשמע קצת הזוי, אבל כנראה שמישהו החליט להשתמש בשפה מונחית עצמים לקורס מבוא בלי להיכנס לעניין "מונחה עצמים".
&nbsp
לא ברור לי למה שיעשו דבר כזה.
מניסיוני, בד"כ מעבירים קורסים כאלה או עם Java שהיא מונחית עצמים בלבד (בניגוד ל++C) או עם C שהיא פרוצדורלית בלבד (גם כן בניגוד ל-++C).
&nbsp
שפה ++C מעניינת בכך שהיא מאפשרת עבודה פרוצדורלית ועבודה מונחית עצמים, וגם ערבוב מלא בין השניים.
יש עוד שפות כאלה, כמו Python למשל.
&nbsp
בעוד שברור שקורס מבוא אינו יכול לכסות את כל היכולות של שפה ענקית כמו ++C (ובאמת יש בה כמות עצומה של פיצ'רים שגם קורסים מתקדמים לא מגיעים אליהם), לא נראה ממש הגיוני לבחור בה ולא לגעת כלל ביכולת מונחית עצמים שלה.
&nbsp
אם מעניין אותך לקבל הבנה בסיסית לגבי מה זה "תכנות מונחה עצמים" שאני מדבר עליו, תוכל להתחיל לקרוא כאן:
https://en.wikipedia.org/wiki/Object-oriented_programming
 

tom1992

New member
לחלוטין לא דובר על כל אלה במבוא למדמ"ח! בבטחון אני אומר זאת!

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

BravoMan

Active member
אז בעצם לימדו אותך סוג של C במסווה של ++C...

הנה כמה שינויים בסיסיים שבהם תתקל עכשיו שאתה לומד C אמתי:
1. שימוש ב-malloc ו-free במקום new ו-delete
2. שימוש ב-printf ו-scanf במקום cout ו-cin
3. אין רפרנסים, רק מצביעים (אם בכלל נגעת ב-reference).
&nbsp
זהו, פחות או יותר. אם הלימוד שלכם של ++C היה כ"כ מצומצם, כנראה שלא תמצאו עוד הבדלים.
אולי רק ההכרח להכריז על כל המשתנים בתחילת הפונקציה אם יתעקשו ללמד אתכם ANSI C במקום הסטנדרט החדש יותר.
 

tom1992

New member
את כל מה שציינת אכן למדתי לאחרונה...

יש לי שאלה טכנית: נניח שאני רוצה להדפיס מס' בעל שלוש ספרות. אם אני מציין בפקודת ההדפסה %2d , זה אומר שתודפסנה רק שתי הספרות הראשונות של המספר?

ומה זאת אומרת c במסווה של ++c? לא הבנתי את כוונתך..
 

BravoMan

Active member
תשובות:

1. לא. ספרות הפורמט ש-printf מקבלת לא יחתכו מספרים שלמים.
הן רק קובעות את "רוחב השדה המינימלי".
כלומר, אם המספר תופס פחות מ-2 תווים, בכל מקרה ידפיסו אותו כאילו הוא בגודל 2 תווים, כלומר יוסיפו רווחים.
אם המספר ארוך יותר, ידפיסו את כולו, ולא משנה כמה מקום זה ייקח.
&nbsp
אם אתה רוצה לחתוך ספרות, תצטרך להשתמש בפעולות מתמטיות ולשנות את המספר המודפס.
&nbsp
2. שפת ++C היא שפה גדולה (כוללת הרבה פיצ'רים), שאומנם בבסיסה דומה מאוד ל-C אבל כוללת המון דברים נוספים.
החלק המרכזי בשפה הזו הוא מאפייני ה-"object oriented" שלה.
&nbsp
אם לא לימדו אותך את החלק הזה, לא לימדו אותך ++C.
ולפי מה שאתה מספר, לימדו אותך רק את הקצה שלה שבעצם כמעת זהה ל-C.
 

tom1992

New member
אז אם כך , לא הבנתי את העניין עם האחוז...

נניח שאני מעוניין להדפיס את המספר 123 . אם בפקודה printf אני ארשום %5d
זה אומר שההדפסה "תתפוס" 5 "מקומות" - מתוכם 2 רווחים , כאשר זה מיושר לימין. מה יקרה כאשר ארשום %1d או 2%d או 3%d ?
 

BravoMan

Active member
בכל שלושת המקרים, ההדפסה תתפוס בדיוק את 3

מקומות שהמספר 123 דורש.
בשום מקרה printf לא תחתוך את תוכן המשתנה שלך!
&nbsp
ורק דבר אחד אני לא מבין: לא עדיף פשוט לנסות ולהריץ את זה מאשר להמתין לתשובות בפורום?
הרי זה כ"כ פשוט!
 
למעלה