הצהרות TYPE
בכל הדוגמאות הקודמות, הוגדר סוג המשתנים שהופיעו בכותרת תת התוכנית (המשתניםהמועברים) על ידי מילה אחת. דבר זה מצמצם את סוגי המשתנים שברצוננו להעביר, כיוון שמערכים שהגדרתם אורכת יותר ממלה אחת אי אפשר להעביר.
בעיה זו נוכל לפתור על ידי הצהרת type.
program TYPE; type ARRAY_OF_CHAR= array [1..100] of char; var ARRAY_1:ARRAY_OF_CHAR;
procedure FIRST (ARRAY_2: ARRAY_OF_CHAR); begin · · · · end;
(**********התוכנית הראשית*************)
begin procedure FIRST(ARRAY_1); · · · end.
|
כלומר מיד לאחר כותרת התוכנית ולפני הגדרת המשתנים בתוכנית
(var), קיימת ההצהרה type (מלה שמורה) ולאחריה הכרזנו
כי המלה CHAR_OF_ARRAY כמוה כצירוף המילים " array[1..100] of char ".
אין זו הגדרת מערך או פעולה כלשהי אלא, בסך הכול, הצהרה המציינת כי מילה מסוימת באה במקום משפט שלם. שימו לב כי לא מופיעות נקודתיים אחרי המלה ARRAY_OF_CHAR אלא שווה!
בדרך זו נפתור את הבעיה של העברת מערך לתת-תוכנית כיוון שיש תחליף למשפט על ידי מלה אחת .
בתוכניות מורכבות יותר, הצהרת ה-type מקילה מאוד על פיתוח התוכניות וההצהרה רק מוסיפה נוחות ויעילות בפיתוח. ישנן אפשרויות נוספות הטמונות בהצהרת ה-type אך כרגע נשתמש בה רק לצורך העברת משתנים, שהגדרתם יותר ממלה אחת.
דוגמא:
כתוב תוכנית הקולטת למערך 5 ערכים ומדפיסה את כל המספרים הקטנים מהממוצע.
פתרון:
program USE_TYPE; { תוכנית לקליטת עשרים מספרים והדפסת אלו הקטנים מהממוצע } type (* var – הצהרה שתחליף את ההגדרה ב *) ARRAY_5_REAL = array[1..5] of real; var ARRAY_OF_NUM:ARRAY_5_REAL; (* המערך לקליטת 5 המספרים *) AVERAGE: real; (* הממוצע *)
procedure INPUT( var INPUT_ARRAY:ARRAY_5_REAL); { תת תוכנית לקליטת מספרים למערך } (* var INPUT_ARRAY – כדי שנוכל להחזיר ערכים var מוגדר עם *) var I:integer; (* מונה הלולאה *) begin for I:=1 to 5 do begin write ('Enter the ', I, 'th number: '); readln (INPUT_ARRAY[I]); end; end;
procedure AVE_ARRAY(AVE_ARRAY: ARRAY_5_REAL; var AVE:real); { תת תוכנית לחישוב הממוצע } (* AVE_ARRAY- המערך שיש למצוא את ממוצע הערכים המאוחסנים בו *) (* var AVE – החזרת הממוצע *) var I: integer; (* מונה הלולאה *) SUM: real; (* צובר הסכום *) begin SUM:= 0; (* איפוס הצובר *) for I:=1 to 5 do SUM:=SUM + AVE_ARRAY[I]; AVE:=SUM/5; (* חישוב הממוצע *) end;
procedure OUTPUT(OUTPUT_ARRAY:ARRAY_5_REAL; AVERAGE:real); { תת תוכנית לביצוע פלט של המספרים הקטנים מהממוצע } (* OUTPUT_ARRAY - מערך המספרים *) (* AVERAGE – ממוצע המערך *) var I: integer; begin for I:=1 to 5 do if OUTPUT_ARRAY[I] < AVERAGE then writeln (OUTPUT_ARRAY[I], ' is small then average'); end;
(**********התוכנית הראשית***********) begin INPUT (ARRAY_OF_NUM); (* קלט *) AVE_ARRAY(ARRAY_OF_NUM, AVERAGE); (* ממוצע *) OUTPUT(ARRAY_OF_NUM, AVERAGE); (* פלט*) end.
|
להורדת הדוגמא לחץ כאן
דוגמת ריצה:
בכל התת תוכניות יכולנו להשתמש בכל שם שרצינו למערך והגדרנו את סוגו על ידי ההצהרה TYPE, שבאה מתחת לכותרת program.
גם כאשר תת-תוכנית קוראת לתת-תוכנית שנכתבת לפניה ומעבירה אליה מערך הגדרת סוג המערך, תתייחס תמיד להצהרת ה-type בכותרת התוכנית.
הצהרת type חיונית גם להעברת מחרוזות מכיוון שמחרוזת מוגדרת ביותר ממילה אחת:
(string[אורך המחרוזת ])
* באמצעות הצהרת type אפשר להעביר מערכים ומחרוזות לתת-תוכנית. * הצהרת type משמשת את כל התת-תוכניות בהגדרת סוג המשתנה. * הצהרה ב-type יכולה להחליף כל הגדרה של סוג משתנה. * כתיבת התוכנית ותכנונה מבוצעים מלמעלה למטה. * שיטה זו נקראת TOP-DOWN. |
לצורך כתיבה ופיתוח נוחים יותר של התוכנית, ניתן להצהיר גם על קבועים בראש התוכנית או בראש כל תת-תוכנית.
הצהרה על קבועים אלו נכללת ב-const.
על ידי const ניתן להכריז על קבועים שישמשו במקום ערכים הנשארים קבועים לאורך כל התוכנית.