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

סעיף ב

int f2(int n) {
    if (n < 2)
        return 1;
    return f2(n/2)+f2(n/2);
}
דרישות סיבוכיותזמן: ________ · מקום: ________

סעיף ג

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

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

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

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

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

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

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

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

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

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

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

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

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

קלט ל-mainפלט מלא
6
abbaca
1
abaca
8
cbacdcbc
0
cbacdcbc
7
abababa
0
abababa
2
aa
1
a

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

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

int examB_q4(int* arr, int n);

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

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

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

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

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

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

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