פתרונות המבחן לדוגמא - יסודות מדעי המחשב
שאלה מספר 1
א. פירוק המשימה לתת-משימות.
קליטת המספר התלת סיפרתי
פירוק המספר לספרותיו
בדיקה האם הספרות זהות
הצגה כפלט של ההודעה המתאימה
ב. בחירת המשתנים והגדרת תפקידיהם וטיפוסם.
Num - מספר שלם השומר על ערך המספר שנקלט.
Units - מספר שלם השומר על ערך ספרת האחדות של המספר.
Tens - מספר שלם השומר על ערך ספרת העשרות של המספר.
Hund - מספר שלם השומר על ערך ספרת המאות של המספר.
ג. אלגוריתם מילולי
קלוט מספר והשם ב- Num
חשב את ספרת האחדות ע"י Num mod 10 והשם ב Units.
חשב את ספרת העשרות ע"י ( Num div 10 ) mod 10 והשם ב Tens.
חשב את ספרת המאות ע"י Num div 100 והשם ב Hund.
אם ( Units = Tens ) וגם ( Tens = Hund ) אזי
הצג כפלט ' ספרות זהות'
אחרת הצג כפלט ' ספרות שונות'
שאלה מספר 2
א. פלט התוכנית הוא: YzAycz .
ב. דוגמא 1: AbCAeB
דוגמא 2: abCaeB
ג. קטע התוכנית החדש:
var
Ch: char;
begin
read(Ch);
while Ch <> '.' do
begin
if (Ch='Z') then write('A')
else if (Ch = 'z') then write ('a')
else write ((succ(Ch));
read (Ch);
end;
end;
שאלה מספר 3
א. 4 . ( למעשה כל סיפרה 0 - 9 ) .
ב. 123 . ( נוצרת לולאה אין סופית ).
ג. תיקון קטע התוכנית:
writln ('הקש מספק טבעי');
readln(N);
Count :=0;
while N > 0 do
begin
N:=N div 10;
Count := Count +1;
end;
writeln (Count, ' מספר הספרות הוא');
שאלה מספר 4
א. הגדרת טיפוס הנתונים DiskType :
DiskType = record
Kind:char;
Num:integer;
Year:integer;
Price:real;
New:boolean;
end
ב. משפט התנאי המבוקש:
if (Disk.Year < 1980 ) and ( not Disk.New ) then Disk.Price := Disk.Price / 2
שאלה מספר 5
1. אינה מתאימה - Max ו- Min אינם מחזירים ערכים כמבוקש.
2. מתאימה.
3. אינה מתאימה -A מוגדר כמספר שלם ולא כמערך.
4. אינה מתאימה - חוסר התאמה בסדר של הפרמטרים.
5. אינה מתאימה - אסור להצהיר על טיפוס בפרמטר.
פרק שני
שאלה מספר 6
א. פלט הפונקציה הוא: 4
ב. הפונקציה מחזירה את מספר הזוגות של מספרים עוקבים שסכומם שווה לפרמטר K .
ג. אין צורך במערך כיוון שניתן לבדוק את סכום הזוגות תוך כדי קליטתם.
ד. הפונקציה המתוקנת:
funcion Count_k_pairs (K:integer):integer;
{ K טענת כניסה: הפונקציה מקבלת כפרמטר מספר שלם חיובי}
{טענת יציאה: הפונקציה מחזירה את מספר הזוגות של מספרים עוקבים }
{K- שסכומם שווה ל}
var
Num1, Num2, Count, I: integer;
begin
Count:=0;
writeln('הקש 10 מספרים שלמים');
readln(Num1);
for I:=1 to 9 do
begin
readln (Num2);
if (Num1 + Num2) = K then
Count:= Count +1;
Num1:=Num2;
end;
Count_k_pairs:=Count;
end; { Count_k_pairs }