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

BravoMan

Active member
אכן.

אבל:
1) כל ביטוי מספרי מפורש כ-0 = "שקר", כל ערך אחר = "אמת".
2) בסטנדרט האחרון, c99 נוסף טיפוס בוליאני.
3) סביבות מסוימות, כמו VS, מכילות define שמטפלות בזה.
 

tom1992

New member
ואשמח אם מישהו יסביר לי את הדבר הבא (מתוך מצגת)

מדוע יש כאן צורך במחרוזת עזר?

 

BravoMan

Active member
זו לא מחרוזת עזר!

אם היית מגגל על gets וקורא מה היא עושה, היית מבין שהיא לא מקצה זיכרון לקלט.
אתה צריך לספק לה מקום לשים בו את התווים שהיא קולטת מהמשתמש.
&nbsp
הערך החוזר, מה שנכנס לתוך ret משמש רק כדי לבדוק אם התקבל קלט בהצלחה או שקרתה שגיאה, ואז הפונקציה תחזיר NULL.
&nbsp
אני לא יודע מדוע היסטורית מימשו אותה להחזיר מצבעי (אולי כי זה נוח) במקום סתם 0 ו-1, אבל באותה מידה ret היה יכול להיות int במקום *char
 

BravoMan

Active member
הוספת תו מיוחד - TAB כמו n\ אבל עושה הזזה

בד"כ 8 תווים.
 

tom1992

New member
ולגבי עבודה בלינוקס - מישהו יכול

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

tom1992

New member
ואיך מתמודדים עם העובדה ששם אין debugger?

ומה זה סקריפטים ???
 

BravoMan

Active member
בחיאת! כל השאלות הבסיסיות האלה...

תראה, אם אתה מתכוון בעתיד לעבוד במקצוע פיתוח תוכנה, אתה חייב להיות מסוגל למצוא תשובות לשאלות כאלה בסיסיות בעצמך, וזה לא אמור לקחת לך יותר משתי שניות בגוגל.
&nbsp
למשל ככה:
http://lmgtfy.com/?q=linux+shell&l=1
&nbsp
רואה? קלי קלות!
&nbsp
אם אתה רציני בקשר לעבודה בלינוקס, אני ממליץ לך על הספר הזה:
http://www.amazon.com/Beginning-Linux-Programming-Neil-Matthew/dp/0470147628
&nbsp
הוא מסודר היטב ומתחיל מהקל אל הכבד.
(אם לא בכבוד שלך לרכוש אותו, גוגל מתעקש להביא קישור ל-PDF, גם אם לא מבקשים ממנו ספציפית)
&nbsp
אם אתה רק צריך את זה לקורס ולא מעניין אותך להמשיך אחרכך, כל מה שאתה צריך ילמדו אותך בקורס. זה סה"כ כמה פקודות בסיסיות כדי שתוכל לעבור קומפילציה.
&nbsp
אני לא יודע למה החלטת שאין דיבגר, אבל אתה טועה לחלוטין. יש ידבגר מצוין וחזק שנקרא GDB, ויש עוד כלים שימושיים שאפילו קשה להשיג כמותם ל-windows למשל Valgrind שיודע לזהות אם יש בתוכנית שלך זליגות זיכרון ולהראות לך היכן הן, כדי שתוכל לתקן אותן.
&nbsp
ולבסוף - כדי לתכנת בלינוקס צריך לדעת שפת תכנות כלשהי. בדיוק כמו בכל מערכת הפעלה אחרת.
זה הכל.
&nbsp
שום "פקודות אין ספור" - מה שאתה יודע, תוכל לתכנת, מה שאתה לא יודע - תצטרך ללמוד.
היופי המיוחד בלינוקס, לפחות ההפצות השולחניות שלה, זה שהן תומכות במגוון שפות תכנות הכי גדול שיצא לי לראות עד כה, וגם יש המון כלים למתכנת.
&nbsp
זו פשוט מערכת שנוצרה עבור מפתחים ותענוג לעבוד איתה.
&nbsp
בהצלחה!
 

tom1992

New member
תודה רבה! אני מבקש שמישהו יואיל בטובו

"לסגור לי את החור" הזה של ה-unsigned - מתי נחוץ להשתמש בו? ולשם מה?
מדוע ב-++c הוא אינו קיים ?
 

BravoMan

Active member
אם הייתי במקומך, הייתי מחפש מורה פרטי טוב!

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

tom1992

New member
סליחה. הוא כן קיים אך לא נתקלתי בו , על כל פנים בשימוש.

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

BravoMan

Active member
אתה לא צריך להתנצל, פשוט רציתי להבין מה החשיבה:

