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

תרגול מבחן 002

מבוא למדעי המחשב — מועד ב׳

זמן מומלץ: 3 שעות · שפת C

ענו על כל השאלות. אלא אם נאמר אחרת, נמקו סיבוכיות זמן ומקום.

שאלה 1 — ניתוח סיבוכיות

לכל קטע קוד בחרו את סיבוכיות הזמן והמקום ההדוקות ביותר.

א

void f(int n) {
    for (int i = 1; i <= n; i *= 2)
        for (int j = 0; j < 20; j++)
            putchar('.');
}

ב

void g(int n) {
    if (n <= 1) return;
    int *p = malloc(n * sizeof(int));
    g(n / 2);
    g(n / 2);
    free(p);
}

ג

int h(int n) {
    if (n <= 1) return 1;
    return h(n / 2) + h(n / 2);
}

שאלה 2 — חיפוש במערך מסובב

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

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

דוגמה: עבור [4,5,6,7,0,1,2] ו־x=0 יוחזר 4; עבור x=3 יוחזר -1.

דרישות: זמן Θ(log n), מקום נוסף Θ(1).

שאלה 3 — כיווץ רצפים במקום

כתבו מחדש את המחרוזת כך שכל רצף מקסימלי יוחלף בתו ובמספר הופעותיו. אורך כל רצף הוא לכל היותר 9. החזירו את האורך החדש.

int examT_q3(char *s);

דוגמה: "aaabbc" הופכת ל־"a3b2c1", והפונקציה מחזירה 6.

דרישות: שינוי במקום, זמן Θ(n), מקום נוסף Θ(1).

שאלה 4 — היפוך מספר ברקורסיה

החזירו את הספרות של n בסדר הפוך. הקריאה הראשית תמיד תתבצע עם acc=0.

int examT_q4(int n, int acc);

דוגמאות: examT_q4(1234,0) מחזירה 4321; עבור 1000 מוחזר 1.

חובה להשתמש ברקורסיה עצמית בלבד; אין לולאות ואין פונקציית מעטפת.

הנחיות הגשה

שמרו על חתימות הפונקציות הנתונות. ניתן להוסיף משתנים מקומיים בלבד, אלא אם השאלה מציינת אחרת.