עזרה

pacpac

New member
עזרה

משהו יכול בבקשה להסביר לי למה משמשת המילה VAR כשכותבים אותה בסוגריים אחרי הפרוצדורה? *השאלה מתייחסת לפסקל
 

אלדד26

New member
המילה var

ניקח שתי פונקציות :
function Func1(x:integer) : integer; function Func2(x: var integer) : integer;​
(אני מקווה שאין לי טעויות ב - SYNTAX, לא תכנתתי פסקל כבר 8 שנים לפחות). שתי הפונקציות מקבלות משתנה שלם ששמו X, ומחזירות תוצאה שלמה. ההבדל הוא שאם בתוך הפונקציה שינית את X, אז ב - Func1 ישתנה הערך שלו בתוכנית שקראה לפונקציה, וב - Func2 הערך שלו לא ישתנה. כלומר, אם כתבת בתוכנית הקוראת:
Var A,B,C,D:Integer; Begin A := 3; B := 5; C := Func1(A); D := Func2(B); End.​
ונניח ש - Func1 ו - Func2 שתיהן נראות ככה:
function Func1(x:integer) : integer Begin x := x+5; Func1 := x; End; function Func2(x: var integer) : integer Begin x := x+5; Func2 := x; End;​
אז אפשר לראות ששתי הפונקציות מחזירות בעצם את X+5, כלומר - בסיום התוכנית C יהיה 8, ו - D יהיה 10. ההבדל בין הפונקציות הוא ש - A לא ישתנה, כי קראנו ל - Func1 שמקבלת את הערך שלו, ואילו B יהיה 10 בסיום התוכנית, כי Func2 קיבלה את המשתנה עצמו. יש לזה שם טכני - By value, שזה אומר להעביר את הערך של המשתנה (כשלא משתמשים ב - var), ו - By reference, שזה אומר להעביר את המשתנה עצמו (כשמשתמשים ב - var). אתה יכול לחשוב על זה גם ככה - אם לא השתמשנו ב - var, הפונקציה יוצרת לעצמה משתנה חדש שקוראים לו x, מאתחלת אותו בערך שהועבר לה, ואין השפעה על התוכנית הקוראת. לעומת זאת, כשכן השתמשנו ב - var, הפונקציה לא יוצרת משתנה חדש אלא משתמשת במשתנה שהועבר לה - ואז היא יכולה לשנות אותו. כשמעבירים פרמטר לתוך הפונקציה במטרה שהיא תקרא אותו ולא תשנה אותו, הוא נקרא פרמטר IN. כשמעבירים פרמטר לתוך הפונקציה והיא משנה אותו בלי להתייחס לערכו הקודם, הוא נקרא פרמטר OUT. וכשמעבירים פרמטר לתוך הפונקציה והיא גם מתחשבת בערכו הנוכחי וגם משנה אותו - קוראים לו פרמטר IN/OUT. מקווה שעזרתי ומתנצל על טעויות בקוד
 

אלדד26

New member
המילה var

ניקח שתי פונקציות :
function Func1(x:integer) : integer; function Func2(x: var integer) : integer;​
(אני מקווה שאין לי טעויות ב - SYNTAX, לא תכנתתי פסקל כבר 8 שנים לפחות). שתי הפונקציות מקבלות משתנה שלם ששמו X, ומחזירות תוצאה שלמה. ההבדל הוא שאם בתוך הפונקציה שינית את X, אז ב - Func1 ישתנה הערך שלו בתוכנית שקראה לפונקציה, וב - Func2 הערך שלו לא ישתנה. כלומר, אם כתבת בתוכנית הקוראת:
Var A,B,C,D:Integer; Begin A := 3; B := 5; C := Func1(A); D := Func2(B); End.​
ונניח ש - Func1 ו - Func2 שתיהן נראות ככה:
function Func1(x:integer) : integer Begin x := x+5; Func1 := x; End; function Func2(x: var integer) : integer Begin x := x+5; Func2 := x; End;​
אז אפשר לראות ששתי הפונקציות מחזירות בעצם את X+5, כלומר - בסיום התוכנית C יהיה 8, ו - D יהיה 10. ההבדל בין הפונקציות הוא ש - A לא ישתנה, כי קראנו ל - Func1 שמקבלת את הערך שלו, ואילו B יהיה 10 בסיום התוכנית, כי Func2 קיבלה את המשתנה עצמו. יש לזה שם טכני - By value, שזה אומר להעביר את הערך של המשתנה (כשלא משתמשים ב - var), ו - By reference, שזה אומר להעביר את המשתנה עצמו (כשמשתמשים ב - var). אתה יכול לחשוב על זה גם ככה - אם לא השתמשנו ב - var, הפונקציה יוצרת לעצמה משתנה חדש שקוראים לו x, מאתחלת אותו בערך שהועבר לה, ואין השפעה על התוכנית הקוראת. לעומת זאת, כשכן השתמשנו ב - var, הפונקציה לא יוצרת משתנה חדש אלא משתמשת במשתנה שהועבר לה - ואז היא יכולה לשנות אותו. כשמעבירים פרמטר לתוך הפונקציה במטרה שהיא תקרא אותו ולא תשנה אותו, הוא נקרא פרמטר IN. כשמעבירים פרמטר לתוך הפונקציה והיא משנה אותו בלי להתייחס לערכו הקודם, הוא נקרא פרמטר OUT. וכשמעבירים פרמטר לתוך הפונקציה והיא גם מתחשבת בערכו הנוכחי וגם משנה אותו - קוראים לו פרמטר IN/OUT. מקווה שעזרתי ומתנצל על טעויות בקוד
 
למעלה