משתנים תווים
בנוסף למשתנים ממשיים או שלמים,אפשר להגדיר גם סוג משתנה האחר שתוכנו יהיה תו.
תו הינו כל סימן המופיע על המקלדת.כולל ספרות,סימנים מיוחדים ואותיות.
יש גם סימנים מיוחדים שלא רואים על המקלדת.כגון,תו הגורם לצפצוף וכדו'.
מכיוון שיש צורך בהסכמה על מספרים המייצגים את התווים, הוקמה ועדה שנקראת ASCII בוועדה זו הוחלט על ייצוג של 128 תווים בלבד.תווים מיוחדים,ספרות ואותיות אנגליות.
המספרים של 128 התווים האלו נקראים תווים המיוצגים בקוד ASCII.
דוגמא:
הגדר את משתנה X כמשתנה תווי, קלוט אליו תו והדפס אותו.
פיתרון:
program CHAR_X; var X:char; begin readln_X); writeln(X); end.
|
המשתנה X, המוגדר ב-var, יכול לאחסן רק תו אחד בלבד!
הגדרת סוג המשתנה נעשית ע"י המילה char.
למשתנה תווי מציבים ערך תווי.
לדוגמא:
X:='A';
X הוא משתנה תווי שלתוכו הוצב התו A .
התו נמצא בין גרש שמאלי לימני להבדיל מההצבה:
X:=A;
המציב את תוכן משתנה A ל- X,ולא את הערך 'A' ל-X.
סך כל המספרים המייצגים את התווים השונים הוא 256.
0 עד 127 ע"י קוד ASCII ועוד 128 עד 255 תווים אחרים,שערכם יכול להתחלף בין שפה לשפה.
אין שום אפשרות לערב בפעולות שלמדנו עד כה משתנים מסוגים שונים עם משתנים תווים.
אך קיימת אפשרות באמצעות פונקציות להמיר משתנה תווי לערכו
המספרי ולהיפך.
הפונקציה chr - נותנת ערך מספרי לערך תווי
דוגמא לתחביר בפסקל: ;(X:=chr(Y
דוגמא לתוצאה מספרית: ;chr(65) = A
הפונקציה ord - נותנת ערך תווי לערך מספרי
דוגמא לתחביר בפסקל: ;(Y:=ord(X
דוגמא לתוצאה מספרית: ;ord('A') = 65
פונקציות שימושיות למשתנים תווים:
Function |
Description |
Argument type |
Return type |
chr |
character with given ASCII value |
integer |
char |
ord |
ordinal value |
integer or char |
integer |
pred |
predecessor (מס' קודם) |
integer or char |
same as argument type |
succ |
successor (מס' עוקב) |
integer or char |
same as argument type |
דוגמא:
להלן תוכנית המדפיסה את כל התווים המיוצגים במחשב:
חלק מהדפסת התוכנית תהיה:
· · · 33 --> ! 34 --> " 35 --> # · · · 118 --> v 119 --> w 120 --> x · · ·
דוגמא:
לעיתים,כאשר נידרש למלא טפסים שמתוכם מקלידים נתונים למחשב,יש צורך לברר אם יש שגיאות לא הגיוניות בהקלדה, למשל, לברר אם בשמות הוקשו בטעות ספרות. במקרה של טעות, יש להדפיס הודעה מתאימה האומרת כי המידע אינו חיוני.
נניח כי יש להקיש מאה תווים ולבדוק שאין ביניהם ספרה.
פתרון:
program NAME; var I:integer; CH:char; · · · procedur CHECK; {תת תוכנית הבודקת אם הוקשה ספרה בקלט של תווים כלשהם} begin for I:=1 to 100 do (*לולאה לקליטת מאה תווים*) begin {קלט} write( 'ENTER ,'ולאחריו' ,I,'הקש תו מספר); readln (CH); {הבדיקה} (*של הספרותASCIIאם התו נמצא בתחום הייצוג ב- *) (*אזי ההוראה תדפיס שהתו שגוי*) If CH>='0' then If CH<='9' then writeln('תו שגוי'); end; end; · · ·