מדעי המחשב

 

2 יחידות לימוד

 

 

 

הוראות לנבחן

 

 

 

א. משך הבחינה: שלוש שעות.

 

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

 

            פרק ראשון         -  בפרק זה חמש שאלות,

 

                                        ועליך לענות על כולן                   ( 5 ´ 10) -  50 נקודות

 

            פרק שני             -   בפרק זה שלוש שאלות, מביניהן

 

                                        עליך לענות על שתיים               ( 2 ´ 15 ) - 30  נקודות

 

פרק שלישי         -   בפרק זה שתי  שאלות, מביניהן

 

                                        עליך לענות על אחת בלבד           ( 1 ´ 20 ) - 20  נקודות

 

ג. חומר עזר מותר בשימוש: כל חומר עזר  ( פרט למחשב הניתן לתכנות )

 

ד. הוראות מיוחדות: אין

 

 

 

 

 

פרק ראשון ( 50 נקודות )

 

ענה על כל השאלות 1 - 5 ( לכל שאלה - 10 נקודות ).

 

 

 

שאלה  1

 

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

 

 מור מנחש את המספר המדרגות בבניין.

 

א.      תן דוגמא לניחוש מוצלח של מור.

 

ב.      תן דוגמא לניחוש לא מוצלח של מור, נמק .

 

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

 

 

 

שאלה  2

 

נתונות ההצהרות הבאות:

 

var

 

Check : boolean;           

 

            Num1,Num2,Num3 : integer;                      

 

 

 

לפניך  שלושה  זוגות של קטעי תכניות.  קבע לכל  זוג האם קטעי ההוראות שקולים.

 

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

 

זוג א'

 

 if  not (Num1 = Num2) then                   if  (Num1 = Num2)  then

 

     writeln (‘no’)                                        writeln (‘yes’)         

 

   else                                                      else

 

               writeln (‘yes’);                                        writeln (‘no’);

 

 

 

זוג ב'

 

 if  Num1 < Num2 then                           if  (Num1 < Num2)  and                                                                         

 

        if Num1< Num3 then                           (Num1 < Num3) then                                                               

 

           writeln (‘yes’)                                       writeln (‘yes’)   

 

       else                                                  else

 

                    writeln (‘no’);                                        writeln (‘no’);

 

                                   

 

זוג ג'

 

  Check := (Num1 + Num2) <  15 ;           if  (Num1 + Num2) > 15  then         

 

  if Check then                                             Check:= false

 

                writeln (‘yes’)                            else

 

  else                                                                       Check:= true;

 

       writeln (‘no’);                         if  Check then

 

                                                                      writeln (‘yes’)

 

                                                                 else

 

                                                                      writeln(‘no’);

 

 

 

שאלה  3

 

כל  ספר בחנות  "ספרנו" מאופיין על-ידי הנתונים הבאים:

 

-                                  קוד הספר (1-1000)

 

-                                  מחיר קטלוגי 

 

-                                  מספר עותקי הספר בחנות בתחילת החודש

 

-                                  מספר עותקי הספר בחנות בסוף החודש

 

 

 

א.               הגדר את טיפוס הנתונים Book .

 

ב.                נתונה ההצהרה:        ; var  OneBook : Book

 

          כתוב ביטוי חשבוני שמחשב את סכום המכירה החודשית של  OneBook .

 

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

 

ג.                 בחנות 1400 ספרים. הגדר טיפוס נתונים All_Books , אשר מייצג את אוסף  כל הספרים בחנות.

 

 

 

שאלה  4

 

נתונה התכנית הבאה:

 

program Ques (input, output);

 

                                                                                    var

 

            Num1, Num2 :integer;

 

              procedure Pro (var A:integer; B:integer );

 

              {טענת כניסה: שני מספרים שלמים   }

 

             {טענת יציאה:  ...                          }

 

              begin

 

                                 A:= A + B;

 

                        B:= A - B;

 

               end; }Pro}

 

