שאלה קטנה בשפת C

levomer

New member
שאלה קטנה בשפת C

מקודם רשמתי את השאלה הזאת: כתוב תוכנית הבונהה מערך בן 20 תאים בשם A, התוכנית תציב באופן אקראי בתוך המערך מספרים בין -20 ל-20. בנה מערך בשם B שבו האברים של המערך A מתקדמים מקום אחד קדימה(הזזה ימינה) האיבר הראשון ב-A עובר לתוך האיבר השני ב-B וכו'..האיבר האחרון ממערך A עובר לתוך התא הראשון במערך B. אוקיי הצלחתי לעשות שהאיבר הראשון ב-A עובר לתוך האיבר השני ב-B, כיצד אני עושה שהאיבר האחרון ב-A יעבור לתוך התא הראשון ב-B? אני אשמח לקבל הצעות כלשיהן, תודה.
 

® רן

New member
לא הבנתי

מה רע ב
B[0] = A[19];​
האם זה לא מעביר את האיבר האחרון ב A לראשון ב B?
 

levomer

New member
../images/Emo4.gif

לא נראה לי שזה נכון...כי ככה תעשה לכל המספרים(?): B[0] = A[19]; B[1] = A[0]; B[2] = A[1]; B[3] = A[2]; B[4] = A[3]; והלאהה........ במקום זה אני עשיתי: b=a[i-1]; וכאן זה מעביר אחד קדימה עד שהוא מגיע לאחרון של A ולא מעביר אותו לראשון של B, אז זאת הבעיה...
 

galh

New member
אז תעשה משהו בסגנון של...

#define SIZE 20 for (i = 0; i < SIZE; ++i) { B = A[(i+1)%SIZE]; }​
 

levomer

New member
כנס..

ניסיתי את מה שהבאת ומה שזה עושה זה מעלה את המספר האחרון במערך A להיות המספר הראשון במערך A, מה עושים?
 

galh

New member
מתקנים את הקוד? ../images/Emo4.gif

או שקודם תעתיק את התא האחרון ולראשון ואז תרוץ בלולאה. או שתתקן את החישוב עם המודולו בשביל שהוא יהיה נכון.
 

® רן

New member
יש לך כמה אפשרויות

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

levomer

New member
אוקיי..

טוב אני יעשה עם הלולאה...ודרך אגב מזה המודולו?
 

® רן

New member
תראה בקוד של galh

אתה רואה שהוא השתמש בסימן האחוז (%)? % ב C זה פעולת מודולו, או שארית מחלוקה. אם 5 חלקי 2 הם 2 ושארית 1, ב C זה יראה ככה:
5 / 2 == 2 5 % 2 == 1​
 

levomer

New member
.......

אה את זה ידעתי רק לא ידעתי שככה קוראים לזה, בכל מקרה תודה.
 

הטרחן

New member
יש לזה כינוי בשפת המחשבים. הידעתם?

קוראים לזה סיבוב ויש לזה ביטוי בשפת המעבד כלומר בשפת אסמבלר. RCL - סובב לצד ימין. RCR - סובב לצד שמאל. לפקודה קוראים סיבוב. ROTATE
 
למעלה