לחץ ▶ Run כדי להדר ולהריץ את הקובץ. אם התוכנית תבקש קלט, תוכל להקליד אותו כאן למטה.
מבוא למדעי המחשב מ׳/ח׳ 234114/234117 · אביב 2026 מועד ב׳ — תרגול, לא המבחן האמיתי.
משך: 3 שעות. ללא חומר עזר. 4 שאלות × 25 נקודות. אין שימוש ב-struct או ב-backtracking. שלושת קובצי השלד המקוריים מצורפים ללא שינוי.
לכל קטע יש לקבוע סיבוכיות זמן ומקום נוסף הדוקה Θ. כל סעיף שווה שליש מניקוד השאלה. יש להניח n חיובי, פעולות ו-printf/free/malloc בזמן קבוע, הקצאה של k איברים תופסת Θ(k) מקום, והקצאות מצליחות. יש לכלול את מחסנית הרקורסיה; אין להניח אופטימיזציית זנב. מנתחים את הקוד במודל הרגיל ללא גלישת מספרים וללא אופטימיזציות מהדר.
סעיף א
void f1(int n) {
for (int i = 1; i <= n; i *= 2)
for (int j = 0; j < n; j += i)
for (int k = 0; k < i; k++)
printf("*");
}
סעיף ב
int f2(int n) {
if (n < 2)
return 1;
int* p = malloc(n*n*sizeof(int));
int x = f2(n/2);
int y = f2(n/2);
free(p);
return x+y;
}
סעיף ג
int g3(int n) {
if (n < 2)
return 1;
return 2*g3(n/2);
}
void f3(int n) {
for (int i = 0; i < g3(n); i++)
printf("*");
}
נתונים שני מערכים a,b באורך n≥1. כל איברי b שונים והוא התקבל מסיבוב מעגלי של מערך ממוין בסדר עולה ממש. לכל איבר מקורי a[i], יש לכתוב במקומו את הערך ב-b שמרחקו ממנו מינימלי; בשוויון בחרו בערך הקטן יותר. החזירו את מספר האיברים המקוריים של a שהופיעו ב-b. אין לשנות את b. כל ערכי הקלט בין −1000 ל-1000. כל n התאים של a הם חלק מהתוצאה.
דוגמאות — הפלט כולל את כל מה שה-main מדפיס
| קלט ל-main | פלט מלא |
|---|---|
| 13 -9 -6 -1 0 2 5 13 18 19 24 26 35 -14 -9 -6 -1 0 2 5 13 18 19 24 26 35 -14 | 13 -9 -6 -1 0 2 5 13 18 19 24 26 35 -14 |
| 12 36 22 26 4 -25 -39 -37 -39 -13 27 -20 -7 -19 -8 -6 -3 11 14 15 20 21 29 -35 -22 | 0 29 21 29 -3 -22 -35 -35 -35 -8 29 -19 -8 |
| 2 -18 13 14 -18 | 1 -18 14 |
| 1 18 10 | 0 10 |
כתבו רק את הפונקציה המבוקשת ועזר מותר בקובץ השלד. אל תשנו את main, את החתימה או את פורמט הקלט והפלט.
נתונה מחרוזת s לא ריקה של אותיות a–z. כתבו ל-p את תת-הסדרה המינימלית בסדר מילוני שמכילה כל אות שונה של s פעם אחת בדיוק. תת-סדרה שומרת על סדר ההופעה, אך רשאית לדלג על תווים. החזירו את אורך p. אין לשנות את s. יש לסיים את p ב-'\0'.
דוגמאות — הפלט כולל את כל מה שה-main מדפיס
| קלט ל-main | פלט מלא |
|---|---|
| 6 abbaca | 3 abc |
| 8 cbacdcbc | 4 acdb |
| 7 abababa | 2 ab |
| 2 aa | 1 a |
כתבו רק את הפונקציה המבוקשת ועזר מותר בקובץ השלד. אל תשנו את main, את החתימה או את פורמט הקלט והפלט.
נתון arr באורך 1≤n≤2000. החזירו את מספר הזוגות i<j שעבורם arr[i]>arr[j]. מותר לשנות את arr. כל איבר בין −1000 ל-1000. הפונקציה עצמה וכל פונקציות העזר חייבות להיות רקורסיביות; אין לולאות, פונקציית מעטפת או הקצאה דינמית. אין דרישת סיבוכיות בשאלה זו. שוויון אינו נחשב היפוך.
דוגמאות — הפלט כולל את כל מה שה-main מדפיס
| קלט ל-main | פלט מלא |
|---|---|
| 4 1 2 3 4 | 0 |
| 4 4 3 2 1 | 6 |
| 4 1 3 2 4 | 1 |
| 1 1 | 0 |
כתבו רק את הפונקציה המבוקשת ועזר מותר בקובץ השלד. אל תשנו את main, את החתימה או את פורמט הקלט והפלט.
main./grade.