2.3 בקרת זרימה ולולאות תרגול
תרגול - בקרת זרימה ולולאות¶
תרגיל 1 - FizzBuzz¶
כתבו תוכנית שמדפיסה את המספרים מ-1 עד 100, עם הכללים הבאים:
- אם המספר מתחלק ב-3, הדפיסו "Fizz" במקום המספר
- אם המספר מתחלק ב-5, הדפיסו "Buzz" במקום המספר
- אם המספר מתחלק גם ב-3 וגם ב-5, הדפיסו "FizzBuzz"
- אחרת, הדפיסו את המספר עצמו
זה תרגיל קלאסי בראיונות עבודה.
תרגיל 2 - switch עם ימים¶
כתבו תוכנית שמקבלת מספר מ-1 עד 7 (עם prompt) ומדפיסה את שם היום:
- 1 = Sunday, 2 = Monday, ..., 7 = Saturday
- אם המספר לא בטווח, הדפיסו "Invalid day"
- הוסיפו גם הודעה: ימים 1-5 הם "Workday", ימים 6-7 הם "Weekend"
השתמשו ב-switch.
תרגיל 3 - ניחוש מספר¶
כתבו משחק ניחוש מספר:
- הגדירו מספר סודי (למשל 42)
- תנו למשתמש 7 ניסיונות לנחש
- אחרי כל ניחוש, אמרו אם המספר גבוה מדי או נמוך מדי
- אם המשתמש ניחש, הדפיסו הודעת ניצחון עם מספר הניסיונות
- אם נגמרו הניסיונות, הדפיסו את המספר הסודי
השתמשו ב-while או for.
תרגיל 4 - תבנית כוכביות¶
הדפיסו את התבנית הבאה באמצעות לולאות מקוננות:
ואז את התבנית ההפוכה:
רמז: השתמשו ב-let row = ""; כדי לבנות כל שורה ואז console.log(row).
תרגיל 5 - תרגום מפייתון ל-JS¶
תרגמו את הקוד הבא מפייתון לג׳אווהסקריפט:
# Part A - if/elif/else
score = 85
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(f"Grade: {grade}")
# Part B - for loop with list
fruits = ["apple", "banana", "cherry", "date"]
for fruit in fruits:
if fruit == "cherry":
print(f"Found it: {fruit}!")
break
print(f"Checking: {fruit}")
# Part C - while loop
total = 0
n = 1
while n <= 10:
if n % 2 == 0:
total += n
n += 1
print(f"Sum of even numbers 1-10: {total}")
תרגיל 6 - סיסמה¶
כתבו תוכנית שמבקשת מהמשתמש סיסמה:
- הסיסמה הנכונה היא "secret123"
- למשתמש יש 3 ניסיונות
- אם הסיסמה נכונה, הדפיסו "Access granted!"
- אם טועה, הדפיסו כמה ניסיונות נותרו
- אם נגמרו הניסיונות, הדפיסו "Account locked!"
- אם המשתמש לחץ Cancel ב-prompt, צאו מהלולאה
השתמשו ב-do...while (כי צריך לשאול לפחות פעם אחת).
תרגיל 7 - for...of ו-for...in¶
א. בהינתן המערך הבא, השתמשו ב-for...of כדי להדפיס רק את המחרוזות שאורכן גדול מ-4:
ב. בהינתן האובייקט הבא, השתמשו ב-for...in כדי להדפיס רק את המאפיינים שערכם הוא מספר:
const product = {
name: "Laptop",
price: 999,
brand: "Dell",
weight: 1.5,
color: "Silver",
stock: 42
};
תרגיל 8 - Guard Clauses¶
שכתבו את הפונקציה הבאה באמצעות guard clauses (יציאה מוקדמת) כדי להיפטר מהקינון:
function canWatch(user, movie) {
if (user !== null) {
if (user.isLoggedIn) {
if (user.hasPaid) {
if (user.age >= movie.minAge) {
return "Enjoy the movie!";
} else {
return "You are too young for this movie";
}
} else {
return "Please purchase a subscription";
}
} else {
return "Please log in first";
}
} else {
return "No user found";
}
}
תרגיל 9 - לוח הכפל¶
כתבו תוכנית שמדפיסה לוח כפל מ-1 עד 10.
השתמשו בלולאות מקוננות. כל שורה צריכה להיראות ככה:
הוסיפו שורה ריקה בין כל מספר.
תרגיל 10 - מספרים ראשוניים¶
כתבו תוכנית שמוצאת ומדפיסה את כל המספרים הראשוניים מ-2 עד 100.
רמז: מספר ראשוני הוא מספר שמתחלק רק ב-1 ובעצמו. השתמשו בלולאה מקוננת - הלולאה הפנימית בודקת אם המספר מתחלק במספר כלשהו, והלולאה החיצונית עוברת על כל המספרים.
רמז נוסף: אפשר לייעל על ידי בדיקה עד שורש המספר בלבד (Math.sqrt(n)).
שאלות¶
- מה ההבדל בין
for...ofל-for...in? על מה כל אחד עובר? - מתי נשתמש ב-
do...whileולא ב-whileרגיל? - מה קורה אם שוכחים
breakב-switch? הדגימו. - מה היתרון של guard clauses על פני תנאים מקוננים?
- איך כותבים חילוק שלם (integer division) ב-JS? (רמז: אין אופרטור
//)