פסקל רבותי פסקל...

צבתות

New member
פסקל רבותי פסקל...

שתי שאלות: 1. האם יש פקודה שמקבילה ל-return ב-C? כלומר, יש לי פרוצדורה שמיד בודקת איזה תנאי. במידה והוא מתקיים אין טעם להמשיך הלאה, ואפשר לסיים את הפרוצדורה. ב-C הייתי עושה if ... return. מה בפסקל? 2. למישהו יש המלצות על אתרים טובים עם מידע על פקסל? בעיקר עבודה עם קבצים. עברית או אנגלית. תודה.
 

zagzagzag

New member
תשובה לשאלה הראשונה

לא, אין פקודה כזו. אפשר לבצע השמה לשם הפונקציה, אבל החזרת הערך תתבצע רק בסיום ביצוע בלוק של פקודות, ורק אם אין שום בלוק של פקודות אחריו אפשר לעקוף את זה ע"י שימוש במשתנה בוליאני, או להשתמש ב-Label (לא מומלץ)
 

Fingertip

New member
זה לא יפה רק לבקר../images/Emo70.gif

אתה גם יכול טיפה להגן על וירת' ולהסביר למה אין כזה משפט... (בשביל שלשגרות תהיה נקודת כניסה יחידה ונקודת יציאה יחידה) אהד.
 

zagzagzag

New member
חס וחלילה לבקר../images/Emo70.gif

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

zagzagzag

New member
זו דעתי

ברגע שהקוד מתחיל לגדול, קשה לעקוב אחרי נקודות יציאה מרובות. למשל:
int func (int a,b,c,d) { while (a > b) && (c > d) { ...... ...... if (a == c) return (a + b) ...... ...... if (b == d) return (c+d) ...... ...... } return (a+b+c+d) }​
במקרה הזה (כמובן שהגזמתי), התרה של שימוש בכמה נקודות יציאה פוגעת במבניות של הקוד. כשאני רואה לולאת while, אני מצפה לביצוע מסודר של הפעולות עם בדיקת התנאים, ולא ל-return באמצע. כמובן שיש גם חסרונות לנקודת יציאה אחת, כמו סרבול של הקוד וכדאי שנפסיק, כי הדיון הפך לדיון מהפורום של אהוד
 

Fingertip

New member
אם כבר הזכרנו את עדה...

אז שים לב שדווקא בעדה בחרו להשתמש ב-return ולא במה שיש בפסקל. וזהו, אני מפסיק. (או לפחות אשתדל להפסיק) אהד.
 

zagzagzag

New member
בעדה יש גם goto ../images/Emo13.gif

אגב, לא טענתי ש-return הוא גרוע - פשוט צריך לדעת מתי להשתמש בו נ.ב. יש סיבה אחרת לכך שבחרו לא להכליל את ה-return בפסקל? משהו שקשור למימוש?
 

אלדד28

New member
לאהוד יש פורום? ../images/Emo6.gif

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

Fingertip

New member
חופש הוא תמיד דבר מבורך?

מה בדבר החופש לקפוץ מכל נקודה בתכנית לכל נקודה אחרת
(אני סתם קטנוני ביום אפרורי זה) אהד.
 

voguemaster

New member
תלוי באיזו רמה

אם אתה מדבר על רמת השפה עצמה, אז כן. אם אתה מדבר על רמת חומרה, אז לא
לגבי ה-goto, אומנם זה לא דבר שצריך (עוד לא יצא לי להשתמש ב-goto באופן אישי) אבל להסיר את היכולת לבצע קפיצות כאלה בקוד זה סתם מיותר. יש פוטנציאלית תרחיש אחד שאולי (רק אולי) goto יהיה שימושי בו ואפילו אם לא, זה לא דבר שצריך להעיף לכל הרוחות. היי, אם יש לך מבני בקרה שמאפשרים לבצע branches בקוד מן הסתם ראוי שיהיה unconditional branch כלשהו...
 

Fingertip

New member
דיברתי בדיוק על goto...

... שלא מאפשר לקפוץ בין פונקציות שונות. אהד.
 

Flexibal

New member
goto כן נחוץ...

נניח שיש לך לולאה כפולה, איך תצא ממנה?
while(x>10) while(y>100) if( x==y ) goto exit_both_loops; exit_both_loops:​
בלי GOTO, היית צריך או להוסיף משתנה וליצור מכונת מצבים, כלומר להוסיף עוד כמה IF לקוד. היית עושה exit_loops = true, לאחר מכן break, ואז בלולאה החיצונית if(exit_loops==true) break; מה שמכער את הקוד ומקטין את היעילות. ולא ניתן לקפוץ בין פונקציות -- כי זה בלתי אפשרי. איך תנהל את המחסנית ככה? ואם אתה רוצה לקפוץ ישירות למקום מסויים בפונקציה, אתה יכול עקרונית להוסיף את ההיסט של האופקוד שאתה רוצה להתחיל בו... זה חוקי תחבירית... אבל גם תצטרך ליצור את ה stack frame המתאים, לפני כן. ולכן, לא קופצים לאמצע פונקציה. -תומר
 

אלדד28

New member
goto לא נחוץ

את הדוגמה שלך אפשר לעשות ככה -
while ((x>10) && (y>100)) { if (x==y) break; }​
פשוט וקל. אין דוגמה שאי אפשר לעשות בצורה אלגנטית יותר, בלי GOTO. הבעייתיות שבפקודה הזו עולה על כל יתרון מדומה שתביא.
 

voguemaster

New member
דווקא לפעמים צריך לשרשר

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

voguemaster

New member
זאת דוגמא גרועה

שאלדד העתיק ישירות מהדוגמא הגרועה שקדמה לה
אנשים באמת, שימו לב מה אתם כותבים
 
למעלה