מבוא למדעי המחשב מ'/ח' — 234114 תחזית 07/12 · Moed Bet · Spring 2026 · practice
3:00:00
gcc 13.2 · -std=c99 0/80
1
לחץ ▶ Run כדי להדר ולהריץ את הקובץ. אם התוכנית תבקש קלט, תוכל להקליד אותו כאן למטה.
גודל טקסט

מבוא למדעי המחשב מ'/ח'

234114 / 234117  ·  מועד ב׳  ·  סמסטר אביב תשפ"ו
משך הבחינה: שלוש שעות חומר עזר: אין 4 שאלות · 25 נקודות לשאלה
תרגול מדומה — תחזית 7 מתוך 12 למועד ב׳ אביב 2026. אינו מבחן אמיתי של הטכניון.

שאלה 1 25 נק' — סיבוכיות

לכל סעיף ציינו סיבוכיות זמן וסיבוכיות מקום נוסף, בסימון Θ, כפונקציה של n. חובה לפשט את הביטוי ככל שניתן. הניחו כי סיבוכיות הזמן והמקום של printf ו-free היא Θ(1), וכי סיבוכיות הזמן של malloc(n) היא Θ(1) וסיבוכיות המקום שלה היא Θ(n). הניחו כי sqrt פועלת בזמן Θ(1).

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

א.

void f1(int n) {
    for (int i = 1; i < n; i++)
        for (int j = i; j < n; j += i)
            printf("*");
}

ב.

int f2(int n) {
    if (n <= 1) return 1;
    return f2(n - 1) + f2(n - 2);
}

ג.

void f3(int n) {
    for (int i = n; i > 2; i = (int) sqrt(i))
        printf("*");
}

שאלה 2 25 נק'

נתון מערך arr באורך n של מספרים שלמים שונים זה מזה, הממוין בסדר עולה ממש. ייתכנו במערך מספרים שליליים ואפס.

int examT_q2(int arr[], int n);

על הפונקציה להחזיר את המספר השלם החיובי הקטן ביותר שאינו מופיע במערך (המספרים החיוביים מתחילים מ-1).

קלטפלטהסבר
arr = {1,2,3,5,6}, n = 54‎1,2,3 קיימים, 4 חסר
arr = {-3,-1,1,2,4}, n = 53השליליים אינם רלוונטיים
arr = {2,3,4}, n = 31‎1 עצמו חסר
arr = {1,2,3}, n = 34אין חסר בתוך המערך
  • ניתן להניח כי הקלט תקין, כי n ≥ 1 וכי המערך עולה ממש.
  • אין לשנות את תוכן המערך ואין להקצות זיכרון דינמי.
  • רמז: תחילה יש לאתר היכן מתחילים המספרים החיוביים. משם, אם j הוא האינדקס היחסי בתוך החלק החיובי, הערך הצפוי הוא j+1 — והתנאי "הערך גדול מהצפוי" הוא מונוטוני. שני חיפושים בינאריים משורשרים.
דרישות סיבוכיותזמן Θ(log n)מקום נוסף Θ(1)

שאלה 3 25 נק'

נתונה מחרוזת s באורך n המכילה אותיות אנגליות קטנות בלבד.

לכל אינדקס i המקיים 1 ≤ i < n, נסמן ב-L את קבוצת התווים השונים המופיעים ב-s[0..i-1], וב-R את קבוצת התווים השונים המופיעים ב-s[i..n-1].

נאמר ש-i הוא אינדקס מכיל אם L מוכלת ממש ב-R — כלומר כל תו של L מופיע גם ב-R, וגם קיים לפחות תו אחד ב-R שאינו ב-L.

int examT_q3(char* s);

על הפונקציה להחזיר את מספר האינדקסים המכילים.

קלטפלטהסבר
s = "abab"1רק i=1: {a} מוכלת ממש ב-{a,b}
s = "abcabc"2—
s = "aaa"0הקבוצות תמיד שוות, ולכן ההכלה אינה ממש
s = "abcd"0—
  • אין לשנות את תוכן המחרוזת s, אפילו לא באופן זמני.
  • מערך בגודל קבוע (26 תאים) נחשב מקום Θ(1). מערך שגודלו תלוי ב-n אינו מותר.
  • רמז: תו נמצא ב-L אם ורק אם ההופעה הראשונה שלו לפני i, ונמצא ב-R אם ורק אם ההופעה האחרונה שלו היא i או אחריה. שימו לב שהכלה ממש דורשת שתי בדיקות נפרדות, לא אחת.
דרישות סיבוכיותזמן Θ(n)מקום נוסף Θ(1)

שאלה 4 25 נק' — רקורסיה

נתונים שני מספרים שלמים: n אי-שלילי, ו-k חיובי.

הרכבה מסודרת של n היא סדרה של מספרים שלמים חיוביים שסכומם n. שתי הרכבות נחשבות שונות אם סדר האיברים בהן שונה — כך 1+2 ו-2+1 הן שתי הרכבות שונות של 3.

int examT_q4(int n, int k);

על הפונקציה להחזיר את מספר ההרכבות המסודרות של n שבהן כל איבר הוא לכל היותר k. עבור n = 0 יש הרכבה אחת (הריקה).

קלטפלטהסבר
n = 4, k = 25איברים מתוך {1,2}
n = 4, k = 37איברים מתוך {1,2,3}
n = 5, k = 516ללא הגבלה אפקטיבית
n = 3, k = 11רק 1+1+1

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

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

איך עובדים כאן

  • כתבו בעורך שמשמאל. שלושה קבצים, לשונית לכל שאלה. אל תשנו את main.
  • הרץ בדיקות מריץ את הפונקציה שלכם מול מקרי הבדיקה של השאלה — כולל בדיקות של האילוצים (לולאות ברקורסיה, שינוי הקלט, פונקציית מעטפת).
  • סיבוכיות אינה נבדקת אוטומטית. פתרון שעובר את כל הבדיקות בסיבוכיות שגויה — נכשל בשאלה.
  • בסיום לחצו סיום והגשה, שמרו את קובץ ההגשה, ובקשו מ-Claude ציון עם /grade.