» נושאי לימוד
» נושאי לימוד
יום שבת 4 במאי 2024
משתנים כלליים ופרטיים
דף ראשי  פרק 4: נושאים מתקדמים בפסקל  משתנים כלליים ופרטיים גרסה להדפסה

משתנים כלליים ופרטיים

 

עד כה הגדרנו את כל המשתנים שהכרנו,בחלק הגדרות המשתנים ב-var, הצמוד לכותרת התוכנית program. כל המשתנים שהגדרנו היו מוכרים ע"י כל התת תוכניות שרשמנו ופיתחנו.כלומר,אם הגדרנו משתנה A, היינו יכולים להשתמש בו בכל מקום בתוכנית.

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

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

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

 

דוגמא :

שני מתכנתים שונים A ו-B כותבים תוכנית:

 

    ·       

    ·       

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

    ·    PROGRAM_B והכולל גם את התת-תוכנית

    ·        B  שכתב מתכנת          

    ·       

    ·       

 

procedure PROGRMER_A; (*A תת תוכנית הנכתבת ע"י מתכנת *)

begin

   X:=0;

   for I:=1 to 10 do

   begin

      PROGRAMER_B; (*B קריאה לתת תוכנית הנכתבת ע"י תכנת *)

      X:=X+1;

   end; (*סיום הלולאה*)

end; (*סיום תת התוכנית*)

 

   ·       

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

   ·       

 

 

תוך כדי הפיתוח של תת תוכנית B,משתמש מתכנת B במשתנים שעוזרים לפתרון האלגוריתם. אסור לו לשנות תוכן משתנים X וֹ- I שמא יפגע בתכנת A,שאינו יודע בדיוק את כל הפרטים הקשורים בפיתוח של תת תוכנית אחרת.  

בדוגמא היו שני מתכנתים אך מה קורא כאשר יש מאה מתכנתים?

 

 

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

את הבעיה שנוצרה בדוגמא הקודמת נוכל לפתור ע"י הגדרה מחודשת של שמות הנתונים בכל תת תוכנית חדשה.

 

לדוגמא:

 

procedure PROGREAMER_B (U:integer;V,M:real;var X:char;Y:boolean);

{תת תוכנית הנכתבת ע"י מתכנת אחר}    

var

   I:integer; (*משתנה מקומי לצורך עניין פנימי,שמתחיל את ערכו*) 

              (*בתת תוכנית זו *)    

   J:real;

begin

   ·       

   ·      הוראות תת-תוכנית זו

   ·       

end;

 

(********התוכנית הראשית***********)

begin

   ·                  

   ·          חלק מהוראות התוכנית הראשית

   ·       

   PROGRAMER_B(A,V,B,C,Y); (קריאה לתת תוכנית**)

   ·                  

   ·          חלק מהוראות התוכנית הראשית

   ·       

end.

 

 

 

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

 

A-->U

V-->V

 תוכן המשתנים עובר למשתנים המקומיים בתת התוכנית 

B-->W

C-->X

Y-->Y

 

 

X בתת התוכנית הוגדר בהמשך ל- var ולכן שינוי ערכו בתת התוכנית ישנה את תוכן C.

 

לפנינו הכללים הקשורים במשתנים מקומיים ובהעברת ערכים:

 

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

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

אולם,אם לפניהם רשום var,שינוי בתוכנם ישנה את הערך שהמשתנה שהעביר להם את הערך.

 

            

              

 

כלומר,שינוי ב-Y ישנה את תוכן Z.

 

*  בין הגדרות סוגי משתנים שונים בתת התוכנית יופיעו נקודה-פסיק.

;(procedure NAME (I:integer ; X:raeal

 

*  חייבת להיות התאמה מלאה ביו סוגי המשתנים המקבלים את הערך והמעבירים את הערך.

 

            

 

כלומר Aו-X, מוגדר ממשי. Z ו-Y מוגדר שלם.

 

*   אם נשתמש במשתנה שלא הוגדר בתת התוכנית,ההתייחסות תהיה למשתנה שהוגדר לאחר כותרת התוכנית. אלו הם משתנים כלליים.

        

       

 

שימו ! אם הוגדר משתנה מקומי באותו שם (X) של משתנה כללי, אזי התת-תוכנית  מתייחסת למשתנה המקומי (שהוגדר בתת-תוכנית).

 

אי אפשר להגדיר סוג משתנה בין הסוגריים בכותרת תת התוכנית שהוא יותר ממילה אחת (כלומר: char, boolean,integer,real).

 

 

דוגמאות ליישום הכללים

 

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

 

 

בסיום הרצת התוכנית נקבל את הפלט הבא על הצג:

 

3   הודפס על ידי התוכנית הראשית

2.0000000000E+00  הודפס על ידי תת תוכנית PROC_2
1 הודפס על ידי תת תוכנית PROC_1

2.0000000000E+00  הודפס על ידי תת תוכנית PROC_2
1  הודפס על ידי התוכנית הראשית

 

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

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