14
הטכניון , מכון טכנולוגי לישראל הפקולטה למדעי המחשב מבוא למדעי המחשב( 111222 ) סמסטר אביב תש ע" א( 1222 ) - 1 - S11-F-A ( מבוא למדעי המחשב111222 ) סמסטר אביב תש ע" א מבחן מסכם מועד א', 21 ב יו ל י1222 משך הבחינה:252 דקות( 1.5 ) שעות חומר עזר: אין להשתמש בכל חומר עזר בכתב, מודפס או אלקטרוני. הנחיות והוראות: יש למלא את הפרטים במקומות המיועדים)מספר סטודנט, שם פרטי ומשפחה( האישיים לכך בדף זה בעט בלבד. מבחן עם פרטים חסרים לא ייבדק! טופס הבחינה כולל28 ( עמודים כולל עמוד זה5 .) שאלות יש לבדוק כי טופס הבחינה שלפניך מכיל את כל העמודים. את התשובות יש לענות בטופס המבחן, במקומות המיועדים ל כ ך בלבד באופן ברור נקי ומסודר. ניתן בהחלט להשתמש בעפרון ומחק פרט לדף השער אותו יש למלא בעט בלבד. אין להוסיף הערות והסברים לתשובות אם לא נתבקשתם לכך במפורש. בכל השאלות ניתן להשתמש( בפונקציות קלט/פלט והקצאת זיכרון דינאמיmalloc ו- free בלבד מבלי) לממש אותן. פונקציות אחרות חובה לממש! בכל השאלות ניתן להשתמש בפונקציות המוגדרות בסעיפים קודמים של אותה השאלה גם אם לא ענית על סעיפים אלו. שאלה ניקוד ציון בודק1 20 2 16 3 19 4 25 5 20 סה"כ100 מרצ ה: ד" ר צחי קרני מתרגלים: חנה פדידה, אנסטסיה דוברובינה, יורי משמן. צוות הקורס בהצלחה! שם פרטי שם משפחה מספר סטודנט

)111222( בשחמה יעדמל אובמ אעשת ביבא רטסמס · בשחמה יעדמל הטלוקפה לארשיל יגולונכט ןוכמ ,ןוינכטה)1222( א"עשת

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: )111222( בשחמה יעדמל אובמ אעשת ביבא רטסמס · בשחמה יעדמל הטלוקפה לארשיל יגולונכט ןוכמ ,ןוינכטה)1222( א"עשת

הפקולטה למדעי המחשב , מכון טכנולוגי לישראלהטכניון (1222) א"עתש אביבסמסטר (111222) מבוא למדעי המחשב

- 1 -

S11-F-A

(111222מבוא למדעי המחשב )

א"עתש אביבסמסטר

1222 יליוב 21, א'מועד – מסכםמבחן

שעות( 1.5) דקות 252 משך הבחינה: בכתב, מודפס או אלקטרוני. עזראין להשתמש בכל חומר חומר עזר:

הנחיות והוראות:

לכך בדף זה האישיים )מספר סטודנט, שם פרטי ומשפחה( במקומות המיועדים את הפרטים יש למלא

מבחן עם פרטים חסרים לא ייבדק! בעט בלבד.

שאלות(. 5עמודים כולל עמוד זה ) 28טופס הבחינה כולל

מכיל את כל העמודים. יש לבדוק כי טופס הבחינה שלפניך

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

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

.אין להוסיף הערות והסברים לתשובות אם לא נתבקשתם לכך במפורש

בכל השאלות ניתן להשתמש( בפונקציות קלט/פלט והקצאת זיכרון דינאמיmalloc ו-free בלבד מבלי )

לממש! חובהפונקציות אחרות .לממש אותן

בכל השאלות ניתן להשתמש בפונקציות המוגדרות בסעיפים קודמים של אותה השאלה גם אם לא ענית

על סעיפים אלו.

בודק ציון ניקוד שאלה

1 20

2 16

3 19

4 25

5 20

100 סה"כ

צחי קרני ר"ד :המרצ

אנסטסיה דוברובינה, יורי , חנה פדידה: מתרגלים משמן.

צוות הקורס

בהצלחה!

מספר סטודנט שם משפחה שם פרטי

Page 2: )111222( בשחמה יעדמל אובמ אעשת ביבא רטסמס · בשחמה יעדמל הטלוקפה לארשיל יגולונכט ןוכמ ,ןוינכטה)1222( א"עשת

הפקולטה למדעי המחשב , מכון טכנולוגי לישראלהטכניון (1222) א"עתש אביבסמסטר (111222) מבוא למדעי המחשב

- 2 -

S11-F-A

נקודות( 20) 1שאלה

עבור כל אחד מהסעיפים הבאים רשום מה תדפיס התוכנית )מה יהיה הפלט( והסבר זאת בקצרה. עקב שגיאת הידור )קומפילציה( או זמן ריצה, ציין זאת בהסבר.תוכנית צפויה להיכשל הבמידה ו

:נק'( 4) סעיף א'

#include <stdio.h>

int y = 10;

void f2(int x, int *z) {

x++;

(*z)--;

}

void f1(int x, int z) {

printf("x=%d y=%d z=%d\n", x, y, z);

}

int main() {

int x = 9, y = 9;

printf("x=%d y=%d\n", x++, --y);

f1(x,y);

printf("x=%d y=%d\n", x, y);

f2(x,&y);

printf("x=%d y=%d\n", x, y);

return 0;

}

__________________________________________________________________________

__________________________________________________________________________

__________________________________________________________________________

__________________________________________________________________________

__________________________________________________________________________

__________________________________________________________________________

Page 3: )111222( בשחמה יעדמל אובמ אעשת ביבא רטסמס · בשחמה יעדמל הטלוקפה לארשיל יגולונכט ןוכמ ,ןוינכטה)1222( א"עשת

הפקולטה למדעי המחשב , מכון טכנולוגי לישראלהטכניון (1222) א"עתש אביבסמסטר (111222) מבוא למדעי המחשב

- 3 -

S11-F-A

:נק'( 4) 'בסעיף

#include <stdio.h>

int main() {

int a[] = {5, 9, -1, 0, 4};

int *pa = a;

while(*pa) {

if (*pa < 0)

*pa *= -1;

printf("%d " , *(pa++));

}

return 0;

}

__________________________________________________________________________

__________________________________________________________________________

__________________________________________________________________________

__________________________________________________________________________

__________________________________________________________________________

__________________________________________________________________________

:נק'( 1) 'גסעיף

#include <stdio.h>

void max_val(double a, double b, double max){

max = (a >= b) ? a : b;

}

int main() {

double a = -3.0, b = 1.5, max = 0.0;

max_val(a, b, max);

printf("max = %lf\n", max);

return 0;

}

__________________________________________________________________________

__________________________________________________________________________

__________________________________________________________________________

__________________________________________________________________________

__________________________________________________________________________

__________________________________________________________________________

Page 4: )111222( בשחמה יעדמל אובמ אעשת ביבא רטסמס · בשחמה יעדמל הטלוקפה לארשיל יגולונכט ןוכמ ,ןוינכטה)1222( א"עשת

הפקולטה למדעי המחשב , מכון טכנולוגי לישראלהטכניון (1222) א"עתש אביבסמסטר (111222) מבוא למדעי המחשב

- 4 -

S11-F-A

:נק'( 1) 'דסעיף

#include <stdio.h>

#define N 5

#define M 3

int main() {

int i, j = 0;

for (i = 0; i < N; i++) {

printf("*");

j++;

}

while ((j--)%M)

printf("#");

return 0;

}

__________________________________________________________________________

__________________________________________________________________________

__________________________________________________________________________

__________________________________________________________________________

__________________________________________________________________________

__________________________________________________________________________

:נק'( 1) 'הסעיף

#include <stdio.h>

#include <math.h>

struct point2D {

double x, y;

double dist;

};

typedef struct point2D Point2D;

int main() {

Point2D point1 = {-4.0,3.0};

Point2D *point2 = &point1;

point1.dist = sqrt(point1.x*point1.x + point1.y*point1.y);

printf("x = %2.2lf, y = %2.2lf\n", point2->x, point2->y);

printf("dist = %2.2lf\n", point2->dist);

}

__________________________________________________________________________

__________________________________________________________________________

__________________________________________________________________________

__________________________________________________________________________

__________________________________________________________________________

__________________________________________________________________________

Page 5: )111222( בשחמה יעדמל אובמ אעשת ביבא רטסמס · בשחמה יעדמל הטלוקפה לארשיל יגולונכט ןוכמ ,ןוינכטה)1222( א"עשת

הפקולטה למדעי המחשב , מכון טכנולוגי לישראלהטכניון (1222) א"עתש אביבסמסטר (111222) מבוא למדעי המחשב

- 5 -

S11-F-A

נקודות( 21) 2שאלה

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

בשאלה זו ניתן להשתמש בנוסחאות הבאות )אם צריך(:

סכום סדרה חשבונית: 1

2

nn a a ,a1 ,האיבר הראשוןan ,האיבר האחרוןn מספר האיברים.

סכום סדרה הנדסית:

1 1

1

na q

q

,a1 ,האיבר הראשוןq .מנת הסדרה

:נק'( 1) סעיף א'

void f1(int n, int m)

{

int i,j;

for (i=n; i; i/=5)

{

for(j=m; j>0; j-=2)

{

if (j%2)

continue;

printf("?");

}

}

}

)Θ ( :נוסף סיבוכיות מקום )Θ (סיבוכיות זמן ריצה:

הסבר:

Page 6: )111222( בשחמה יעדמל אובמ אעשת ביבא רטסמס · בשחמה יעדמל הטלוקפה לארשיל יגולונכט ןוכמ ,ןוינכטה)1222( א"עשת

הפקולטה למדעי המחשב , מכון טכנולוגי לישראלהטכניון (1222) א"עתש אביבסמסטר (111222) מבוא למדעי המחשב

- 6 -

S11-F-A

:נק'( 1) 'בסעיף

void f2(int n)

{

int i, j, k;

k = 1;

for(i=1; i<n; i*=2)

{

for (j=0; j<k; j++)

printf("?");

k++;

}

}

)Θ ( סיבוכיות מקום נוסף: )Θ (סיבוכיות זמן ריצה:

הסבר:

:נק'( 1) 'גסעיף

void f3(int n)

{

int **p = (int**) malloc(sizeof(int*)*n);

int i;

for(i=0; i<2*n; i++)

{

if (!(i%2))

p[i/2] = (int*) malloc(sizeof(int)*i);

else

free(p[i/2]);

}

free(p);

}

)Θ ( סיבוכיות מקום נוסף: )Θ (סיבוכיות זמן ריצה:

הסבר:

Page 7: )111222( בשחמה יעדמל אובמ אעשת ביבא רטסמס · בשחמה יעדמל הטלוקפה לארשיל יגולונכט ןוכמ ,ןוינכטה)1222( א"עשת

הפקולטה למדעי המחשב , מכון טכנולוגי לישראלהטכניון (1222) א"עתש אביבסמסטר (111222) מבוא למדעי המחשב

- 7 -

S11-F-A

:נק'( 1) 'דסעיף

void f4(int a, int b)

{

int i;

if (a<=0)

{

for (i=b; i; --i)

printf("*");

return;

}

for (i=0; i<a*b; i++)

printf("?");

f4(a/4,4*b);

return;

}

)Θ ( סיבוכיות מקום נוסף: )Θ (סיבוכיות זמן ריצה:

הסבר:

Page 8: )111222( בשחמה יעדמל אובמ אעשת ביבא רטסמס · בשחמה יעדמל הטלוקפה לארשיל יגולונכט ןוכמ ,ןוינכטה)1222( א"עשת

הפקולטה למדעי המחשב , מכון טכנולוגי לישראלהטכניון (1222) א"עתש אביבסמסטר (111222) מבוא למדעי המחשב

- 8 -

S11-F-A

נקודות( 29) 1שאלה

-מוגדרים ב M-ו N(, כאשר y-שורות )ציר ה M-( וx-עמודות )ציר ה Nנתון שריג )מערך דו מימדי( בגודל define (. 1( או דלוק )ערך 0. כל איבר בשריג יכול להיות במצב כבוי )ערך

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

.(דלוק)מצב העמודות ובכל עמודה להחליט איזה איבר לסמן כשייך לקו הישר

. הקו (10,5)עד (3,1)עמודות, יש לצייר קו מנקודת ההתחלה 15-שורות ו 10בשריג הנ"ל בגודל דוגמה: והאיברים בשריג השייכים לקו )מצב דלוק( צבועים בגוון כהה.הרציף מצוייר על פני השריג

14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0

1

2

3

4

5

6

7

8

9

התנאים הבאים על הקו הישר תמיד מתקיימים: ניתן להניח כי :תנאים

N: 0 ≤ x1 < x2 ≤ N-ל 0הם תמיד בין x-ערכי ה (1

M: 0 ≤ y1 ≤ y2 ≤ M-ל 0הם תמיד בין y-ערכי ה (2

x2 – x1 > y2 – y1 :45°-שיפוע הקו הישר אינו גדול מ (3

Page 9: )111222( בשחמה יעדמל אובמ אעשת ביבא רטסמס · בשחמה יעדמל הטלוקפה לארשיל יגולונכט ןוכמ ,ןוינכטה)1222( א"עשת

הפקולטה למדעי המחשב , מכון טכנולוגי לישראלהטכניון (1222) א"עתש אביבסמסטר (111222) מבוא למדעי המחשב

- 9 -

S11-F-A

:נק'( 9) סעיף א'

של קו, מסמנת על פני השריג את , אשר עבור שריג נתון ונקודות התחלה וסוףdraw_lineהפונקציה :נתון הנ"ל: mainוהפונקציה ,האיברים השייכים לקו(יברים הדלוקים )הא

#define M 10

#define N 15

void draw_line(int grid[M][N], int x1, int y1, int x2, int y2);

int main()

{

int grid[M][N] = {0};

draw_line(grid,2,1,8,4);

return 0;

}

סמן על גבי השריג הנ"ל איזה איברים יסומנו כדלוקים )שייכים לקו הישר ובעלי , draw_lineהפונקציה "יעפ

(.1ערך

14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0

1

2

3

4

5

6

7

8

9

void draw_line(int grid[M][N], int x1, int y1, int x2, int y2)

{

int x, y, dx, dy;

float err = 0.0, derr;

dx = x2-x1;

dy = y2-y1;

derr = ((float) dy)/((float) dx);

for (x=x1, y=y1; x<=x2; ++x) {

grid[y][x] = 1;

err += derr;

if (err > 0.5) {

err -= 1.0;

y++;

}

}

}

Page 10: )111222( בשחמה יעדמל אובמ אעשת ביבא רטסמס · בשחמה יעדמל הטלוקפה לארשיל יגולונכט ןוכמ ,ןוינכטה)1222( א"עשת

הפקולטה למדעי המחשב , מכון טכנולוגי לישראלהטכניון (1222) א"עתש אביבסמסטר (111222) מבוא למדעי המחשב

- 10 -

S11-F-A

:נק'( 22) 'בסעיף

- ונקודה כללית בשריג (x2,y2), נקודת סיום של קו (x1,y1)ממש פונקציה המקבלת נקודת התחלה של קו (x0,y0) נניח כי הקו עובר בנקודה .(x0,Y) להחזיר :הפונקציה על .על גבי השריג

(y0>Y)לקו "מעל"היא (x0,y0)אם הנקודה 1 (y0<Y)היא מתחת לקו (x0,y0)אם הנקודה 1- .(y0==Y)היא על הקו (x0,y0)אם הנקודה 0

x1 < x2, y1 ≤ y2, x2 – x1 > y2 – y1, x1 ≤ x0 ≤ x2התנאים הבאים על הקו הישר תמיד מתקיימים הנחות:

.אין: סיבוכיות דרישות

int relative_to_line(int x1, int y1, int x2, int y2, int x0, int y0)

{

}

Page 11: )111222( בשחמה יעדמל אובמ אעשת ביבא רטסמס · בשחמה יעדמל הטלוקפה לארשיל יגולונכט ןוכמ ,ןוינכטה)1222( א"עשת

הפקולטה למדעי המחשב , מכון טכנולוגי לישראלהטכניון (1222) א"עתש אביבסמסטר (111222) מבוא למדעי המחשב

- 11 -

S11-F-A

נקודות( 15) 4שאלה

:נק'( 1) סעיף א'

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

.Θ(1)וסיבוכיות מקום נוסף Θ(n)על הפונקציה לעבוד בסיבוכיות זמן

int num_of_zeros_1(int a[], int n)

{

}

:נק'( 7) 'בסעיף

בלבד )כמו בסעיף א'(. 1-ו 0, המכיל את המספרים n( בגודל intנתון מערך של מספרים שלמים )מסוג .1-ובהמשכו ערכי ה 0-הממש פונקציה הממיינת את מערך הקלט כך שבתחילתו יופיעו כל ערכי

.Θ(1)וסיבוכיות מקום נוסף Θ(n)על הפונקציה לעבוד בסיבוכיות זמן

void sort_zeros_ones_array(int a[], int n)

{

}

Page 12: )111222( בשחמה יעדמל אובמ אעשת ביבא רטסמס · בשחמה יעדמל הטלוקפה לארשיל יגולונכט ןוכמ ,ןוינכטה)1222( א"עשת

הפקולטה למדעי המחשב , מכון טכנולוגי לישראלהטכניון (1222) א"עתש אביבסמסטר (111222) מבוא למדעי המחשב

- 12 -

S11-F-A

:נק'( 7) 'גסעיף

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

.0-השווים ל

.Θ(1)וסיבוכיות מקום נוסף Θ(log(n))על הפונקציה לעבוד בסיבוכיות זמן

int num_of_zeros_2(int a[], int n)

{

}

:נק'( 7) 'דסעיף

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

.0-השווים ל

.Θ(log(n))וסיבוכיות מקום נוסף Θ (log(n))על הפונקציה לעבוד בסיבוכיות זמן

int num_of_zeros_3(int a[], int n)

{

}

Page 13: )111222( בשחמה יעדמל אובמ אעשת ביבא רטסמס · בשחמה יעדמל הטלוקפה לארשיל יגולונכט ןוכמ ,ןוינכטה)1222( א"עשת

הפקולטה למדעי המחשב , מכון טכנולוגי לישראלהטכניון (1222) א"עתש אביבסמסטר (111222) מבוא למדעי המחשב

- 13 -

S11-F-A

נקודות( 12) 5שאלה

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

תשעה איברים:לדוגמה, עבור המערך הבא בעל

a[8] a[7] a[6] a[5] a[4] a[3] a[2] a[1] a[0]

0 2 7 0 0 2- 3 1 0

-ותשנה את המערך כך )שים לב שסדר האיברים השונים מ ,0-, מספר האיברים השונים מ5הפונקציה תחזיר

?(:-מסומן בדוגמה ב –לא השתנה. כמו כן, אין חשיבות לערכי המערך מעבר לגודלו החדש 0

a[8] a[7] a[6] a[5] a[4] a[3] a[2] a[1] a[0]

? ? ? ? 2 7 2- 3 1

:נק'( 22) סעיף א'

בסיבוכיות זמן ומקום הטובים ביותר. יקורסיבלא רממש את הפונקציה המתוארת לעיל במימוש

int remove_zeros_1(int a[], int n)

{

}

____________________ נוסף סיבוכיות מקום הזמן ____________________ סיבוכיות

Page 14: )111222( בשחמה יעדמל אובמ אעשת ביבא רטסמס · בשחמה יעדמל הטלוקפה לארשיל יגולונכט ןוכמ ,ןוינכטה)1222( א"עשת

הפקולטה למדעי המחשב , מכון טכנולוגי לישראלהטכניון (1222) א"עתש אביבסמסטר (111222) מבוא למדעי המחשב

- 14 -

S11-F-A

:נק'( 22) 'בסעיף

בסיבוכיות זמן ומקום הטובים ביותר. יקורסיברממש את הפונקציה המתוארת לעיל במימוש

int remove_zeros_2(int a[], int n)

{

if (n==0)

return 0;

}

____________________ נוסף סיבוכיות מקום סיבוכיות הזמן ____________________