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

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

234114 / 234117  ·  מועד ב׳  ·  סמסטר אביב תשפ"ו
משך הבחינה: שלוש שעות חומר עזר: אין 4 שאלות · 25 נקודות לשאלה
תרגול מדומה — תחזית 10 מתוך 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 *= 2)
            printf("*");
}

ב.

void f2(int n) {
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            for (int k = 1; k < n; k *= 2)
                printf("*");
}

ג.

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

שאלה 2 25 נק'

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

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

על הפונקציה להחזיר את מספר הזוגות (i, j) המקיימים 0 ≤ i < j < n וגם arr[i] + arr[j] < x.

קלטפלטהסבר
arr = {1,2,3,4}, n = 4, x = 521+2=3 · 1+3=4
arr = {1,2,3,4}, n = 4, x = 64ועוד 1+4=5 · 2+3=5
arr = {1,2,3,4}, n = 4, x = 30הסכום המינימלי הוא 3 ואינו קטן מ-3
arr = {0,0,0}, n = 3, x = 13כל שלושת הזוגות
  • ניתן להניח כי הקלט תקין וכי n ≥ 1.
  • אין לשנות את תוכן המערך ואין להקצות זיכרון דינמי.
  • שימו לב לדרישת הזמן. מספר הזוגות עצמו יכול להיות Θ(n²) — לכן אי-אפשר לספור אותם אחד-אחד, ומצד שני חיפוש בינארי לכל i ייתן Θ(n log n) ואינו עומד בדרישה.
דרישות סיבוכיותזמן Θ(n)מקום נוסף Θ(1)

שאלה 3 25 נק'

נתונה מחרוזת s באורך n המכילה אך ורק את התווים 'a', 'b', 'c', 'd'.

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

int examT_q3(char* s);

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

קלטפלטהסבר
s = "aabb"3"aa", "bb", "aabb"
s = "abba"2"bb", "abba"
s = "aaaa"4שלוש באורך 2 ואחת באורך 4
s = "abcd"0אין תת-מחרוזת מאוזנת
  • אין לשנות את תוכן המחרוזת s, אפילו לא באופן זמני.
  • ניתן להניח כי הקלט תקין וכי s אינה ריקה.
  • מערך בגודל קבוע (שאינו תלוי ב-n) נחשב מקום Θ(1).
  • רמז: מה שקובע הוא רק הזוגיות של ארבעת המונים בכל קידומת — יש מספר קבוע של מצבי זוגיות אפשריים.
דרישות סיבוכיותזמן Θ(n)מקום נוסף Θ(1)

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

נתונים שני מערכים של מספרים שלמים, שניהם ממוינים בסדר לא-יורד: a באורך na ו-b באורך nb.

int examT_q4(int* a, int na, int* b, int nb);

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

קלטפלטהסבר
a = {1,2,3}, b = {2,3,4}22 ו-3
a = {1,1,2}, b = {1,2,2}21 אחד ו-2 אחד
a = {1,1,1}, b = {1}1אפשר להתאים רק פעם אחת
a = {2,4,6,8}, b = {1,3,5,7}0אין ערך משותף
  • על הפונקציה להיות רקורסיבית בלבד, ללא שימוש בלולאות — בכל הפונקציות שתכתבו.
  • אסור להשתמש בפונקציית מעטפת — examT_q4 עצמה חייבת לקרוא לעצמה.
  • אין להקצות זיכרון דינמי ואין לשנות את תוכן המערכים.
  • ניתן להניח כי שני המערכים ממוינים.
  • אין דרישות סיבוכיות בשאלה זו.

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

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