מבוא למדעי המחשב מ'/ח' — 234114 תחזית 3 · 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 = 2; i*i <= n; i++)
        for (int j = 1; j <= n; j *= 2)
            printf("*");
}
דרישות סיבוכיותזמן: ________ · מקום: ________

סעיף ב

void f2(int n) {
    if (n < 2)
        return;
    for (int i = 0; i < n; i++)
        printf("*");
    f2(n/2);
    f2(n/2);
}
דרישות סיבוכיותזמן: ________ · מקום: ________

סעיף ג

void f3(int n) {
    for (int i = 1; i <= n; i *= 2) {
        int* p = malloc(i*sizeof(int));
        for (int j = 0; j < i; j++)
            p[j] = j;
        free(p);
    }
}
דרישות סיבוכיותזמן: ________ · מקום: ________

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

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

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

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

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

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

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

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

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

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

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

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

קלט ל-mainפלט מלא
6
abbaca
3
bac
8
cbacdcbc
4
bacd
7
abababa
2
ab
2
aa
1
a

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

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

int examB_q4(int* arr, int n);

נתון arr באורך n≥1. מיקום i נקרא שיא קידומת אם arr[i] גדול ממש מכל איבר שקדם לו. מיקום 0 תמיד נחשב שיא. החזירו את מספר שיאי הקידומת. אין לשנות את arr. הפונקציה עצמה וכל עזר חייבים להיות רקורסיביים; אין לולאות, פונקציית מעטפת או הקצאה דינמית. אין דרישת סיבוכיות.

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

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

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

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

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

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