תרגול נוספת פעולות


פירוק ובניית מספרים · לולאות while/for · פעולות שמקבלות ומחזירות ערך

הנחיות כלליות

  • בכל השאלות סעיף א׳ הוא פעולת עזר שמקבלת פרמטר/ים ומחזירה ערך (בלי קלט ובלי פלט).
  • בכל שאלה שיש בה סעיף ב׳ – סעיף ב׳ הוא פעולה ראשית (תכנית) שמדפיסה/מציגה תוצאות ומבצעת קריאות לפעולה מסעיף א׳.
  • אסור להשתמש במחרוזות (string) לפתרון של שאלות העוסקות בספרות של מספרים. יש להשתמש רק בחילוק שלם, שארית חלוקה, כפל, חיבור, חיסור ולולאות.
  • מתוך השאלה – עליכם/ן לזהות לבד את החתימה המתאימה: טיפוס החזרה, שם הפונקציה, פרמטרים.
  • בכל שאלה הניסוח הוא: *כתבו פעולה בשם המקבלת טיפוס שלם `num` ומחזירה...* (אם יש פרמטרים נוספים הם יופיעו במפורש).

שאלה 9 (1/5) – מספר “משולש” (קל) (bool, ללא לולאות חובה)

כתבו פעולה בשם CanFormTriangle המקבלת שלושה מספרים שלמים חיוביים (אורכים) ומחזירה true אם ניתן ליצור מהם משולש, אחרת false.

הבהרה: אפשר ליצור משולש אם מתקיים:

  • a + b > c
  • a + c > b
  • b + c > a

שאלה 1 (2/5) – היפוך ספרות רק אם מספר הספרות זוגי (while)

Related (not duplicate): 7.3.12 SwitchDigits (swap adjacent pairs)

  1. כתבו פעולה בשם FlipIfEvenLength המקבלת מספר שלם חיובי num ומחזירה מספר שלם:
    • אם מספר הספרות של num אי־זוגי – החזירו את num ללא שינוי.
    • אם מספר הספרות של num זוגי – החזירו מספר חדש שהוא היפוך הספרות של num.

    דוגמאות:

    • 12344321
    • 909
    • 123123
  2. כתבו פעולה ראשית שמגרילה (באמצעות Random) 6 מספרים בתחום 10 עד 9999 (כולל), ולכל מספר מדפיסה בשורה אחת: num -> result כאשר result הוא הערך שמוחזר מסעיף א׳.

שאלה 3 (2/5) – בדיקה האם מספר הוא ריבוע שלם (for)

  1. כתבו פעולה בשם IsPerfectSquare המקבלת מספר שלם חיובי num ומחזירה true אם num הוא ריבוע שלם, אחרת false.

    הערה: מותר להשתמש בלולאה כדי לבדוק i*i == num עבור ערכים מתאימים, ואין צורך ב־Math.Sqrt.

  2. כתבו פעולה ראשית שמקבלת (או קובעת) מספר שלם חיובי num ומדפיסה את כל הריבועים השלמים בתחום 1 עד num (כולל), כל אחד בשורה נפרדת. עליכם לקרוא לפעולה מסעיף א׳ לכל מספר בטווח.


שאלה 4 (2/5) – סכום ספרות של מספר, ואז בניית מספר חדש (while)

  1. כתבו פעולה בשם SumDigits המקבלת מספר שלם חיובי num ומחזירה את סכום ספרותיו.

    דוגמאות:

    • 50813
    • 99927
  2. כתבו פעולה בשם RepeatSumDigits שמקבלת מספר שלם חיובי num ומחזירה מספר שלם חדש בעל שתי ספרות כך:

    • הספרה הימנית היא SumDigits(num) % 10
    • הספרה השמאלית היא (SumDigits(num) / 10) (חילוק שלם)

    דוגמא:

    • num=508SumDigits=13 ולכן הפעולה תחזיר 13
    • num=99927 ולכן תחזיר 27
    • num=12345621 ולכן תחזיר 21

    (בפתרון – חייבים לקרוא ל־SumDigits לפחות פעם אחת.)


שאלה 6 (3/5) – סכום מחלקים (while או for)

Related (not duplicate): 7.3.6 Perfect Number (uses proper divisor sums)

כתבו פעולה בשם SumProperDivisors המקבלת מספר שלם חיובי num ומחזירה את סכום כל המחלקים החיוביים של num שאינם כוללים את num עצמו.

דוגמאות:

  • num=10
  • num=61+2+3 = 6
  • num=121+2+3+4+6 = 16

תוכלו לבדוק כאן את החתימות שלכם

להלן סיכום מנהלתי קצר: לכל שאלה מופיעה הצהרת פונקציה (חתימה) + מילת מפתח/תיאור קצר, כדי לבחור מהר שאלות למבחן הסופי.

