» נושאי לימוד
» נושאי לימוד
יום ראשון 22 בדצמבר 2024
מערכים דו-ממדיים
דף ראשי  פרק 3 :יסודות שפת פסקל  מערכים  מערכים דו-ממדיים גרסה להדפסה

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

 

נסתכל על ההגדרה הבאה:

 

var

          A: array[1..5,1..7] of integer;

 

 

 

הגדרה זו יוצרת את מערך התאים הבא:

                         

                                     

      

כל 35 התאים שהוגדרו, הם מסוג שלם.

קיבלנו טבלה עם חמש שורות ושבע עמודות. טבלה זו נקראת גם מטריצה.

בהגדרהזו הרחבנו את ההגדרה של מערך חד-מימדי כך, שכלל מספר שורות של מערכיםחד-מימדיים. כלומר , 5 שורות של מערכים, שכל אחד מהם בעל 7 תאים כל אחד.

התאים במערך עשויים להיות מכל סוג שלמדנו עד כה – real, integer, string, char  ו-boolean. אך אי אפשר לערבב בהגדרה אחת כמה סוגי משתנים. ממש כמו הגדרה של מערך חד-ממדי.

 

הגדרת מערך דו-ממדי:

 

var

;סוג of [תחום עמודות,תחום שורות]array:שם המשתנה      

 

 

 

 

 

במערך זה נוכל להציב ערכים כמו בכל המשתנים שלמדנו עד כה:

 

 

 (*  הצב 5- בתא שבשורה שלוש ועמודה שבע  *)   ;A[3,7] := -5

·       

·       

·       

    (* השורה והעמודה מוגדרות על ידי משתנים *)    ;I:=1

 (* על משתנים אלו להיות מסוג שלם בלבד! *);A[I,I+1]:=3

(* על משתנים אלו להיות מסוג שלם בלבד! *);[A[2, I+2] := A[3,7]+A[I,I+1

 

 

 

 

 לאחר ביצוע הוראות אלו יתקבל המערך הבא:

 

                 

 

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

שימו  מספר נקודות חשובות:

 

·        המצביעים על השורה והעמודה חייבים להיות מסוג שלם בלבד!

·        כדי לקלוט או להדפיס ערכים של מערך דו-ממדי יש צורך בלולאות כפולות

         (לולאה בתוך לולאה)!

·        אם הקלט או הפלט הוא שורה אחרי שורה, אזי הלולאה החיצונית היא הלולאה ההולכת 

         על השורות.

·        אם הקלט או הפלט הוא עמודה אחרי עמודה, אזי הלולאה החיצונית היא הלולאה

         ההולכת על העמודות.

 

 

מערך מסדר N*N  כלומר מורכב ממספר שורות ועמודות זהה, נקרא מערך ריבועי,

רק במערך ריבועי יש אלכסון ראשי, זהו האלכסון ההולך מהתא 1,1  ועד התא n,n.

אלכסון משני של מערך, הוא האלכסון שהפוך לאלכסון הראשי.

 

      

 

דוגמא:

כתוב תת-תוכנית המדפיסה את כל איברי המערך הנמצאים על האלכסון הראשי.

סדר המערך הוא 10*10 . התאים במערך הם מסוג תווי.

מספרי השורה והעמודה הראשונות במערך הם 11.

 

פתרון:

 

program ARRAY;

const

   MIN = 11; (* על ידי שינוי קבועים אלו, שהם התחלת המערך וסופו *)

   MAX = 20; (* ניתן להתאים את התוכנית לכל גודל מערך רצוי *)

type

   ARRAY_CHAR = array[MIN..MAX, MIN..MAX];

       ·       

       ·        קטע הבא לפני תת תוכנית זו

       ·       

 

procedure PRINT_DIAGONAL (A:ARRAY_CHAR);

   {תת תוכנית להדפסת האלכסון הראשי }

   (* A- קלט המערך לתת התוכנית *)

var

   I:integer; (* מונה הלולאה – שורה ועמודה שוות, לכן רק משתנה אחד *)

begin

   (* מספרי העמודה והשורה שווים כי זהו האלכסון הראשי *)

   for I:=MIN to MAX do writeln (A[I,I]);

end;

      ·       

      ·        קטע הבא אחרי תת תוכנית זו

      ·       

 

 

נשים לב כי התחום של השורות או העמודות במערך אינו חייב להתחיל מ-1 ויכול להתחיל מכל ערך שלם כלשהו.

 

נכתוב כעת תוכנית שמדפיסה את האלכסון המשני של המערך. סדר המערך הוא 23*23 ומתחיל משורה ועמודה 11.

 

 

program ARRAY;

const

     MIN = 11;

     MAX = 33;

type

     ARRAY_CHAR = array[MIN..MAX, MIN..MAX];

       ·       

       ·        קטע הבא לפני תת תוכנית זו

       ·       

 

procedure PRINT_SECOND_DIAGONAL (A:ARRAY_CHAR);

   {תת תוכנית להדפסת האלכסון המשני  }

   (* A- קלט המערך לתת התוכנית *)

var

    I:integer; (* מונה הלולאה *)

begin

   (* לך משורה ראשונה ועמודה אחרונה עד שורה אחרונה ועמודה ראשונה *)

   for I:=1 to (MAX-MIN+1) do

   writeln  ( A [ (I-1+MIN) , (MAX+1-I) ] );

end;

      ·       

      ·        קטע הבא אחרי תת תוכנית זו

      ·              

 24-03-04 / 00:00  עודכן ,  03-09-03 / 17:49  נוצר ע"י כפיר מרגי  בתאריך 
 פעולות בעזרת מערכים חד מימדיים - הקודםהבא - פעולות עם מערכים דו-ממדיים 
תגובות הקוראים    תגובות  -  0
דרכונט
מהי מערכת הדרכונט?
אינך מחובר, להתחברות:
דוא"ל
ססמא
נושאי לימוד
חיפוש  |  לא פועל
משלנו  |  לא פועל
גולשים מקוונים: 20