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

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

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

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

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

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

א.

void f1(int n) {
    int m = 1;
    for (int i = n; i > 1; i /= 2) {
        for (int j = 0; j < m * n; j++)
            printf("*");
        m *= 2;
    }
}

ב.

int f2(int n) {
    if (n <= 1) return 1;
    int* a = (int*) malloc(n * sizeof(int));
    if (a == NULL) return 0;
    for (int i = 0; i < n; i++)
        a[i] = i;
    free(a);
    return f2(n - 1);
}

ג.

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

שאלה 2 25 נק'

הגדרה: מערך arr באורך n ייקרא מערך חזית אם קיים k, 0 ≤ k ≤ n, כך ש-arr[0] > arr[1] > ... > arr[k-1] > 0 וכל יתר התאים, מ-k והלאה, מכילים 0. הערך k אינו נתון ועשוי להיות קטן בהרבה מ-n.

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

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

קלטפלטהסבר
arr = {9,7,5,3,0,0,0,0}, n = 8, x = 43‎9, 7, 5
arr = {9,7,5,3,0,0,0,0}, n = 8, x = 04כל החיוביים
arr = {9,7,5,3,0,0,0,0}, n = 8, x = 90אין גדול מ-9
arr = {0,0,0}, n = 3, x = 00‎k = 0
  • ניתן להניח כי הקלט תקין, כי x ≥ 0, וכי המערך אכן מערך חזית.
  • אין לשנות את תוכן המערך ואין להקצות זיכרון דינמי.
  • דרישת הסיבוכיות היא ב-k, לא ב-n — פתרון בזמן Θ(log n) אינו עומד בה. שימו לב שדרושים כאן שני שלבים: תחילה יש לאתר את k מבלי לסרוק, ורק אז לחפש את הסף בתוך החלק החיובי, שהוא יורד ולא עולה.
דרישות סיבוכיותזמן Θ(log k)מקום נוסף Θ(1)

שאלה 3 25 נק'

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

int examT_q3(char* s, char c);

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

קלטפלטs לאחר הקריאה
s = "abcabc", c = 'a'2"bcbcaa"
s = "banana", c = 'a'3"bnnaaa"
s = "abc", c = 'z'0"abc"
s = "aaa", c = 'a'3"aaa"
  • ניתן להניח כי הקלט תקין וכי s אינה ריקה.
  • אין להקצות זיכרון דינמי ואין להשתמש במערך עזר.
  • אין להשתמש בפונקציות ספריה לטיפול במחרוזות.
דרישות סיבוכיותזמן Θ(n)מקום נוסף Θ(1)

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

נתונות שתי מחרוזות a ו-b המכילות אותיות אנגליות קטנות בלבד.

int examT_q4(char* a, char* b);

על הפונקציה להחזיר 1 אם ניתן לקבל את a מתוך b על ידי מחיקת תו אחד בדיוק (לא פחות ולא יותר), ו-0 אחרת.

קלטפלטהסבר
a = "abc", b = "abxc"1מחיקת ‎'x'
a = "abc", b = "abc"0אפס מחיקות, לא אחת
a = "cat", b = "cart"1מחיקת ‎'r'
a = "ba", b = "abc"0הסדר אינו מתאים

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

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

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

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