» נושאי לימוד
» נושאי לימוד
יום שבת 4 במאי 2024
with בפניה לשדה ברשומה
דף ראשי  פרק 4: נושאים מתקדמים בפסקל  רשומות  with בפניה לשדה ברשומה גרסה להדפסה

with  בפניה לשדה רשומה

 

בתת תוכניות הקודמות, בכל פעם שהיינו צריכים לפנות לשדה שהוא חלק מרשומה, היינו צריכם לכתוב את שם הרשומה, נקודה ושם השדה הרצוי.

כאשר נעשות בבת אחת מספר פעולות על שדות הרשומה, ניתן להשתמש ב-with (מילה שמורה).

 

לדוגמא:

 

if THIS_RECORD.X > 1 then
begin
   write('*');
   THIS_RECORD.Y:=2;
end;

wite THIS_RECORD do
begin
   if X>1 then write('*');
   Y:=2;
end;

 

 

כלומר, לאחר המלה השמורה with נרשום את שם הרשומה ואז נשתמש בתאי הרשומה ללא הצורך להזכיר בכל פעם את שם הרשומה.

 

מבנה with הוא:

 

 do שם רשומה with

begin

 

                   הוראות הכוללות             

                   שדות של הרשומה הזו             

 

;end

 

 

כמובן, אם בתוך הבלוק הפנימי יש רק הוראה אחת ניתן לוותר על הבלוק הפנימי.

 

לדוגמא:

 

with  THIS_RECORD do  if X > 1 then  write('*');

 

דוגמא:

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

מחרוזת בת 17 תווים היא מחרוזת הכוללת את התווים המרכיבים מספר ממשי. הבנוי בצורה:

 

     

 

על התוכנית להפוך את המחרוזת, שרשומים בה תווי המספר הממשי, למספר ממשי

ולהציבו בשדה המספר הממשי. אם המחרוזת אינה בת-המרה למספר, כלומר, התווים

אינם מרכיבים מספר תקני, אזי הצב במספר הממשי אפס.

 

פתרון:

כדי להפוך מחרוזת, המכילה תווים שם מספר, נשתמש בתת התוכנית (פרוצדורה) הניתנת על ידי הטורבו פסקל.

פרוצדורה זו היא val  (מלה שמורה) והמוגדרת על ידי הפסקל:

 

val  (S:string; var V; code: integer);

 

 

כאשר:  S:string  זוהי המחרוזת המכילה את המספר להמרה.

var V  - שלם או ממשי ובו נקבל את תוצאת ההמרה.

code : integer  - יכיל אפס אם המחרוזת היא בת המרה למספר.

 

program NAME;

type

   STRING_REAL =

(*הצהרת הרשומה הכוללת את שדה המחרוזת *)

(*השדה הממשי *)

   record

      STRING_NUM: string[17];

      REAL_NUM: real;  (* המשתנה הממשי *)

   end;

    ·       

    ·    קטע הבא לפני תת תוכנית זו

    ·       

 

procedure  STR_TO_NUM

             (var IN_RECORD: STRING_REAL);

{ תת תוכנית להפיכת מחרוזת למספר ממשי }

(* IN_RECORD – הרשומה המועברת והמוחזרת *)

var

   OK: integer; 

begin

   with IN_RECORD do

       (* IN_RECORD  עם השדות של הרשומה *)

   begin

      val (STRING_NUM, REAL_NUM, OK);

                   (*הפיכת המחרוזת לממשי*)

      if   OK <> 0 then

              (* אם המחרוזת אינה בת המרה *)

      begin

      writeln('למספר',STRING_NUM,

                      'אי אפשר להמיר את' );

      REAL_NUM := 0;  (* והצב אפס כנדרש *)

   end;

 end;

end;

    ·       

    ·   קטע הבא אחרי תת תוכנית זו

    ·       

 

 

כאשר המחרוזת תגרום לתוצאה החורגת מגודלו המקסימלי האפשרי של המספר, התוכנית תפסיק את הביצוע תוך כדי ריצתה  (Run time Error).

 

נתונה התוכנית הבאה:

 

program WRITE_TO_FILE;

   { text תוכנית לכתיבה וקריאה של נתונים לקובץ }

var

   ST: string[225];  (* מחרוזת שתשמש לקריאת נתונים שנכתבו לקובץ *)

   A:string[3];  (* מחרוזת שנכתוב לקובץ *)

   B:integer; (* שלם שנכתוב לקובץ *)

   C:boolean; (* ערך בוליאני שנכתוב לקובץ*)

   D:real;  (* ממשי שנכתוב לקובץ *)

   FILE_TEXT:text; (* הקובץ שאליו נכתוב וממנו נקרא *)

begin

      { הצבת ערכים לתאים }

   A:= 'XYZ';  B:= 12345; C:=true ; D:=1.2;

      { קישור השם של הקובץ בתוכנית לשם הקובץ על הדיסקט }

   assign (FILE_TEXT, 'FFF');

      { הכנת הקובץ לכתיבה }

   rewrite(FILE_TEXT);

      { כתיבת הערכים לקובץ }

   write (FILE_TEXT,A,B,C,D);

      {סגירת הקובץ}

   close (FILE_TEXT);

      {פתיחת הקובץ מחדש}

   reset (FILE_TEXT);

      { קריאת מחרוזת מהקובץ}

   read(FILE_TEXT);

      { סגירת הקובץ,שוב }

   close(FILE_TEXT);

      { ולבסוף הדפסת המחרוזת כדי שנראה מה קיבלנו }

   writeln (ST);

end;

 

 

הפלט שיתקבל לאחר הרצת התוכנית:

 

XYZ12345TRUE 1.2000000000+00

 

 

כלומר, קיבלנו את תוכן התאים כאשר כל הערכים הפכו לתווים הנמצאים במחרוזת.

היתרון: אפשר לרשום לקובץ text  נתונים ללא מבנה רשומה. כך יוכל הקורא את הקובץ לפענחו לבד, ללא צורך בידיעת מבנה הקובץ.

 

 11-03-04 / 23:19  עודכן ,  03-09-03 / 21:52  נוצר ע"י כפיר מרגי  בתאריך 
 רשומות-המשך - הקודםהבא - case במבנה רשומה משתנה 
תגובות הקוראים    תגובות  -  0
דרכונט
מהי מערכת הדרכונט?
אינך מחובר, להתחברות:
דוא"ל
ססמא
נושאי לימוד
חיפוש  |  לא פועל
משלנו  |  לא פועל
גולשים מקוונים: 1