מערכים
הוצג| English | משמעות |
|---|---|
| array/əˈreɪ/ | מערך |
| element/ˈelɪmənt/ | אלמנט |
| index/ˈɪndeks/ | מדד |
| lower bound/ˈləʊə baʊnd/ | גבול תחתון |
| upper bound/ˈʌpə baʊnd/ | גבול עליון |
| dimension/daɪˈmenʃn/ | מימד |
| nested loops/ˈnestɪd luːps/ | לולאות מקושרות |
| linear search/ˈlɪnɪə sɜːtʃ/ | חיפוש ליניארי |
| bubble sort/ˈbʌbl sɔːt/ | מיון בועה |
מקום 14C
- לקולנוע יש 300 מקומות. מערכת ההזמנות שלו אינה מכילה 300 משתנים הנקראים
Seat1A,Seat1B,Seat1C. יש לה מערך אחד, וכרטיס הכניסה שלך הוא כתובת לתוכו: שורה 14, מקום C. - שם אחד, מאות ערכים, כל אחד נמצא על ידי מספר. הוספת שורה ואין צורך לשנות את הקוד; לולאת על המספרים ונבדקו כל המקומות.
- כמעט כל אלגוריתם במבחן Paper 2 עובר על מערך: מחפש בו, מסכם אותו, מיישר אותו או מוצא את הערך הגדול ביותר.
- שיעור זה הוא המילון, ההצהרות וארבעת האלגוריתמים שהבוחן דורש בפסאודוקוד ובמילים.
המילון
- מערך הוא מבנה נתונים המכיל מספר קבוע של אלמנטים מאותו סוג נתונים תחת זיהוי אחד, כאשר כל אלמנט נגיש באמצעות אינדקס.
- הגבול התחתון והגבול העליון הם האינדקס הראשון והאחרון החלים. מספר האלמנטים שווה לגבול העליון פחות הגבול התחתון פלוס 1.
- המימד הוא מספר האינדקסים הנדרשים לאלמנט: אחד לרשימה, שניים לטבלה.
- ב
ThisArray[n] ← 42למערך יש מימד אחד, האינדקס הוא המשתנהINTEGERn, והאלמנט באינדקס זה מקבל את42.

זיהוי אחד, אינדקס לכל אלמנט, גבולים בשני הקצוות
מערך אוגר:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
מערך הוא קולקציה מסודרת של פריטים מאותו סוג המופקים על ידי אינדקס. (רקורד מקבץ סוגים שונים.)
מערך הוא מבנה נתונים המכיל ריבוי ערכים מסוג ______ תחת שם אחד.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
כל ערך מופק על ידי האינדקס שלו.
DECLARE Marks : ARRAY[0:99] OF INTEGER מכריז על מערך של ____ אלמנטים.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
הגבול העליון פחות הגבול התחתון פלוס אחד: 99 − 0 + 1 = 100. שני הגבולות הם אינדקסים תקפים.
דוגמה פתורה: הצהרת מערך הנדרש ממשימה
- הצהרה דורשת את הזיהוי, הגבולות ואת סוג הנתונים.
- 120 קריאות שעשויות להכיל מקום עשרוני:
DECLARE Data : ARRAY[1:120] OF REAL - טבלה של 150 שורות ושתי עמודות של טקסט:
DECLARE Names : ARRAY[1:150, 1:2] OF STRING - אם שואלים את הספירה:
[0:99]מכיל 100 אלמנטים, לא 99.
איזה הכרזה מחזיקה טבלה של 150 שורות ו-2 עמודות של טקסט?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
שתי ממדים, כל אחד עם גבול תחתון ועליון, וסוג האלמנט. האפשרות השנייה היא רשימה אחת ארוכה; השלישית ללא סוג; הרביעית ללא גבולות תחתונים.
עיבוד מערך 1-ממדי
DECLARE Names : ARRAY[1:5] OF STRING
Names[3] ← "Cara"
FOR i ← 1 TO 5
OUTPUT Names[i]
NEXT i
- לולאת
FORמהגבול התחתון ועד הגבול העליון מבקרת בכל אלמנט פעם אחת. - עבור סיכום, ספירה, מקסימום או מינימום, הגדר משתנה מצטבר לפני הלולאה עדכן אותו בתוכה.
מערכים 2-ממדיים
DECLARE Grid : ARRAY[1:3, 1:4] OF INTEGER
Grid[2, 3] ← 99 // row 2, column 3
- האינדקס הראשון הוא השורה, השני הוא העמודה. לולאות מוטבעות מבקרות בכל תא: הלולאה החיצונה בשורות, הפנימית בעמודות.
- השתמש ב1-D לסדרה יחידה וב2-D כאשר הנתונים ישנם שני מימדים טבעיים, כמו רשת מושבים או טבלת ציונים לפי תלמיד ונושא.

