» נושאי לימוד
» נושאי לימוד
יום ראשון 22 בדצמבר 2024
רשומות-המשך
דף ראשי  פרק 4: נושאים מתקדמים בפסקל  רשומות  רשומות-המשך גרסה להדפסה

רשומות

דוגמא:

נתון קובץ קלט שבו יש רשומה אחת לכל תלמיד בבית הספר. הרשומה כוללת את השדות הבאים:

שם ושם משפחה של התלמיד  (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.

 26-02-04 / 22:44  עודכן ,  09-12-03 / 21:37  נוצר ע"י כפיר מרגי  בתאריך 
 רשומות - הקודםהבא - with בפניה לשדה ברשומה 
תגובות הקוראים    תגובות  -  0
דרכונט
מהי מערכת הדרכונט?
אינך מחובר, להתחברות:
דוא"ל
ססמא
נושאי לימוד
חיפוש  |  לא פועל
משלנו  |  לא פועל
גולשים מקוונים: 10