|
דוגמאות
לתרגילים ( כולל פתרונות) |
|
|
|
1. כתוב תכנית הקולטת
מספר למשתנה N ולאחריו N
מספרים שלמים ומדפיס את כמות המספרים המתחלקים ב3- ללא שארית. |
|
2. כתוב ביטוי בוליאני המייצג את התנאי
הבא: |
|
ספרת העשרות
במספר NUM שווה לספרת האחרות בו והמספר גדול מ50-. |
|
(המספר NUM הוא דו ספרתי) |
|
|
|
3.
נתון קטע התוכנית: |
|
I:=24; |
|
while I>0 DO |
|
begin |
|
writeln(I); |
|
I:=I-4; |
|
end; |
|
א.
מה יהיה הפלט לקטע התוכנית (5 נקודות). |
|
ב כתוב קטע תוכנית שקול שבו מופיע המשפט REPEAT והפלט זהה לפלט הקטע הנתון. |
|
|
|
4.
נניח כי בתכנית מופיעה ההצהרה הבאה: VAR LIST:ARRAY[1..100] OF CHAR |
|
כתוב קטע תכנית המשים את הערך 'A' לכל האיברים במערך עם המציין האי זוגי (כלומר :[1]LIST, [3]LIST, [5]LIST.. יהיו בעלי הערך התחילי 'A'),
ראה הערך 'B' לכל האיברים במערך עם המציין
הזוגי. |
|
|
|
5.
התבונן בהצהרות ובקטע התוכנית הבא: |
|
var Num, Sum: integer; |
|
Sum:=0; |
|
Num:=1; |
|
while
Num 20 do |
|
begin |
|
writeln(Num); |
|
Sum:=Sum+Num; |
|
Num:=Num+2; |
|
end; |
|
writeln(Sum,
' :'סכום המספרים
); |
|
|
|
קטע התוכנית אמור
להדפיס את המספרים האי-זוגיים מ0- עד 20 ואת סכומם. |
|
|
|
א.
בקטע נפלה שגיאה, מהי השגיאה? |
|
ב.
ב. תקן את קטע התכנית כך שיבצע את משימתו |
|
ג.
|
|
6 . כתוב תוכנית המדפיסה את כל המספרים בני 3 ספרות המקיימים את
התנאי הבא: |
|
סכום ספרת
העשרות והמאות שווה לרבוע ספרת האחדות. |
|
אם המספר מקיים את התנאי התוכנית תדפיס אותו. |
|
דוגמה: המספר 543 מקיים את התנאי: 32=9=5+4 (15
נקודות) |
|
|
|
7 . הנח כי בתכנית הופיעו ההגדרות וההצהרות הבאות: |
|
type Positive=1..maxint; |
|
var Num:Positive; |
|
Function Sum0fDigit(Num:Positive):Positive; |
|
הנח כי הפונקציה SumOfDigit
מקבלת מספר שלם חיובי ומחזירה את סכום ספרותיו. |
|
א מהו הערך שתחזיר הפונקציה אם ערך
הפרמטר Num הוא 45 ו376-. |
|
ב נניח שהפונקציה מחזירה את
הערך 9, תן שתי דוגמאות לערך הפרמטר Num. |
|
ג כתוב קטע תכנית הקולטת
סדרה של מספרים חיוביים, סוף הסדרה מצוינת ע"י מספר שלילי, ומדפיסה כל מספר
המתחלק בסכום ספרותיו וכמו כן מדפיסה את כמות המספרים המקיימים תנאי זה. |
|
לדוגמא: סדרת המספרים - 18 103 83 550 110 4000 |
|
המספרים 18
550 110 ו4000- מתחלקים בסכום ספרותיהם לכן
הפלט יהיה: |
|
4000
110 550 18 |
|
כמות המספרים מתחלקים בסכום ספרותיהם: 4 |
|
הערה:
אין צורך לכתוב את הפונקציה. |
|
|
|
8 . נתונה התכנית הבאה: |
|
Program Confusion; |
|
var X, Y:integer; |
|
procedure F(X:integer; var Y: integer); |
|
begin |
|
X:=X-Y; |
|
Y:=X+Y; |
|
end; (F) |
|
begin |
|
read(X,Y); |
|
F(X,Y); |
|
Writeln(X,Y); |
|
end |
|
א. מה יהיה פלט התכנית Confusion כאשר הקלט הוא 2
5 (כלומר המספר 5 מושם
במשתנה X והמספר 2 מושם במשתנה Y ). |
|
ב. מה יהיה פלט התכנית Confusion כאשר הקלט הוא 2
5 וכותרת הפרוצדורה משתנה
ל-(procedure
F(X,Y:integer ) |
|
ג. מה יהיה פלט התכנית Confusion כאשר הקלט הוא 2
5 וכותרת הפרוצדורה משתנה
לvar
X,Y:integer)- ) F procedure . |
|
|
|
9. הנהלת בית הספר החליטה להפיק דו"ח
מעקב הישגי התלמידים במקצוע מחשבים. לצורך זה אתה מתבקש לכתוב תכנית הקולטת את ציוני התלמידים במחשבים
בשכבת כיתות י' (בשכבה קיימים 200 תלמידים) ומדפיסה את כל הציונים הקטנים
מהממוצע. |
|
|
|
א. נסח את הבעיה
העומדת בפני ההנהלה כבעיה אלגוריתמית, כלומר, תאר במדויק את הקלט והפלט
לאלגוריתם המבוקש . |
|
ב. בסעיף זה עליך לחשוב
על אלגוריתם לפתרון הבעיה שניסחת בסעיף א' ולענות רק על השאלה הבאה: |
|
מהם המשתנים או המערכים העיקריים שבהם תשתמש בכתיבת האלגוריתם? לכל משתנה
או מערך ציין את שמו ואת טיפוסו, והגדר במשפט אחד את תפקידו.
|
|
ג. כתוב תוכנית בפסקל המממשת את הבעיה
והיעזר בתשובתך בסעיף ב' |
|
|
|
10. במפעל נעלים ארבע מחלקות יצור: |
|
מחלקה 1 - נעלי נשים |
|
מחלקה 2 - נעלי גברים |
|
מחלקה 3 - נעלי
ילדים |
|
מחלקה 4 - נעלי
ספורט |
|
לכל סוג נעל קיים מספר בקטלוג המורכב מ3- ספרות. ספרת המאות
מציינת את קוד המחלקה (1-4) ושאר שתי הספרות מציינות את קוד המוצר. |
|
דוגמא: המספר 354 בקטלוג מציין נעל ילדים אשר קוד המוצר שלה הוא
54. |
|
|
|
כתוב תכנית הקולטת רשימה של מספרי קטלוג של נעלים אשר נמכרו
בחודש האחרון. הרשימה מסתיימת במספר 0. הנח כי הקלט תקין. |
|
על התכנית להדפיס את מספר זוגות הנעלים שמכרה כל מחלקה במשך
החודש ואת מספר זוגות הנעלים שמכר המפעל. |
|
עליך להשתמש בפונקציה Hundred
המחזירה את ספרת המאות של מספר חיובי שלם בין 3 ספרות. (20 נקודות). |
|
|
|
|
פתרונות התרגילים
|
|
Program Number; .1 |
|
ver N, I, num: integer; |
|
begin |
|
writln(('הקש מספר שלם'
; |
|
readln (N); |
|
for 1:=1 to N do |
|
begin |
|
read(num); |
|
if num mod 3 =
0 then |
|
counter:=counter + 1; |
|
end; |
|
writeln(counter, ' : ('מספר
המספרים המתחלקים ב3- ; |
|
end. |
|
(num mod 10 = num div 10) and (num 50)
.2 |
|
|
|
3.
א. פלט התכנית: 24 |
|
20 |
|
16 |
|
12 |
|
8 |
|
4 |
|
ב. ;
1:-24 |
|
repeat |
|
writeln(I); |
|
I:=1-4; |
|
until i = 0; |
|
|
|
for i:=1 to 100 do .4 |
|
if I mod 2=0 then |
|
list[I]:= 'B' |
|
else |
|
list[I]:='A'; |
|
|
|
5
. א. הטעות היא שנכנס ללולאה אין
סופית כיוון שבקידום num ערכו לא יהיה 20. |
|
ב. שינוי תנאי
הכניסה ללולאה ל-while Num = 20 do |
|
Program targil 6; .6 |
|
Var 1:integer; |
|
begin |
|
for 1:=100 to 999 do |
|
begin |
|
digitl: = 1 mod 10; |
|
digit2: = 1 mod 100; |
|
digit2: = digit2 div
10; |
|
digit3: = 1 div 100; |
|
if digitl+digit2 =
sqr(1) |
|
then writeln (1); |
|
end; |
|
end; |
|
|
|
7. א. הערכים שתחזיר הפונקציה הם: 9 ו16-. |
|
ב. ערך הפרמטר Num : 27 או 225 |
|
ג. |
|
sum:=0; |
|
read (Num); |
|
while Num >= 0 do |
|
if Num mod
SumOfDigit(Num) = 0 |
|
then |
|
begin |
|
writeln(Num); |
|
sum:=sum+1; |
|
end; |
|
writeln(sum, ':'כמות
המספרים המקיימים את התנאי); |
|
|
|
8.
א. פלט התכנית יהיה: 9 5 |
|
ב. פלט התכנית יהיה: 2 5 |
|
ג. פלט התכנית יהיה: 9 7 |
|
|
|
9.
א. קלט - ציוני 200 התלמידים במקצוע מחשבים |
|
פלט - הציונים הנמוכים מהממוצע. |
|
|
|
ב. משתנים ומערכים: |
|
avg - משתנה לחישוב ממוצע הציונים, טיפוסי ממשי. |
|
sum - משתנה עזר לחישוב הממוצע. |
|
grade array - מערך לקליטת ציוני התלמידים, טיפוס
האיברים במערך - שלם. |
|
|
|
ג. |
|
program grades; |
|
const
students = 200; |
|
type gr_ar = array [1..students] of integer; |
|
var avg:real; |
|
sum,I:integer; |
|
grade_array_:gr_ar; |
|
|
|
begin |
|
sum:=0; |
|
for i:=1 to students
do |
|
begin |
|
read (grade_array[i]); |
|
sum: =sum +
grade_array [i]; |
|
end; |
|
avg:=sum/students; |
|
for I:= 1 to
students do |
|
if grade array [I] <
avg then |
|
write (grade_array
[I]:5); |
|
end. |
|
|
|
|
|
10.
|
|
program shoes; |
|
var katalog, I:integer; |
|
dep1, dep2, dep3,
dep4:integer; |
|
|
|
function hundred(katalog:integer):integer; |
|
begin |
|
hundred:=katalog div
100; |
|
end; |
|
begin |
|
dep1:=0; dep2; =0;
dep3:=0; dep4:0; |
|
read(katalog); |
|
while katalog > 0 do |
|
begin |
|
case hundred(katalog) of |
|
1 : dep1 : =dep1+1; |
|
2
: dep2 : =dep2+1; |
|
3
: dep3 : =dep3+1; |
|
4
: dep4 : =dep4+1; |
|
end; |
|
read(katalog); |
|
end; |
|
write(dep1, dep2, dep3, dep4, (dep1+dep2+dep3+dep4)/4; |
|
end; |