בחירה וחזרה
הוצג| English | משמעות |
|---|---|
| selection/sɪˈlekʃn/ | בחירה |
| iteration/ˌɪtəˈreɪʃn/ | חזרה |
| trace table/treɪs ˈteɪbl/ | טבלת מעקב |
| nested/ˈnestɪd/ | מוטבע |
| logic error/ˈlɒdʒɪk ˈerə/ | שגיאת לוגיקה |
| count-controlled loop/kaʊnt kənˈtrəʊld luːp/ | לולאת שליטה במניין |
| array/əˈreɪ/ | מערך |
| pre-condition loop/priː kənˈdɪʃn luːp/ | לולאת תנאי מקדים |
| post-condition loop/pəʊst kənˈdɪʃn luːp/ | לולאת תנאי מאוחר |
| dry run/draɪ rʌn/ | ריצת יבשה |
שורה אחת מיותרת
- בשנת 2014 אפל שחררה עדכון אבטחה בגלל שורה חוזרת אחת. בתוך הקוד שבדק את תעודת האתר,
goto fail;הופיע פעמיים ברצף. - העתק השני הייתה מחוץ ל-
IFשלו, ולכן היא רצה בכל פעם, והבדיקה שמתחתיו מעולם לא בוצעה. למשך חודשים, כל תקוף יכול היה להתחלף לכל אתר. - בחירה וחזרה הן הבניינים שקובעים מה ירצה וכמה פעמים. טעות בשורה אחת מהם והתוכנית עדיין תרצה, רק בצורה שגויה.
- שיעור זה הוא על IF, CASE ושלושת הלולאות, והטבלה לעקוב שתופסת את הטעות לפני שהבחינה עושה זאת.
בחירה
IF גיל >= 18 THEN … אלא אם כן … סוף-אם
- ה-
ELSEהוא אופציונלי, ה-ENDIFאינו כזה. כלIFחייב להיות סגור. - תנאי הוא כל ביטוי בוליאני: השוואה, או השוואות המחוברות על ידי
AND,ORו-NOT.

הבדיקה IF … ELSE נערכת פעם אחת, ואז מתבצע בדיוק ענף אחד
בדיקות IF משובצות וגבולות
- IF משובץ הוא IF בתוך ענף של IF אחר, וכל אחד מהם זקוק ל-
ENDIFמשלו. - גבולות הם מקומות בהם מאבדים נקודות. "ציון של 50 או יותר עובר" זהו ה-
Mark >= 50, ולא ה-Mark > 50. - השוואה שגויה היא שגיאת לוגיקה: התוכנית פועלת ומחזירה תוצאה שגויה עבור מספר קלט מסוים. מעקב עם הערך בגבול, כלומר 50 עצמו, הוא הדרך למצוא אותו.
"ציון של 50 או יותר עובר" נכתב כIF Mark ____ 50 THEN.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
"או יותר" כולל גם את עצמו 50, לכן ההשוואה היא גדול מ או שווה ל. > ייכשל סטודנט בדיוק ב-50.
CASE
CASE OF Grade … ENDCASEבודק ערך אחד מול מספר אפשרויות והוא ברור יותר ממסלול של IFs משובצים.- שומר (Guard) יכול להיות ערך יחיד
"A":, רשימה1, 2, 3:, או טווח1 TO 5:. הענף האחרון ל"הכל else" הואOTHERWISE, לעולם לא תנאי כמו> 200. - השומרים נבדקים בסדר. עם
1 TO 50:שאינו עוקב אחר40 TO 60:, ערך של 45 ייקח את הענף הראשון, ולכן הפקדה בענף השניי עשויה לעולם לא להתבצע. אם הענפים המוקדמים מכסים כל ערך אפשרי, גםOTHERWISEלעולם לא יתבצע.

