דחוף - פשוט. מה זה פעולת החישוב % בJAVA ?

YIM222

New member
דחוף - פשוט. מה זה פעולת החישוב % בJAVA ?

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

nocgod

New member
רגע בודק אם גוגל עובד...

מסתבר שעובד - סימן ראשון לעצלות זה חוסר היכולת לחקור את הבעיה שלך.
הסימן הזה הוא אופרטור מודולו, חלוקת שארית. כלומר:
5 / 2.0 = 2.5
5 % 2 = 1 (בגדול 2 עם שארית 1)
ליותר דוגמאות ומידע - חפש בגוגל
 

YIM222

New member
אין ספק העצלות היא מנת חלקי

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

nocgod

New member
לא מבין מה יש להבין את האופרטור הזה

יש לי 2 מספרים שאני עושה ביניהם מודולו
התוצאה היא שארית החלוקה בין 2 המספרים
לדוגמא
10 לחלק ל 3 הוא שבר, יוצא 3 ושליש אחד
כאשר עושים חלוקת שארית אתה בעצם אומר 3 נכנס ב10 בדיוק 3 פעמים עם שארית 1 (כי 3 כפול 3 זה 9)
א. שארית מעגלית ביחס למחלק, כלומר שארית חלוקה במספר n יכולה להיות כל מספר החל מ 0 עד n-1
ב. עולם ה security כולו בערך חיי על חשבון מדולרי
ג. כווווולם משתמשים בחשבון מודולרי ביום יום ואפילו לא מודעים לזה (שעון קיר אנלוגי הדוגמא הכי טבעית לזה)

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

nocgod

New member
בגדול זה שונה בהרבה ממה שחישבת קודם

בקטן צריך לספור את השאריות לאחור 6 5 4 3 2 1 0 6 5 4 3 2 1 0 6 5 4 3 2 1 0 6 5 4 (את תספרי תראי שיש בדיוק 24 מספרים שספרתי לאחור) ככה שהפיתרון הוא 4
דרך נוספת: בואי נחבר ל 24- את המספר 7 עד אשר התוצאה לא תהיה בטווח שבין אפס (כולל) לבין 7 (לא כולל)
-24 + 7 = -17
-17 + 7 = -10
-10 + 7 = -3
-3 + 7 = 4 (הגענו לתנאי עצירה)
יש עוד כמה וכמה דרכים להראות את זה...:)
[URL]https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/what-is-modular-arithmetic[/URL]
אחרי שתעייני באתר תעני לי על השאלה
-24 = x(mod7)
מה הוא x? כמה פיתרונות יש?
 

nocgod

New member
צ"ל: לא שונה בהרבה

נחבר את המספר 7 עד אשר התוצאה תהיה בטווח שבין אפס (כולל) לבין 7 (לא כולל)
 

הפרבולה

New member
אם מריצים את הפעולה הזאת

-24 % 7
ב C ( או C++ ) התוצאה יוצאת 3- ולא 4 ( ואני מניח שבעוד שפות זה ככה גם ב גאווה ). וזה בניגוד להגדרה המתמתית המקובלת ששארית צריכה להיות חיובית.
היה לי פעם בג בתוכנה בגלל שחשבתי בטעות שהאופרטור % תמיד יתן מספר חיובי וגיליתי שאם המחולק הוא מספר שלילי אז השארית יוצאת גם מספר שלילי . לכן הוספתי בדיקה שאם השארית יוצאת שלילית אני מוסיף לה את ערך המחלק כדי לקבל חיובי ( בדוגמה הזאת מוסיף 7 לתוצאת שארית שלילית כדי לקבל את הערך בטווח 0....6)
 

nocgod

New member
הסיפור שאני מבין מאחורי זה שוב, מכיל מתמטיקה

כשמימשו את אופרטור המודולו בשפות היו צריכים לבחור את צורת המימוש (היחס === הוא סימן מתמטי של = רק עם 3 פסים במקום 2)
r === x(mod n) we say that r is congruent to x meaning : r mod n = x mod n
במקרה שלנו
-3 === 4 mod 7 meaning -3 mod 7 = 4 mod 7
עכשיו נשאלת השאלה איך בכל שפה ושפה החליטו לממש את תוצאת המודולוס, האם לתת לתוצאה את סימן המחולק או לא לתת לו.
ללא ספק היכרות של איך שפת העבודה שלך מממשת את הדברים האלה זה חשוב כדי להמנע מבאגים (נגיד hash שלילי או משהו כזה)
 
לא מדוייק

ב-c, זה תלוי מהדר.
ב-java, אאל"ט, זה אכן תמיד שלילי.
&nbsp
השואל המקורי שאל על java, ולכן, 4 היא תשובה שגויה.
 
לא נכון

גם מתמטית, התשובה לשאלה "מה תהיה תוצאת החישוב -24%7 ב-java", אינה 4.
&nbsp
(אגב, האופרטור המתמטי מודולו מחזיר מחלקת שקילות, ולא מספר בודד)
 

nocgod

New member
וכמובן הדרך הרגילה

לפי חשבון מדולרי נרצה לייצג כל מספר x בצורה הבאה:
x = q*n + r; where 0 <= r < n and q is the quotient of x/n
עכשיו נחפש את הפיתרון למשוואה שלנו
-24 = q * 7 + r ===> r = -24 - 7q
בואי נחפש q שמקיים את המגבלה על r (נזכור: r חיובי בין 0 לבין n לא כולל):
עבור q=-1 התוצאה שלנו 17-, שלא מתאים לתנאי של r
עבור q=-2 התוצאה שלנו 10-, שלא מתאים לתנאי של r
עבור q=-4 התוצאה שלנו 4, מה שתואם את התנאי של r
עבור q=-5 התוצאה שלנו תהיה 11 (35-24) מה ששוב מוציא אותנו מחוץ לגבולות של התנאי...
 

YIM222

New member
הבנתי!!! תודה רבה

ואו אתם נכנסים לעומק העניין יפה לכם.
הקטע זה יענו כמה השארית של החלוק ואם זה פחות מ1 אז JAVA אומר שזה אחד. נכון???

ומה ששאלת לכאורה זה צריך לצאת -3 אבל בטח מינוס זה למס'...
ובJAVA זה יוצא... ..... .....
3 - ...
ידעתי שיש לי עתיד בתיכנות
 
למעלה