פיתרון לא מובן ב C++

builtin

New member
פיתרון לא מובן ב C++

שלום.. הייתה לי שאלה לכתוב פונקציה שבודקת במטריצה את כמות המספרים "השולטים" כלומר המספרים שגדולים יותר מכל המספרים שמסביבם, יש לי את הפיתרון אך אינני מבין אותו.. מישהו אולי יכול להסביר לי- לפחות על קצה המזלג את הפיתרון?(יש לי מחר מבחן וזנ מאד יכול לעזור..) הפתרון:
int question4 (int matrix[][SIZE]) { int count=0; for (int i=0; i<SIZE; i++) for (int j=0; j<SIZE; j++) { int dominant=1; for (int ii=i-1; ii<=i+1; ii++) for (int jj=j-1; jj<=j+1; jj++) { if (ii!=i || jj!=j) { if (ii>=0 && ii<SIZE && jj>=0 && jj<SIZE) if (matrix[j] <= matrix[ii][jj]) dominant = 0; } } if (dominant) count++; } return count; }
 

vinney

Well-known member
זה עושה בדיוק את מה שתיארת

איזו נקודה בפתרון לא ברורה לך? בסה"כ לכל איבר במטריצה הפונקציה עוברת מסביבו ובודקת ם הוא גדול מכולם.
 

builtin

New member
אני יודע שהפיתרון נכון אבל לא מבין

מה זה ii jj ואיך היא עוברת מסביבו ולא חורגת מגבולות המערך? לא ברורה לי השורה של:
for (int ii=i-1; ii<=i+1; ii++) // בעיקר השורה הזאת לא מובנת.. for (int jj=j-1; jj<=j+1; jj++) { if (ii!=i || jj!=j) { if (ii>=0 && ii<SIZE && jj>=0 && jj<SIZE) if (matrix[j] <= matrix[ii][jj]) dominant = 0; ii=i-1 זה לא חורג מגבולות המערך?
 

vinney

Well-known member
טוב

II וJJ זה מוני עזר ללולאה פנימית שרצה עבור כל אחד מהאיברים. עכשיו תחשוב רגע, אתה יודע על איבר, אתה רוצה לעבור על כל שכניו. איך אתה מתייחס לשכנים שלו? רמז - נקודת הייחוס היחידה שיש לך זה האיבר שאתה יודע עליו. עכשיו, את זה אתה עושה לכל איבר. והIF שיש לך שם - תסתכל בדיוק מתי הוא מחזיר לך ערך TRUE ומתי FALSE (מתי הכוונה עבור אילו ערכים של II וJJ) - זה יענה לך על השאלה האחרונה.
 

הטרחן

New member
יש לי עצה בשבילך

תראה את התוכנית אפשר להריץ לאט לאט ולראות איך הערכים משתנים כדי לעשות זאת השתמש בפקודת Watch מתוך debug ורשום (עם enter) רשימה של משתנים אותם אתה רוצה לבדוק. לאחר מכן לחץ F8 לאט לאט ותראה כיצד התוכנית פועלת רשום לך הערות בעברית ושלח לנו את הערות על מנת שנראה אם תפסת מה התוכנית עושה.
 
למעלה