שאלה שם/ים Function declaration (למורה) Keyword / Theme
1 FlipIfEvenLength static int FlipIfEvenLength(int num) reverse digits if even length
1b Main static void Main() random 6 numbers, print mapping
2 CountDigitInNumber static int CountDigitInNumber(int num, int digit) count digit occurrences
2b Main static void Main() random (num,digit) pairs
3 IsPerfectSquare static bool IsPerfectSquare(int num) perfect square check
3b Main static void Main() print all squares up to num
4a SumDigits static int SumDigits(int num) sum digits
4b RepeatSumDigits static int RepeatSumDigits(int num) build 2-digit from digit-sum
5 IsPrime static bool IsPrime(int num) prime check
5b Main static void Main() count primes & max prime up to num
6 SumProperDivisors static int SumProperDivisors(int num) sum of proper divisors
7 SwapAdjacentPairs static int SwapAdjacentPairs(int num) swap digit pairs
7b Main static void Main() random 4 numbers, print mapping
8 IsUpThenDown static bool IsUpThenDown(int num) digits strictly up then strictly down
8b Main static void Main() find first in range 100..num
9 CanFormTriangle static bool CanFormTriangle(int a, int b, int c) triangle inequality
10 IsBoom7 static bool IsBoom7(int num) divisible by 7 or contains digit 7
10b Main static void Main() 7-boom printing 1..99

שאלות נוספות יצירתיות וקשות יותר 1.2.26

מעולה. קראתי את המבחן המצורף והבנתי היטב את רמת הבסיס והקונבנציות (פעולת עזר בלי קלט/פלט, עבודה עם ספרות בלי string, שימוש ב־while/for וכו’) להלן 5 שאלות חדשות, עם אלמנט סיפורי ברור ועם קפיצה אמיתית ברמת החשיבה (מצבים, תנאים עדינים, מעקב לוגי, ולא רק “עוד לולאה”).


שאלה 11 (4/5) – מנגנון נעילה של כספת עתיקה (מצבים + ספרות)

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

  1. כתבו פעולה בשם IsValidTempleCode המקבלת מספר שלם חיובי num (לפחות 4 ספרות) ומחזירה true אם מתקיימים כל התנאים הבאים:

    1. סכום הספרות עד הספרה האמצעית (לא כולל) קטן מסכום הספרות שאחריה
    2. יש בדיוק ספרה אחת שהיא מקסימלית (כלומר: אין שתי ספרות שוות למקסימום)
    3. המקסימום אינו ספרת הקצה (לא הראשונה ולא האחרונה)

    אחרת – תחזיר false.

    דוגמאות:

    • 24193true
    • 94213false (המקסימום בקצה)
    • 35153false (שתי ספרות מקסימליות)
  2. כתבו פעולה ראשית שמחפשת ומדפיסה את 5 הקודים הראשונים בתחום 1000–99999 שפותחים את הכספת.


שאלה 12 (4/5) – מערכת ניטור דופק (מעבר מצב)

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

  1. כתבו פעולה בשם IsPulseWave המקבלת מספר שלם num (לפחות 5 ספרות), כאשר כל ספרה מייצגת מדידה עוקבת, ומחזירה true אם:

    יש לפחות:

    • שתי עליות רצופות (<)
    • אחריהן לפחות שתי ספרות שוות
    • ואחריהן לפחות שתי ירידות רצופות (>)

    והשלבים מופיעים בסדר הזה בלבד.

    דוגמאות:

    • 234443210true
    • 23333210false (אין עלייה)
    • 23443210false (שלב היציבות קצר מדי)
  2. כתבו פעולה ראשית שמקבלת מספר num ומדפיסה האם הדופק תקין או חריג.


שאלה 13 (4/5) – רובוט מיון ספרות (בניית מספר חכם)

רובוט סורק מספר ומייצר ממנו מספר חדש לפי חוקי מיון פנימיים.

  1. כתבו פעולה בשם RebuildByDigitGroups המקבלת מספר שלם חיובי num ומחזירה מספר חדש כך:

    • תחילה מופיעות כל הספרות הזוגיות, בסדר הופעתן המקורי
    • אחריהן כל הספרות האי־זוגיות, אך בסדר הפוך

    אין להשתמש במערכים או מחרוזות.

    דוגמאות:

    • 582931829135
    • 24682468
    • 13577531
  2. כתבו פעולה ראשית שמגרילה 3 מספרים בני 6 ספרות ומדפיסה: original -> rebuilt


שאלה 14 (4/5) – מד גובה הרים (ניתוח מקומי)

מטייל מתעד גבהים של שביל הרים. כל ספרה היא גובה יחסי.

  1. כתבו פעולה בשם CountLocalPeaks המקבלת מספר שלם num (לפחות 3 ספרות) ומחזירה כמה פסגות מקומיות יש בו.

    ספרה נחשבת פסגה מקומית אם היא גדולה משתי שכנותיה.

    דוגמאות:

    • 2536272 (5 ו־6)
    • 123211
    • 111110
  2. כתבו פעולה ראשית שמדפיסה את המספר הראשון בתחום 100–num שיש בו לפחות 3 פסגות מקומיות.


שאלה 15 (5/5) – קוד שידור חייזרי (אילוץ חזק)

חייזרים משדרים קודים מספריים. קוד נחשב בר־פענוח אם הוא מקיים חוק מוזר:

  1. כתבו פעולה בשם IsAlienCode המקבלת מספר שלם חיובי num ומחזירה true אם:

    • כל ספרה (מלבד הראשונה) שווה ל־ הפרש מוחלט בין שתי הספרות שלפניה

      כלומר:

      digit[i] == |digit[i-1] - digit[i-2]|
      
    • דוגמאות:

      • 5823true (|8−5|=3 ✔)
      • 9312false
      • 1211true
  2. כתבו פעולה ראשית שמדפיסה את כל הקודים בני 4 ספרות בתחום 1000–9999 שהם קודים חייזריים.