במקרים מסוימים אנו נצטרך לאכסן יותר ממספר אחד, לצורך העניין נאמר 5 מספרים. אם נשתמש במשתנים וסוגי נתונים בצורה הפשוטה ביותר שלמדנו בקורס זה, אז נצטרך להגדיר 5 משתנים מסוג int ולהזין להם את הערכים הרצויים, כפי שניתן לראות במקטע הקוד הבא:
#include <stdio.h> int main() { int number1; int number2; int number3; int number4; int number5; number1 = 10; number2 = 20; number3 = 30; number4 = 40; number5 = 50; printf( "number1: %d\n", number1); printf( "number2: %d\n", number2); printf( "number3: %d\n", number3); printf( "number4: %d\n", number4); printf( "number5: %d\n", number5); }
פשוט נורא, אך אם היינו צריכים ליצור 1000 משתנים, כנראה שזה כבר היה הופך להיות משימה סזיפית. על מנת שנוכל להתמודד מול סיטואציות מסוג זה, יש בשפות תכנות קונספט שנקרא מערכים arrays, שזהו בעצם מבנה נתונים אשר יכול להכיל כמות קבועה מראש של ערכים שהם מאותו סוג הנתונים. בהקשר של הסיטואציה שלנו – מערך יכול להכיל כמות מוגדרת של משתנים שהם מאותו הסוג נתונים.
במקום להכריז על המשתנים אחד אחרי השני כמו שעשינו בדוגמה שמעל, אנו יכולים להקים מערך array אחד, שהוא מכיל משתנה שמכיל את הערכים הרצויים. מערך array מכיל למעשה רצף של מיקומי זיכרון, כאשר הכתובת הנמוכה ביותר תואמת לאלמנט הראשון במערך, והגבוהה ביותר תואמת לאחרון.
הקמת מערכים Arrays
על מנת להקים מערך array בשפת C, על המתכנת להגדיר את סוג המשתנים, ואת כמות המשתנים. לפניכם דוגמה פשוטה להקמת מערך array בשפת C:
type arrayName [ arraySize ];
דוגמה זו נקראת מערך חד מימדי, כאשר ה-arraySize הוא כמות המשתנים, ערך זה חייב להיות גדול מ-0, ו-type הוא סוג המשתנים, שיכול להיות סוג אחד מכל סוגי הנתונים האפשריים בשפת C. לדוגמה אם נרצה להקים מערך של 10 אלמנטים שנקרא number והוא מכיל משתנים מסוג int, אז נשתמש בביטוי הבא:
int number[10];
בדוגמה שמעל number הוא משתנה array אשר מכיל 10 מספרים מסוג int.
אתחול מערכים arrays
בשפת C ניתן לאתחל מערך על ידי כתיבת הערכים אחד אחד, או בשורת קוד אחת כפי שניתן לראות בדוגמה הבאה:
int number[5] = {10, 20, 30, 40, 50};
שימו לב כי מספר הערכים שנמצאים בין הסוגריים המסולסלות { } לא יכול להיות גדול יותר ממספר האלמנטים שציינו בסוגריים המרובעות [ ]. אם נשאיר את הסוגריים המרובעות ריקות [ ] אז מספר האלמנטים ישתווה באופן אוטומטי למספר הערכים שכתבנו בין הסוגריים המסולסלות { }, כך שנקבל את אותה התוצאה בדיוק, ולמעשה אפשר לכתוב את הביטוי הזה כך:
int number[] = {10, 20, 30, 40, 50};
בדוגמה הבאה נזין ערך אחד בלבד למערך:
number[4] = 50;
בביטוי זה הזנו את הערך 50 במיקומו של האלמנט החמישי במערך. כל המערכים מחזיקים את הערך 0 באלמנט הראשון באינדקס, מה שנקרא בשפות תכנות גם האינדקס הבסיסי. הערך באלמנט האחרון האינדקס הוא מספר האלמנטים הכולל פחות אחד 1-. התמונה הבאה מתארת מערך בן 5 אלמנטים:
שימוש במערכים arrays
ניתן לגשת לאלמנטים שנמצאים בתוך המערך על ידי שימוש בשם המערך ואחריו את מיקום האלמנט בתוך סוגריים מרובעות [ ]:
int var = number[9];
הביטוי שמעל ייקח את האלמנט העשירי מתוך המערך number ויזין אותו לתוך משתנה בשם var מסוג int. בדוגמה הבאה נשתמש בכל הכלים שלמדנו בפרק זה על מנת לכתוב תוכנית בשפת C שמשתמשת במערכים arrays:
#include <stdio.h> int main () { int number[10]; /* number is an array of 10 integers */ int i = 0; /* Initialize elements of array n to 0 */ while( i < 10 ) { /* Set element at location i to i + 100 */ number[ i ] = i + 100; i = i + 1; } /* Output each array element's value */ i = 0; while( i < 10 ) { printf("number[%d] = %d\n", i, number[i] ); i = i + 1; } return 0; }
וכשנריץ את התוכנית נקבל את התוצאה הבאה:
number[1] = 101
number[2] = 102
number[3] = 103
number[4] = 104
number[5] = 105
number[6] = 106
number[7] = 107
number[8] = 108
number[9] = 109
מערכים arrays בשפת Java
זוהי דוגמה של אותה התוכנית, כאשר הפעם היא נכתבה בשפת Java שגם היא תומכת במערכים, אך משתמשת בשיטה מעט שונה להקמת מערכים באמצעות האופרטור החדש:
public class Main { public static void main(String []args) { int[] number = new int[10]; int i = 0; while( i < 10 ) { number[ i ] = i + 100; i = i + 1; } i = 0; while( i < 10 ) { System.out.format( "number[%d] = %d\n", i, number[i] ); i = i + 1; } } }
על מנת שנקבל את התוצאה הרצויה:
number[1] = 101
number[2] = 102
number[3] = 103
number[4] = 104
number[5] = 105
number[6] = 106
number[7] = 107
number[8] = 108
number[9] = 109
מערכים arrays בשפת Python
ל-Python שאינה תומכת במערכים, יש מבנה נתונים מסוג אחר אשר נקרא רשימה list, והפונקציונליות שלו דומה לזו של מערכים בשפות תכנות אחרות. זוהי דוגמה של אותה התוכנית, כאשר הפעם היא נכתבה בשפת Python:
# Following defines an empty list. number = [] i = 0 while i < 10: # Appending elements in the list number.append(i + 100) i = i + 1 i = 0 while i < 10: # Accessing elements from the list print ("number[", i, "] = ", number[ i ]) i = i + 1
על מנת שנקבל את התוצאה הרצויה:
number[1] = 101
number[2] = 102
number[3] = 103
number[4] = 104
number[5] = 105
number[6] = 106
number[7] = 107
number[8] = 108
number[9] = 109