פונקציות המוגדרות על ידי המתכנת
בתוכניות ובתת תוכניות שכתבנו עד כה השתמשנו בפונקציות מוכנות של שפת פסקל.
לדוגמא: ;(X:=sqrt (X
כלומר, חשב את השורש הריבועי של X והצב אותו בחזרה בתוך X.
לעיתים, הפונקציות שמאפשרת שפת פסקל אינן מספיקות ובתוך התוכנית נרצה להגדיר ולהשתמש בפונקציות נוספות שאנו נתכנן ונכתוב אותן.
מבחינת כתיבת התוכנית והתייחסות לבניית הפונקציות אין שום הבדל בין function (פונקציה) לבין procedure (פרוצדורה). פונקציה היא תת-תוכנית לכל דבר. ההבדל היחידי, כפי שרואים בפונקציה sqrt, הוא שפונקציה מחזירה ערך באופן המאפשר כתיבה נוחה ואלגנטית.
פונקציה מחזירה ערך. אופן פעולתה והשימוש בה דומה ל- procedure. מטרת הפונקציה לשמש פיתוח נוח יותר של התוכנית.
אופן ההגדרה והשימוש בפונקציה:
;סוג: (משתנים המועברים)שם הפונקציהfunction var הגדרת משתנים מקומיים begin גוף הפונקציה, ההוראות ;ביטוי =: שם הפונקציה ;end |
ההצבה לתוך הפונקציה אינה חייבת להיות דווקא בסוף גוף התוכנית, אפשר להציב בכל מקום, וכמה פעמים שרוצים, את הביטוי או הערך לפונקציה.
עוד נציין, כי פונקציה יכולה להחזיר אך ורק ערך אחד (יכולים להעביר אליה יותר ממשתנה אחד).
דוגמא:
כתוב פונקציה המקבלת מספר שלם ומחזירה א ערכו גדול ב-1.
פתרון:
program NAME; var NUMBER: integer; · · קטע הבא לפני תת-תוכנית (פונקציה) זו · { סדר הכתיבה זהה לזה של פרוצדורה }
function INCREMENT (N:integer): integer; (* שם הפונקציה הוא כמו (אך לא בדיוק) שם של משתנה/תא *) (* העברת ערכים עם אותם כללים *) (* אחרי העברת משתנים, מגדירים גם את סוג התא שהוא השם של הפונקציה *) (* integer כאן הפונקציה מחזירה ערך שלם ולכן רשום אחרי הנקודתיים *)
begin INCREMENT:=N+1; (* הערך מוצב בפונקציה/ שם משתנה *) end; · · קטע הבא אחרי תת-תוכנית (פונקציה) זו ·
(*********** התוכנית הראשית **********)
begin write (' הקש מספר שלם' ); readln (NUMBER); { השימוש בפונקציה הוא כמו בפונקציות מוכנות על ידי פסקל } NUMBER:=INCREMENT(NUMBER); writeln(NUMBER, ' = המספר לאחר ביצוע הפונקציה'); end.
|
דוגמא נוספת:
כתוב תת תוכנית, המקבלת מספר כלשהו שלם ומחשבת כמה ספרות יש במספר זה.
פתרון:
גם אם המספר המועבר הוא 0, הרי יש ספרה אחת ולכן נתחשב באפשרות זו.
אסור להשתמש בשם הפונקציה כצובר, זה איננו תא רגיל. |