CASE מתבצע את הענף הראשון שהשומר שלו מתאים לערך
ביטוי CASE ברור מאIFs תוך-תוךיים כאשר:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
CASE מתאים ערך אחד למגוון אפשרויות; IFs תוך-תוךיים עמוקים הופכים לקשה לקריאה.
אילו מהבאים הם גדרות תקפות בביטוי Cambridge CASE? בחר את כולם החלים.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
ערך יחיד, רשימת ערכים, טווח ו-Otherwise. השוואה כמו > 200 אינה גדרה; כל מה שלא מכוסה הולך ל-Otherwise.
דוגמא פתורה: כתיבת CASE ללא שימוש ב-CASE
CASE OF MySwitchעם1: ThisChar ← 'a',2: ThisChar ← 'y',3: ThisChar ← '7',OTHERWISE: ThisChar ← '*'.- כל ערך הופך לענף במסלול של IFs, ו-
OTHERWISEהופך ל-ELSEהסופי.
IF MySwitch = 1 THEN
ThisChar <- 'a'
ELSE
IF MySwitch = 2 THEN
ThisChar <- 'y'
ELSE
IF MySwitch = 3 THEN
ThisChar <- '7'
ELSE
ThisChar <- '*'
ENDIF
ENDIF
ENDIF
- שלושה IFs ושלושה ENDS. הליכה לכיוון השני, שני סעיפי CASE שמטילים אותה ערך מאחדים לשומר אחד עם רשימת ערכים,
1, 2:.
שלושת הלולאות
- איטרציה חוזרת על בלוק, ושלוש הלולאות נבדלות במקום בו הבדיקה נערכת.
- לולאת בקרת ספירה,
FOR i ← 1 TO 10 … NEXT i, פועלת מספר ידוע של פעמים;STEP -1סופר מטה. משתמשים בה לספירה קבועה או לכל אלמנט ב-מערך. - לולאת תנאי מקדים,
WHILE … DO … ENDWHILE, בודקת לפני כל מעבר, ולכן ייתכן שלא תפעל כלל. לולאת תנאי אחרונים,REPEAT … UNTIL, בודקת אחרי כל מעבר, ולכן תפעל לפחות פעם אחת.

