לחץ ▶ Run כדי להדר ולהריץ את הקובץ. אם התוכנית תבקש קלט, תוכל להקליד אותו כאן למטה.
מבוא למדעי המחשב מ'/ח' - 234114 / 234117 - מועד ב' אביב תשפ"ו
משך הבחינה שלוש שעות - אין חומר עזר - 4 שאלות, 25 נקודות לשאלה.
תרגול. אינו מבחן אמיתי של הטכניון. נבנה על ידי Claude.
---
לכל סעיף ציינו סיבוכיות זמן וסיבוכיות מקום נוסף בסימון Theta, כפונקציה של n.
הניחו כי malloc פועלת בזמן Theta(1) ותופסת מקום כגודל ההקצאה, וכי printf, free ו-sqrt הן Theta(1).
א.
void f1(int n) {
int i = 0;
while (i * i < n) {
for (int j = 0; j < i; j++)
printf("*");
i++;
}
}
ב.
void f2(int n) {
for (int i = n; i > 0; i /= 2) {
int* p = malloc(i * sizeof(int));
if (!p)
return;
for (int j = 0; j < i; j++)
printf("*");
free(p);
}
}
ג.
void f3(int n) {
for (int i = n; i > 2; i = (int) sqrt(i))
printf("*");
}
---
המערך b ממוין בסדר לא-יורד. לכל i, על הפונקציה להחליף את a[i] במספר האיברים ב-b הקטנים או שווים ל-a[i], ולהחזיר את מספר האינדקסים שבהם התוצאה היא 0.
דוגמה: a = {5,1,9}, b = {2,4,6} -> מחזיר 1, a = {2,0,3}
דרישות סיבוכיות: זמן Theta(n log n) - מקום נוסף Theta(1)
אין להקצות זיכרון דינמי ואין להשתמש בפונקציות ספרייה.
על הפונקציה למצוא את התת-מחרוזת הרציפה הארוכה ביותר של s שבה אין תו החוזר פעמיים, לכתוב אותה אל p ולהחזיר את אורכה. אם יש כמה באותו אורך - הראשונה משמאל.
דוגמה: s = "abcabcbb" -> מחזיר 3, p = "abc"
דרישות סיבוכיות: זמן Theta(n) - מקום נוסף Theta(1)
אין להקצות זיכרון דינמי ואין להשתמש בפונקציות ספרייה.
על הפונקציה להחזיר 1 אם arr הוא פלינדרום (זהה לעצמו הפוך), ו-0 אחרת.
רקורסיה בלבד, ללא לולאות, ללא פונקציית מעטפת.
דוגמה: arr = {1,2,3,2,1} -> 1
דרישות סיבוכיות: אין דרישת סיבוכיות
אין להקצות זיכרון דינמי ואין להשתמש במשתנים גלובליים או סטטיים.
main./grade.