
1. מה המשמעות המקובלת בתכנות של המילה VOID?
2. מה המשמעות המקובלת בתכנות של int?
5. נתונה הפונקציה הבאה, בסביבת 16bit: ב - C:
int f(unsigned char a, unsigned char b, unsigned char c)
{
return ((a*b)/c) == (a*(b/c));
}
בפסקל:
function f(a, b, c : byte) : boolean;
var
a0, b0, c0 : word;
begin
a0 := a; b0 := b; c0 := c;
f := ( ((a0*b0) div c0) = (a0*(b0 div c0)) );
end;
פונקציה זו תחזיר "אמת" אם ורק אם:
7. דני ניסה לחשב ממוצע של רשימה של N מספרים (N > 2) בצורה הבאה: הוא חישב את הממוצע של שני המספרים הראשונים, ואז את הממוצע של התוצאה עם המספר השלישי, ואת הממוצע של התוצאה החדשה עם המספר הרביעי וכך הלאה. למרות ששיטה זו לחישוב ממוצע אינה נכונה בעוד שלדני לא היו טעויות חישוב, המורה (שיודע לחשב ממוצע בצורה נכונה) בדק את התוצאה ושיבח את דני על התשובה הנכונה. דני, שחשד שהשיטה שלו אינה נכונה עבור המקרה הכללי, החליף את אחד המספרים במספר אחר (וסיפר על כך למורה), חישב את הממוצע החדש (בדרכו השגויה), וביקש מהמורה שיבדוק את התוצאה. אך איזה פלא - שוב שיבח המורה את דני על התוצאה הנכונה! איזה טענה נכונה בהכרח?
8. על גבי תמונה ברזולוציה של 8x8, פלטתי 64 פיקסלים, כל אחד במקום אקראי ובלתי תלוי. מהו הסיכוי שמילאתי בדיוק מחצית מהפיקסלים שבתמונה?
9. נתון הפסאודו-קוד הבא (עם שלוש פונקציות חסרות): א <- 1000000000
כל-עוד (אמת) בצע:
אם ק, אזי:
א <- 1000000000
בצע פ
אם א שווה ל - 0, אזי:
בצע ס
א <- 1-א
למה סביר להניח שהוא מיועד:
10. (*) הפונקציה הבאה אמורה להחזיר את המיקום של האיבר שערכו x במערך A שמכיל N איברים ממוינים בסדר עולה (ומכיל איבר שערכו x). אבל יש בה באג. ב - C:
int get_index(int x, int A[], int N)
{
int L = 0, H = N-1;
while (L != H) {
int M = (L+H)/2;
if (x >= A[M])
L = M;
else
H = M-1;
}
return L;
}
בפסקל (כאשר האיבר הראשון במערך A הוא האיבר במיקום ה - 0):
function get_index(x : integer; A : array of integer; N : integer) : integer;
var
L, H, M : integer;
begin
L := 0; H := N-1;
while L <> H do
begin
M := (L+H) div 2;
if x >= A[M] then
L := M
else
H := M-1;
end;
get_index := L;
end;
עבור כמה ערכים של N, הפונקציה, בכל זאת, תחזיר תשובה נכונה תמיד?
11. מה עושה קטע הקוד הבא בשפת אסמבלי בסביבת 16bit?: mov bx, offset var_ptr
xor ax, ax
l:
xchg [bx], ax
or ax, ax
jz l
12. מה עושה קטע הקוד הבא בשפת אסמבלי בסביבת 32bit?: xor ebx, ebx
start:
test eax, eax
jz end
xchg ebx, [eax]
xchg ebx, eax
jmp start
end:
13. מהן שלוש הפונקציות הבאות בשפת C:
void a(type1* s)
{
p[0] = (type2*) malloc(sizeof(type2));
p[1] = (type2*) malloc(sizeof(type2));
p[0].a = p[1]; p[1].a = p[0];
p[1].b = s;
}
|
void b(type1* s)
{
type2* n = (type2*) malloc(sizeof(type2));
p[0].b = s;
n.a = p[0]; p[0].a = p[1]^n;
p[1] = p[0]; p[0] = n;
}
|
int c(int d)
{
if (p[!d].a != p[d]) {
p[d] ^= p[!d].a;
swap(p[d], p[!d]);
return 1;
}
return 0;
}
|
16. למה משמשות שלוש הפונקציות הבאות:
| בשפת C |
בשפת פסקל |
void a()
{
x1 = x2 = 0;
}
|
procedure a;
begin
x1 := 0;
x2 := 0;
end;
|
int b()
{
if (x1) return F[--x1];
return x2++;
}
|
function b : integer;
begin
if x1 <> 0 then
begin
x1 := x1 - 1;
b := F[x1];
end
else
begin
b := x2;
x2 := x2 + 1;
end;
end;
|
void c(int x)
{
F[x1++] = x;
}
|
procedure c(x : integer);
begin
F[x1] := x;
x1 := x1 + 1;
end;
|
17. (*) נתונה הפונקציה הבאה בסביבת 32bit: ב - C:
unsigned int div_by_17(unsigned int a)
{
return (MUL*a)>>SHIFT;
}
ניתן למצוא ערכים של MUL ו - SHIFT עבורם ערך החזרה של הפונקציה יהיה a חלקי 17 (מעוגל כלפי מטה), בהנחה ש - 16 הביטים העליונים של a כבויים.
מצא ערך מתאים של MUL:
19. (**) המורה של דני השתמש בשיטה הבאה כדי לכווץ הודעה המורכבת מ - 26 אותיות ה - ABC (אותיות גדולות בלבד): הגדרה:
מילון0 הוא מילון היודע לקחת מחרוזת ולמצוא מספר שהותאם לה קודם לכן
(או להגיד שעדיין לא הותאם לה מספר)
עבור כל אות מה - ABC, בצע:
התאם למחרוזת המכילה את האות הזו בלבד את האינדקס שלה ב - ABC
(כלומר, ל - "A" יותאם 1 ול - "Z" יותאם 26)
הכנס למשתנה קוד0 את המספר 26
קרא את התו הראשון מהמסר ושמור אותו ב - מחרוזת0
כל עוד ישנם עדיין תווים במסר שלא נקראו, בצע:
קרא את התו הבא מהמסר ושמור אותו ב - תו0
הכנס ל - מחרוזת1 את מחרוזת0 עם תו0 משורשר בסופה
אם כבר הותאם מספר ל - מחרוזת1 ב - מילון0 אזי:
החלף את הערך של מחרוזת0 בערך של מחרוזת1
אחרת:
פלוט את המספר שהותאם ל - מחרוזת0 לפי מילון0
הוסף אחד לערך של קוד0
התאם במילון0 את המספר קוד0 למחרוזת מחרוזת1
החלף את הערך של מחרוזת0 בערך של תו0
פלוט את המספר שהותאם למחרוזת0 לפי מילון0
המסר המכווץ נראה כך (משמאל לימין):
דני רוצה לפענח את המסר, בתקווה שמשמעותו היא שהמורה מבטל את השיעור הקרוב. עזרו לדני!
מהו המסר המקורי אותו כיווץ המורה?
20. נתונות שתי דרכים לממש פונקציה מסוימת: ב - C:
unsigned int f1(unsigned int n)
{
unsigned int x = 1;
for (unsigned int i = 1; i <= n; i++) {
x *= i;
}
return x;
}
unsigned int f2(unsigned int n)
{
if (n == 0) return 1;
return n*f2(n-1);
}
בפסקל:
function f1(n : word) : word;
var
x, i : word;
begin
x := 1;
for i := 1 to n do x := x*i;
f1 := x;
end;
function f2(n : word) : word;
begin
if n = 0 then f2 := 1
else f2 := n*f2(n-1);
end;
בחר את הטענה הנכונה:
21. מה הקשר בין d – ממוצע הזמן בדקות בין פגיעת שני מטאורים, לבין m – ממוצע מספר המטאורים הפוגעים בדקה?
22. אם תוכנת המגב (וישר) של מכונית פועלת על ידי מצמוץ אם ורק אם מספר השניות מאז 1.1.1970 מתחלק ב-d, כאשר d הוא מספר שלם בין 1 ל-10 הניתן לכיוונון על ידי הנהג. מהו קצב המצמוץ האיטי ביותר שניתן להשיג אם הנהג יכול לשנות את d כל שניה?
23. אני מחפש ספגטי מסוים בסופרמרקט, יש לי את ה-Bar-Code שלו ואני מנסה להשוות מול המוצרים שעל המדף. איזו שיטה יעילה יותר?
25. להלן אלגוריתם הפעולה של מיקרוגל start:
time = 0
loop:
if (time == 0 and program_time) time = user_input
if (time > 0) {heat; time--; wait_a_second; if (time == 0) beep_end}
goto loop
On cancel_pressed Interrupt:
if (time>0) beep_abort; time=0
goto loop
האם ניתן לעצור את המיקרוגל מרגע שהחל לחמם מבלי לצפצף?
26. האם יכול להיות ש-30% מהגברים בגילאים 30 עד 40 הם רווקים ו-40% מהגברים בגילאי 40 עד 50 הם רווקים?
27. לפני קו עצירה של רמזור יש מספר גלאי מתכת. מה יקרה אם תוכנת הרמזור מתחשבת רק בגלאי המרוחק ביותר מהרמזור המגלה מתכת?
28. מה מחשבת הנוסחא הבאה? (x0*y1-x1*y0)/sqrt((x0*x0+y0*y0)*(x1*x1+y1*y1))
29. מה מחשב הקטע הבא xm=0
for x = 0 to 100 {
xx = x*(y2-y1)/sqrt((x*x+y1*y1)*(x*x+y2*y2))
if (xx > xm) xm = xx; a=x
}
30. נתון קטע הקוד (החסר) הבא בשפת C++: class A { ... };
class B { ... };
class C { ... };
class Container {
Container() : a(), c(), b() {
c.start();
b.start();
a.start();
}
A a;
B b;
C c;
};
כאשר יוצרים מופע של המחלקה Container, באיזה סדר ייקראו הבונים (constructors) של האובייקטים המוכלים a, b, c?
31. כיצד ניתן לבצע TLB Priming?
32. (*) מה תחזיר התוכנית הבאה? ב - C:
int f(int p, int p1)
{
int i,j,i1,j1;
i =p >>3; j =p &7;
i1=p1>>3; j1=p1&7;
return (i-i1)*(i-i1)+(j-j1)*(j-j1) == 5;
}
בפסקל:
function f(p, p1 : integer) : boolean;
var
i, j, i1, j1 : integer;
begin
i := p shr 3; j := p and 7;
i1 := p1 shr 3; j1 := p1 and 7;
f := (i-i1)*(i-i1)+(j-j1)*(j-j1) = 5;
end;
34. מה ספרת העשרות הנפוצה בין מליון חזקות 2 הראשונות?
35. מה הספרה הנפוצה ביותר כספרה ראשונה (Most Significant) בין מיליון חזקות 2 הראשונות?
36. מה מיוחד במספר 26334878?
37. מדוע השורה הבאה בשפת C גורמת לתוכנית לקרוס בארכיטקטורת x86? void*x=(*((void*(*)())&(x=(void*)0xfdeb58)))();
38. מה זה 2001:0db8:85a3:08d3:1319:8a2e:0370:7334?
39. איזו מהאפשרויות הבאות אינה מבנה נתונים ידוע?
41. מה המקור של הביטוי SPAM?
42. לאחר הרצת הקוד הבא בשפת C: FILE* fp = fopen("1.txt", "w");
char ch = 0xa;
fwrite(&ch, sizeof(ch), 1, fp);
fclose(fp);
גודל הקובץ שנוצר היה שני בתים ולא בית אחד, מדוע?
43. (***) מה עושה הפונקציה הבאה, למה זה שימושי? ב - C:
int B[1<<7];
void f()
{
int c, i, j;
for (c = 0; c < (1<<7); c++) {
if (B[c] == 0) {
printf("%d\n", c);
B[c] = 1;
for (i = 1<<6; i != 0; i >>= 1) {
for (j = 1<<6; j != 0; j >>= 1) {
B[c^(i|j)] = 1;
}
}
}
}
}
בפסקל:
var
b : array[0..(1 shl 7)] of integer;
procedure f;
var
i, j, c : integer;
begin
for c := 0 to (1 shl 7)-1 do
begin
if B[c] = 0 then
begin
writeln(c);
B[c] := 1;
i := 1 shl 6;
while i <> 0 do
begin
j := 1 shl 6;
while j <> 0 do
begin
B[c xor (i or j)] := 1;
j := j shr 1;
end;
i := i shr 1;
end;
end;
end;
end;
44. (****) מה עושה הפונקציה הבאה: ב - C:
int O[4] = {1, -1, 128, -128};
void f(unsigned char A[1<<14], int B[1<<14])
{
int C[1<<8] = {0x3F7E};
unsigned char X = 0, Y = 1;
int j, m;
for (j = 0; j < 1<<14; j++)
B[j] = -1;
while (X != Y) {
int c = C[X++];
for (j = 0; j < 4; j++) {
m = c + O[j];
if ((A[m] == 0) && (B[m] == -1) && (m != B[c]))
{B[m] = c; C[Y++] = m; }
}
}
}
בפסקל:
const
O : array[0..3] of integer = (1, -1, 128, -128);
type
typeA = array[0..(1 shl 14)-1] of byte;
typeB = array[0..(1 shl 14)-1] of integer;
procedure f(var a : typeA; var b : typeB);
var
C : array[0..(1 shl 8)-1] of integer;
X, Y : byte;
j, m, k: integer;
begin
C[0] := $3F7E;
X := 0; Y := 1;
for j := 0 to (1 shl 14)-1 do
B[j] := -1;
while (X <> Y) do
begin
k := C[X]; X:=X+1;
for j := 0 to 3 do
begin
m := k + O[j];
if (A[m] = 0) and (B[m] = -1) and (m <> B[k]) then
begin
B[m] := k; C[Y] := m; Y:=Y+1;
end;
end;
end;
end;
|
|
|
|