זו כבר פעם שניה בשרשור הזה שקפצת למסקנה שמשהו לא קיים, כאשר בפועל הוא קיים ונפוץ, ולכן תהיתי מהיכן בדיוק חוסר ההבנה.
&nbsp
בכל אופן, עניין ה-unsigned הוא מאוד פשוט:
לכל משתנה שמכיל מספרים שלמים יש גודל מסוים. וזה אומר שהמשתנה מוגבל בטווח המספרים שהוא יכול להכיל.
&nbsp
למשל משתנה מסוג char שהוא בד"כ בגודל בית בודד, יכול להכיל מספרים מ 127- עד 127.
עכשיו, נניח שאנחנו רוצים לאחסן מספרים מ-0 עד 200, האם זה אומר שצריך משתנה גדול יותר?
לא! לא צריך לבזבז עוד זיכרון!
פשוט נשתמש ב-unsigned כדי לקבוע שכל המספרים במשתנה הם חיוביים, ועכשיו אותו בית בודד יכול להכיל מספרים מ-0 עד 255.
&nbsp
אפשר לומר ששחררנו עוד "ביט".
כידוע לך, כל המידע במחשב שמור בצורה בינארית, ובצורה זו אין תו מינוס.
מספרים שלמים שליליים מיוצגים בד"כ בשיטה שנקראת "משלים ל-2". בהתחשב בכמה מחפפים במוסד שלך, יש סיכוי טוב שלא למדת עליה עדיין.
&nbsp
אספר לך בקצרה, שאותם ביטים שיוצרים מספר חיובי גדול, יכולים להתפרש גם כמספר שלילי. ה-unsigned הוא שעושה את ההבדל ואומר למחשב איך להתייחס למספר שבתוך המשתנה.
 

tom1992

New member
לא הבנתי...

הרי משתנה char מכיל ערך האסקי. איך הוא יכול לייצג מס' הגבוהים מ-127???
אולי תוכל לתת דוגמא קונקרטית?
 

BravoMan

Active member
יש גם טבלת ASCII מורחבת.

איך אתה חושב שהציגו עברית לפני שהיה Unicode?
http://www.ascii-codes.com/cp862.html

בכל אופן, זה מאוד מאוד פשוט, ואם היית לומד את הבסיס של איך עובד זיכרון מחשב, היית מבין זאת.

משתנה מסוג char הוא בית, זה אומר שהוא מכיל 8 ביטים.
באופן רגיל, הוא מפורש כמספר שלם עם סימן, וזה אומר שהערכים בו נראים כך:
01111111 = 127
11111111 = 1-
10000000 = 128-

אם תוסיף לו unsigned הוא יפורש כשלם חיובי - כלומר "ללא סימן", והערכים בו יראו כך:
01111111 = 127
11111111= 255
10000000 = 128

זה שבוחרים לעשות בו שימוש בתור מחזיק ערכי ASCII, בין 0 ל-127, לא משנה את המהות שלו. במחשב אין אותיות, רק מספרים.
 

tom1992

New member
הבנתי..וקצת באותו הקשר:

נשגב מבינתי להבין מדוע זה הפלט המתקבל כאן!
לשיטתי, הפלט צריך להיות .92 , שהרי classesAverage מכילה תווים...
אני צריך שמישהו יבאר לי את העניין הזה, כמו אויר לנשימה...

 

BravoMan

Active member
למה שהפלט יהיה 92?

תסביר בבקשה במילים שלך מה לדעתך הקוד עושה בדיוק?
 

tom1992

New member
.92 ולא 92 ...להבנתי,

התכנית משתמשת בערכים מתוך מחרוזת classesAverage כדי לקלוט את ערכי המערך avg . הקלט הוא מסוג f%, אבל איך זה קורה כאן? הרי classesAverage מכילה תווים, כלומר c% ...
 

tom1992

New member
ומאיפה הגיעו הרווחים בפלט הזה??

הרי פקודת printf בקוד הנ"ל לא הדפיסה רווחים בין ערך לערך , לא?
 

BravoMan

Active member
לפי צילום מסך קשה לקבוע מה היא מדפיסה ומה לא

אבל אם תסתכל היטב, בשורה של sscanf, הגרשיים דבוקים לאות f האחרונה בעוד שבשורה של printf יש בניהם רווח קטן.
ייתכן שיש שם רווח בסוף מחרוזת, אבל בגלל הפונט הוא כ"כ צר שקשה להבחין בו.
&nbsp
האם זה קוד שהרצת או ראית היכנשהו ואתה מנחש מה יש בו?
 

BravoMan

Active member
הקלט הוא תמיד מהסוג שמחרוזת הקלט אומרת לו להיות

אם מחרוזת הקלט אומרת לפרש את הקלט כ-f% הרי שככה הקלט יפורש.
זה התפקיד שלה!
&nbsp
אין הבדל בין לקרוא תווים מהמקלדת שלך לבין לקרוא אותם ממערך תווים.
הרי אתה לא חושב שהמקלדת שלך יודע לשלוח מספרים עשרוניים?
 
למעלה