begin               {חלק ראשי}

 

         writeln('הקש שני מספרים שלמים’);

 

         readln (Num1, Num2);

 

         Pro (Num1, Num2);

 

         writeln(Num1, Num2);

 

end. {Ques}

 

 

 

א.  מה יהיה פלט התכנית עבור הקלט 8 4 ? (כלומר המספר 8 נקלט ל-Num1, והמספר 4 נקלט  ל- Num2).

 

ב.      נשנה את כותרת הפרוצדורה ל:

 

       ;( procedure Pro (A:integer; var B:integer  

 

תן דוגמא לערכי קלט התכנית  כך שפלט התכנית הוא: 7  7 .

 

 

 

שאלה  5

 

נתונות ההצהרות הבאות:

 

const  N=7;

 

type

 

           Array_Type=array[1..N] of integer;

 

ונתונה הפונקציה הבאה:

 

function Compare (M1, M2:Array_Type) : boolean;

 

            {          מערכים עם ערכים תחיליים                      M1,M2 {טענת כניסה:

 

              {טענת יציאה: הפונקציה מחזירה true אם כל  איברי המערכים שווים       }

 

              {                  בהתאמה ו-false אחרת                                               }         

 

var

 

                  I : integer;

 

begin

 

         Compare:=false;

 

         for I:=1 to N do

 

                   If M1[I]=M2[I] then

 

                               Compare:=true;

 

end; {Compare}

 

 

 

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

 

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

 

ג.                             תקן במחברתך את הפונקציה כך שתקיים את טענת היציאה.

 

         

 

פרק שני ( 30 נקודות)

 

ענה על שתיים מבין השאלות 6 - 8 (לכל שאלה - 15 נקודות).

 

 

 

שאלה 6

 

נתונות ההצהרות הבאות:

 

      const N=5;

 

      type Mattype=array [1..N, 1..N] of integer;

 

 

 

נתונה הפרוצדורה הבאה:

 

      procedure Out (Mat: Mattype; Low: integer; High: integer);

 

 {טענת כניסה: מערך דו מימדי Mat  עם ערכים תחיליים ומספרים Low , High  }        

 

 {                  כך ש-   1<=Low<=High<=N                                            }

 

 {טענת יציאה :                                                                                          }

 

      var

 

Row, Col: integer;

 

      begin

 

for Row:=High downto Low do

 

        write (Mat[Row,Low]);

 

Col:=Low+1;

 

While Col<=High do

 

 begin

 

        write (Mat[Low,Col]);

 

         Col:=Col+1;

 

 end;

 

 for  Row:=Low+1 to High  do

 

         write (Mat[Row,High]);

 

      end; {Out}

 

 

 

 

 

נתון מערך דו מימדי  M :

 

4

38

1

18

89

56

71

23

88

10

23

9

22

6

37

17

50

56

34

91

86

21

45

41

27

א.                  מהו הפלט שיוצג  בעקבות הזימון:      Out(M,2,4);

 

ב.                   מהו הפלט שיוצג  בעקבות הזימון:      Out(M,1,4);

 

ג.                   השלם את טענת היציאה של הפרוצדורה.

 

 

 

 

 

 

 

שאלה 7

 

א. נתונה כותרת הפונקציה הבאה:

 

            function SortDigit (Number : integer) : boolean;

 

 {טענת-כניסה: Number מספר שלם חיובי                                             }

 

 {טענת-יציאה: הפונקציה מחזירה true אם Number מורכב                       }

 

 {                  מספרות בסדר עולה ממש ( משמאל לימין ) ו- false  אחרת        }

 

לדוגמא:  עבור המספר 2589 תחזיר הפונקציה ערך true.  עבור המספר 287 תחזיר הפונקציה ערך false.

 

השלם את גוף הפונקציה.

 

 

 

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

 

     דוגמה: עבור הקלט  5  ל- N   ורשימת המספרים:  2867  2589  300 158  22   5729

 

                       הפלט יהיה: 2589  (מבין 2589 ו  158)

 

    הערה: העזר בפונקציה שפותחה בסעיף א'.

 

 

 

שאלה  8

 

נתונה כותרת הפונקציה הבאה:

 

function Make_reservation (Day, N: Integer) : Integer;

 

  {טענת כניסה: הפרמטר Day מייצג יום בשבוע של הזמנת האירוח      }

 

  {                  בבית מלון  (שלם בין 1 7 )  והפרמטר N  מייצג את   }

 

  {                  מספר הימים שלאחריהם תתבצע ההזמנה (שלם חיובי) }

 

  { טענת יציאה: יום בשבוע של הגעת האורחים (שלם ביו 1-7)            }

 

 

 

  לדוגמה: עבור הפרמטרים  6=Day  ו-  3= N הפונקציה תחזיר 2 (יום שני בשבוע  

 

             של הגעת האורחים).

 

 הערה: היום שבו התקבלה ההזמנה אינו כלול ב- N.  

 

א. תן  שתי דוגמאות  לערכים שונים של Day ו- N  עבורן תחזיר  הפונקציה 5 .

 

ב. תן שתי דוגמאות  לערכים שונים של  N  כך שאם ערכו של Day   הוא 3

 

    תחזיר הפונקציה  7 .

 

ג . השלם  את גוף הפונקציה.

 

 

פרק שלישי ( 20 נקודות)

ענה על אחת מבין השאלות 9 - 10 (20 נקודות).

שאלה 9

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

קלט האלגוריתם הוא: שלשות מספרים המייצגים מספר סידורי של היום ( 5..1), מספר הסדנא (6..1) ומספר המשתתפים בסדנא. סדרת הקלט מסתיימת בזקיף של שלושה אפסים.

פלט האלגוריתם הוא:

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

ב.      הודעה האם ישנה סדנא ביום השלישי,  עבורה אין כל ביקוש.

 

1.       בחר משתנים עיקריים, הגדר את טיפוסיהם ותאר את תפקידיהם.

2.       בצע פירוק של הבעיה לתת-משימות, כך שכל תת-משימה תיפתר באמצעות פרוצדורה או פונקציה.

3.       כתוב תוכנית בשפת פסקל לפתרון הבעיה על פי פתרונך בסעיפים א' ו- ב'. הקפד לציין בכל פונקציה ופרוצדורה טענות כניסה ויציאה מפורטות.

 

שאלה 10

שחקן זוכה בהגרלת ה"לוטו" אם הצליח לנחש ששה מספרים שעלו בגורל מתוך 49 מספרים. השחקן מעונין להעלות את סיכוייו לנצח. לשם כך פיתח אלגוריתם שיעלה את סיכוייו לנצח. השחקן קלט את נתוני תוצאות חמשת המחזורים האחרונים והחליט שבמשחק הבא יבחר שישה מספרים אקראיים מתוך המספרים שלא עלו אף פעם בגורל בחמשת המחזורים האחרונים.

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

הפלט הוא: שישה מספרים אקראיים שונים מתוך המספרים שלא עלו בגורל.

 

1.       בחר משתנים עיקריים, הגדר את טיפוסיהם ותאר את תפקידיהם.

2.       בצע פירוק של הבעיה לתת-משימות, כך שכל תת-משימה תיפתר באמצעות פרוצדורה או פונקציה.

3.כתוב תוכנית בשפת פסקל לפתרון הבעיה על פי פתרונך בסעיפים א' ו- ב'. הקפד לציין בכל פונקציה ופרוצדורה טענות כניסה ויציאה מפורטות.

 

בהצלחה !!!