בחינה לדוגמה - יסודות מדעי המחשב
מדעי המחשב
2 יחידות לימוד
הוראות לנבחן
א. משך הבחינה: שלוש שעות.
ב. מבנה השאלון ומפתח ההערכה: בשאלון זה שלושה פרקים.
פרק ראשון - בפרק זה חמש שאלות,
ועליך לענות על כולן. ( 5 ´ 10) - 50 נקודות
פרק שני - בפרק זה שלוש שאלות, מביניהן
עליך לענות על שתיים ( 2 ´ 15 ) - 30 נקודות
פרק שלישי - בפרק זה שתי שאלות, מביניהן
עליך לענות על אחת בלבד ( 1 ´ 20 ) - 20 נקודות
ג. חומר עזר מותר בשימוש: כל חומר עזר ( פרט למחשב הניתן לתכנות )
ד. הוראות מיוחדות: אין
בהצלחה !!!
פרק ראשון ( 50 נקודות )
ענה על כל השאלות 1 - 5 ( לכל שאלה - 10 נקודות ).
שאלה 1
יש לפתח אלגוריתם אשר הקלט שלו הוא מספר שלם חיובי תלת ספרתי, והפלט שלו הוא 'ספרות זהות' אם כל ספרות המספר זהות ו 'ספרות שונות' אם לא כל הספרות זהות.
לדוגמה: עבור הקלט 555 הפלט יהיה 'ספרות זהות'
עבור הקלט 525 הפלט יהיה 'ספרות שונות'
I. פרק את המשימה המתוארת בבעיה לתת-משימות.
II. בחר משתנים והגדר את תפקידו וטיפוסו של כל משתנה.
III. כתוב אלגוריתם מילולי לפתרון.
שאלה 2
נתון קטע תוכנית שהקלט שלו הוא אותיות קטנות וגדולות מהא"ב הלועזי. הקלט מסתיים בנקודה.
var
Ch: char;
begin
read(Ch);
while Ch <> '.' do
begin
if (Ch='A') or (Ch='a') then write('z')
else write ((pred(Ch));
read (Ch);
end;
end;
א. מהו פלט קטע התוכנית עבור הקלט ZaBzdA ?
ב. תן שתי דוגמות קלט שונות שעבור כל אחת מהן יהיה הפלט zaBzdA ?
ג. שנה את קטע התוכנית כך שעבור כל אות קלט תוצג כפלט האות העוקבת בצורה מעגלית.
(כאשר 'a' עוקבת ל 'z' ו- 'A' עוקבת ל- 'Z' )
שאלה 3
לפניך קטע תוכנית שמטרתו למנות את מספר הספרות במספר שלם חיובי. קטע התוכנית שגוי.
writln ('הקש מספק טבעי');
readln(N);
Count :=1;
while (N div 10) > 0 do
Count := Count +1;
writeln (Count, ' מספר הספרות הוא');
א. הבא דוגמת קלט שעבורה יתקבל הפלט הדרוש.
ב. הבא דוגמת קלט שעבורה לא יתקבל הפלט הדרוש.
ג. תקן את קטע התוכנית כך שישיג את מטרתו עבור כל קלט ( מספר שלם חיובי ).
שאלה 4
חברת דיסקים החליטה לשמור את הנתונים של הדיסקים למוסיקה לריקודים בצורה מסודרת.
הנתונים לכל דיסק הם:
סוג המוסיקה: (R - רוק, P - פופ, D - דנס, T - טרנס)
מספר דיסק ( 1..150 )
שנת הוצאה
מחיר קטלוגי ( 50-120 )
עבוד מחודש ( כן/לא )
I. הגדר טיפוס הנתונים DiskType לשמירת נתונים אלה.
II. נתונה ההצהרה: Disk : DiskType var
כתוב משפט if שיוריד את המחיר של Disk במחצית אם שנת ההוצאה שלו קודמת ל- 1980 ולא נעשה לו עיבוד מחדש.
שאלה 5
נתונות ההגדרות הבאות:
;const N=50
type ArrayType=array[1..N] of integer;
var A:ArrayType;
Max,Min:integer;
ונתונה כותרת הפרוצדורה:
procedure MaxMin (________________________________________________);
{ טענת כניסה : הפרוצדורה מקבלת כפרמטר מערך מטיפוס ArrayType
{ טענת יציאה : הפרוצדורה מחזירה ב- Max וב- Min את האיבר הגדול ביותר }
{ והאיבר הקטן ביותר במערך בהתאמה. }
ויש לזמן את הפרוצדורה בצורה הבאה:
MaxMin (A , Max , Min)
ציין עבור כל אחת מכותרות הפרוצדורה הבאות אם היא מתאימה למילוי המטרה. נמק בקצרה את קביעתך.
;( 1procedure MaxMin( B : ArrayType ; Maxi , Mini : integer
2.procedure MaxMin( B : ArrayType ; var Maxi : integer; var Mini : integer);
3.procedure MaxMin( A :integer ; var Maxi :integer; var Mini : integer);
4.procedure MaxMin( var Maxi : integer; var Mini : integer ; B : ArrayType );
5.procedure MaxMin( B: array[1..N] of integer ; var Maxi : integer; var Mini : integer);
פרק שני ( 30 נקודות)
ענה על שתיים מבין השאלות 6 - 8 (לכל שאלה - 15 נקודות).
שאלה 6
לפניך פונקציה:
funcion Count_k_pairs (K:integer):integer;
{ K טענת כניסה: הפונקציה מקבלת כפרמטר מספר שלם חיובי}
{________________________________________:טענת יציאה}
var
Num, Count, I: integer;
A:array[1..10] of integer;
begin
writeln('הקש 10 מספרים שלמים');
for I:=1 to 10 do
readln (A[I]);
Count:=0;
for I:=1 to 9 do
if (A[I] +A[I+1]) =K then
Count:=Count+1;
Count_k_pairs:=Count;
end; { Count_k_pairs }
I. מה יהיה פלט הפונקציה עבור הערך 15 כפרמטר והקלט : 10 5 8 7 8 4 14 1 3 9
II. השלם את טענת היציאה של הפונקציה.
III. הפונקציה מבצעת את החישוב הדרוש באמצעות מערך. נמק מדוע אין צורך בכך?
IV. כתוב את הפונקציה, כך שהחישוב יתבצע ללא מערך.