רשומות
דוגמא:
נתון קובץ קלט שבו יש רשומה אחת לכל תלמיד בבית הספר. הרשומה כוללת את השדות הבאים:
שם ושם משפחה של התלמיד (20 תווים לכל היותר).
מערך הכולל 10 תאים, שהם ציוני התלמיד בשנה הקודמת.
מערך הכולל 10 תאים, שהם ציוני התלמיד בשנה הנוכחית.
מספר התלמיד.
כתוב תת תוכנית הקוראת את רשומות התלמידים ורושמת כמה תלמידים עלו בחצי ציון לפחות מהשנה הקודמת בחישוב הממוצע של הציונים.
פתרון:
program NAME; type (* ולכן, type בהעברת משתנים הפסקל דורש התאמה מלאה עם *) (* ההצהרה על המערכים נעשית מחוץ לרשומה כיוון שיש להעבירם*) (* בנפרד *) ARRAY_10_INT=array[1..10] of integer;
STUDENT_RECORD= record NAME: string[20]; ADDRESS:string[20]; LAST_YEAR_MARKS: ARRAY_10_INT; PRESENT_YEAR_MARKS: ARRAY_10_INT; NUMBER_OF_STUDENT: integer; end;
INPUT_FILE=file of STUDENT_RECORD;
· · קטע הבא לפני תת תוכנית זו ·
procedure READ_FILE (var FILE_IN:INPUT_FILE; var STUDENT: STUDENT_RECORD); begin read (FILE_IN, STUDENT); end;
function AVERAGE_OF_MARKS (MARKS:ARRAY_10_INT):real; (*MARKS: ARRAY_10_INT – בגלל העברה זו של המערך שהוא חלק*) (* מהרשומה הוצהר המערך בנפרד *) var I: integer; (* מונה הלולאה *) AVE: real; (* הממוצע*) begin AVE:=0; (* איפוס הצובר *) for I:=1 to 10 do AVE:=MARKS[I] +AVE; AVERAGE_OF_MARKS:=AVE/10; end;
function COUNT_STUDENTS (var FILE_IN:INPUT_FILE):integer; (* var FILE_IN – העברת הקובץ *) (* STUDENT – העברת הרשומה של התלמיד *) var AVE_OF_LAST_YEAR: real; AVE_OF_PRESENT_YEAR: real; SUM: integer; STUDENT: STUDENT_RECORD; (*רשומת התלמיד הנקראת מקובץ הקלט*) begin SUM:=0; (* איפוס הצובר *) while not eof (FILE_IN) do begin READ_FILE(FILE_IN, STUDENT); AVE_OF_LAST_YEAR:= AVERAGE_OF_MARKS(STUDENT.LAST_YEAR_MARKS); AVE_OF_PRESENT_YEAR:= AVERAGE_OF_MARKS(STUDENT.PRESENT_YEAR_MARKS); if AVE_OF_PRESENT_YEAR >= AVE_OF_LAST_YEAR + 5 then SUM := SUM +1; end; COUNT_STUDENTS := SUM; end; · · קטע הבא אחרי תת תוכנית זו ·
|
ביישום של אלגוריתם על ידי פסקל נזכור: כאשר רוצים להעביר מערך או מחרוזת שהם חלק מרשומה, יש להצהיר עליהם בנפרד ולהשתמש בהצהרה זו בתוך הרשומה. העברת קובץ בהגדרת תת תוכנית חייבת להיעשות על ידי var. |