מעבר לתוכן

משמעות הסימנים ( ? , : ) בשפת סי?


הודעות מומלצות

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

 

count = (count_temp) ? count_temp : count;                                                       1

 

 

כלומר מהו הסימן קריאה ומהם הנקודותיים? תודה:)

 

בנוסף מה המשמעות של [c[*s  :

 

                                                            define size 256 #

c={0}   ,  c[*s]                                                      2

 

תודה:)

קישור לתוכן
שיתוף באתרים אחרים

ה-'?' וה-':' באים ביחד (הם אופרטור אחד), והם סתם דרך קיצור: https://en.wikipedia.org/wiki/%3F:#C

 

בקטע השני, s הוא כנראה מצביע ל-int, ואז s* (הכוכבית משמאל ל-s) מחזיר את הערך בכתובת עליה הפוינטר מצביע: https://en.wikipedia.org/wiki/Dereference_operator

קישור לתוכן
שיתוף באתרים אחרים

תודה בהחלט הבנתי את התשובה לחלק הראשון אבל לא לחלק השני. אני אדגים לך תוכנית שלא הבנתי:

 

<include <stdio.h #

 

define SIZE 256  #

 

}(char (char *s

 

;int i, tim=0

;{char pop, c = {0

 

}(++for( ; *s; s

;++[c[*s

}(if( c[*s] > tim

;[tim = c[*s     

    ;pop = *s     

  {   

;return pop

{

קישור לתוכן
שיתוף באתרים אחרים

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

 

count = (X) ? Y : Z;                                                       1

 

 

כלומר מהו הסימן קריאה ומהם הנקודותיים? תודה :)

זה אופרטור טרינרי. אחד האופרטורים האהובים עלי. זה בסה"כ אומר - אם X "אמת", בצע את Y, אחרת בצע את Z.

 

בנוסף מה המשמעות של [c[*s  :

 

                                                            define size 256 #

c={0}   ,  c[*s]                                                      2

 

תודה :)

 

s היא כתובת כלשהי (בדוגמא שנתת, היא חייבת להיות כזו שמחזיקה int או char).

s* אומר - תקרא את הערך שנמצא בכתובת הזו (הערך ש- s מצביע אליו).

 

את הולכת להסתבך עם זה (לא בקטע רע), אז אני ממליץ לך לקרוא לאט ובסבלנות את המדריך הבא:

http://cslibrary.stanford.edu/102/PointersAndMemory.pdf

קישור לתוכן
שיתוף באתרים אחרים

תודה בהחלט הבנתי את התשובה לחלק הראשון אבל לא לחלק השני. אני אדגים לך תוכנית שלא הבנתי:


 


<include <stdio.h #


 


define SIZE 256  #


 


}(char (char *s


 


;int i, tim=0


;{char pop, c = {0


 


}(++for( ; *s; s


;++[c[*s


}(if( c[*s] > tim


;[tim = c[*s     


    ;pop = *s     


  {   



;return pop


{


קישור לתוכן
שיתוף באתרים אחרים

עברתי על מבחנים משנים קודמות והיא באמת זוועתית. סליחה אבל שכחתי לציין שהפונקציה מקבלת את המחרוזת "how do you do"

 

לפי ההסבר הפונקציה מחזירה תו המופיע הכי הרבה פעמים במחרוזת. מה שבלבל אותי הוא s*  שמייצג ערך במחרוזת (האם את מספר ה- Ascii שלו?)

 

ו- [c[*s שגם מייצג ערך לפי הבנתי? אז מה ההבדל בין השניים?

קישור לתוכן
שיתוף באתרים אחרים

טוב, אז במקרה המעוות הזה את רצה על הערך s[0]=*s (מציע לך לקרוא עוד על פוינטרים, מערכים והקשר ביניהם) שהוא ערך ASCII חיובי כלשהו של תו (CHAR) ספציפי מאותה מחרוזת. בסוף הלולאה את מקדמת את המחרוזת לפי גודל של תו (זה ה- ++s. במקום שאני אכנס להסבר מעמיק על הקידום, תסתכלי בהסבר ששלחתי לך).

 

אם את נכנסת ללולאה, כלומר s* הוא "אמת", את מעדכנת למעין ממפה (אותו c) את המונה של אותו מספר. את תצאי מהלולאה כשזה יהיה NULL (כלומר, כשסיימת לקרוא את המחרוזת. מיוצג כ"שקר"). נגיד אם יש לך את המחרוזת sjokko2o, אז בסיום c['o']=3. זו סתם דוגמא ל- 'o' שמייצג את ערך ה- ASCII שלו (111 דצימלי, אם אני לא טועה). pop אומר - תתעדכן עם התו הספציפי כשאתה רואה שמונה התו הספציפי (המעודכן) גדול ממש מהערך שהיה אצל tim עד כה, ואז תעדכן את tim (אלגוריתם פשוט לקבלת המספר המקסימלי) ואת pop, שמכיל את התו עם המופע הגדול ביותר במחרוזת.

לסיום, את מחזירה את pop.

 

אל תקחי דוגמא מהקוד המזעזע הזה... גם האלגוריתם והשימוש בפרמטרים הוא עקום למדי.

קישור לתוכן
שיתוף באתרים אחרים

הצטרפות לשיח

באפשרותך לשלוח הודעה כעת ולהירשם מאוחר יותר. אם ברשותך חשבון, ניתן להתחבר עכשיו לשליחת הודעה דרך חשבונך.
הערה: הודעתך דרושה לאישור הנהלה לפני הצגתה.

אורח
הוספת תגובה

×   הדבקה כטקסט עשיר.   הדבקה כטקסט רגיל במקום

  מאושרים אך ורק 75 סמייקונים.

×   הקישור שלך מוצמד אוטומטית.   הצגה כקישור במקום

×   תוכן הקודם שלכם שוחזר.   ניקוי עורך

×   You cannot paste images directly. Upload or insert images from URL.

טוען...
×
×
  • יצירת חדש...