המיקום של התנאי קובע כמה פעמים הגוף יכול לרוץ
התאם כל מחזור למועד שבו היית משתמש בו.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
FOR = בקרת ספירה; WHILE = תנאי נבדק לפני (0+ מעברים); REPEAT = תנאי נבדק אחר כך (1+ מעברים).
החזרה...עד בודקת את התנאי אחרי הגוף, ולכן הגוף תמיד מתבצע לפחות פעם אחת.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
מבחן התנאי שמתבצע לאחר מכן הוא ההבדל מה-WHILE, שיכול להתבצע אפס פעמים.
בחירת הלולאה: תשובת שתי נקודות
- נקודה אחת עבור השם, ונקודה אחת עבור הסיבה, במילים של טבלת הניקוד.
- בשליטת ספירה, כי מספר האיטרציות ידוע לפני שהלולאה מתחילה. אחר-תנאי, כי גוף הלולאה חייב להתבצע לפחות פעם אחת. לפני-תנאי, כי הלולאה עשויה לא להתבצע כלל.
- לולאה על ארבעת האלמנטים במערך הכתובה כ
WHILEעם מונה היא "לא הרציפה ביותר"; לולאת FOR היא הרציפה ביותר, מכיוון שהספירה ידועה.
שאלה מבקשת ממך ל"זיהוי לולאה מתאימה יותר ולהסביר בחירתך" עבור 2 נקודות. מה מייצר את שתי הנקודות?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
נקודה אחת למחזור, נקודה אחת לסיבה: המניין ידוע, הגוף חייב להתבצע פעם אחת, או שהמחזור עשוי שלא להתבצע כלל.
דוגמה פתורה: איזה לולאה מתאימה לכל משימה?
- הדפסת טבלת הכפלה של 12: הספירה ידועה מראש, ולכן לולאת FOR.
- המשך לקרוא מספרים עד שהמשתמש מזין 0: הספירה אינה ידועה והקלט הראשון עשוי להיות כבר 0, ולכן הבדיקה צריכה לבוא לפני הגוף: לולאת WHILE.
- בקש סיסמה עד שתהי נכונה: יש לבקש מהמשתמש לפחות פעם אחת, ולכן לולאת REPEAT … UNTIL.
- שאל שתי שאלות: כמה פעמים, והאם הגוף חייב להירץ לפני הבדיקה הראשונה?
"תמיד בדוק על סיסמה עד שתהיה נכונה, אך בדוק לפחות פעם אחת." איזה מחזור מתאים?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
עליך לבדוק לפחות פעם אחת, ולכן ה-REPEAT...UNTIL עם הבדיקה שאחרי היא הבחירה הטבעית.
טבלאות מעקב
- טבלת מעקב מקליטה את ערך כל משתנה בזמן שאתה מפעיל יבש את האלגוריתם ביד. זוהי הדרך בה נבדקת לולאה על נייר ושאלה בעלת שישה נקודות ברוב מבחני Paper 2.
- עמודה אחת למשתנה, ועמודה נוספת לכל הפלט. כתוב שורה חדשה רק כאשר ערך משתנה, ובצע את תנאי הלולאה ברגע שהלולאה מגיעה אליו.
- המשך עד שהתנאי מסתיים את הלולאה, ואז רשום את הפלט הסופי.
עקוב אחר מחזור, מעבר לעומת מעבר
טבלת עקיבה מקלדת את כל המשתנים לאחר כל מעבר במחזור. השים לב למניף i העולה בזמן שהסכום הנצבר נבנה — בדיוק מה ששאלת עקיבה במבחן מבקשת ממך למלא.
לאחר total = 0; FOR i = 1 TO 5: total = total + i, מהו הערך של total?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
חיבור 1+2+3+4+5 = 15 — בדיוק מה טבלת העקבות בונה צעד אחר צעד.
דוגמה פתורה: טבלת מעקב מלאה
Count <- 1
Total <- 0
WHILE Total < 10 DO
Total <- Total + Count
Count <- Count + 1
ENDWHILE
OUTPUT Count
- שורות של (Count, Total): (1, 0) → (2, 1) → (3, 3) → (4, 6) → (5, 10).
- ברגע ש-Total = 10, התנאי
Total < 10הוא שגוי, הלולאה נסגרת, והפלט הוא 5. - השורה האחרונה היא זו שרוב הזמן שגויה: בדוק את התנאי עוד פעם לפני כתיבת הפלט.
בעקבות הפתרון, המחזור מסתיים עם Total = 10 ו-Count = 5, ולכן הפלט הוא 5.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
לאחר הארבעה מעברים הראשונים, Total מגיע ל-10, התנאי Total < 10 הופך לשגוי, ו-Count עולה ל-5.
סימונים נופלים מהיד
>=ו>הן תשובות שונות. בדוק את ערך הגבול בראך לפני שכתוב את ההשוואה.OTHERWISEהוא מילות מפתח, ולא תנאי. וגם כלIF,CASE,WHILEוFORנסגרים עםENDIF,ENDCASE,ENDWHILEאוNEXT.WHILEיכול להרץ אפס פעמים;REPEATאינו יכול. בחר לפי כך אם הגוף חייב להרץ פעם אחת לפני הבדיקה הראשונה.- בטבלת מעקב, ערך שאינו משתנה אינו מוחלף מחדש, והפלט נכתב רק כאשר שורת
OUTPUTמורצת.
הבנתך מושלמת
- IF … ELSE … ENDIF לבחירה; IFs מובנים סגורים כל אחד; CASE לערך יחיד מול הרבה תנאים, נבדקים בסדר,
OTHERWISEאחרון - FOR ספירה ידועה · WHILE בודק לפני, עשוי להרץ אפס פעמים · REPEAT … UNTIL בודק אחרי, רץ לפחות פעם אחת
- הנמק לולאה עם שמה וסיבה: ספירה ידועה, עשוי שלא ירץ, חייב להרץ פעם אחת
- טבלת מעקב מבצעת ניסוי יבש של האלגוריתם שורה אחת לכל שינוי; בדוק את התנאות עוד פעם לפני הפלט הסופי