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

סעיף ב

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

סעיף ג

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

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

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

נתונים a,b באורך n≥1. b ממוין בסדר לא יורד, a אינו בהכרח ממוין. לכל a[i] מקורי, כתבו במקומו את מספר איברי b הקטנים ממנו ממש. החזירו את מספר המיקומים המקוריים ב-a שערכם מופיע לפחות פעם אחת ב-b. אין לשנות את b. ערכי הקלט בין ‎−1000 ל-1000.

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

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

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

כתבו רק את הפונקציה המבוקשת ועזר מותר בקובץ השלד. אל תשנו את 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
bca
8
cbacdcbc
4
adbc
7
abababa
5
ba
2
aa
1
a

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

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

int examB_q4(int* arr, int n);

נתון arr באורך n≥1. החזירו את אורך הרצף הרציף הארוך ביותר שעולה ממש. רצף באורך 1 מותר; איברים שווים קוטעים רצף. אין לשנות את 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
2
1
1
1

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

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

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