Grid[row, column], תמיד בסדר זה
אינדקס מַעֲרָכָה בעלת ממד 2 באמצעות [שורה, עמודה]
מַעֲרָכָה בעלת ממד 2 היא רשת. הגישה ל-[רשת, שורה, עמודה] מגיע ללוחה אחת בדיוק — שנה את השורה והעמודה כדי לראות איזה ערך תגיע אליו.
ב-Grid[2, 3], איזה תא נגיש?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
האינדקס הראשון הוא השורה, השני הוא העמודה — ולכן שורה 2, עמודה 3.
דוגמה מפורטת: חיפוש ליניארי שיכול להציג "לא נמצא"
- חיפוש ליניארי בודק כל אלמנט בתור מהראשון עד שמצוי המטרה או שהגיע לקצה.
FoundAt ← -1
FOR i ← 1 TO n
IF A[i] = Target THEN
FoundAt ← i
ENDIF
NEXT i
IF FoundAt = -1 THEN
OUTPUT "Not found"
ELSE
OUTPUT "Found at ", FoundAt
ENDIF
-1לעולם לא יכול להיות אינדקס תקף, ולכן הוא מסמן "לא נמצא". יש להתחיל אותו לפני הלולאה ולבדוק אותו אחרי. חיפוש שלא מציג לעולם "לא נמצא" מאבד נקודה.
חיפוש לינארי מוצא ערך על ידי:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
חיפוש לינארי בוחן אלמנטים אחד ואחד מהתחלה ועד למציאת היעד (או לגילוי בסוף).
הגדרת FoundAt ל- -1 לפני חיפוש לינארי מאפשר לתוכנה לדווח "לא נמצא" לאחר הלולאה.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
-1 לעולם אינו אינדקס תקף, ולכן אם נשמר ללא שינוי לאחר הלולאה, היעד לא היה במערך.
הערך הגדול ביותר, ואين הוא
Largest ← A[1]
Position ← 1
FOR i ← 2 TO n
IF A[i] > Largest THEN
Largest ← A[i]
Position ← i
ENDIF
NEXT i
OUTPUT Largest, " at ", Position
- התחילו את
Largestבאלמנט הראשון, ולא ב-0: המערך עשוי להכיל רק ערכים שליליים. - אותו סוג סופר או מדפיץ את האלמנטים הלא-ריקים: השוו כל אחד עם סימן לשימוש לא זמין,
""או-1, וספר רק אלו השונים.
בועות (Bubble sort)
- בועות מבצע מעברים חוזרים על המערך בהשוואת זוגות סמוכים והחלפתם אם הם מחוץ לסדר, עד שמעבר אחד אינו ביצע החלפות.
- לאחר כל מעבר, הערך הגדול ביותר שאינו במיון הגיע לקצה, כך שמעבר הבא יכול להפסיק מקום אחד לפני כן.
REPEAT
Swapped ← FALSE
FOR Index ← 1 TO Limit - 1
IF Data[Index] > Data[Index + 1] THEN
Temp ← Data[Index]
Data[Index] ← Data[Index + 1]
Data[Index + 1] ← Temp
Swapped ← TRUE
ENDIF
NEXT Index
Limit ← Limit - 1
UNTIL Swapped = FALSE

