שאלות מבחינות קודמות

Post on 07-Jan-2016

35 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

שאלות מבחינות קודמות. יואב ציבין. שאלה 4, 25 נק' (3.2.00). כתבו פונקציה המקבלת מערך וגודלו ומחזירה TRUE אם יש במערך שני איברים שווים בערכם (מחזירה FALSE אחרת). השתדלו למצוא פתרון יעיל מבחינת סיבוכיות זמן. typedef enum {FALSE,TRUE} bool ; bool Yesh1( int ar[], int len) { int i; - PowerPoint PPT Presentation

TRANSCRIPT

שאלות מבחינות קודמות

יואב ציבין

(3.2.00 נק' )25, 4שאלה

כתבו פונקציה המקבלת מערך וגודלו ומחזירהTRUE אם יש במערך שני איברים שווים

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

typedef enum {FALSE,TRUE} bool;bool Yesh1(int ar[], int len) {

int i;merge_sort(ar, len);for (i=1; i<len; i++)

if (a[i-1]==a[i]) return TRUE;return FALSE;

}

סעיף בבמערך דו-מימדי הוא ארבעה תאים סמוכים בצורת ריבוע

ריבוע. כתבו פונקציה המקבלת טבלה( table) ומחזירה TRUE אם

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

:דוגמא

.10בכל אחד משלושת הריבועים סכום האיברים הוא

typedef int table[N][M];61

21223

3423

המשך סעיף ב

bool Yesh2(table t) {int helper[N-1][M-1];int i,j;for (i=0; i<N-1; i++)

for (j=0; j<N-1; j++)helper[i][j] =

t[i][j]+ t[i+1][j]+ t[i][j+1]+ t[i+1][j+1];

return Yesh1(&helper[0][0], (N-1)*(M-1) );}

נקודות(15 )08/02/01מבחן

נתון:

. m ומספר שלם n, את אורכו aמערך שלמים

ממוין בסדר לא יורד.aידוע שהמערך

כתוב פונקציה שעונה על השאלה הבאה:

האיברים של הקבוצה כל מכיל את aהאם המערך

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

int f4(int a[], int n, int m) {

int i=0, j=1;

while (i<n && j<=m) {

if (a[i] > j*j) return 0;

if (a[i] == j*j) {

++i;

++j;

} else ++i;

}

return (j>m);

}

2 2 2 21 ,2 ,3 , m

נקודות(15 )09/07/01מבחן a הוא מערך שלמים באורך n -ידוע ש .n.אי-זוגי

בסדר הבא משמאל לימין:aהבא כך שידפיס את אברי הרקורסיבי נק') השלימו את הקוד 8א. ( a[0], a[n-1], a[1], a[n-2], …, a[(n-1)/2]

אחד בלבד.)simple statement( בכל מלבן יש לכתוב פסוק פשוט void extreme_to_middle(int a[], int n) if (n== ) { return;

} return;}

בסדר הבא משמאל לימין:aהבא כך שידפיס את אברי הרקורסיבי נק') השלימו את הקוד 7 ב. ( a[(n-1)/2], a[(n-1)/2 - 1], a[(n-1)/2 + 1], …, a[0], a[n-1]

  אחד בלבד.)simple statement(בכל מלבן יש לכתוב פסוק פשוט

void middle_to_extreme(int a[], int n) if (n== ) {

return;}

  return;}

(28.2.00 נק' )25, 4שאלה מערךA בגודל size של מספרים שלמים חיוביים

כך i < size-1 ≥ 0 אם קיים אינדקס מאוזןהינו שווה לסכום A[i] עד ל A[0]שסכום כל האיברים מ

.A[size-1] עד A[i+1]האיברים מ כלומר

האינדקסi אינדקס האיזון נקרא. כתוב פונקציה המקבלת מערךA של מס' שלמים

חיוביים וגודלו ומחזירה את אינדקס האיזון אם המערך אחרת.1מאוזן ו -

1

0 1

[ ] [ ]i size

j j i

A j A j

סעיף ב מערךA מאוזן אם 1- של מספרים חיוביים הוא

הוא מאוזן. מערךA של מספרים חיוביים הוא k מאוזן )לכל-

