לחץ ▶ Run כדי להדר ולהריץ את הקובץ. אם התוכנית תבקש קלט, תוכל להקליד אותו כאן למטה.
מבוא למדעי המחשב מ׳/ח׳ 234114/234117 · אביב 2026 מועד ב׳ — תרגול, לא המבחן האמיתי.
משך: 3 שעות. ללא חומר עזר. 4 שאלות × 25 נקודות. אין שימוש ב-struct או ב-backtracking. שלושת קובצי השלד המקוריים מצורפים ללא שינוי.
לכל קטע יש לקבוע סיבוכיות זמן ומקום נוסף הדוקה Θ. כל סעיף שווה שליש מניקוד השאלה. יש להניח 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);
}
}
נתונים a,b באורך n≥1, ממוינים בסדר לא יורד, עם ערכים שלמים חיוביים. כתבו בתחילת a את החיתוך עם ריבוי של שני המערכים, בסדר עולה: כל ערך יופיע כמספר הפעמים המינימלי שלו בשני הקלטים. החזירו את אורך החיתוך k ומלאו באפס את כל a[k..n−1]. אין לשנות את b.
דוגמאות — הפלט כולל את כל מה שה-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, את החתימה או את פורמט הקלט והפלט.
נתונה s לא ריקה של אותיות a–z. כתבו ל-p תו אחד מכל רצף מקסימלי של תווים זהים ברציפות. החזירו את מספר התווים שנמחקו, ולא את האורך החדש. אין לשנות את s; יש לסיים את p ב-'\0'. אין למחוק הופעות נפרדות שאינן באותו רצף.
דוגמאות — הפלט כולל את כל מה שה-main מדפיס
| קלט ל-main | פלט מלא |
|---|---|
| 6 abbaca | 1 abaca |
| 8 cbacdcbc | 0 cbacdcbc |
| 7 abababa | 0 abababa |
| 2 aa | 1 a |
כתבו רק את הפונקציה המבוקשת ועזר מותר בקובץ השלד. אל תשנו את main, את החתימה או את פורמט הקלט והפלט.
נתון arr באורך n≥1. החזירו 1 אם המערך פלינדרומי, ו-0 אחרת. אין לשנות את המערך. הפונקציה עצמה חייבת להיות רקורסיבית. אסורות לולאות, פונקציית מעטפת והקצאה דינמית; גם עזר חייב להיות רקורסיבי. אין דרישת סיבוכיות.
דוגמאות — הפלט כולל את כל מה שה-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./grade.