לוגו/קלט ופלט

הדפסה למסך

עריכה

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

הפקודה print

עריכה

print היא פקודת הפלט המרכזית ברוב שפות התיכנות, וגם אנחנו השתמשנו בה כבר, לא פעם. print מקבלת כקלט משתנים, מילים, ביטויים חשבוניים, הליכים שהגדרנו, ועוד, ומציגה אותם, לאחר עיבוד, על המסך. ההדפסה נעשית בשורה אחת, כאשר פריטים שונים מופרדים ביניהם באמצעות תו הרווח. בסוף ההדפסה מתבצעת "ירידת שורה" אוטומטית. כזכור, print מכונה בקיצור גם pr, וכדאי לציין גם, שהדפסה של מספר פריטים תיעשה בעזרת הכללת פקודת ההדפסה ורשימת הפריטים בתוך סוגריים רגילים, כך:

([?print "Hi! [How are you)
  • שימו לב לכך שפקודת ההדפסה טיפלה ב"מילה" וב"משפט" לוגו, יחדיו. מה יקרה אם נשכח את הסוגריים העגולים?

הפקודה type

עריכה

type היא פקודה דומה מאד ל-print, אך ההדפסה נעשית ללא הפרדות אוטומטיות: בין פריטים שונים אין תו רווח וגם בסוף ההדפסה אין ירידת שורה. בעניין זה יש לשים לב לכך שההדפסה למסך בלוגו מתבצעת רק לאחר שהמחשב קיבל הוראה לרדת שורה. מסיבה זו, הפקודה type נראית כאילו היא אינה מדפיסה דבר. נסו:

([?type "Hi! [How are you)

ועכשיו הוסיפו את הפקודה הבאה, שתיתן למחשב הוראה (אוטומטית) לרדת שורה ו"תשחרר" את הפלט שיצרה הפקודה type אל המסך:

?...print "Well

שימו לב כיצד הודפסו הנתונים שהעברנו לפקודה type. השוו זאת לדרך שבה טיפלה print באותם נתונים בדיוק.

הפקודה show

עריכה

גם show היא פקודה דומה מאד ל-print. ההבדל היחיד בין הפקודות הוא ש-show מדפיסה רשימות בין סוגריים מרובעים. נסו גם כאן את הדוגמה הקודמת:

([?show "Hi! [How are you)

קלט מהמקלדת

עריכה

המקלדת היא האמצעי העיקרי שבעזרתו מקבלת לוגו קלט מהמשתמש. הפקודות הבאות מאפשרות לנו לקבל מידע באמצעות המקלדת:

חלון הקלט

עריכה

הפקודה readchar ויתר הפקודות שנדון בהן בשורות הבאות, פותחת חלון קלט מיוחד שבו המשתמש יכול להקליד קלט כלשהו. חלון זה ניתן לסגור בעזרת הכפתורים OK או Cancel, או בהקשה על מקש Enter. סגירת החלון בעזרת הכפתור OK או בעזרת מקש Enter, תעביר ללוגו את התוים שהוקלדו בחלון הקלט. רצף תוים זה נשמר כולו בזיכרון, עד שייעשה בו שימוש או עד שלוגו תקבל פקודה למחוק אותו. רצף תוים זה יכונה "המחסנית". (כדאי לציין כבר כאן, שסגירת החלון בעזרת הכפתור Cancel יוצרת בעיה, ולוגו תדפיס את ההודעה ...Stopping ולא תוכל להמשיך את ביצוע הפקודות שקיבלה.)

הפקודה readchar

עריכה

הפקודה readchar מחזירה, כפלט, את התו הראשון ב"מחסנית" ואז מוחקת תו זה מהמחסנית. בפעם הבאה שבה נפעיל את הפקודה readchar הפלט שלה יהיה התו הראשון במחסנית - כלומר התו השני שהקלדנו בחלון הקלט. בפעמים הבאות שבהן נפעיל את הפקודה readchar היא תחזיר תו אחרי תו את כל מה שהקלדנו בחלון הקלט.
בסוף המחסנית שומר המחשב באופן אוטומטי תו המציין את סוף ההקלדה ("\"). כאשר readchar תגיע לתו זה היא תחזיר גם אותו כפלט. בפעם הבאה שבה נקרא לה, readchar "תיתקע" ללא תוים להחזיר, ואז ייפתח מחדש החלון המיוחד, בציפיה לקלט נוסף מהמשתמש.

  • נסו את הפקודה הבאה:
[repeat 10 [print readchar
הלולאה שיצרנו אמורה להדפיס 10 פעמים את הפלט של הפקודה readchar. משום שמדובר בפקודה print, אנו יודעים שבכל פעם תסתיים ההדפסה בירידת שורה. כאשר לוגו מבצעת את הלולאה בפעם הראשונה, היא פותחת את חלון הקלט. בחלון הקלט אנו יכולים להקליד רצפי תוים ארוכים או קצרים. נסו להפעיל את הפקודה כמה פעמים, כאשר בכל פעם אתם כותבים רצפי אותיות באורכים אחרים. תוכלו לראות כיצד לוגו מרוקנת את "מחסנית" הקלט, תו אחר תו, ופותחת מחדש את חלון הקלט בכל פעם שה"מחסנית" מתרוקנת. שימו לב להדפסה של תו סיום הקלט. תו זה אינו נראה על המסך, וכל מה שאנחנו יכולים לראות הוא ירידת השורה שמוסיפה הפקודה print באופן אוטומטי.

הפקודה readchars

עריכה
  • הפקודה readchars מקבלת כקלט מספר ומחזירה, מתוך מחסנית הקלט, תוים במספר המתאים. פקודה זו אינה פועלת בלוגו בקריאה של קלט מהמקלדת, אבל היא יעילה מאד בקריאה של קלט מקבצים. עוד על כך - בהמשך.

הפקודה readword

עריכה
  • readword מחזירה גם היא תוים ממחסנית הקלט. למעשה, היא מחזירה את כל התוים שהוקלדו, כשהם מחוברים לכדי "מילה" אחת. הפקודה מרוקנת את מחסנית הקלט, ולכן בכל פעם שאנו נותנים ללוגו את הפקודה readword חלון הקלט ייפתח מחדש. נסו:
[repeat 10 [print readword

הפקודה readlist

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


הפרק הקודם:
משפטים ורשימות
קלט ופלט הפרק הבא:
טיפול בקבצים