הדרגתיות בתוכנית
חלק גדול של התוכניות שנכתוב לא ייכתבו ביום אחד, לכן מן הראוי שנחלק כל תוכנית לחלקים קטנים, כל חלק נכתוב ביום אחר. בבית תוכנה כל חלק ייכתב אפילו על ידי מתכנת אחר.
נחלק את הבעיות העומדות לפנינו לבעיות קטנות יותר ונטפל בכל אחת מהן בנפרד. אחת התכונות הטובות ביותר של עבודה בצורה כזו, היא היכולת להתרכז באותה תת-בעיה קטנה יותר ללא מחשבה על דברים אחרים בתוכנית.
נניח כי עומדת לפנינו בעיה שאפשר לחלק אותה לתת-בעיות קטנות יותר. כל תת-בעיה קטנה יותר תהיה תת-תוכנית. התת-תוכניות הן שירכיבו את הבעיה הגדולה יותר.
לכל תת-תכנית נקרא פרוצדורה. עם סיום תת-התכנית, שנקראה לביצוע, התוכנית תחזור לביצוע ההוראה הבאה שלאחר ההוראה שקראה לתת-תוכנית זו.
שלבי כתיבת תת-תוכניות (פרוצדורות): 1. הפרוצדורות, רבות ככל שיהיו, נכתבות מיד לאחר כותרת התוכנית והגדרת המשתנים. 2. הוראות התוכנית, המבצעת את הפרוצדורות, נרשמות בגוף התוכנית לאחר הפרוצדורות. 3. בתחילת כל פרוצדורה, רושמים procedure, להצביע כי זו התחלת תת-תוכנית ולאחר מכן את שם הפרוצדורה. 4. גוף הפרוצדורה מופיע בין begin לבין end, כאשר ב-end מופיע רק נקודה-פסיק (ולא נקודה כמו בסיום תוכנית). 5. ביצוע פרוצדורה מבוצע על ידי רישום שמה בלבד. |
גוף התוכנית הראשית היא שמנהלת את כל העסק, מבצעת את תת התוכניות (הפרוצדורות) ומנהלת את המשתנים.
דוגמא לשימוש בתת-תוכניות:
כתוב תוכנית הקולטת שני מספרים ומחשבת ומדפיסה את סכומם, הפרשם, מכפלתם וסכום הפרשם ומכפלתם.
פתרון:
להורדת הדוגמא לחץ כאן
מדוגמא זו למדים, כי ניתן להשתמש בתת-תוכנית כמה פעמים ועל ידי כך למנוע את רישומה החוזר של אותה פעולה.
תחילה, חישבה התוכנית את הסכום, ההפרש והמכפלה והדפיסה את התוצאות (כל אחת מהפעולות בתת-תוכנית נפרדת). לאחר שהסתיים השימוש במשתנים A ו-B על ידי הצבת תוצאות מחישוב קודם (ההפרש והמכפלה) וביצוע חוזר של תת התוכנית לחישוב הסכום.
שוב, התוצאה החדשה במשתנה D מחקה את הערך הקודם ב-D. בסיום התוכנית מוצב הסכום של ההפרש והמכפלה במשתנה D.
סדר הפעולות בקריאה לתת-תוכניות לביצוע:
כל התהליך הזה של פירוק לתת-בעיות של תת-בעיות של תת-בעיות... נקרא עידון הדרגתי של התוכנית.
לעיתים, לצורך העידון ההדרגתי, יש צורך שתת-תוכנית תבצע תת-תוכנית אחרת.
דוגמא:
כתוב תוכנית, הקולטת שני מספרים שלמים ומחשבת ומדפיסה את חמשת האיברים הראשונים של הסדרה הבאה:
A – המספר שנקלט ראשון (האיבר הראשון בסדרה)
B – המספר שנקלט שני (האיבר השני בסדרה)
סכום שני האיברים הקודמים A ו-B (האיבר השלישי בסדרה)
סכום שני האיברים הקודמים – האיבר השלישי ו-B (האיבר הרביעי בסדרה)
סכום שני האיברים הקודמים- האיבר הרביעי והשלישי (האיבר החמישי בסדרה)
השתמש בתת-תוכנית שקוראת לתת-תוכנית.
לדוגמא, אם נקלטו שני המספרים: 1
3
אזי ההדפסה תהיה:
1 3 4 7 11 |
פתרון:
program NUMBERS; { תוכנית המחשבת סדרה מתוך שני מספרים בקלט } var A,B: integer; (* שני המספרים שנקלוט מהמשתמש *) C:integer; (* הסכום של שני האיברים הקודמים בסדרה *) procedure SWITCH_VARIABLES; begin A:=B; B:=C; end; procedure SUM; { תת-תוכנית לחישוב סכום שני האיברים הקודמים = האיבר הבא } begin C:=A+B; writeln(C); SWITCH_VARIABLES; end; procedure INPUT_NO; { תת תוכנית לקליטת שני האיברים הראשונים בסדרה} begin writeln (' ENTER הקש שני מספרים שלמים, רווח ביניהם ובסוף '); readln(A,B); end; (*********** התוכנית הראשית*************) begin INPUT_NO; writeln(A); writeln(B); SUM; SUM; SUM; end.
להורדת הדוגמא לחץ כאן
דוגמת ריצה:
בתוכנית הראשית, קראנו רק לתת-התוכנית שמבצעת את החיבור של שני האיברים הקודמים. תת-תוכנית זו היא שקראה לביצוע תת-התוכנית שמחליפה את המספרים במשתנים.
יש לשים לב לגורם חשוב בכתיבת התת-תוכניות.
התת תוכנית המבצעת תוכנית אחרת חייבת להיכתב אחריה!!
כלומר התת-תוכנית SUM הקוראת לביצוע SWITCH_VARIABLES נכתבה אחריה.
תת - תוכנית הקוראת לתת-תוכנית אחרת חייבת להיכתב אחריה!!! |