מערכים מאפשרים לנו להתייחס לסדרת משתנים באותו שם ולהשתמש במספר (אינדקס) בכדי לקרוא אלמנטים בודדים בסדרה זו. למערכים יש גבול עליון ותחתון ואלמנטים של מערך רציפים בתוך גבולות אלה.
אלמנטים של המערך הם ערכים שכולם מאותו סוג (מחרוזת, מספר שלם, רשומה, אובייקט מותאם אישית).
בדלפי ישנם שני סוגים של מערכים: מערך בגודל קבוע שנשאר תמיד באותו גודל - מערך סטטי - ומערך דינמי שגודלו יכול להשתנות בזמן ריצה.
מערכים סטטיים
נניח שאנחנו כותבים תוכנית המאפשרת למשתמש להזין ערכים מסוימים (למשל מספר הפגישות) בתחילת כל יום. היינו בוחרים לאחסן את המידע ברשימה. נוכל לקרוא לרשימה הזו מינויים, וכל מספר עשוי להיות מאוחסן כמינויים [1], מינויים [2] וכן הלאה.
כדי להשתמש ברשימה, ראשית עלינו להכריז עליה. לדוגמה:
var מינויים: מערך [0..6] מספר שלם;
מכריזה על משתנה הנקרא מינויים המחזיק מערך חד ממדי (וקטור) של 7 ערכים שלמים. בהתחשב בהצהרה זו, מינויים [3] מציינים את הערך השלם הרביעי במינויים. המספר בסוגריים נקרא האינדקס.
אם אנו יוצרים א מערך סטטי אך אל תקצה ערכים לכל האלמנטים שלה, האלמנטים שלא בשימוש מכילים נתונים אקראיים; הם כמו משתנים לא מאורגנים. ניתן להשתמש בקוד הבא כדי להגדיר את כל האלמנטים במערך מינויים ל- 0.
עבור k: = 0 עד 6 לעשות פגישות [k]: = 0;
לפעמים עלינו לעקוב אחר מידע קשור במערך. לדוגמה, כדי לעקוב אחר כל פיקסל במסך המחשב שלך, עליך להתייחס לקואורדינטות ה- X וה- Y שלה באמצעות רב ממדי מערך לאחסון הערכים.
בעזרת דלפי, אנו יכולים להכריז על מערכים בעלי מספר רב של מימדים. לדוגמה, ההצהרה הבאה מצהירה על מערך דו-ממדי של 7 על 24:
var DayHour: מערך [1..7, 1..24] של Real;
כדי לחשב את מספר האלמנטים במערך רב ממדי, הכפל את מספר האלמנטים בכל אינדקס. המשתנה DayHour, שהוכרז לעיל, מציב 168 (7 * 24) אלמנטים, בשבע שורות ו 24 עמודות. כדי לשלוף את הערך מהתא בשורה השלישית והעמודה השביעית היינו משתמשים: DayHour [3,7] או DayHour [3] [7]. ניתן להשתמש בקוד הבא להגדרת כל האלמנטים במערך DayHour ל- 0.
עבור i: = 1 עד 7 לעשות
עבור j: = 1 עד 24 לעשות
DayHour [i, j]: = 0;
מערכים דינמיים
יתכן שלא תדע בדיוק כמה גדול ליצור מערך. יתכן שתרצה שתהיה לך היכולת של שינוי גודל המערך בזמן ריצה. מערך דינאמי מצהיר את סוגו, אך לא את גודלו. ניתן לשנות את הגודל האמיתי של מערך דינמי בזמן ריצה על ידי שימוש במערכת אורך SetL תהליך.
var סטודנטים: מערך של מחרוזת;
יוצר מערך מיתרים דינאמי חד-ממדי. ההצהרה אינה מקצה זיכרון לסטודנטים. ליצירת המערך בזיכרון, אנו קוראים לנוהל SetLength. לדוגמה, בהתחשב בהצהרה שלמעלה,
אורך SetL (סטודנטים, 14);
מקצה מערך של 14 מיתרים, צמודים לאינדקס של 0 עד 13. מערכים דינמיים תמיד צמודים לאינדקסים מלאים, תמיד מתחילים מ- 0 לאחד פחות מגודלם באלמנטים.
ליצירת מערך דינמי דו-ממדי, השתמש בקוד הבא:
var מטריקס: מערך מערך כפול;
התחל
אורך Set (מטריקס, 10, 20)
סוף;
המקצה מקום למערך דו-ממדי, 10 על 20, של ערכים של נקודה צפה כפולה.
כדי להסיר את שטח הזיכרון של מערך דינמי, הקצה אפס למשתנה המערך, כמו:
מטריקס: = אפסי;
לעתים קרובות מאוד, התוכנית שלך לא יודעת בזמן ההרכבה כמה אלמנטים יידרשו; המספר הזה לא ידוע עד זמן הריצה. בעזרת מערכים דינמיים, באפשרותך להקצות שטח אחסון רב רק כנדרש בזמן נתון. במילים אחרות, ניתן לשנות את גודל המערכים הדינמיים בזמן ריצה, וזה אחד היתרונות העיקריים של מערכים דינמיים.
הדוגמה הבאה יוצרת מערך של ערכים שלמים ואז מתקשרת לפונקציית ההעתקה כדי לשנות את גודל המערך.
var
וקטור: מערך מספר שלם;
k: מספר שלם;
התחל
אורך SetL (וקטור, 10);
עבור k: = נמוך (וקטור) עד גבוה (וקטור) לעשות
וקטור [k]: = i * 10;
...
// עכשיו אנו זקוקים ליותר מקום
אורך SetL (וקטור, 20);
// כאן, מערך וקטור יכול להכיל עד 20 אלמנטים // (יש לו כבר 10 כאלה) בסוף;
הפונקציה SetLength יוצרת מערך גדול יותר (או קטן יותר) ומעתיק את הערכים הקיימים לערך מערך חדש. הפונקציות הנמוכות והגבוהות מבטיחות גישה לכל רכיב מערך מבלי להביט לאחור בקוד שלך עבור ערכי האינדקס התחתונים והעליונים הנכונים.