שאלה לגבי פסקל.

הצעת פתרון ../images/Emo12.gif

שני את הפונקציה שלך לקוד הבא:
function new_word (var a:arr):string; begin new_word:=a[random(n)+1]; end;​
זה אמור לפתור את הבעיה.
 

weirdo1986

New member
אמנם כבר פתרתי את הבעיה,

אבל סתם מעניין לדעת - למה המערך צריך להיות ב-var ואיך זה משפיע על הפתרון?
 

vinney

Well-known member
זה אמור לפתור לך את הבעיה כולה

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

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