|
|
||||||||||
|
|
||||||||||
|
בחינה
לדוגמה - יסודות מדעי המחשב |
||||||||||
|
|
||||||||||
|
|
||||||||||
|
מדעי המחשב |
||||||||||
|
2 יחידות לימוד |
||||||||||
|
|
||||||||||
|
הוראות
לנבחן |
||||||||||
|
|
||||||||||
|
א. משך הבחינה: שלוש שעות. |
||||||||||
|
ב. מבנה השאלון ומפתח
ההערכה: בשאלון זה שלושה פרקים. |
||||||||||
|
פרק ראשון
- בפרק זה חמש שאלות, |
||||||||||
|
ועליך לענות על כולן. ( 5 ´ 10) - 50 נקודות |
||||||||||
|
פרק שני - בפרק זה שלוש שאלות, מביניהן |
||||||||||
|
עליך לענות
על שתיים ( 2 ´ 15 ) - 30 נקודות |
||||||||||
|
פרק שלישי - בפרק זה שתי שאלות, מביניהן |
||||||||||
|
עליך
לענות על אחת בלבד ( 1 ´ 20 ) - 20 נקודות |
||||||||||
|
ג.
חומר עזר מותר בשימוש: כל חומר עזר ( פרט למחשב הניתן לתכנות ) |
||||||||||
|
ד.
הוראות מיוחדות: אין |
||||||||||
|
|
||||||||||
|
|
||||||||||
|
בהצלחה !!! |
||||||||||
|
|
||||||||||
|
פרק ראשון ( 50 נקודות ) |
||||||||||
|
ענה על כל השאלות 1 - 5 (
לכל שאלה - 10 נקודות ). |
||||||||||
|
|
||||||||||
|
שאלה 1 |
||||||||||
|
יש לפתח אלגוריתם אשר הקלט
שלו הוא מספר שלם חיובי תלת ספרתי, והפלט שלו הוא 'ספרות זהות'
אם כל ספרות המספר זהות ו 'ספרות שונות' אם לא כל הספרות זהות.
|
||||||||||
|
לדוגמה: עבור הקלט 555 הפלט יהיה 'ספרות זהות' |
||||||||||
|
עבור הקלט 525 הפלט יהיה 'ספרות שונות' |
||||||||||
|
א. פרק את המשימה המתוארת
בבעיה לתת-משימות. |
||||||||||
|
ב. בחר משתנים והגדר את תפקידו
וטיפוסו של כל משתנה. |
||||||||||
|
ג. כתוב אלגוריתם מילולי
לפתרון. |
||||||||||
|
|
||||||||||
|
שאלה 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 |
||||||||||
|
לפניך קטע תוכנית שמטרתו למנות את
מספר הספרות במספר שלם חיובי. קטע התוכנית שגוי. |
||||||||||
|
writeln('הקש מספר טבעי'); |
||||||||||
|
readln(N); |
||||||||||
|
Count:=1; |
||||||||||
|
while (N div 10) > 0 do |
||||||||||
|
Count:=Count+1; |
||||||||||
|
writeln(Count, ' מספר הספרות הוא ') |
||||||||||
|
|
||||||||||
|
|
||||||||||
|
|
||||||||||
|
א. הבא דוגמת קלט שעבורה יתקבל הפלט הדרוש. |
||||||||||
|
ב. הבא דוגמת קלט שעבורה לא יתקבל הפלט הדרוש. |
||||||||||
|
ג. תקן את קטע התוכנית כך שישיג את מטרתו עבור כל קלט ( מספר
שלם חיובי ). |
||||||||||
|
|
||||||||||
|
שאלה 4 |
||||||||||
|
חברת דיסקים החליטה לשמור את
הנתונים של הדיסקים למוסיקה לריקודים בצורה מסודרת. |
||||||||||
|
הנתונים לכל דיסק הם: |
||||||||||
|
סוג המוסיקה: (R - רוק, P -
פופ, D - דנס, T - טרנס) |
||||||||||
|
מספר דיסק ( 1..150 ) |
||||||||||
|
שנת הוצאה |
||||||||||
|
מחיר קטלוגי ( 50-120 ) |
||||||||||
|
עבוד מחודש ( כן/לא ) |
||||||||||
|
א.
הגדר טיפוס הנתונים
DiskType לשמירת
נתונים אלה. |
||||||||||
|
ב.
נתונה ההצהרה: 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) |
||||||||||
|
|
||||||||||
|
ציין עבור כל אחת מכותרות הפרוצדורה
הבאות אם היא מתאימה למילוי המטרה. נמק בקצרה את קביעתך. |
||||||||||
|
1.
procedure 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 |
||||||||||
|
לפניך פונקציה: |
||||||||||
|
function 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
} |
||||||||||
|
|
||||||||||
|
א.
מה יהיה פלט הפונקציה עבור הערך 15 כפרמטר והקלט : 10 5 8 7 8 4 14
1 3 9 |
||||||||||
|
ב.
השלם את טענת היציאה של הפונקציה. |
||||||||||
|
ג.
הפונקציה מבצעת את החישוב הדרוש באמצעות מערך. נמק מדוע אין צורך בכך? |
||||||||||
|
ד.
כתוב את הפונקציה, כך שהחישוב יתבצע ללא מערך. |
||||||||||
|
|
||||||||||
|
שאלה 7 |
||||||||||
|
נתונה כותרת הפונקציה function Smaller (Letter1 ,
Letter2 : char ) : boolean; |
||||||||||
|
{ טענת
כניסה: הפונקציה מקבלת כפרמטרים שתי אותיות
} |
||||||||||
|
{ טענת
יציאה: הפונקציה מחזירה אמת אם האות הראשונה קטנה מהשניה. } |
||||||||||
|
א. השלם את גוף הפונקציה. |
||||||||||
|
|
||||||||||
|
נתונה ההצהרה: type CharArray=array[1..100] of
char;
ונתונה
כותרת הפונקציה :
function Substring(S:CharArray):integer; |
||||||||||
|
{ טענת כניסה: הפונקציה מקבלת כפרמטר מערך אותיות S
בגודל 100
} |
||||||||||
|
{ טענת יציאה: הפונקציה מחזירה את אורך הרצף הארוך ביותר
של אותיות המסודרות בסדר } |
||||||||||
|
{ עולה ממש .
} |
||||||||||
|
לדוגמה: עבור המערך בגודל 10 |
||||||||||
|
||||||||||
|
תחזיר הפונקציה
ערך 4 כיוון שאורך הרצף bdfr הוא 4 . |
||||||||||
|
ב. העזר בפונקציה Smaller שבסעיף א' וכתוב את גוף הפונקציהSubstring . |
||||||||||
|
|
||||||||||
|
שאלה 8 |
||||||||||
|
נתונה הפונקציה הרקורסיבית הבאה: |
||||||||||
|
function Secret ( N , A :integer):integer; |
||||||||||
|
{ טענת כניסה: N ו- A
שלמים חיוביים
} |
||||||||||
|
{טענת יציאה: ___________________________
} |
||||||||||
|
begin |
||||||||||
|
if N = A then |
||||||||||
|
Secret:=1 |
||||||||||
|
else if N < A then |
||||||||||
|
Secret:=0 |
||||||||||
|
else |
||||||||||
|
Secret:=Secret (
N- A , A ) + 1 |
||||||||||
|
end; {Secret } |
||||||||||
|
א.
מה תחזיר הפונקציה עבור הזימון
Secret
( 6 , 2 ) ? |
||||||||||
|
ב.
מה תחזיר הפונקציה עבור הזימון
Secret
(7, 3 ) ? |
||||||||||
|
ג.
השלם את טענת היציאה של הפונקציה. |
||||||||||
|
ד.
כתוב פונקציה לא רקורסיבית המבצעת אותה משימה. |
||||||||||
|
|
||||||||||
|
פרק שלישי ( 20 נקודות) |
||||||||||
|
ענה על אחת מבין
השאלות 9 - 10 (20 נקודות). |
||||||||||
|
|
||||||||||
|
שאלה מספר 9 |
||||||||||
|
לקראת כניסתה של חברת טלפונים
סלולריים חדשה לשוק, ערך משרד התקשורת סקר לבדיקת שביעות רצונם של הלקוחות
מהחברה. |
||||||||||
|
הסקר כלל 100 לקוחות מהחברה. כל לקוח קיבל מספר סידורי מ- 1 ועד 100 .
לטלפון הסלולרי של כל לקוח הוצמד חיישן שמנה את מספר הפעמים בחודש שהיתה הפרעה
בתקשורת. |
||||||||||
|
יש לפתח ולישם אלגוריתם שהקלט שלו
הוא 100 זוגות נתונים, זוג אחד עבור כל לקוח כאשר הנתון הראשון בכל זוג הוא מספר
ההפרעות בחודש הראשון והנתון השני בכל זוג הוא מספר ההפרעות בחודש השני. |
||||||||||
|
פלט האלגוריתם יכלול שלושה מרכיבים: |
||||||||||
|
א. הודעה האם סה"כ ההפרעות ( של כל הלקוחות ) בחודש
השני קטן מסה"כ ההפרעות ( של
כל הלקוחות ) בחודש הראשון . |
||||||||||
|
ב. מספרי המנויים שממוצע ההפרעות שלהם גדול מממוצע ההפרעות של
החברה בשני החודשים ביחד. |
||||||||||
|
ג. מספר המנוי שמספר ההפרעות שלו בחדש
הראשון הוא הקרוב ביותר למספר ההפרעות הממוצע (לכל הלקוחות) בחודש הראשון. הנח
שיש רק מנוי אחד כזה. |
||||||||||
|
|
||||||||||
|
א. בחר משתנים עיקריים, הגדר את טיפוסיהם
ותאר את תפקידיהם. |
||||||||||
|
ב. בצע פירוק של הבעיה לתת-בעיות, כך שכל
תת-בעיה תיפתר באמצעות פרוצדורה או פונקציה. ציין את הכותרת של כל פרוצדורה או
פונקציה; כלומר; שם הפרוצדורה או הפונקציה, הפרמטרים שלה, וטענות כניסה ויציאה
מפורטות. |
||||||||||
|
ג. כתוב תוכנית בשפת פסקל לפתרון הבעיה על
פי האלגוריתם שפיתחת ( אין צורך לחזור על טענות הכניסה והיציאה שפרטת בסעיף ב'
). |
||||||||||
|
|
||||||||||
|
שאלה מספר 10 |
||||||||||
|
על מנת לשפר את האקלים
החברתי בקורס "כור היתוך" נקבעה וועדת תרבות. משימתה הראשונה של
הוועדה היה לערוך רישום מדויק של כל חבריה. על כן נתבקש כל משתתף למסור את
הפרטים הבאים: גילו (במספרים שלמים בין 14 ל - 20), מינו (b/g ) והחודש בו חל יום הולדתו (1 - 12 ). |
||||||||||
|
כעת, הוועדה מבקשת לענות על השאלות הבאות: |
||||||||||
|
א. האם קבוצת הגיל 18 מאוזנת? קבוצת גיל (
כל החברים שבאותו גיל ) נקראת "מאוזנת" אם הפער בין מספרי הבנים
והבנות בקבוצה אינו עולה על 5. |
||||||||||
|
ב. באיזה חודש/חודשים חל המספר הקטן ביותר
של ימי הולדת? |
||||||||||
|
ג. באיזה חודש/חודשים יש יותר ימי הולדת לבנות מאשר לבנים? |
||||||||||
|
|
||||||||||
|
יש לפתח ולישם אלגוריתם שהקלט בו
הוא נתונים על 200 חברי הקורס,
והפלט שלו הוא הדפסת התשובות לשאלות הועדה. |
||||||||||
|
א. בחר משתנים עיקריים, הגדר את טיפוסיהם
ותאר את תפקידיהם. |
||||||||||
|
ב. בצע פירוק של הבעיה לתת-בעיות, כך שכל
תת-בעיה תיפתר באמצעות פרוצדורה או פונקציה. ציין את הכותרת של כל פרוצדורה או
פונקציה; כלומר; שם הפרוצדורה או הפונקציה, הפרמטרים שלה, וטענות כניסה ויציאה מפורטות. |
||||||||||
|
ג. כתוב תוכנית בשפת פסקל לפתרון הבעיה על
פי האלגוריתם שפיתחת ( אין צורך לחזור על טענות הכניסה והיציאה שפרטת בסעיף ב'
). |
||||||||||
|
בהצלחה
! ! ! |
||||||||||
|
פתרונות
המבחן לדוגמא - יסודות מדעי המחשב |
||||||||||
|
שאלה מספר 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 . ( נוצרת לולאה אין סופית ). |
||||||||||
|
ג.
תיקון קטע התוכנית: |
||||||||||
|
writeln('הקש מספר טבעי'); |
||||||||||
|
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 . |
||||||||||
|
ג.
אין צורך במערך כיוון שניתן לבדוק את סכום הזוגות תוך כדי קליטתם. |
||||||||||
|
ד.
הפונקציה המתוקנת: |
||||||||||
|
function 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
} |
||||||||||
|
שאלה 7 |
||||||||||
|
א.
השלמת גוף הפונקציה: |
||||||||||
|
begin |
||||||||||
|
Smaller :=
Letter1<Letter2 |
||||||||||
|
end |
||||||||||
|
ב.
השלמת גוף הפונקציה Substring |
||||||||||
|
|
||||||||||
|
function Substring(S : CharArray) : integer; |
||||||||||
|
var |
||||||||||
|
MaxLength , I ,
Count:integer; |
||||||||||
|
begin |
||||||||||
|
Maxlength := 0 ; Count := 1; |
||||||||||
|
for I := 1
to 99 do |
||||||||||
|
if Smaller(S[I],S[I+1]) then |
||||||||||
|
Count := Count+1 |
||||||||||
|
else |
||||||||||
|
begin |
||||||||||
|
if Count
> MaxLength
then |
||||||||||
|
MaxLength := Count; |
||||||||||
|
Count := 1; |
||||||||||
|
end |
||||||||||
|
if Count
> MaxLength
then {בדיקת הרצף האחרון } |
||||||||||
|
MaxLength := Count; |
||||||||||
|
Substring := MaxLength; |
||||||||||
|
end; |
||||||||||
|
שאלה מספר 8 |
||||||||||
|
א. 3 |
||||||||||
|
ב. 2 |
||||||||||
|
ג.
טענת היציאה: הפונקציה מחזירה את תוצאת הפעולה N div A . |
||||||||||
|
ד.
פונקציה לא רקורסיבית: |
||||||||||
|
function Secret ( N , A :integer):integer; |
||||||||||
|
{ טענת כניסה: N ו- A
שלמים חיוביים
} |
||||||||||
|
{טענת יציאה: הפונקציה מחזירה את תוצאת הפעולה N div A } |
||||||||||
|
begin |
||||||||||
|
Secret
:= N div A |
||||||||||
|
end; {Secret } |
||||||||||
|
פרק
שלישי |
||||||||||
|
שאלה מספר 9 |
||||||||||
|
א.
בחירת משתנים עיקריים, הגדרת טיפוסיהם ותפקידם: |
||||||||||
|
קבועים |
||||||||||
|
MaxCustomers - מספר
לקוחות |
||||||||||
|
טיפוסים |
||||||||||
|
MonthArrays -
מערך מספרים מטיפוס integer לשמירת מספר
ההפרעות בכל חודש. |
||||||||||
|
|
||||||||||
|
משתנים |
||||||||||
|
FirstMonth - מערך מטיפוס
MonthArrays לשמירת מספר ההפרעות של כל לקוח בחודש
הראשון. |
||||||||||
|
SecondMonth - מערך
מטיפוס MonthArrays לשמירת מספר ההפרעות של כל לקוח בחודש
השני. |
||||||||||
|
FirstSum -
משתנה שלם לשמירת סך ההפרעות בחודש הראשון. |
||||||||||
|
SecondSum - משתנה שלם
לשמירת סך ההפרעות בחודש השני. |
||||||||||
|
CAve- משתנה
לשמירת ממוצע ההפרעות של החברה במשך חודשיים. |
||||||||||
|
|
||||||||||
|
ב.
פירוק הבעיה לתת בעיות |
||||||||||
|
1.
קליטת הנתונים עבור כל לקוח בשני חודשים והשמתם ב FirstMonth וב- SecondMonth
בהתאמה |
||||||||||
|
2.
חישוב סך ההפרעות של הלקוחות בחודש הראשון והשמתו
ב FirstSum. |
||||||||||
|
3.
חישוב סך ההפרעות של הלקוחות בחודש השני והשמתו ב SecondSum. |
||||||||||
|
4.
הודעה אם SecondSum גדול
מ- FirstSum. |
||||||||||
|
5.
חישוב ממוצע ההפרעות של החברה במשך שני החודשים. |
||||||||||
|
|
||||||||||
|
|
||||||||||
|
הפרוצדורות והפונקציות
המתאימים |
||||||||||
|
1. קליטת הנתונים
עבור כל לקוח : |
||||||||||
|
procedure GetInfo(var FirstMonth,SecondMonth:MonthArray); |
||||||||||
|
{טענת יציאה: הפרוצדורה מחזירה במערך FirstMonth את מספר ההפרעות של כל לקוח } |
||||||||||
|
{
בחודש הראשון ובמערך SeconMonth FirstMonth את מספר ההפרעות של כל } |
||||||||||
|
{
לקוח בחודש השני
} |
||||||||||
|
|
||||||||||
|
2. חישוב סך ההפרעות
של הלקוחות בחודש |
||||||||||
|
function SumDis(Month:MonthArray):integer; |
||||||||||
|
{טענת
כניסה: הפונקציה מקבלת מערך
של הפרעות הלקוחות במשך חודש אחד } |
||||||||||
|
{טענת
יציאה : הפונקציה מחזירה את
סך כל ההפרעות בחודש } |
||||||||||
|
|
||||||||||
|
3. חישוב ממוצע ההפרעות של החברה במשך שני
החודשים |
||||||||||
|
function CompanyAve(FirstSum , SecondSum
:integer):real; |
||||||||||
|
{טענת
כניסה: הפונקציה מקבלת את סך כל ההפרעות בשני החודשים
} |
||||||||||
|
{טענת
יציאה הפונקציה מחזירה את
ממוצע ההפרעות בחושיים
} |
||||||||||
|
|
||||||||||
|
4. מציאת מספרי המנויים שממוצע ההפרעות
גדול ממוצע החברה בחודשיים |
||||||||||
|
procedure CustomerAve(FirstMonth , SecondMonth : MonthArray; |
||||||||||
|
CompanyAve:real); |
||||||||||
|
{ טענת
כניסה: הפרוצדורה מקבלת מערכי הפרעות של שני החודשים וממוצע ההפרעות של } |
||||||||||
|
{
החברה בחודשים אלה } |
||||||||||
|
{טענת
יציאה : הפרוצדורה מדפיסה את מספרי המנויים שממוצע ההפרעות שלהם גדול } |
||||||||||
|
{
מממוצע החברה בחודשיים
} |
||||||||||
|
|
||||||||||
|
5.
הדפסת המנוי שמספר הההפרעות שלו הקרוב ביותר למספר ההפרעות הממוצע |
||||||||||
|
procedure CloseCustomer(FirstMonth: MonthArray ; FirstSum : integer); |
||||||||||
|
{טענת
כניסה: הפרוצדורה מקבלת מערך הפרעות של החודש הראשון וסך ההפרעות של } |
||||||||||
|
{
החברה בחודש הראשון
} |
||||||||||
|
{ טענת יציאה: הפרוצדורה מדפיסה את המנוי שמספר הההפרעות
שלו הקרוב ביותר למספר
} |
||||||||||
|
{
ההפרעות הממוצע } |
||||||||||
|
|
||||||||||
|
ג. התוכנית בשפת פסקל |
||||||||||
|
|
||||||||||
|
program Telephon(input,output); |
||||||||||
|
const |
||||||||||
|
MaxCustomers=100; |
||||||||||
|
type |
||||||||||
|
MonthArray=array[1..MaxCustomers]
of integer; |
||||||||||
|
var |
||||||||||
|
FirstMonth , SecondMonth :
MonthArray; |
||||||||||
|
FirstSum , SecondSum : integer; |
||||||||||
|
CAve: real; |
||||||||||
|
|
||||||||||
|
procedure GetInfo(var
FirstMonth,SecondMonth:MonthArray); |
||||||||||
|
var |
||||||||||
|
I:integer; |
||||||||||
|
begin |
||||||||||
|
for I := 1 to MaxCustomers do |
||||||||||
|
begin |
||||||||||
|
writeln('הקש את מספר
ההפרעות בחודש הראשון ובחודש השני '); |
||||||||||
|
readln(FirstMonth[I], SecondMonth[I]); |
||||||||||
|
end; |
||||||||||
|
end;
{ GetInfo } |
||||||||||
|
|
||||||||||
|
function
SumDis(Month:MonthArray):integer; |
||||||||||
|
var |
||||||||||
|
I,Sum:integer; |
||||||||||
|
begin |
||||||||||
|
Sum := 0; |
||||||||||
|
for I := 1 to MaxCustomers do |
||||||||||
|
Sum := Sum+Month[I]; |
||||||||||
|
SumDis := Sum |
||||||||||
|
end; |
||||||||||
|
|
||||||||||
|
function CompanyAve(FirstSum , SecondSum
:integer):real; |
||||||||||
|
begin |
||||||||||
|
CompanyAve := (FirstSum+SecondSum)/(2*MaxCustomers) |
||||||||||
|
end; |
||||||||||
|
|
||||||||||
|
procedure CustomerAve(FirstMonth,SecondMonth
:MonthArray; |
||||||||||
|
CompanyAve:real); |
||||||||||
|
var |
||||||||||
|
I:integer; |
||||||||||
|
begin |
||||||||||
|
for I := 1 to MaxCustomers do |
||||||||||
|
if
((FirstMonth[I]+SecondMonth[I]) / 2
) > CompanyAve then |
||||||||||
|
writeln(I,'more
dis'); |
||||||||||
|
end; |
||||||||||
|
|
||||||||||
|
procedure CloseCustomer(FirstMonth:
MonthArray; |
||||||||||
|
FirstSum:integer); |
||||||||||
|
var |
||||||||||
|
I:integer; |
||||||||||
|
Ave,Temp:real; |
||||||||||
|
Closest:integer; |
||||||||||
|
begin |
||||||||||
|
Closest := 1; |
||||||||||
|
ave := FirstSum/MaxCustomers; |
||||||||||
|
for I := 1 to MaxCustomers do |
||||||||||
|
begin |
||||||||||
|
Temp := abs(FirstMonth[I]-Ave); |
||||||||||
|
if Temp<Closest then |
||||||||||
|
Closest := I; |
||||||||||
|
end; |
||||||||||
|
writeln(Closest,'cusomer'); |
||||||||||
|
end; |
||||||||||
|
|
||||||||||
|
|
||||||||||
|
begin { main } |
||||||||||
|
GetInfo (FirstMonth
, SecondMonth ); |
||||||||||
|
FirstSum := SumDis( FirstMonth ); |
||||||||||
|
SecondSum := SumDis( SecondMonth ); |
||||||||||
|
if
(SecondSum > FirstSum) then |
||||||||||
|
writeln ('סה"כ
ההפרעות בחודש השני גדול מסה"כ ההפרעות בחודש הראשון '); |
||||||||||
|
else writeln
('סה"כ ההפרעות בחודש השני אינו
גדול מסה"כ ההפרעות בחודש הראשון '); |
||||||||||
|
CAve := CompanyAve (FirstSum , SecondSum); |
||||||||||
|
CustomerAve (FirstMonth , SecondMonth ,
CAve); |
||||||||||
|
CloseCustomer (FirstMonth , FirstSum); |
||||||||||
|
end. |
||||||||||
|
|
||||||||||
|
|
||||||||||
|
|
||||||||||
|
|
||||||||||
|
|
||||||||||
|
|
||||||||||
|
שאלה מספר 10 |
||||||||||
|
א. בחירת משתנים עיקריים,
הגדרת טיפוסיהם ותפקידם: |
||||||||||
|
קבועים |
||||||||||
|
מספר החברים בקורס: Max
|
||||||||||
|
טיפוסים |
||||||||||
|
1.
רשומה המייצגת חבר בקורס : MemberType = record |
||||||||||
|
Age : integer; |
||||||||||
|
Sex : char; |
||||||||||
|
Month : integer; |
||||||||||
|
end |
||||||||||
|
2.
מערך רשומות מטיפוס Member לשמירת נתוני כל
חברי הקורס. |
||||||||||
|
MemberArray = array[1..Max] of
Member |
||||||||||
|
3.
מערך מספרים מטיפוס integer לשמירת מספר ימי
ההולדת בכל חודש. |
||||||||||
|
IntArray
= array[1..12] integer
|
||||||||||
|
משתנים |
||||||||||
|
1.
Members - מערך מטיפוס MemberArrayלקליטת הנתונים עבור כל החברים. |
||||||||||
|
2.
Birthdays - מערך מטיפוס IntArray למניית ימי ההולדת בכל חודש. |
||||||||||
|
3.
Boys - מערך מטיפוס IntArray למניית ימי
ההולדת של הבנים בכל חודש. |
||||||||||
|
4. Girls- מערך מטיפוס
IntArray למניית ימי ההולדת של הבנות בכל חודש. |
||||||||||
|
|
||||||||||
|
|
||||||||||
|
|
||||||||||
|
|
||||||||||
|
ב. חלוקה לתת-משימות |
||||||||||
|
1.
קליטת הנתונים לכל המדריכים. |
||||||||||
|
2.
בדיקה אם קבוצת הגיל 18 מאוזנת. |
||||||||||
|
3.
איפוס מערך מונים. |
||||||||||
|
4.
יצירת מערך מונים מטיפוס שלם למניית מספרי ימי ההולדת בכל חודש. |
||||||||||
|
5.
מציאת החודשים בהם חל המספר הקטן ביותר של ימי ההולדת. |
||||||||||
|
6.
יצירת מערכי מונים מטיפוס שלם למניית מספרי ימי ההולדת עבור בנים ובנות
בנפרד. |
||||||||||
|
7.
מציאת החודשים בהם יש יותר ימי הולדת לבנים מאשר לבנות. |
||||||||||
|
|
||||||||||
|
כותרות הפרוצדורות/פונקציות |
||||||||||
|
א. קליטת הנתונים לכל המדריכים. |
||||||||||
|
procedure GetInfo ( var Members :
MemberArray); |
||||||||||
|
{טענת
יציאה: הפרוצדורה קולטת את נתוני החברים
} |
||||||||||
|
|
||||||||||
|
ב. בדיקה אם קבוצת הגיל 18 מאוזנת. |
||||||||||
|
function Balance ( Members : MemberArray )
: boolean; |
||||||||||
|
{ טענת
כניסה: הפונקציה מקבלת את מערך נתוני החברים } |
||||||||||
|
{טענת
יציאה: הפונקציה מחזירה ערך true אם
קבוצת הגיל 18 מאוזנת, false -
אחרת } |
||||||||||
|
|
||||||||||
|
ג. איפוס מערך מונים |
||||||||||
|
procedure Init( var
Birthdays:IntArray); |
||||||||||
|
{ טענת
כניסה: הפרוצדורה מקבלת מערך מונים
} |
||||||||||
|
{טענת
יציאה: הפרוצדורה מאפסת את אברי המערך
} |
||||||||||
|
|
||||||||||
|
ד. יצירת מערך מונים מטיפוס שלם
למניית מספרי ימי ההולדת בכל חודש. |
||||||||||
|
Procedure Birth (Members : MemberArray ; var
Birthdays:IntArray ); |
||||||||||
|
{טענת
כניסה: הפרוצדורה מקבלת את מערך נתוני החברים
} |
||||||||||
|
{טענת
יציאה: הפרוצדורה יוצרת מערך מניה עבור מספר ימי ההולדת בכל חודש } |
||||||||||
|
|
||||||||||
|
ה.
מציאת החודשים בהם חל המספר הקטן ביותר של ימי ההולדת. |
||||||||||
|
procedure MinBirth (Members : MemberArray ; Birthdays : IntArray ); |
||||||||||
|
{טענת
כניסה: הפרוצדורה מקבלת את מערך נתוני החבדים ואת מערך מוני החודשים
} |
||||||||||
|
{ טענת
יציאה: הפרוצדורה פולטת את מספרי החודשים בהם חל המספר הקטן ביותר של ימי } {
הולדת.
} |
||||||||||
|
|
||||||||||
|
ו.
יצירת מערך מונים מטיפוס שלם למניית מספרי ימי ההולדת עבור בנים ובנות
בנפרד. |
||||||||||
|
Procedure BirthBySex (Members :
MemberArray; Sex:char ; var
Mem:IntArray ); |
||||||||||
|
{טענת
כניסה: הפרוצדורה מקבלת את מערך נתוני החברים, וסוג מין מבוקש ( b/g ) } |
||||||||||
|
{ טענת
יציאה: הפרוצדורה יוצרת מערך מנייה עבור החברים בעלי המין Sex
} |
||||||||||
|
|
||||||||||
|
ז. מציאת החודשים בהם יש יותר ימי
הולדת לבנים מאשר לבנות. |
||||||||||
|
procedure MoreBoys ( Members : MemberArray ; Birthdays : IntArray
); |
||||||||||
|
{טענת
כניסה: הפרוצדורה מקבלת את מערך נתוני התלמידים ואת מערך מוני החודשים } |
||||||||||
|
{טענת
יציאה: הפרוצדורה מוצאת את
מספרי החודשים בהם יש יוצר ימי הולדת לבנים מאשר } {
לבנות ) |
||||||||||
|
|
||||||||||
|
ג.
התוכנית בשפת פסקל |
||||||||||
|
program Course(input,output); |
||||||||||
|
const |
||||||||||
|
Max=200; |
||||||||||
|
type |
||||||||||
|
MemberType = record |
||||||||||
|
Age : integer; |
||||||||||
|
Sex : char; |
||||||||||
|
Month : integer; |
||||||||||
|
end; |
||||||||||
|
|
||||||||||
|
MemberArray = array[1..Max] of
MemberType; |
||||||||||
|
IntArray = array[1..12] of
integer; |
||||||||||
|
var |
||||||||||
|
Members : MemberArray; |
||||||||||
|
Birthdays, Boys , Girls :IntArray; |
||||||||||
|
|
||||||||||
|
procedure GetInfo ( var
Members : MemberArray); |
||||||||||
|
var |
||||||||||
|
I : integer; |
||||||||||
|
begin |
||||||||||
|
for I := 1 to Max do |
||||||||||
|
begin |
||||||||||
|
writeln; |
||||||||||
|
readln(Members[I].Age); |
||||||||||
|
readln(Members[I].Sex); |
||||||||||
|
readln(Members[I].Month); |
||||||||||
|
end; |
||||||||||
|
end; |
||||||||||
|
|
||||||||||
|
function Balance( Members : MemberArray ) : boolean; |
||||||||||
|
var |
||||||||||
|
I : integer; |
||||||||||
|
Count:integer; |
||||||||||
|
begin |
||||||||||
|
Count := 0; |
||||||||||
|
for I := 1 to
Max do |
||||||||||
|
begin |
||||||||||
|
if
members[I].age=18 then |
||||||||||
|
if Members[I].Sex='b' then Count := Count+1 |
||||||||||
|
else Count := Count-1; |
||||||||||
|
Balance := abs(Count)<=5; |
||||||||||
|
end; |
||||||||||
|
end; |
||||||||||
|
|
||||||||||
|
procedure Init( var Birthdays:IntArray); |
||||||||||
|
var |
||||||||||
|
I : integer; |
||||||||||
|
begin |
||||||||||
|
for I := 1 to 12 do |
||||||||||
|
Birthdays[I] := 0; |
||||||||||
|
end; |
||||||||||
|
|
||||||||||
|
procedure Birth (Members : MemberArray ; var Birthdays:IntArray ); |
||||||||||
|
var |
||||||||||
|
I:integer; |
||||||||||
|
|
||||||||||
|
begin |
||||||||||
|
for I := 1 to Max do |
||||||||||
|
Birthdays[Members[I].Month] := Birthdays[Members[I].Month]+1; |
||||||||||
|
end; |
||||||||||
|
|
||||||||||
|
procedure MinBirth (Birthdays : IntArray ); |
||||||||||
|
var |
||||||||||
|
I , Min : integer; |
||||||||||
|
begin |
||||||||||
|
Min := Max; |
||||||||||
|
for I := 1 to 12 do |
||||||||||
|
if Birthdays[I]<Min then Min := Birthdays[I]; |
||||||||||
|
for I := 1 to 12 do |
||||||||||
|
if Birthdays[I]=Min then writeln( I ); |
||||||||||
|
end; |
||||||||||
|
|
||||||||||
|
|
||||||||||
|
procedure BirthBySex (Members : MemberArray; Sex:char ; var Mem:IntArray ); |
||||||||||
|
var |
||||||||||
|
I:integer; |
||||||||||
|
|
||||||||||
|
begin |
||||||||||
|
for I := 1 to Max do |
||||||||||
|
if Members[I].Sex=Sex then |
||||||||||
|
Mem[Members[I].Month] := Mem[Members[I].Month]+1; |
||||||||||
|
end; |
||||||||||
|
|
||||||||||
|
procedure MoreBoys ( Boys,Girls: IntArray ); |
||||||||||
|
var |
||||||||||
|
I :integer; |
||||||||||
|
begin |
||||||||||
|
for I := 1 to 12 do |
||||||||||
|
if Girls[I] > Boys[I] then writeln ( I ); |
||||||||||
|
end; |
||||||||||
|
|
||||||||||
|
begin { main } |
||||||||||
|
GetInfo ( Members); |
||||||||||
|
writeln (Balance(Members)); |
||||||||||
|
Init(Birthdays); |
||||||||||
|
Birth(Members,Birthdays); |
||||||||||
|
MinBirth(Birthdays); |
||||||||||
|
Init(Boys); |
||||||||||
|
Init(Girls); |
||||||||||
|
BirthBySex(Members,'b',Boys); |
||||||||||
|
BirthBySex(Members,'g',Girls); |
||||||||||
|
MoreBoys( Boys,Girls); |
||||||||||
|
end. |