k>1אם הוא מאוזן )

-מאוזןA[i] (k-1) עד A[0]וגם המערך מ

-מאוזן A[size-1] (k-1) עד A[i+1]וגם המערך מ

הוא אינדקס האיזון(. i)כאשר

מאוזן3דוגמא למערך -

561111113441011156

|_______________| |__________| |___________________________| |________________|מאוזן1מאוזן -1 מאוזן -1מאוזן -1 -

|___________________________| |_____________________________________________|מאוזן2מאוזן -2 -

סעיף ב

כתוב פונקציה רקורסיבית שמקבלת מערךA של מס' חיוביים, גודלו ומס' שלם k ,

0-מאוזן, ו- k הוא A אם 1הפונקציה מחזירה אחרת.

שאלות שפתרתי בהרצאה

נקודות(13 )08/02/01מבחן הינו a[n-1] זוגי וש a[0]ידוע ש אי-זוגי.

כתוב פונקציה שמחזירה אינדקס :המקייםi)כלשהו(

הינו אי-זוגי. a[i +1] זוגי ושa[i]ש

int f(int a[ ], int n) { int low, mid, high; low = 0; high = n – 1; while( low < high-1 ) { mid = (low + high) / 2; if (a[mid] % 2 == 0)

low = mid; else high = mid; } return low;}

int main(void) {

int y=100;

x = 200;

y = blabla(&x, &y);

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

x = 300;

y = 200;

blabla(&y, &x);

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

x = 500;

printf(“blabla(&x,&x)=%d.\n”, blabla(&x, &x));

return 0;

}

#include <stdio.h<

int x=1; 

int blabla(int *p1, int *p2) {

int y = 300;

*p2 = 400;

x = x + 300;

return (*p1 + 100);

}ששאלה

ממבחן08/02/01

נקודות(10)

x=500 , y=600

x=700 , y=200

blabla(&x,&x)=800

נקודות(8 )29/01/03מבחן

void helper(int n, int m) { int i; if(n <= 1) { for(i = 0; i < m; i++) printf("%d", i); return; } helper(n/3, m*3);}

void f(int n) { helper(n, 1);}

helper(n/3, m*3);helper(n/3, m*3);helper(n/3, m*3);

מהי סיבוכיות הזמן והמקום שלf?

O(log n)מקום

O(logמקוםn)

O(n) זמן

O(n2) זמן

נקודות(16 )08/07/02מבחן נתון מערךa באורך N.הממויין בסדר עולה ממש נתון מערך דו-מימדיb בגודל NxN שכל אחת

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

אינדקס השורה שמספר האיברים בה המופיעים הוא מקסימלי (במידה ויש מספר aגם במערך

שורות כאלו, יש להחזיר אינדקס כלשהו של אחת מהן).

סיבוכיות: זמןO(N2) זכרון נוסף ,O(1) #define N 10

int f(int a[N], int b[N][N]) { …}

בדומה למיזוג

נקודות(12 )08/02/01מבחן

מוגדרת באופן הבא: הפונקציה

1)

