ex10y2 מערכים דו־ממדיים


מערך דו־ממדי: אתחול, גישה ותרגולי אינדקסים

10.2.1 השוואת אלכסונים

כתבו פעולה בשם AreDiagonalsEqual המקבלת מערך דו־ממדי ריבועי בגודל N×N ומחזירה true אם ==האיברים בשני האלכסונים זהים לפי הערך ולפי הסדר==, אחרת מחזירה false.

שימו לב: גודל המטריצה הריבועית ==אינו נתון==.

דוגמה למערך עם אלכסונים זהים (3×3):

4 9 4
7 5 3
8 1 8

10.2.2 ריבוע קסם

ריבוע קסם הוא ריבוע המכיל מספרים טבעיים שבו ==סכום כל שורה, סכום כל עמודה וסכום כל אלכסון שווים==. כתבו פעולה בשם IsMagicSquare המקבלת מערך דו־ממדי ריבועי ומחזירה true אם המערך מהווה ריבוע קסם, או false אחרת.

אתחלו מספר מטריצות ריבועיות בפעולה הראשית (Main). הדפיסו אותן למסך + הודעה המציינת עבור כל אחת האם מהווה ריבוע קסם או לא.

דוגמה לריבוע קסם 3×3 (סכום כל קו = 15):

2 7 6
9 5 1
4 3 8

דוגמה נוספת לריבוע קסם 4×4 (סכום כל קו = 34):

16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1

10.2.3 בדיקת מיון עולה

חלק א’ - פונקציית בדיקה

כתבו פעולה בשם IsSortedAscending המקבלת מערך דו־ממדי ריבועי בגודל N×N ומחזירה true אם ==המערך כולו ממוין בסדר עולה==, אחרת false.

במערך ממוין: האיבר הראשון בשורה הראשונה הוא הקטן ביותר, והאיבר האחרון בשורה האחרונה הוא הגדול ביותר. האיברים גדלים בין עמודות משמאל לימין ובין שורות מלמעלה למטה.

דוגמה למערך ממוין (3×3):

1 4 8
10 12 17
23 26 67

חלק ב’ - אתחול והדפסה

כתבו פעולה נוספת TestAndPrintSorted שמבצעת:

  1. מאתחלת מערך דו־ממדי ריבועי בגודל N×N
  2. קוראת ל־IsSortedAscending
  3. מדפיסה את המערך + הודעה מתאימה

10.2.4 רביעיית k

א. מציאת רביעיית k

כתבו פעולה בשם HasKQuad המקבלת מערך דו־ממדי ומספר k ומחזירה true אם ==קיימת “רביעיית k”== במערך (אחרת, false).

הגדרה: “רביעיית k” היא קבוצה של ארבעה תאים סמוכים (שורה או עמודה רציפה) שכולם מכילים את הערך k.

ב. מציאת k המקסימלי

כתבו פעולה בשם FindMaxKQuad המחזירה את ==המספר k הגדול ביותר== שעבורו קיימת “רביעיית k” במערך. אם לא נמצאה “רביעיית k” במערך, תחזיר הפעולה 1-.

דוגמה (5×5):

1 3 2 2 8
2 9 9 6 1
12 9 9 1 4
17 6 8 5 2
1 3 5 7 1

בדוגמה זו: קיימת רביעייה של 9 (מסומנת).


10.2.5 פרח

נגדיר פרח במערך באופן הבא: הפרח מורכב מ-5 איברים בתת־מערך בגודל 3×3. האיבר המרכזי בתת־מערך הוא “לב הפרח”. ארבעת האיברים הצמודים לו בפינותיו הם “עלי הכותרת” של ה”פרח”. הערך של “לב הפרח” שווה לסכום ערכי “עלי הכותרת” של ה”פרח” ובכל “פרח” חייבים להיות בדיוק 4 “עלי כותרת”.

דוגמה לפרח (לב הפרח ועלי הכותרת מסומנים):

0 0 3 3
2 0 2 1
0 0 2 3
1 4 8 11
0 -2 9 7

א. בדיקת לב הפרח

כתבו פעולה בשם IsFlowerHeart המקבלת מערך דו־ממדי ושני מספרים שלמים המציינים מיקום של איבר במערך (אינדקס שורה ואינדקס עמודה). הפעולה תחזיר true אם איבר זה הוא ==”לב הפרח”== של “פרח” במערך. אחרת — הפעולה תחזיר false.

ב. בדיקת מערך פרחוני

כתבו פעולה בשם IsFloralArray המקבלת מערך דו־ממדי ומחזירה true אם ==יש במערך לפחות 5 “פרחים”==. אחרת — מחזירה false.

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


10.2.6 איבר צומת

איבר במערך דו־ממדי ייקרא איבר צומת, אם ==סכום כל האיברים בעמודה שהוא נמצא בה שווה לסכום כל האיברים בשורה שהוא נמצא בה==.

א. מציאת איבר צומת

כתבו פעולה בשם FindCrossroadElement המקבלת מערך דו־ממדי ומחזירה את ==המיקום (שורה, עמודה) של איבר צומת==. אם יש כמה — הפעולה תחזיר את הראשון שמצאה. אם לא נמצא איבר צומת, תחזיר (-1, -1).

ב. בדיקת מערך עם צומת

כתבו פעולה בשם TestCrossroadArray שמאתחלת מערך, קוראת ל־FindCrossroadElement ומדפיסה את תוצאת החיפוש.

דוגמה למערך עם איבר צומת (5×5):

-4 0 7 14 -3
10 -2 4 9 2
1 8 6 0 10
-7 4 9 2 15
2 3 -1 5 0

בדוגמה: התא [2,2] (ערך 6) הוא איבר צומת כי סכום שורה 2 = 25 וסכום עמודה 2 = 25.