כל מעבר מוביל את הערך הגדול הנותר לקצה
סדר את צעדי מעבר בועה אחד, וסיומו.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
איפס את הדגל, בצע סריקה והחלפה, צמצם את הגבול, עצור כאשר עברה שלמה לא ביצעה שום החלפה.
דוגמה מפורטת: איפה נמצאים סימני הבועות
- הלולאה החיצונית שמחזירה עצמה עד שמעבר אינו ביצע החלפות; הדגל
Swappedמושבת ל-FALSEבתחילת כל מעבר ומוגדר ל-TRUEבתוך ה-IF. - החלפה בשלושה קווים באמצעות משתנה זמנית. שני קווים מאבדים ערך.
- הגבול המתכווץ, פחות אחד בכל מעבר, כי הערך הגדול כבר הגיע לקצה.
- במילים, לשאלת טיפול צעד-בצעד: חזור עד למיון; בכל מעבר השוו זוגות סמוכים; החלף כל זוג מחוץ לסדר; לאחר כל מעבר, הערך הגדול ביותר שאינו במיון נמצא בקצה.
אילו תכונות מובילות לניקוד במיון בועות יעיל? סמן את כולם הרלוונטיים.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
דגל, החלפה עם משתנה זמנית, גבול הצר: אלו הנקודות. העתקת המערך אינה חלק מהאלגוריתם.
דוגמה מפורטת: הסרה והכנסה
- הסרת פריט: מצאו את האינדקס שלו בחיפוש ליניארי; הזיזו כל אלמנט שאחריו מקום אחד לכיוון ההתחלה כדי לסגור את הפער; סמנו את האלמנט האחרון כלא משומש, או הקטיגו את הספירה.
- הכנסה למערך מסודר: מציאים את האינדקס הראשון שבהו האלמנט גדול מהערך החדש; מזיזים את האלמנט ההוא וכל אלמנט אחר אחרייו מקום אחד לכיוון סוף המערך, מתחילים מהאחרון; מאחסנים את הערך החדש ברווח שנוצר.
- זזו מהסוף כאשר פותחים רווח ומתחילת המערך כאשר סוגרים אותו, או שתעתיקו חזרה על הערך שאתם עומדים להזיז.
מערך אחסן פריטים רבים מאותו סוג בדיוק שניתן לגשת אליהם באמצעות אינדקס, בעוד שרקורד מקבץ שדות מסוגים (אולי) שונים שניתן לגשת אליהם באמצעות שם.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
מַעֲרָכָה בעלת ממד 2 מתאימה לרשת (שורות × עמודות); רקורד מתאים לתיאור של דבר אחד באמצעות שדות מוגדרים בשם רבים.
סימונים נופלים מהיד
[0:99]מכיל 100 אלמנטים. סופרים גם את הגבול התחתון וגם את העליון.- אינדקס הוא ערך
INTEGER; הצהרת משתנה דורשת גם את ה-סוג (type) וגם את הגבולות. Grid[row, column]: שורה קודמת לעמודה. החלפת הסדר גוררת לקריאה שגויה של תא בכל לולאה מקוננת.- החלפה דורשת משתנה זמנית; חיפוש דורש נתיב "לא נמצא"; בסינון בועות (bubble sort) התהליך נסתיים כאשר סיבוב אינו מבצע שום החלפה, ולא לאחר מספר קבוע של סיבובים.
הבנתך מושלמת
- מערך אחראי למספר קבוע של אלמנטים מאותו סוג תחת מזהה אחד, הנגישים באמצעות אינדקס בין גבול התחתון והעליון; = upper − lower + 1
- 1-D הוא רשימה, 2-D הוא טבלה
[row, column]שעוברת עליה באמצעות לולאות מקוננות; מצהירים עם גבולות וגם סוג. - חיפוש לינארי:
FoundAt ← -1, לולאה, אחסון המקדם, בדיקה לאחר הלולאה; למציאת הערך הגדול ביותר: התחל בA[1], שמור על המיקום. - סינון בועות: מעברים של השוואה והחלפה בין שכנים עם משתנה זמני, דגל
Swapped, גבול הולך וקטן, עד שמעבר לא ביצע החלפות.