שלםn>1ולכל (2

nf 11 f

1

1

*1n

i

infifnf

int f(int n) {

int sum=1,i;

if (n==1) return 1;

for (i=1; i<n; ++i)

sum += f(i) * f(n-i);

return sum;

}

נקודות(8 )08/07/02מבחן מגדלי הנוי עם צבעים כרגיל, אסוק שחישוק גדול יונח על גבי

חישוק קטן.n=2

n=2

פתרון

void colored_hanoi(int n, tower_t from, tower_t to_1, tower_t to_2, tower_t via) {

if (n == 0) return;

hanoi(2*n-2, from, via, to_1); move(from, to_1); move(from, to_2) colored_hanoi(n-1, via, to_1, to_2, from);}

(2.10.2002 נק' )20, 4שאלה

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

המשך

2המשך

, 4חורף תשס"א – מועד ב, שאלה נק'16

השלם את המימוש הרקוסיבי שלpivot הפונקציה מחזירה את מספר האיברים

xהקטנים מ- סיבוכיות זמןO(n)

int pivot(int a[], int n, int x) {

if ( n==0 )

return 0;

if ( a[0] < x )

return 1 + pivot(a+1,n-1,x);

if ( a[n-1] >= x )

return pivot(a,n-1,x);

swap( &a[0], &a[n-1] );

return 1+pivot(a+1, n-2, x);

}

(29.1.03 נק' )20, 1שאלה

נקודות(15 )02/10/02מבחן #define ALPHABET 4#define N 5void vectors(int word[], int index, int used[]){ int i; if(index == N*ALPHABET) { print_array(word); return; } for(i = 0; i < ALPHABET; i++) { if(used[i] < N){ word[index] = i; used[i]++; permutations(word, index + 1, used); used[i]--; } }}

כתבו תוכנית המדפיסה את כל הוקטורים באורך

N*ALPHABET

מהספרות כל אחתשבהם 0ALPHABET-1

פעמים.N בדיוקמופיעה

int a[N*ALPHABET];int used[ALPHABET]={0};permutations(a,0,used);

הפעלה:

נקודות(20 )28/02/00מבחן מטרת השאלה לכתוב תכנית שמחשבת מסלול במבוךמשבצת ההתחלה היא השמאלית-עליונהמשבצת הסוף היא הימנית-תחתונה כתבו את ההכרזה והאתחול של מערך דו-ממדי

( נק'3שמייצג את הטבלה שבדוגמא. (#define N 3#define M 6

int main() { int maze[N][M] = {

{0,0,0,1,1,0}, {0,0,0,1,1,0},{0,0,0,1,1,0} };

findPath(maze, 0, 0); return 0;}

המשך28/02/00מבחן int findPath(int maze[N][M], int x, int y) {

int success=FALSE;

if (x < 0 || x >= N || y < 0 || y >= M) return FALSE;

if (maze[x][y] == 1) return FALSE;

maze[x][y]=1;

if ( (x==N–1 && y==M–1) ||

findPath(maze, x , y – 1) ||

findPath(maze, x - 1, y ) ||

findPath(maze, x + 1, y ) ||

findPath(maze, x , y + 1) ) {

printf(“%d, %d\n”, x, y);

success = TRUE;

{

maze[x][y]=0;

return success;

}

נקודות)3מה הפלט (

נקודות)3מה ייקרה אם נוריד שורה זו (

נקודות)3מה ייקרה אם נוריד שורה זו (

(3.2.00 נק' )20, 1שאלה השלימו את שלד התכנית הנתון למטה. התכנית מקבלת כקלט

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

מסמן את סוף הסדרה )ואינו נחשב חלק ממנה(.0/1המספר מונה ואחריו –שבר מיוצג בקלט ע"י זוג מספרים שלמים חיוביים

מכנה , מופרדים ע"י '/'.:4/5 12/8 5/21 0/1 הקלט )משמאל לימין( דוגמא 2/7הפלט ניתן להניח שהקלט חוקי ושהמונה והמכנה הם מספרים חיוביים

שמסמן את סוף הסדרה(.0/1 )פרט למספר 0גדולים ממש מ-

המשך

#include <stdio.h>

struct rational {

int num, denom;

};

typedef struct rational Rational;

/* functions declarations*/

Rational calc(void);

void printRational(Rational);

int main()

{

Rational res = calc();

printRational(res);

return 0;

}

המשךint gcd(int a, int b) {…}

void printRational(Rational) {…}

Rational readRational(void) {…}

Rational reduceRational(Rational r) {

int cd = gcd(r.num, r.denom);

r.num /= cd; r.denum /= cd;

return r;

}

Rational multiplyRational(Rational r1, Rational r2) {

r1.num *= r2.num; r1.denum *= r2.denum;

return reduceRational(r1);

}

Rational calc(void) {…}

top related