מערכי variant

בפרק הוקדם דיברנו על מערכים שונים בשפת פסקל, והראנו את הסוגים השונים הקיימים בשפה.

דיברנו על מערכי variant אשר לא באמת דיברנו עליהם, ואמרתי שאכתוב עליהם פוסט בנפרד, אז זהו ה"פוסט בנפרד".

כמו שדיברתי בעבר, הטיפוס variant מכיל הרבה טיפוסים בפנים. אחד מהם הוא מערך.

בשביל ליצור מערך של variant נבצע את הפעולות הבאות:

...
uses variants;
...
var
arr : variant;
...
begin
arr := VarArrayCreate([0,9,0,9], varVariant);
arr[0,0] := 'a';
writeln(arr[0,0]);
end.

מה שעשינו כאן זה להשתמש ביחידה variants אשר מספקת עוד כלים לעבודה עם variant. לאחר מכן הגדרנו משתנה מטיפוס variant. איתחלנו את המשתנה עם כמות זכרון שתצליח להחזיק מטריצה של 10 על 10 פרמטרים (הזוג הראשון בסוגריים המרובעים, זה הטווח של ווקטור אחד, והזוג השני מגדיר את המטריצה). אחר מכן, אמרנו שהמערך יכול להכיל את כל הטיפוסים ש variant מסוגל לשמור.

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

שימו לב שאין צורך לשחרר את הזכרון כאן, וגם אין דליפת זכרון ביצירה של המערך. אך חשוב לדעת שבמידע ונשים מידע כדוגמת מצביעים, צריך לשחרר את הזיכרון שלהם.

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

arr[0] := 'a';
arr[1] := 'b';
...

נוכל להשתמש בפונקציה VarArrayOf במקום. שימו לב שהיא עובדת רק עם ווקטורים ולא עם מטריצות ומעלה.

השימוש בפונקציה מתבצע בצורה הבאה:

arr := VarArrayOf([1, 2, 3, 4, 5, 6, 7, 8, 9 ,0]);

חשוב לדעת כי אם תחרגו מאורך המערך שהוגדר עם VarArrayCreate, אז תהיה לנו חריגה שצריך לטפל בה או שהתוכנית תצא.

לשינוי הממדים של ווקטור, נשתמש בפקודה VarArrayRedim בצורה הבאה:

VarArrayRedim(arr, 5);

ועכשיו אנחנו שינינו את הגודל של arr ל6 תאים במקום 10.

בשביל לדעת מה התא הראשון של מערך (לא משנה כמות הממדים) נשתמש בפקודה

VarArrayLowBound(arr, 1);

וכך נקבל את ההתחלה של התא הראשון (0 במקרה שלנו) במימד הראשון (כלומר בווקטור).

בשביל לקבל את אורך המערך בממד מסויים נשתמש בפקודה:

VarArrayHighBound(arr, 1);

וכך נקבל את התא האחרון כלומר תא מספר 5 בדוגמא שלנו.

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

במידה ואנחנו רוצים לדעת האם משתנה הvariant שקיבלנו הוא מערך, נשתמש בפונקציה:

VarIsArray(arr);

ונקבל ערך בוליאני בנושא.

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

2 מחשבות על “מערכי variant

  1. פינגבק: מערך כתכונה | לראות שונה

  2. פינגבק: Redis סיבוב שלישי | לראות שונה

כתיבת תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s