חידת C

עריסטו

Active member
חידת C

int k, j; for (j = f[k = 256]; f[k] - f[j]; k = f[k]) j = f[f[j]]; for (j = f[j], k = 256; f[k] - f[j]; k = f[k]) j = f[j];​
f הוא מערך מסוג char, וגודלו 257. מה עושה קטע הקוד, עלומר מה משמעות הערכים של j ו - k בסיום ביצוע הקוד?
 

e 3 l D i

New member
לא בקיא כ"כ ב C

תוכל להסביר: א. את התחביר של FOR. ב. מתי "=" הוא אופרטור ומתי הוא בדיקת שוויון (כמו = ו := בפסקל). תודה.
 

מספר6

New member
אילו

j, k ו-f היו unsigned, הייתי מנחש שהקוד הזה מוצא מעגל ברשימה מקושרת חד כיוונית
 
../images/Emo26.gif

ליתר דיוק: בסיום הלולאה השניה, k ו- j מצביעים למקום שבו מתחיל המעגל אליו נכנסים כאשר מתחילים בתא 256 ורודפים אחר הרשימה המקושרת. משתנה אחד מצביע על נקודה זו מתוך המעגל והשני מבחוץ.
 

slallum

New member
יש מצב שאתה רושם את זה בפסקל?

בבקשה?
 
מה זאת אומרת?

בלולאת for הביטוי האמצעי אמור להפיק ערך בולאני, ואם הערך הזה נותן אמת אז הלולאה ממשיכה לפעול. מה בולאני ב-f[k] - f[j] ZZZ (ואל תתיחס ל- ZZZ)?
 
הסבר

בשפת C, כל מספר שונה מ-0 נחשב ל- TRUE כביטוי בוליאני (למשל בתוך IF או WHILE, FOR וכדומה) ו-0 נחשב ל- FALSE. לכן, a-b כביטוי בוליאני הוא FALSE אם a=b ו- TRUE אחרת.
 
למעלה