משתנים וערכים
חלק מהתוכניות שנכתוב וננתח בהמשך תדענה גם לקלוט ערכים ולבצע עליהם חישובים.
על מנת לקלוט ערכים, על התכנית להקצות להם מקום בזיכרון המחשב. לכן, מיד אחרי כותרת התוכנית, יירשמו שמות הנתונים וסוג המשתנים אליהם יוצבו הערכים. סוג המשתנה מגדיר האם המשתנה יאחסן מספר שלם או מספר שיש בו נקודה עשרונית. מספר הכולל נקודה עשרונית נקרא מספר ממשי ומשתנה המכיל מספר זה נקרא משתנה ממשי.
דוגמא:
program VAR_IN; var A: integer; B: real; begin read(A,B); end.
|
בשורה השניה בתוכנית נרשמה המילה השמורה var (מהמילה variable- משתנים באנגלית). מילה זו מתחילה את הקטע בו יוגדרו המשתנים ותכונותיהם.
בתוכנית זו הגדרנו שני משתנים. המשתנה A, הוא משתנה שתוכנו יהיה אך ורק מספר שלם
(integer). המשתנה השני,B, יאחסן מספרים שערכם ממשי בלבד (real).
לאחר שם המשתנה נרשמות נקודותיים המפרידות בין שם המשתנה לבין הגדרת הסוג.בסיום כל הגדרה של משתנה ותכונתו, קיימת נקודה פסיק (סיום הוראת הגדרה).
הגדרות המשתנים שיאחסנו ערכים במהלך ביצוע התוכנית נעשות ב- ;סוג המשתנה:שם המשתנה var |
תפקיד ההוראה read היא לקלוט מהמשתמש ערכים למשתני התוכנית.המשתנים בהוראת ה-read מופרדים על ידי פסיקים בלבד, בין סוגר שמאלי לימני.
כאשר התוכנית מגיעה לביצוע הפקודה read, היא מפסיקה את הביצוע ומחכה שהמשתמש יקיש את הערכים מהמקלדת. מכיוון שהמשתנה A הוא ראשון, יש להקיש את הערך שיוצב אליו תחילה, ולאחריו את הערך שיוצב למשתנה B. כל עוד לא הוקשו ערכים למשתנים (ולאחריהם ENTER) התוכנית לא תמשיך בביצוע.
כאשר מקישים את הערכים מהמקלדת, הפסקל מבין את התו רווח כהפרדה בין הערכים. כמו כן יש להקפיד לא להקיש לנתון A ערך ממשי. במקרה זה התוכנית לא תמשיך לרוץ ותסתיים מיד (זהו סיום לא תקין של התוכנית). אם נקיש ל-B ערך שלם (למרות שהוא מוגדר כממשי), המספר יתורגם מיד למספר ממשי, ותיתוסף אליו הנקודה העשרונית באופן אוטומטי.
דוגמא:
program VAR_IN; var A,B: integer; begin read(A,B); end.
ניתן להגדיר מספר משתנים בשמות שונים ובעלי אותה תכונה. בין המשתנים יופיעו פסיקים מפרידים.
הערך המוצב למשתנה הינו נתון שהתוכנית תשתמש בו בהמשך.
ננסה להבין מה קורה בתוככי זיכרון המחשב בהגדרת הנתונים ובקליטת ערכים.
זיכרון המחשב בנוי מתאים-תאים הנקראים תאי הזיכרון של המחשב. בתאים אלו מאוחסנים ההוראות של התוכנית והמשתנים שהתוכנית מגדירה.
לכל תא יש כתובת הרשומה כמספר.
תאי הנתונים המוגדרים על ידי התוכנית נמצאים במקום נפרד מההוראות.
באיור נראה הזיכרון כטבלה ארוכה של תאים.
חלק מהתאים מכיל פקודות וחלקם מכילים נתונים.
כאשר אנו מגדירים ב-var שם של משתנה (נניח A) התוכנית קובעת שתא בעל מספר מסוים (נניח 145) יהיה תא A . בכל פעם שהתוכנית משתמשת במשתנה A היא ניגשת לתא שכתובתו היא מס' התא (145 בדוגמא שלנו).
אם נכניס לתא A מס' אחר אזי התוכן הקודם ימחק ויעודכן בערך החדש שנקבע.
לעת עתה לא נבחין בין המונח משתנה למונח תא.
הכנסת ערך לתוך משתנה מוחקת את הערך |
על מנת להקל על המתכנת רצוי לתת למשתנים שמות עם משמעות לדוגמא: sum.
דוגמא:
program INPUT; var A: integer; begin readln(A); writeln(A); end.
להורדת הדוגמא לחץ כאן
דוגמת ריצה:
בדוגמא זו,התוכנית מתחילה בביצוע, פוגשת תחילה בהוראת readln ומפסיקה את הביצוע עד לקלט הנתון A.
לאחר שקיבלה את האישור להמשיך על-ידי ה-ENTER התוכנית גורמת לסמן בפלט לקפוץ שורה (סיום ה-ln), פוגשת התכנית בהוראה writeln. הפעם בתוך הסוגריים אין מחרוזת כי אם שם של משתנה. במקרה זה התוכנית לא מדפיסה את התו 'A' אלא את תוכן המשתנה A ואז מסיימת את ההוראה ע"י קפיצת שורה (בגלל ה-ln) .
תוכן המשתנה A אינו נמחק, המשתנה A רק מועתק לפלט.
1. העתקה של משתנה אינה גורמת למחיקתו!!! 2. כאשר המחרוזת לא נמצאת בין גרש לגרש אזי הכוונה לתוכן המשתנה. |
מס' הבדלים בין סוגי המשתנים real ו-integer:
נתונים מסוג real הם מספרים הנרשמים בייצוג מדעי כלומר רק ספרה אחת לפני הנקודה (משמאל לנקודה) וכל שאר הספרות אחרי הנקודה (מימין לנקודה) כאשר הספרה שלפניהנקודה תהיה גדולה מ-0.
דוגמא: המספר 987654 שווה למספר 987654.0
נזיז את הנקודה 5 מקומות שמאלה (כלומר נחלק ב-
100,000) ולכן נכפיל את המספר שקיבלנו ב-100,000
על מנת לשמור על המספר המקורי ולכן בייצוג מדעי,
המספר יירשם : 9.87654 * 105 .
המחשב אינו רושם את ההכפלה בחזקה של 10, אלא רושם E, וכאשר החזקה היא חיובית כמו במקרה שלנו, יופיע + לפני החזקה.
המחשב בכל מקרה רושם 10 ספרות אחרי הנקודה אפילו אם הכול אפסים.
ולכן המספר שיירשם על ידי המחשב הוא : 9.8765400000E + 05
לעומת זאת מספרים מסוג integer יירשמו על ידי המחשב ממש כמו שהקלדנו אותם.
דוגמא:
כתוב תכנית הקולטת שני מספרים, ממשי ושלם. התוכנית תדפיס אותם באותה שורה, ושתי שורות מתחת תרשום אותם אחד מתחת לשני.
פתרון:
program real_int; var INTEGER_NUM: integer; REAL_NUM: real; begin writeln(' רשום שני מספרים ורווח ביניהם,הראשון כרצונך והשני שלם'); readln(REAL_NUM, INTEGER_NUM); writeln (' להלן המספרים:'); write('The real number =' , REAL_NUM); writeln(' The integer number= ' , INTEGER_NUM); writeln; writeln(''The real number =' , REAL_NUM); writeln('The integer number= ' , INTEGER_NUM); writeln(' *** THE END *** '); end.
לאחר ההרצה נראה על המסך את הפלט הבא:
רשום שני מספרים ורווח ביניהם,הראשון כרצונך והשני שלם 234.5678 -12 :להלן המספרים The real number = 2.3456780000E+02 The integer number = -12 The real number = 2.3456780000E+02 The integer number = -12 *** THE END ***