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

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

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

מבוא למדעי המחשב מ׳/ח׳ 234114/234117 · אביב 2026 מועד ב׳ — תרגול, לא המבחן האמיתי.

משך: 3 שעות. ללא חומר עזר. 4 שאלות × 25 נקודות. אין שימוש ב-struct או ב-backtracking. שלושת קובצי השלד המקוריים מצורפים ללא שינוי.

שאלה 1 — סיבוכיות (25 נקודות)

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

סעיף א

void f1(int n) {
    for (int i = 1; i <= n; i++)
        for (int j = i; j <= n; j += i)
            printf("*");
}
דרישות סיבוכיותזמן: ________ · מקום: ________

סעיף ב

int g2(int n) {
    int k = 0;
    while (k < n) {
        k += 3;
        n--;
    }
    return n;
}
int f2(int n) {
    if (n < 4)
        return 0;
    return 1+f2(g2(n));
}
דרישות סיבוכיותזמן: ________ · מקום: ________

סעיף ג

void f3(int n) {
    if (n < 1)
        return;
    int* p = malloc(n*sizeof(int));
    f3(n-1);
    free(p);
}
דרישות סיבוכיותזמן: ________ · מקום: ________

שאלה 2 — 25 נקודות

int examB_q2(int* a, int* b, int n);

כל אחד מהמערכים a,b באורך n≥1 מייצג מספר שלם לא שלילי בבסיס עשר, הספרה המשמעותית ביותר ראשונה. כל איבר הוא ספרה 0–9, ואפסים מובילים מותרים. כתבו ל-a את n הספרות האחרונות של הסכום, והחזירו את ספרת הנשא הנוספת (0 או 1). אין לשנות את b. אין להמיר את המערך למספר מטיפוס שלם יחיד.

דרישות סיבוכיותדרישת זמן / מקום נוסף: O(n) / O(1)

דוגמאות — הפלט כולל את כל מה שה-main מדפיס

קלט ל-mainפלט מלא
13
9 9 9 9 9 9 9 9 9 9 9 9 9
0 0 0 0 0 0 0 0 0 0 0 0 1
1
0 0 0 0 0 0 0 0 0 0 0 0 0
7
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0
0 0 0 0 0 0 0
10
5 7 7 7 6 4 6 5 0 9
7 0 8 4 1 3 9 2 1 2
1
2 8 6 1 7 8 5 7 2 1
1
7
9
1
6

כתבו רק את הפונקציה המבוקשת ועזר מותר בקובץ השלד. אל תשנו את main, את החתימה או את פורמט הקלט והפלט.

שאלה 3 — 25 נקודות

int examB_q3(char* s, char* p);

נתונה s לא ריקה של אותיות a–z. יש לסדר מחדש את כל תוויה לתוך p כך שלא יהיו שני תווים סמוכים זהים. מבין כל הפתרונות יש לבחור את הקטן ביותר בסדר מילוני. אם יש פתרון, החזירו 1; אחרת החזירו 0 וכתבו מחרוזת ריקה ל-p. אין לשנות את s. יש לסיים את p ב-'\0'.

דרישות סיבוכיותדרישת זמן / מקום נוסף: O(n) / O(1), fixed 26-letter alphabet

דוגמאות — הפלט כולל את כל מה שה-main מדפיס

קלט ל-mainפלט מלא
6
abbaca
1
ababac
7
cbacdbc
1
abcbcdc
7
abababa
1
abababa
2
aa
0

כתבו רק את הפונקציה המבוקשת ועזר מותר בקובץ השלד. אל תשנו את main, את החתימה או את פורמט הקלט והפלט.

שאלה 4 — 25 נקודות

int examB_q4(int* arr, int n);

נתון arr באורך 1≤n≤2000. החזירו את מספר תתי-המערכים הרציפים באורך לפחות 2 שעולים ממש. תת-מערך באורך 1 אינו נספר. אין לשנות את arr. הפונקציה עצמה וכל עזר חייבים להיות רקורסיביים; אין לולאות, פונקציית מעטפת או הקצאה דינמית. אין דרישת סיבוכיות.

דרישות סיבוכיותדרישת זמן / מקום נוסף: No required bound; O(n²) time / O(n) stack

דוגמאות — הפלט כולל את כל מה שה-main מדפיס

קלט ל-mainפלט מלא
4
1 2 3 4
6
4
4 3 2 1
0
4
1 3 2 4
2
1
1
0

כתבו רק את הפונקציה המבוקשת ועזר מותר בקובץ השלד. אל תשנו את main, את החתימה או את פורמט הקלט והפלט.

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

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