לדלג לתוכן

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:

const words = ["hi", "hello", "hey", "greetings", "yo", "welcome"];

ב. בהינתן האובייקט הבא, השתמשו ב-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.

השתמשו בלולאות מקוננות. כל שורה צריכה להיראות ככה:

3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
...

הוסיפו שורה ריקה בין כל מספר.

תרגיל 10 - מספרים ראשוניים

כתבו תוכנית שמוצאת ומדפיסה את כל המספרים הראשוניים מ-2 עד 100.

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

רמז נוסף: אפשר לייעל על ידי בדיקה עד שורש המספר בלבד (Math.sqrt(n)).

שאלות

  1. מה ההבדל בין for...of ל-for...in? על מה כל אחד עובר?
  2. מתי נשתמש ב-do...while ולא ב-while רגיל?
  3. מה קורה אם שוכחים break ב-switch? הדגימו.
  4. מה היתרון של guard clauses על פני תנאים מקוננים?
  5. איך כותבים חילוק שלם (integer division) ב-JS? (רמז: אין אופרטור //)