יישום בחירה וחזרה
הוצג| English | משמעות |
|---|---|
| accumulator/əˈkjuːmjʊleɪtə/ | צובר |
מקסימום התחלתי אפס יוצר תוצאה
- מערך מכיל −8, −3 ו-−11. התחלת max באפס משאירה מקסימום שלא היה מעולם במערך.
- לערף זה שאינו ריק, התחילו max ב-a[0]. השוואת הערכים הבאים מעדכנת −8 ל−3 ושומרת אותו שם.
דגמי לופ : צבירה
- תבנית לולאה היא מתכון ניתן לשימוש מחדש למשימה נפוצה. תבנית צובר בונה סכום או מכפלה רצים לאורך איטרציות.
- התחל
sum = 0, ולאחר מכןsum = sum + xבתוך הלולאה; הסכום הרץ משתנה; הוא יכול להשתנות כשערך שלילי מוסיף. אותו רעיון עבור ספירה רצה (count++) או מקסימום רץ.
תנאים בתוך לולאות
- הצב
ifבתוך לולאה כדי לפעול רק על פריטים שתואמים. "ספירת המספרים הזוגיים": לולאה, ומ-if (x % 2 == 0) count++; - הלולאה בודקת כל פריט; ה-
ifמחליט אילו מהם לעבד. שילוב בחירה וחזרה הוא ליבתם של רוב האלגוריתמים.
מציאת מקסימום
- למצוא את הערך הגדול ביותר, שמור משתנה
maxועדכן אותו כשאתה רואה משהו גדול יותר. בדוק שהמערך לא ריק, התחלmaxבערכו הראשון, ולאחר מכן בדוק את הנותרים. "מספר קטן מאוד" לא מוגדר עדיין עשוי להיות גדול מכל קלט בפועל. if (x > max) { max = x; }בתוך לולאה. לאחר הלולאה,maxמכיל את הערך הגדול ביותר שנמצא.
תבנית המצטבר
הסכום מצטבר לאורך מעברים; הוא מתחיל ב-0.
כדי לבנות סכום רץ בתוך לולאה, יש ליזום את המצטבר ל...
רמת קושי 1/5 · 100 מטבעות + בונוס קטן בהשלמה הראשונה היום
סכום מתחיל ב-0; מכפלה תתחיל ב-1.
במטרה לבנות מכפלה רציפה, יש לאפס את האקומולטור ל...
רמת קושי 1/5 · 100 מטבעות + בונוס קטן בהשלמה הראשונה היום
התחלת מכפלה ב-0 גורמת לה להיות תמיד 0; יש להתחיל ב-1.
לספור מספרים זוגיים במהלך איטרציה, משתמשים ב...
רמת קושי 1/5 · 100 מטבעות + בונוס קטן בהשלמה הראשונה היום
התנאי if קובע אילו פריטים הלולאה סופרת.
השלבת אפוס האקומולטור לתוך הלולאה מאפסת אותו בכל עבר.
רמת קושי 1/5 · 100 מטבעות + בונוס קטן בהשלמה הראשונה היום
יש לאפס לפני הלולאה, ולא בתוכה.
כדי לעצור לולאה ברגע שמטרה נתגלתה, ניתן להשתמש ב...
רמת קושי 1/5 · 100 מטבעות + בונוס קטן בהשלמה הראשונה היום
break יוצא מהלולאה הפנימית ביותר. מדד בוליאני (Boolean flag) יש להשתמש גם בתנאי הלולאה או בהגדרת הבקרה; רק ההקצאה שלו אינה עוצרת ביצועים.
יציאה מוקדמת עם דגל או פקודת break
- לעיתים ניתן להפסיק מוקדם ברגע שמצאתם מה שדרש. דגל
booleanיכול לתעד "נמצא" ולהיות נבדק על ידי תנאי הלולאה; הצבת הדגל לבדה אינה מוציאה מהלולאה.breakיוצא מהלולאה הפנימית מיד. - "האם הרשימה מכילה אפס?" — עצרו בראשון. פריצה מוקדמת חוסכת עבודה אך יש לשמור על ההגיון הנכון עבור המקרה של "לא נמצא".
התחילו את המכונן (הצובר) נכון, או כל התוצאה תהיה שגויה. סכום מתחיל ב-0, מכפלה ב-1 (התחלת מכפלה ב-0 תגרום לה להיות תמיד ⟨0⟩), מקסימום בערך הראשון לאחר בדיקה שאין קollekcia ריקה. לקollekcia ריקה אין מקסימום אלא אם כן החוזה מגדיר תוצאה נפרדת. ועדכנו אותו בכל איטרציה התואמת — התחלה מופעת בתוך הלולאה מאפסת אותה בכל מעבר ומשחררת את הסכום.
What is the maximum of the nonempty array {−8, −3, −11}?
רמת קושי 2/5 · 140 מטבעות + בונוס קטן בהשלמה הראשונה היום
−3 is the greatest actual element. Starting at 0 produces an invalid invented candidate.
קריאת a[0] היא דרך תקנית לאפס מקסימום לערימה ריקה.
רמת קושי 1/5 · 100 מטבעות + בונוס קטן בהשלמה הראשונה היום
אין אלמנט ראשון בערימה ריקה. בדוק את הקלט או הגדר תוצאה נפרדת למצב ללא מקסימום.
כמה מספרים זוגיים יש בערימת int {-8, -3, -11}?
רמת קושי 2/5 · 140 מטבעות + בונוס קטן בהשלמה הראשונה היום
רק -8 מתחלק ב-2 בשארית אפס; ערכים שליליים יכולים להיות גם הם זוגיים.
ספירת זוגיים בלולאה על ממשק a:
int count = 0;for (int i = 0; i < a.length; i++) { if (a[i] % 2 == 0) count++; }- הלולאה מבקרת בכל אלמנט; ה
ifסופר רק את הזוגיים.
להעביר את הניתוח למקרה חדש
- למערך ריק אין אלמנט ראשון וזקוק לחוזה או לבדיקה נפרדים.
- הערך ההתחלתי חייב להתאים לפעולה: אפס לסכום, אחד למכפלה, מקסימום מועמד התחלתי תקף.
דפוסים נפוצים של לולאות משלבים איטרציה ובחירה: מכונן (sum += x, ספירה או מקסימום רץ) הנבנה לאורך מעברים, עם if בתוכו כדי לעבד רק פריטים המתאימים. התחילו את המכונן נכון (סכום 0, מכפלה 1, מקסימום הערך הראשון), ושקלו יציאה מוקדמת (break/דגל) ברגע שמצאתם את התשובה.