→ חזרו אחורה

פרק 8 - מערך דו-ממדי

⏱ 14 דקות קריאה

עד עכשיו המערכים שלנו היו "שורה" אחת של תאים. אבל לפעמים המידע מסודר כמו טבלה - שורות ועמודות, כמו לוח שחמט, גיליון ציונים, או תמונה. בשביל זה יש מערך דו-ממדי (2D Array).

1. מהו מערך דו-ממדי?

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

2. יצירת מערך דו-ממדי

ב-⁦C#⁩ מערך דו-ממדי מוגדר עם פסיק בתוך הסוגריים המרובעים: [,].

⁦C#⁩

int[,] grid = {
    { 1, 2, 3 },
    { 4, 5, 6 },
    { 7, 8, 9 }
};
            

יצרנו מטריצה בגודל 3 שורות על 3 עמודות (3x3).

כל זוג { } פנימי הוא שורה אחת שלמה.

3. גישה לאיבר: שורה ועמודה

שימו לב: ב-⁦C#⁩, בשונה מ-Java, לא כותבים שני סוגריים מרובעים נפרדים - כותבים את שני האינדקסים בתוך אותו זוג סוגריים, מופרדים בפסיק.

⁦C#⁩

Console.WriteLine(grid[0, 0]);
Console.WriteLine(grid[1, 2]);
            

grid[0, 0] - שורה 0, עמודה 0: האיבר 1.

grid[1, 2] - שורה 1 (השנייה), עמודה 2 (השלישית): האיבר 6.

שימו לב לסדר: תמיד [שורה, עמודה], ולא הפוך.

4. מעבר על כל התאים: לולאות מקוננות

כדי לבקר בכל תא במטריצה, נשתמש בשתי לולאות מקוננות שלמדנו בפרק הלולאות - הלולאה החיצונית עוברת על השורות, והפנימית עוברת על העמודות. מספר השורות והעמודות מקבלים בעזרת GetLength.

⁦C#⁩

for (int row = 0; row < grid.GetLength(0); row++)
{
    for (int col = 0; col < grid.GetLength(1); col++)
    {
        Console.Write(grid[row, col] + " ");
    }
    Console.WriteLine();
}
            

grid.GetLength(0) - מספר השורות במטריצה.

grid.GetLength(1) - מספר העמודות במטריצה.

5. תבנית: סכום כל התאים

אותה תבנית "צובר" שהכרנו במערך חד-ממדי עובדת גם כאן - רק בתוך שתי לולאות מקוננות:

⁦C#⁩

int sum = 0;

for (int row = 0; row < grid.GetLength(0); row++)
{
    for (int col = 0; col < grid.GetLength(1); col++)
    {
        sum = sum + grid[row, col];
    }
}

Console.WriteLine("סכום כל התאים: " + sum);
            

6. טעויות נפוצות

החלפה בין שורה לעמודה: לכתוב grid[col, row] במקום grid[row, col] - קל להתבלבל.

בלבול בין GetLength(0) ל-GetLength(1): GetLength(0) הוא תמיד מספר השורות, ו-GetLength(1) מספר העמודות.

שימוש בסוגריים מרובעים כפולים: ב-⁦C#⁩ לא כותבים grid[row][col] (כמו ב-Java) אלא grid[row, col].

🎓 זווית הבגרות

איך זה מופיע בבגרות: חשוב לדעת - מערך דו-ממדי מסומן במפורש כ"מחוץ לתכנית הלימודים" (X) במיקוד הבגרות הנוכחי, גם ל-899371 וגם ל-899271. הנושא לא אמור להופיע בשאלות המבחן בפועל בשנה הנוכחית.

סוג שאלה טיפוסי: אין - זה לא נושא נבחן כרגע. הפרק כאן כהעשרה ובסיס להבנת מבני נתונים מתקדמים יותר.

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

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

7. תרגול

מה יודפס למסך על ידי הקוד הבא?

⁦C#⁩
int[,] grid = {
    { 1, 2, 3 },
    { 4, 5, 6 },
    { 7, 8, 9 }
};
Console.WriteLine(grid[2, 1]);

כתבו קוד שמדפיס את האיבר בשורה 2 ועמודה 1 במטריצה grid.

כתבו את שורת הכותרת של הלולאה החיצונית שעוברת על כל השורות של grid.

בתוך הלולאות המקוננות, כתבו את שורת הקוד שמוסיפה את grid[row, col] לצובר sum.

פרק 7 - מחרוזות פרק 9 - מבוא למחלקות ועצמים