פסקל – שפה לתכנות מבני

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

OCR (הסבר)
, שפה לתכנות מבני למד את שפת .245041 - - ספרי לימוד והכשרה במדעי המחשב הוצאת 'יהוד-עמי'' בשיתוף המכבון לפריון העבודה ותייצור! פסקל שפה לתכנות מבני + > 1 27 77 א קיה! ₪ ' , 5 מ ו ק ד שע לאשתי רות ולבנ?? אהרן, יעקב, דנילאל ואליהו צב? תודתנו נתונה לחברת יבמ ?שראל בע"מ, אשר איפשרה לנו באדיבותה להשתמש במדפסת האיכות "פסו"אספו0) להדפסת הספר. שרה'לה וזוהר ראויים לתודה על טרחתם הרבה בהקלדה של כתב היד, בעבודת העריכה של הספר ובעיצובו לדפוס. יבוא על הברכה משה ראב, אשר כתב את הנספח על טורבו-פסקל. הסדר והעריכה של הספר נעשו במחשב 26 18% באמצעות מעבד התמלילים 11 ואסיזסו של חברת. אינשירסופט בע"מ. פ'סקל שפה לתכנות מבני פרופ' אבא אנגלברג למד את שפת ,245641 יצחק עמיהוד ספרי לימוד והכשרה במדעי המחשב הוצאת "הוד-עמי" בשיתוף המכון לפריון העבודה והייצור 61 ץ שתוותוהזק סז ב ז 0 1/0 4 עט 8 .א .סק ות מז .1 עס 661060 0 כל הזכויות שמורות הוצאת הוד עמ? לספר? מחשב?ם בע"מ ת.ד. 560, רמת-גן 52105 אין להעתיק ולפרטם חלקים מספר זה ללא רשות בכתב מאת ההוצאה אלא לשם ציטוט קטעים קצרים בציון שם המקור הודפס בישראל אייר תשמ"ו, מאי 1986 46" פפתפום ווה 0 וחה-₪00 ה08-0308% 560 .0.8.ק 6 עג , [15786 ה ק ד מ ה על השפה ועל תכנות מבב? שפת פסקל ( |0504ק) קרויה על שמו של המתמטלקא? והוגה הדיעות בלייז פסקל ([8568ק 813156), אשר חי בין השנים 1662-1623 בצרפת. פסקל המציא את מכונת החלשוב 4564|1%5ק, הראשונה מסוגה, כדי לסייע לאביו בחישוב המלסים. עבודותיו המדעיות והתיאוריות שלו בתחום המיחשוב תרמו רבות לפי?תוה מדע? המחשב של זמננו. שפת התכנות פסקל פותחה ע"י פרופסור ניקלוס ווירת (ה%זוּא ).‏ .270%) בבית הספר הפדרל? פוללטכנ? (8ז6) בציריך, שוויצריה. תכנון השפה התח?ל ב-1969 והסתיים לאחר כשנה, כאשר נכתב המהדר הראשון. הגירסה התיקנית הראשונה של שפת פסקל פורסמה בשנת 1974. שפות התכנות הרבות שהיו קיימות בתקופה זו נחשבו כפשוטות, מורכבות, או מבוססות על שיטות שלא התאימו לעקרונות של התכנות המבנ? (55"06%4"60 9 ותוח8יטסיק). פרופ' ווירת טען שהן אינן מתאימות למתחילים ולעבודה מעשית, מכיון שהן אינן עיקביות ואינן "הגיוניות" ולכן החליט לפתח שפה חדשה. מפאת החשיבות של עקרונות התכנות המבני, אשר שפת פסקל נוהגת לפיהם, ראו? שנקדיש להם דברים אחדים: לבעיה מסוימת אחת, אשר עומדת לפתרון במחשב, ניתן למצוא כמה וכמה דרכ? פתרון אפשריות בעזרת הצגה גרפית. להצגה גרפית כזאת, אשר באה ללד? ביטו? בתרשים הזר?מה, ?ישנם מספר יתרונות: א. ניתן להציג בצורה נוחה וברורה את הקטעים העיקריים של התכנית ואת הקשרים ב?ני?הם. ב. ניתן לראות את הרצף של הפעולות העיקריות בכל קטע של התכנית בנפרד, ואת רצף הקטעים העיקריים המרכיבים אותה. ג. ניתן לקרוא ולהבין את התכנית, בל? להכנס לכל פרטיה. במשך שנים רבות נהגו תכניתנים לפתח כלל? עבודה משלהם ביצירת פתרונות לוגיים בתכניותיהם, אך ככל שהיתה התכנית גדולה - כך הלך והסתבך המבנה 5 והאחזקה שלה היתה יותר קשה ומורכבת. מכאן נבע הצורך להכניס סדר ושלטה בתחום זה של עיבוד נתונים. אנשי מדע מתחום המחשבים והמתימטיקה פיתחו שיטות, אשר איפשרו ל?צור תכניות בעזרת כלים וסטנדרטים קבועים, כדי שהטיפול בהן יהיה יותר קל ואחזקתן לא תתקל בקשיים. אחת מן השיטות שפותחו נוגעת לתחום התרשימים ולכתיבת תכניות, והיא נקראת תכנות מבנ?. שיטת התכנות המבני מבוססת על תיאורמה מתימטית, הקובעת, שניתן לכתוב כל תכנית בעזרת שלושה סוגי מבנים בסיסיים, אשר מוגדרים מראש: א. מבנה סדרתי (56006066). ב. מבנה איטרציה (חסוש1%6"8). ג. מבנה בחירה (חסו56166%). את המבנים השונים מציגים בתרשימים בעלי תבנית קבועה, שאין לסטות ממנה. לבל מבנה יש נקודת כניסה אחת ונקודת יציאה אחת ובמילדה שדרוש, אפשר לחלק אותו בחלוקה מפורטת יותר, בהתאם לכללי התכנות המבנ?. בספר זה, ההדרכה לתכנות בשפת פסקל הינה על פי עקרונות התכנות המבנ?, אשר מאפשרים פיתוח של תכניות בעלות מבנה פשוט וברור, גם כאשר פותרים בעיות מורכבות. לשפה התכנות החדשה של ווירת היו מספר תכונות בולטות: מהדר לעיל והסכוני שיכול לפעול גם במחשב זעיר. פשטות רבה לעומת השפות שקדמו לה: אהחזח0?, |6080, 1//ק. . פונקציות משופרות לעומת 08781%: ו-8516. מספר רב של מבנים המתאימים לעקרונות התכנות המבני (עיין בפרקים 1 עד .)64 ה. יישום פשוט של מספר מבני נתונ?ם: רשומות, רשימות משורשרות וקבוצות (עיין בפרקים 14-10, 16, 17). ו. תמיכה בשיטות תכנות מיוחדות, כגון רקורסיה ומשתנים מצביעים (ראה פרקים 15, 17). א ₪ < ב התכונות ד' עד ו' מאפיינות גם את השפה 7!/1, שפותחה ע"י יבמ. שפה זו מורכבת ועשירה יותר משפת פסקל וכוללת תכונות נוספות, אשר דרושות בתחום עיבוד הנתונים המינהלי ובתחום המדעי/הנדסי. בשפת פסקל הדגש הוא על פונקציות השירות הבסיסיות האופייניות לע?בודי?ם מדעיים/הנדסיים, על משמעת התכנות המבני ועל הגדרות מראש ללא ברירות מחדל (5ת00%10 %). התיכון (ח26510) הזה של שפת פסקל תרם לכך שקל יהיה להתאים אותה לפעולה אף במחשבים קטנים וזעירים. הגירסאות הראשונות של שפת פסקל פותחו תה?לה עבור מחשבים גדול?ם. כאשר הגיעו המיקרו-מחשבים לשוק פותחו מהדרים גם בעבורם ומטבע הדברים נוצרו גירסאות שונות של השפה, כשם שנעשה גם בשפות תכנות אחרות. ההבדלים ביניהן אינם משמעותיים ורובם הינם בתחום הטיפול ביחידות הקלט והפלט בגלל השוני בתכונות של היחידות האלו, המשווקות ע"י יצרנלם שונים. במיקרו-מחשבים ובמחשבים אישיים נפוצה בשימוש גירסת עטורבו-פסקל (ספ"טך 6 [8568ק). היא מאופיינת בהתאמתה לקיבולת ולעוצמה של המחשב הקטן ונותנת מידה רבה של נוחות תפעול בעזרת תפרלט? ההנח?יה והעורך ("%50ו56), אשר משולבים עם המהדר. על גירסת טורבו-פסקל ועל ההבדלים בינה לבין שפת פסקל התיקנית אפשר לקרוא בנספת ב' של ספר זה. על הספר הספר שלפנינו עוסק בנושאים שמהווים את הקורס ללימוד שפת פסקל ברמה תיכונית ואוניברסלטאית, לפ הדרישות של משרד החינוך והתרבות והמכון להכשרה טכנולוגית (מה"ט). הוא מתאים לל?מוד בכיתה וגם לל?מוד עצמי. הספר מציג בהדרגה את הבסיס לתכנות בשפה זו ועובר לנושאים מורכבים ולתכונות המייחדות אותה. המתחיל בלימוד תכנות ייעיב לעשות אם יעלין בנספת א' ובספרות המבוא לעי?בוד נתונים, לפני שהוא ניגש לל?מוד השפה. הסעיפים והשאלות, אשר מיועדים לל?מוד מתקדם סומנוּ בכוכבית (*) ואפשר לדלג עליהם מבלי לפגוע ברצף הלימוד. הספר מדריך את הלומד להכיר את מרכיבי השפה ובעזרת הסברים ודוגמאות הוא מנחה אותו לעצב תוכנית; להשתמש במבנים פשוטים ומורכבים, בפונקציות ובפרוצדורות; לטפל בנתונים, במערכים ובמבנים של רשומות; לערוך תמליל; להפעיל שיטות מיון וחיפוש; לנצל שיטות עיבוד מתקדמות ועוד. בנספת ב' ניתנת הנחייה כיצד להשתמש גם בעורבו-פסקל ומוסברים ההבדלים בין גירסה זו של השפה לבין הגירסה התיקנית. המתודולוגיה היא הצגת נושא ותרגול מיידי שלו, ע"* הדגמה של תוכנית בצירוף הסברים מפורטים. בסוף כל פרק ניתנו תרגילים רבים, אשר כוללים שאלות הבנה וחזרה ושאלות תכנות. שמונת הפרקים הראשונים הם הבסיס ללימוד השפה ולשאר פרק? הספר. בפרק 1 מוצגות בפני הסטודנט תוכניות פשוטות המורכבות מקלע של נתונים, פעולות חלשוב פשוטות ופלט של תוצאות. בפרק זה ועד פרק 5 עוסקים במשתנים המייצגים ערכ?ם מספריים בלבד. בפרקים 2, 3, 4 מוצגים מבני הבקרה המאפיינים תכנות מבנ" בכלל ותכנות בפסקל בפרט. בפרק 5 עוסקים במערכים, שהם מבני הנתונים הבסילסיים בלותר. בפרק 6 מוצג, מוסבר ומתורגל השימוש בנתונים לא נומר?ים, דהיינו תווים ומחרוזות. בפרק 7 מוצגות שיעות שונות של חיפוש, מיון ומיזוג, שאפשר להפעיל גם על נתונים נומריים וגם על מחרוזות. בפרק 8 עוסקים בשלב נוסף של תכנות מבני באמצעות פרוצדורות ופונקציות. הפרקים (9)-(17) שייכים לשלב השני של לימוד השפה. מומלץ ללמוד אותם באופן מסודר, אך אפשר לדלג על נושאים לפי העניין. בפרקים אלה ישנם נושאי תכנות, 7 אשר חלקים מהם חורגים ממסגרת הל?מוד של התלמיד המתחיל. לנוחותו, סומנו בכוכבית (*) סעיפים ושאלות, אשר ש?יכים לשלב הלימוד המתקדם. מן הראול שהלומד יהיה בקיא בשיטות אחזקת המספרים במחשב, כפי שמוסבר בנספח א'. פרק 9 מטפל בכמה נושאים מתקדמים העוסקים בפרוצדורות ואפשר לדלג על כולו, או על חלקים ממנו, אם הנושאים אינם מתאימים למסגרת הלימודים. פרק 10 דן בנושא של רשומות. זהו נושא מרכזי וחשוב להמשך הלימוד ועל כן מומלץ לשקוד על הדוגמאות לשימוש ברשומות. פרקים 11, 12, 13 מהווים ?חידה אחת המטפלת בנושא קבצים. אפשר לדלג על נושאים מסוימים אם אין בהם עניין מ?וחד כמו למשל, פרוצדורות שונות לעי?בוד ומיון קבצים, אשר בדרך כלל מסופקות בתוכנית שרות ולא נכתבות ע"י המתכנת. ‏ הנושאים של קבצים ?שירים ואינדקס סדרתיים א?נם כלול?ם בכל הגירסאות של שפת פסקל ועל-כן הקורא צריך לבדוק איך ואם להשתמש בהם במהדר שברשותו. פרק 14 עוסק בקבוצות. הוא עומד בפני עצמו ואינו מתבסס על הל?מוד הקודם של קבצים. פרקים 15, 16, 17 מהווים יחידה אחת, אם כי אפשר לדלג על פרק 15 (רקורסיה) ועל נושאים בפרק 17 העוסקים בעצים. נספה א' מכוון לתלמידים, אשר עושים את צעדיהם הראשונים בתכנות, או שא?נם מכירים שפת תכנות מדע?. הנושאים החשובים הם השיטות השונות להצגת מספרים. בכמה מפרקי הספר יש התייחסות לנושאים אלה. , , נספה ב' מציג את גירסת הטורבו-פסקל ואת המהדר המיוחד לה עם תכונותיו המותאמות לנוחות המשתמש במחשב האישי ובמיקרו. הביבליוגרפיה שבסוף הספר תאפשר לקורא והלומד המעוניין להרחיב ולהעמיק את ידיעותיו בשפת התכנות פסקל. היא מחולקת למספר חלקים, לנוחות הקורא: ספרים בעברית וספרים באנגלית וספרות רקע למבוא לענ"א ולמבנה המחשב. מילון המונחים ואינדקס יקלו על הקורא למצוא נושאים הדרושים לו ולהכיר מונחים נפוצים בעברית ובאנגלית. איך תלמד/י בספר? מוצע ללמוד כל פרק ב-3 שלב?ם: א. ללמוד את תוכנו של הפרק. אם יש קושי כלשהו, אפשר להריץ במחשב תכנית אחת או יותר מן הדוגמאות המופיעות בו. ב. לענות בכתב על השאלות כדי להעמיק את הבנת החומר. ג. להשיב על כמה מתרגילי התכנות ולהריץ אותם במחשב. הקורא ייע?ב לעשות אם יעיין בספר הוראות ההפעלה של שפת פסקל במחשב שעומד לרשותו, לפני שהוא מתחיל בתכנות. תוכן העניינים הקדמה . 2 תוכן הענ?ינים ק - תכנלות חלשוב והדפסה 1 פתרון בעלה בשפת תכנות . 2 תכנות בשפת פסקל. 9 " 3 תכנון הפלט ותקשורת אדם-מחשב. 4 פונקצלות " 0 2 , 5 קבועלם ומשתנלם שלמלם , 6 משתנים ומספרלם ממשללם 7 המבנה של התכנלת - סלכום. . 8 תרגלללם. . רק 2 - משתנ?ם ובלען?? ול? 1 משתנלם בוללאנלים , 2 בלטולים בולל . םילנא‎ 3 חוקל דל-מורגן ‏ . : 4 תרגלללם. . פרק 5 - לולאות 1 הפקודה 0כ18..2חה ‏ . . 2 הפקודה 8..20א0ע. . 6 3 לולאה ללא גבול עליון 4 הפונקציה הבוליאנלת ‏ 20%. 2 5 שלקולים לבתלרה של הוראת לולאה 6 המפקודה מ1עאט. . ץגמקות 8 7 תרגלללים. . , פרק 5% - הסתעפולות הפקודה ‏ 1 . הפקודה 0458 הפקודה 6010 מבנה התכנלת. 2.1 4.2 3 64 הנתלות לשלמו 5 6 תרגלללם. ש ב-6010 לים פרק 5 - מערכ?ם 1 משתנים רב-ערכילם במלמד אחד . 2 משתנים רב-ערכלים בשנל מלמדלם , 3 סוגל נתונלם שמוצהרלם ע":? המשתמש. " 08 תרגילללם. 2 6 . , 4 " , , ק - ונים לא מספר??ם 1 משתנים מסוג תו . , 9 " 6 " 2 2 הפקודות פגתת ו-חצדאט , " . 2 . 3 מחרוזות. . . 9 , . 4 תרגלללם. 0 . , " " פרק - ח?פוש, מלון ומל?זוג 1 מבוא 4 , . " 2 חיפוש ‏ . . ג , / 9 3 מלון 4 . " 9 08 מלצוג . , 2 , , 5 תרגללים. . . . . . פרק 8 - פרוצדורות ופונקצ?ות 1 מבוא " . , : . . 0 . , 2 פרוצדורות . : , . , . . " 3 פונקציות . ע , " % 2 . . 4 שמות לוקללילם וגלובללים . . . 9 " 5 מבנלם משולבלם ‏ . , . , " 6 תרגלללם. . 2 . , / , פרק 9 - ??שומ?ם של פרוצדורות ופובקצ?ות 1 מספרים אקראללם . 5 , , , 2 שלטות מונטה קרלו ‏ . . . . 3 פרמטרים שהם פונקציות או פרוצדורות 08 פרוצדורות לשליטה במסוף . " . 0000006000 .םלללגרת‎ 5 פרק 10 - רשומות 1 מבנה רשומות 2 . 2 4 5 2 הפקודה 0כ..ַ7זח ‏ . ' . . / 3 אלתור מללות מפתח בתמל:ל . . , 8 פעולות במחרוזות 5 , / , 0 .99 13 107 3 |19 127 19 138 139 1-9 16 2 1% 107 107 15 177 12 18 18 18 202 207 210 222 25 220 208 5 דוגמאות לפעולות במחרוזות ‏ . , " 6 4 . . 0 . 233 6 תרגלללם , , : . , 9 . , ₪ , . " . 237 ק - קבצים 1 שללוב קבצלים בתכנלת. , , " " . , , . , . 242 2 קרלאה ועלבוד של נתונלים. 4 " 2 . : " . 9 . 249 3( פרוצדורות מלנהלה של קבצים . : . % " ₪ . . 4 253 4 מלון קבצלם. , , . . : , , , , . , . 258 5 תרגלללם . , , , 2 : 9 " " . , 6 . 263 רק - צעדכון קבצ?לם 1 עלבוד קבצים 0 . 0 . , " 5 , 0 . 5 . 266 2 רשומות באורך משתנה. . 0 , , / , 2 . , . 267 3 עדכון קובץ סדרתל ‏ . " 2 : 2 . , . . 6 .‏ 270 04 קבצלם לגלשה לישלרה . , . " 2 , , 9 / / . 276 5 קובץ אינדקס-סדרתל . , , , , " , , , פ . 278 6 תרגללים , ג , ' , " 6 2 | , "ו .- 21 רש 15 = קבצ? 5 1 עלבוד של קובץ תמליל , . : , . : 5 " . .‏ 285 2 פרוצדורות לקרלאה ולכתלבה ‏ . , " , , , . + .-287 3 עורך תמללל. . . . 2 . , 9 " , . . . 290 04 תרגיללים . . , " : . , 4 , 2 . 9 . 299 פרק 14 - קבוצות 1 הגדרה של קבוצה. , " . 2 , , . , 5 .- 2301 2 הצהרה ובנייה של קבוצות. 9 , . . " % " " . 302 3 השוואה של קבוצות ‏ . 5 " " 4 , . . 9 + .| 304 4 אלגברה של קבוצות . . ג " . " . 2 . 4 . 309 5 סדר הקדלמולות של פעולות , ג , " , 8 . : .-2412 6 קלט/פלט של קבוצות . 6 , 0 0 8 , .313 7 ל*לשומים של קבוצות . . " , / : 2 , 2 , . 315 8 תרגללים : . : . . 4 , . : 220 פרק 15 - רקורסיה 1 דוגמאות בסיסלות 9 . , . 4 . 0 . . " . 323 2 משתנים לוקללים. . 2 י . 4 , " " " " . 326 3 מגדלל הנוי - הדגמת רקורסלה. , , . 4 0 , , . 328 084 תרגלללם . . 5 . . . . : 4 " . . . 332 11 1 רשלמות. 9 . - 5 2 עלבוד של רשלמות , . 3 מתסנלות , . . . 08 תורים . . . 5 עצלם בלנרלים . . . תרגילים . . . . פרק 17 - מבנ? נתוב?ם ד?נמ??ם . . .. . . . 0% ₪ 0 ₪ 441 00 כ 6 12 הגדרה וילשומלם. . . רשלמות משורשרות . . מחסנלות . . . . תורלם . . . . . עצים . תרגילים ... - חשב ושלעות ספלרה מערכת המחשב . . . . מספרים בלנרלים ובסלסי מספרלם. שילטות לייצוג של מספרלם שלמלם. המספר השלם הגדול במחשב ‏ . מספרלם ממשלים בשלטת הנקודה הצפה תרגילים . . . . . - עורבו-פסקל מבוא. ₪ 6 " , " מה אינו פועל בטורבו?. 2 סוגי נתונים וקבועים . , פעולות במחרוזות . . , הקצאת זיכרון. , , ניהול קבצים . , , . פעולות מסך וגרפיקה . 9 מבנה התכנלת . 2 . , שילוב שגרות בשפת מכונה . הוראות למהדר. . . 258 218 3 27 39 207 3 55 371 222 5 127 08 5 |08 222 1208 106 207 207 108 1.09 00 201 02 3 04 55 07 09 פרק 1 תכניות חישוב והדפסה 41 פתרון בע?לה בשפת תכנות 1 תכנון הפתרון תהליך הפתרון של בעלה בעזרת המחשב כולל שנל שלבים: א. תיכון (ם6518כ2). בטלב התלכון, מתארלם את הצעדים הלוגלים לפתרון הבעיה. לשם כך משתמשלם בתרשימלם, כפ: שנראה בהמשך. ב. תכנות (8ת1תתהצפסץ?), או קלדוד (8מ0081). בשלב התכנות מתרגמלם צעדים אלה לפקודות מחשב אשר נכתבות בשפת תכנות. סדרת הפקודות, אשר נכנה אותן תכנלת (מהצקסץ?), גורמות למחשב לבצע פעולות מסוימות שתכליתן להגיע לתוצאה מוגדרת, ‏ או לפתרון של בעיה מוגדרת.. | לכאורה, צריך לכתוב את הפקודות בשפת מכונה (6ת1ת80! 86 ) כדל שהמחשב, או רכילבלו האלקטרונלים לוכלו לבצען.דרך פעולה זו אלנה רצולה ולא נדון בכך כאן. במקום זה נתכנת בשפה עיללת (ם818 6 1,6061) - בשפת פסקל (245641), אשר דומה לשפת אנוש ונוחה לתכנות. כדי שהמחשב יוכל לפעול על פי התכנית הזו צריך להסב אותה לשפת מכונה. משימה זו נעשלת ללא מעורבות המתכנת, באמצעות תכנית מהדר (ע0000116). לאחר ההלדור מקבלים תכנית בשפת מכונה ואפשר להר?ץ (מטת), או לבצע (56ט60א₪) אותה במחשב. הבעיה לדוגמא שעלינו לפתור הלא חישוב השכר השבועל של פועל על 5 שעות העבודה שלו. את הפתרון נצלג, כאמור, בתכנית מחשב בשפת פסקל. בזמן הכנת התכנילת לא לדועים שלעור שכרו לשעה ומספר השעות שהוא עבד. נסתכל איפוא, על הכמויות האלו כנעלמים (או משתנים - 8:182165, כל ערכם יכול להיות שונה בכל הרצה של התכנלת) וניתן להם את השמות 58108 ו-5801 בהתאמה. בזמן הרצת התכנית יש לספק לה ערכים מספר:ים עבור המשתנלם 108ע5 ו-51407. התשובה שמחפשים, כלומר שכרו השבועי של הפועל, הלא התוצאה שלמסור לנו המחשב בסוף הבלצוע המוצלח של התכנלת. עלינו מוטל רק תפקיד אחד ‏ - לצ:ין 13 מקום בזיכרון המחשב שבו תותסן (560%6, בטעות מקובל היה לומר "תאוחסן") התשובה הנכונה כאשר תהלה מוכנה. למקום זה נקרא 50148, שהוא המשתנה השללשל בתכנית. מבחינת המחשב, הנעלמלים שהגדרנו מהוולם שמות של תאלם בזיכרון (עצסת16), שבהם ניתן להחזלק תווים, אשר יכולים להרכיב מספרלם, אותיות או סלמנלם מיוחדים. כל שם מתליחס לאותו מקום בזיכרון במהלך ביצוע התכנלת ולכן נקרא לו כתובת (1664:655), או מען. המשתנים לכולים להופיע כך בתוך הזיכרון: זיכרון 8 רדרש ו 7 ה אתאספ 2 תרשלם זרימה לפתרון בעיה כדי לתכנת את הפתרון נכין תחהילה תרשים צרימה (6ץ8ת60 שטס1ת). 14 הסבר: הצורות הגרפיות הממוספרות נקראות סמלים, או בלוקים (5א5100). המספרים ליד כל סמל מלועדים להסבר בלבד ואלנם מהווים חלק אינטגרלי של התרשים. (1) סמל זה מצללן התחלה או סלום של תכנלת. (2) מקבילית מסמלת קלט (םטקח1) - קליטה של נתונים מחוץ למחשב, או פלט ( 8גוק+00) - פלט של נתונים מזיכרון המחשב ‏ החוצה, למשל ע"* הדפסת התוצאות על נליר או הצגה במסוף. בבעלה שלפנינו אנו מבקשים שבזמן ביצוע התכנית המחשב *הלה מוכן לקבל מספרים שנספק ממסוף למשל. המספר הראשון מייצג את שיעור שכרו של הפועל לשעה +ירשם בכתובת הזלכרון שקראנו לה אזאפ. המספר השני מללצג את מספר השעות שהפועל עבד ולרשם בכתובת הזיכרון שנקראת 58407. (3) מלבן מסמל תהליך, אשר *כול להיות פעולת חישוב (מ0810018610) או השמה ( %ת0תת45518). המכפלה טל השכר לשעה במספר השעות שהפועל עבד נותנת את המשכורת המגלעה לו. רוצים טהמחשב *חסין מספר זה בכתובת שנקראת 508.8, לאחר שלסלים את החלשובים. (4) לתוצאת החישוב יש משמעות רק אם אפשר להשתמש בה. לשם כך צריך לקבל אותה על גב המסך, ‏ או בדפוס על נליר. פעולת פלט אחרת *כולה להלות כתיבה על תקליט מגנטי, תקללטון, או סרט מגנטל. המקבילית מסמלת פעולת פלט, כפי שהוסבר קודם. (5) כמו ב-(1). סדר הביצוע של הפעולות הוא כסדר התלצים, ולכן מבנה כזה נקרא מבנה סלדרתל ( 6ע5%2₪0%0 8181ת56006). כלומר, מתקדמלם מן ההתחלה עד לסלום בלי לדלג על פעולה כלשה? ומבלי לתזור על פעולה כלשהי. 2 תכנות בשפת פסקל נכתוב כעת בתכנלת בשפת פסקל את פתרון הבעיה שהוצגה בסעיף 1.1: , (1טפצטס, דטעאד) 1דמתסא5גא התססתע (1) אא (2) :50848 ,58407 ,ת510 (3) י/ אזסתת | (8) ; (58407 ,תטדע5) פגמת (5) 07 * תט1ח5 =:50848 (6) (ת50₪8) אתמוזתח (7) .פא (8) אם הקלט שהוכן למחשב נראה כך: - 10.0 10 אז הפלט ילראה כך: 02+1.80000₪ כלומר: 180 (מאה ושמונים). 15 המספרים בסוגרלים משמאל לשורות התכנלת מיועדים להסבר, או בכדל לעקוב אחר הסדר הכרונולוגל של הפקודות. הם אינם חלק אלנטגרל? של התכנלת. הקו מתחת למלים מסולמות מדגיש שהן נקבעות ע"י חוקל השפה וצריכות להופיע בכל תכנית בדיוק כפל שהן כתובות למעלה. אלו הן מלים שמורות (66ט650ק 5)), אשר מרכיבות את שפת התכנות. הקו להדגשה נלתן כדוגמא בלבד. בסעיפילם הבאים נצלג הסבר לתכנלת. המספרלם בסוגרלים בראשל הפסקאות מתילחסים לשורות המסומנות של התכנלת. כך ננהג גם בשאר ההסברים בהמשך הספר. 1 כותרת התכנית (1) השם של התכנית (ַַַַתַ6סתִק2) הוא 445%08811. שם זה נלתן ע"? המתכנת בכדל לציין את מטרת התכנית וכדי להבדילה מתכניות אחרות, אשר שמורות במחשב. צסטפאז ‏ - מצלין שהתכנלת תצפה לנתונלם מבחוץ. נתוני קלט יסופקו באמצעות התקן (106ט26) הקלט הסטנדרטל באותו מחשב, במקרה שלפנינו זוהל מקלדת מסוף. 71 -- מציין שהתכנלת תפיק תוצאות, הנקראות פלט, באמצעות ההתקן הסטנדרטל? לפלט באותו מחשב, בד"כ מדפסת או מסך של מסוף. בכדי להפרילד בין משפט למשפט משתמשים בנקודה-פסיק (;). 2 הצהרת משתנלם (2) אגט מלשון 74218516 (משתנה) הוא כותרת לרשלמת המשתנלם שלשתתפו בתכנית. אסור להשתמש במשך התכנית במשתנה שלא מצהירלם עליו. משפט תג הוא משפט הצהרה (%5מ5%8%0006 מ26618:8%10) כל הוא נותן ידלעות כלללות על המשתנים בתכנלת ואינו מחייב ביצוע של פעולה כלשהל. (3) השמות 51401, 5:08 ו-508.8 נבחרו ע"י המתכנת כדי לציין את משמעותם. שמות המסופקים ע": המתכנת (עבור שם התכנית ועבור שם של משתנה) נבחרלם לפי הכללים הבאלם: א. שם משתנה חייב להתחיל באות (ז"א אחת מן האותיותי(1 עד 2). ב. שאר התווים הכלולים בשם המשתנה חייבים להיות אותיות או ספרות ואסור להשתמש בכל תו אחר (למשל +,-,*,?,/). לש מהדרים שבהם אפשר לכלול את התו ‏ (06250026מ0) בשם משתנה, ובהמשך ננצל זאת. תו זה משפר את הקרלאות של משתנים כאשר רוצים ששמם להלה מורכב משתי מלים, למשל: 64200 פם1תצ במקום 64200סם,חצ. ג. לא נקבע אורך מקסלמלל לשם, אבל המהדר מתיחס רק ל-8 התוולם הראשונים שלו. על כן, יש להמנע משמות שבהם שמונה התוולם הראשונים זהים. ד. אסור לבחור שם שהוא מלה שמורה (בסוף הפרק מופלעה הרשימה של כל המללם השמורות בשפת פסקל). דוגמאות: שמות מותרים: צת10את/א1, 2286, 4500, 702448 שמות אסורים: 1450 (מתחיל בספרה) 8 (כולל תו אסור) 0% (מלה שמורה) 16 אחרל הנקודתלים (בשורה 3 בתכנית) מופלעה המלה השמורה 8(0ת, שתרגומה: ממשל. הלא מגדלרה משתנה שמללצג מספר ממש?, כ? המשתנים שנשתמש בהם בדוגמא זו מילצגים מספרלם עשרוניים (בעלי שבר עטרוני). בנוסף למשתנים מן הסוג 1 אפשר ‏ להשתמש במשתנים מן הסוג תע6סדא1, ז"א משתנים אשר מללצגלם מספרלם שלמלם. המלה תועת מציינת שהל?צוג הפנלמי של המספר במחשב :היה בשלטת הנקודה הצפה, כאשר המלה תתסתזאז מצלינת שהלייצוג הפנימי הוא במשלים לשניים (הסבר בעניין זה ראה בנספת). אפשר לתאר את המשפט ת%4 בצורה סכימטית, כדלהלן: בהמשך נשתמש בתרשים מן הסוג הזה בכדי לתאר בצורה סכלימטית משפטים בפסקל. כל תו או מלה שנמצאים בתוך צורה מעוגלת חייבים להופיע ככתוב. מלה בעברלת, אטשר מופיעה בתוך מלבו לש להחליף במשתנה אשר נקבע ע"* המתכנת. כאשר החצלם מסתעפלם, פירוש הדבר שיש לותר מאפשרות אחת להתקדם והמתכנת *בחר בכיוון הרצול בהתאם לתנאל הבעלה. מכאן, שבהצהרת 0% אפשר לרשום משתנים אחדים מכל סוג, כאשר פסיק בלבד מפרלד בין אחד לחברו. אפשר גם לרשום כמה סוגים של משתנלם, כאשר התו נקודה-פס?לק (;) מפרלד בלן סוג לסוג. 3( התהתלק הבלצועל (4) המלה א8801 (התחל) מצללנת את תחילת הוראות הביצוע של התכנית. המשפטים לפנל מלה זו הם הצהרות (58ת2661828%610). המשפטלם שלאתרלה הם פקודות (5מ0510ט582ת1). המלה א3861 נחשבת סימן פיסוק ולא משפט ולכן אלן לרשום אחריה נקודה-פסיק. קריאת נתונים (5) הפקודה עאמת מציינת שמבקטים לקבל כקלט את הערכים של שנ: המשתנלם 8 ו-584071. נקיש במסוף שני מספרים עשרונ?ים המופרדים ע"ל פסיק או רווח אחד לפחות. יש לזכור, שלאחר הקשת הנתונים חובה להקיש בקליד המורה למחשב לקלוט את הנתונים, בכדי שהם לועברו מהמסוף לזיכרון המחשב. קליד זה קרו: אתעמת, תתצאם או כדומה. מספר ממשי אפשר לייצג בשתי דרכים: א: ייצוג עשרונל (לקרוא משמאל לימין): [לפחות ספרה אחת] [.] [לפחות ספרה אחת] [סימן + או -, אופצלונלי] 17 לדוגמא, מספרים עשרוניים חוקלים: | 29.8- 18.+ 11 מספרים לא חוקיים: 017. (אין ספרה בצד שמאל) .7 (אין ספרה בצד למלן) ב. ייצוג מדעי (לקרוא משמאל לימין החל מהשורה הראשונה): [לפחות ספרה אחת] [סימן + או -,אופציונלי] [אין נקודה, או שיש נקודה עם ספרה אחת לפחות מלמין] [ספרה או שתי ספרות] [סימן + או -,אופציונלי] [8] התו 2 מחליף את המללים "בחזקת 10" כך, שהמשמעות של 582 הלא 5 כפול 10 בריבוע. לדוגמא, ליצוג חוקל: 37- 2.7 +6 7 2007 ילצוג לא חוקי: ‏ 7.524.1- (אחרל 8 לבוא רק מספר שלם) 148 (לפחות ספרה אחת צריכה לבוא לפנל 8) 5 ((מקסלמום של 2 ספרות אחרי 8) לכו, בזמןו ביצוע התכנלת, אם נקיש במסוף 5 1.1 המשתנה 58108 יקבל את הערך 14 והמשתנה 5101 יקבל את הערך ‏ 42.5. הערכלם נקראים משמאל לימין. אפשר לסכם את הללצוג של מספרים ממשלים על לד? התרשלם שמופיע למטה: 8 אפשר, אך אין זו חובה, לכתוב סימן ( + או - ) משמאל למספר. רק האלמנטלם שהם על הקו המרכז? הם חובה וגם אז, רק אם אלן קוו עוקף.אחרל הסלמן כותבלם לפחות ספרה אחת. החץ המסתעף למטה מן הספרה מראה שאפטר לכתוב מספר כלשהו של ספרות. בשלב זה אפשר לס?ים את המספר הממשל, אם עוברים בחץ העוקף למעלה מו הנקודה העשרונלת וכשמגלעים לקו המרכזי עוקפלם את ה- ₪ בקו התחתון. אם כוללים את הנקודה העשרונלת במספר, חליבים לכלול לפחות ספרה אחת בצד ‏ *מין והחץ למטה מראה שאפשר להוסיף כמה ספרות טדרוטשות. עכשלו אפשר שוב פעם להפסיק, אבל אפשר גם להמשלך עם ₪, + או - אופצלונלי ולפחות ספרה אחת, אך לא לותר משתללם, אף שלא נלתן להסילק זאת מן התרשלם. מספר טלם מוגדר כך (משמאל ללמלן): [לפחות ספרה אחת] [סלמן + או -, אופציונל:] לדוגמא, *יצוג חוקל: ‏ 3- 1207 זאזאא (המספר השלם הגדול בלותר שהמחשב *כול להחזלק) כ<לצוג לא חוקל: 1, (פסיק אסור) -7 (סימן מצד *ימין) בדוגמא של חישוב השכר הקשנו 0 18.0 אך יכולנו גם להקליש 10 8 . ולקבל תוצאה נכונה, מכלון שהשלמלם הם בכלל המספרים הממשללם, כמו שראלנו מו התיאור הסכלמט? של מספר ממשל. מספרים שלמלם וממשללם לכולים להופיע בגוף התכנית גם-כן, ולא רק כקלט מן החוץ. כאשר הם כתובים בתכנית נכנה אותם קבועלם ( %8מ5%8ת00). הוראות השמה (6) הוראה עם הסלמן =: הלא הוראת השמה (5מ558%006 %מ6מת55:8). הסימן * מסמל פעולת כפל. כוונת ההוראה הלא שהמספר שנמצא בכתובת 5140% *וכפל במספר שנמצא בכתובת 58108 והתוצאה תועבר לכתובת 5084%. אם הלה ערד מספרל בכתובת 568458 לפנ:* ההעברה, הוא למחק ויוחלף ע"< המכפלה של 578407 ב-58105. משמעות הסימן =: היא כמשמעות החץ --+ (ז"א מוחלף ע":) ולא כמשמעות סלמן השלויון (=). לכן נוכל לכתוב 1+א=:א, כאשר כוונתנו לקחת את הערך הקודם של א (למשל 0), להוסיף לו 1 ולהכניס את הסכום 21, שהוא הערד החדש טל א, לכתובת של א. בפעולה זו נמחק את. הערך הקודם (20) של א. מאידר, 1א=א מהווה-סתירה מתמטלת. פעולות אחרות, בנוסף לכפל, אשר מוגדרות בין קבועים ונעלמים הן חלבור (+), חלסור (-) וחילוק (/). אם 4 ו- 5 הם משתנלם שלמים אפשר להגדלר שני סוגים של חללוק: א. חילוק שֶלם: כאשר מחלקים 4 ב-8 מקבלים שתי תוצאות של מספרלם שלמים: חילוק שלב מנה (5ם080516) ו-שארלת (062ת76081).. את המנה מקבלים ע"* הפעולה ---- 19 5 1 2 ואת השארלת - ע"? הפעולה 5 400 2. למשל, אם נתון ,4=10‏ 5=3, מקבלים אחרל ביצוע הפקודה 5 21% =:6 והפקודה 8 402 ג=:2 את התוצאות 3, 2=1, בהתאמה. ב. חילוק עשרוני: מסומן ע"י 8/5. על פיי הערכים שבדוגמא הקודמת, אחרל בילצוע 0:=4/2 נקבל ‏ 0=3.333. אף על פי שהאופרנדים ( ו-2 הם שלמים, התוצאה היא ממשלת והמשתנה 6 צריך להיות מוגדר כמשתנה ממשל. בהוראת ההשמה שנמצאת בשורה השללישלת (58407 * 5108 =:ת5084), כל שלושת המשתנלם מוגדְָרים כמשתנים ממשלים. היה אסור לכתוב הוראה זו אם 50618 היה מוגדר כמשתנה שלם, שהרי משתנה המלועד להחזיק מספרילם שלמים ‏ אינוה יכול להחזיק תוצאה שהיא ברוב המקרים לא מספר שלם. מאלדך, אם קורה מקרה הפוך, ז"א אם 58108 ו-58401 היו מוגדרים כמשתנים שלמים ו-808.8 היה מוגדר כמשתנה ממשל, הלה מותר לכתוב 5801 * 58108 =:ת.5081. הטלעון הקודם קביפ כי אם 5080 יכול להחזיק מספר ממשל, הוא בוודאי לכול להחזיק מספר שלם. תיאור סכמטי של פקודת הצבה: ביטוי אריתמטי = משתנה ביטויל ארלתמטי (ת6510+כ5אע 6 תתע) כולל משתנה אחד או קבוע אחד או שילוב כלשהוא של משתנים וקבועים, אשר מחוברים ע"ל האופרטורים הארלתמטללם (מ7698510ק0 6810תת15ת )1‏ +, -, *, /, טדת, או ססא. נרשום למשל כמה ביטויים ארלתמטיים: 7- 4 384 פסא 10 7 17 15 האם הערך של הבלטוי האחרון הוא 18 (15+15/5=18) או 6 (15+15(/5=6))? כל הספרות חייבות להיות באותה שורה במסוף, ועל כן קשה להבחין בסדר הפעולות הנכון. לשם כך קבעו חוקי קדימות לביצוע פעולות, לפל הסדר הזה: (1) ביטוי בתוך סוגריים, י (2) סימן - , כאשר הוא מסמל שלללה ולא חלסור, (3) עסא , טזכ , / ו ; .+,- )66( כאשר יש אופרטורים באותה רמה, מבצעים את הפעולות משמאל לימין. בביטוי ‏ 15+15/5 מחשבים תחילה את 15/5, שהרל חללוק (ברמה 3) מקדים את החיבור (ברמה 4) ונקבל שערך הביטול הוא 18. אבל אם נכתוב 15+15(/5), לש לחשב תחילה את הביטול שבתוך הסוגרליים, מכיון שהוא ברמה 1 ונקבל שערך הבילטול הוא 6. בביטול 5+7- מחשבים תחללה 5, כל המינוס הזה מבטא שלילה (רמה ‏ 2) ואת"כ 20 מחברים ‏ 7 (רמה 4) ומקבלים 2. לו סדר הפעולות הלה הפוך (ז"א חיבור קודם לסימן טלילה), היינו מקבללם 2. כדל לבצע חלבור לפנ שלילה כותבים את המספרים בסוגרלים בצורה זו: (5+7)-. הבלטול 34 כסא 0 מכלל שני אופרטורים באותה רמה ולכן צריך להתיר אותו משמאל ללמין. ערך הביטו?ל הוא 4, כלומר 3 02א 10 כפול 8. כאשר הערך של בלטול ארלתמטי הוא מספר שלם, המשתנה שמופלע בצד שמאל ‏ לכול להיות מוגדר כשלם, רק כאשר מתקלימים שנל תנאים: א. הבלטול כולל משתנלם וקבועים שלמים בלבד. ב. הביטוי לא כולל חללוק עשרוני (כלומר /). הביטוי ‏ 4+2(/2) למשל, נחשב ממשל בכל מקרה כ? כלולה בו פעולת ח*לוק. כדל שהבלטוי 2+2 לחשב ממשל, מספלק שלפחות אחד מהמשתנים 2 או 8 להלה ממשל. הפקת הפלט (7) כדי להפיק מן המחשב את התוצאה משתמשלם בפקודה א80צזתח. היא מורה למחשב לכתוב, במסוף או במדפסת, את הערך של המשתנה שמופיע בסוגרלים (ת5080) ואח"כ לדלג לשורה הבאה. סיום התכנית (8) המלה סאע מציינת את סוף הקטע של הוראות הביצוע של התכנלת. הלות והילא לא נחשבת פקודה בפנל עצמה אלא רק סלמן פיסוק, הלא לא צרלכה להלות מופרדת מן הפקודה הקודמת ע"? נקודה-פסיק. לאחר כאע, אשרי מצללנת סוף תכנילת, רושמלם נקודה. כאשר המתכנת מרלץ את התכנית ממסוף, הוא מקיש בזמן בלצוע התכנלת את הערכים בעבור המשתנים 58401 ו-58108 ומקבל את התוצאה: 1.800008+02 . נשתמש בתו 'י' כדל לסמן רווח, שלוחלף ע"? הסימן מלנוס (-) אם המספר שלילי. למשל, במחשב א%4% נדרשלם לתוצאה 12 תוולם, כאשר ‏ 4 מלועדלם לחזקה, ‏ 5 - לשבר עטשרונל, אחד - לנקודה, אחד - לספרה משמאל לנקודה ואחד - לרוות או מינוס, לפל המקרה. 2 תכנון הפלט ותקשורת אדם מחשב בתכנית הקודמת קלימלם מספר חסרונות: א. אם התכנית מופעלת ממסוף, אלך ידע המתכנת מתי המחשב מחכה לקלט שהוא צריך להקיש? ב. כאשר מופיעה התוצאה, ‏ היה עדלף שיודפס יחד איתה הסבר כלשהוא, כדל שבנוסף למתכנת יהלו עוד אנשלם שלבינו את משמעות המספרים או התוולם המוצגים. ג. רצול שהתוצאה לא תהלה בללצוג מדעי, אלא בצורה לותר פשוטה, אולל אפילו כמספר שלם. : 21 ד. אין הסבר כלשהוא בתוך התכנית בלחס למטרה, לקלט ולפלט כדל שאדם אחר, גם אם הוא מתכנת, יוכל להבין אותה בלי מאמץ או הסבר נוסף. חסרונות אלה מתוקנלם בגירסה המשופרת של התכנית, שבה כלוללם הסברים שונים, כפי שמוצגים בדוגמא הבאה: ; (1טפטס, סקאד ) 2 ותססתת | (1) (א בתכנית זו מחשבים את המשכורת של פועל *) (2) 01| (6)3 (* תשורה לקראת חג הפסה *) 4% = גאגדאא (4) תאצ (5) (8 שלעור השכר לכל שעת עבודה *) 9 (6) (* מספר שעות העבודה *) 107 (7) אנספת | (8) ג ?0 שח 501 גאוא ?תההסהפגע תט1א5 טמגא') אזדדתט (6)9 ;(58407 ,58108) כפגחת (10) 50.5 10 בד6גא') אתתדתט (11) ,6:2:באגדא + 51407 * תטדטפ (12) ('. 4תסץג 775801 ,5407(:5)פאטסת (13) .פאת (12) הרצה של התכנלת: הצגה במסוף: 7 ו 58.07 בא ?א הפה תטד54 סנגא הזנת נתונים: 146 10 הפלט: .004 7711775807 א 4/0‏ 215.80 תחתפ תג508 20 גדסג הסבר: (1) שם התכנית וצלון שדרושים התקנים לקלט ולפלט. (2) הערות (5אע8ח6תַ) אינן חלק מהוראות התכנית. אפשר לכתוב אותן באנגלית או בעברית, אך בכל מקרה לש לתחום אותן בסימן מתאים. כל התווים אשר נמצאים בילן סוגרלים מן הסוג [ )+ נחשבים להערה. המהדר מתעלם מן ההערה ולא מנסה לתרגם אותה והלא גם לא מופיעה כחלק מן התוצאוון. מאידך, בכל פּעם שמבקשים העתק של התכנית, ההערה מופיעה בגוף התדפיס ומטרתה להצלג לקורא הסבר על התכנית, המשתנים, או על מהלך הפתרון. אם זוג הסימנים [..)+ לא נמצא על לוח המקשים, אפשר להחליפם ע"* סוגרללם וכוכביות בצורה זו: (*..*). כל תו יכול להופיע בתוך ההערה להוצילא התוולם [ או (* , כד? שהמהדר לא לחשוב שההערה תמה כאשר הוא סורק את התוולם משמאל לימין. הערה לא נחשבת כפקודה ולכן אין צורך בנקודה-פסיק בכדי להפרידה מן הפקודה הבאה. (3) קבוע: מותר להשתמש בקבוע בלי להצהיר עליו מראש. מומלץ להשתמש בהצהרת 1 כדל לתת לקבוע שם לפי אותם כללים המתללחסים לשמות של משתנים. כאשר עושים כך, מונעים מן השם הזה לקבל במשך התכנית כל ערך, חוץ מו הערך הנקוב. בזה שונה ההצהרה 51א60 מההצהרה 85ג%. 22 נותנים שם לקבוע בגלל הסיבות הבאות: א. כאטר משתמשים בקבוע פעמים רבות במשך התכנלת (ובמלוחד כאשר הוא מספר ארוך כמו למשל 6 = 6 לותר קל להגדלר אותו פעם אחת בתתילת התכנית ולהמנע מכתיבה חוזרת ומטעויות אפשרלות. ב. אם משתמשים בקבוע פעמלם רבות במשך התכנית והוא עשו? להשתנות מדל פעם בין הרצה להרצה. אפשר לשנות רק את ההצהרה 060851 ולא את כל האלזכורלם של אותו קבוע בתוך התכנלת. ג. כדי למנוע כפל משמעויות שונות לשם, כפל שמקובל בתפלסת התכנות המבנל. הגדרת שם כ-91א060 כובלת אותו מלשמש מטרה אחרת. ד. אם יש חשט שמשמעות הקבוע לא תובן, הטשם שנלתן לו עשול לעזור. למשל, בדוגמא זו, הטשם גא414א מבהלר את סלבת ההוספה של הערך 25. דוגמאות נוספות: 112 12 דדזאאזאדון 54גאחסגא | פאסס דא 5 אס ו = 8גא אטז58 שמות אלה מקבל?ם ערכים קבועים כפי טרשום בצד ימ?ן של סלמן השיויון ולכן נכנה אותם קבועים (%5מ5%8מ00). אפשר להציג את ההצהרה באופן סכימטל: בתרשים למעלה מוצגת הצהרה של קבוע שלא נלתן לשינו? ע"* הצבה. לכן משתמשלם בסימן שיולון ממש =, ולא בסימן ההשמה =: (נקודתללם וסימן שיויון צמודלם). המלה 85%א00 מופיעה רק פעם אחת, אבל מותר להגדיר קבועים אחדלם, כאשר הם מופרדי?ם זה מזה ע"? נקודה-פס?ק. לשם של קבוע יש לפעמים תפקלד בהגדרת משתנה ולכן הצהרת 51א60 חליבת להקדים את הצהרת 28/. (7)-(5) הצהרת משתנה: הצהרת ת% נמשכת על פנ? 3 שורות. אלן הגבלות ביחס להמשך של פקודה או הצהרה משורה לשורה מעבר לדרלשה שאסור לחלק שם של משתנה, מלה שמורה או קבוע בין שורה לשורה. כאשר כותבים הערה אפשר גם כן לגלוש משורה לשורה. (9) פקודת כתיבה: המטרה של פקודה (9) הלא להודלע למפעיל המסוף שמחכים לקלט עבור המשתנים שיוזכרו בפקודה (10), אט881 ו-5107. בפסקל לש שת: פקודות כתיבה, 78178 ו-א0ת17תח. שתיהן מורות על כתיבה במסוף או על הדפסה במדפסת. בפקודה זו כותבים תמליל, אשר מוצג ע": מחרוזת 3 (8ם85231), שהלא שורה של תווים שמופיעים בין גרש לגרש. המחרוזת תודפס בלל שינוי, כחלק מו התוצאות ובזה הלא שונה מהערה שלא מופיעה בתדפלס של תוצאות העיבוד. אסור שהמחרוזת תכיל גרש, שהרל אז המהדר יחשוב שסיימנו אותה ולכן, כאשר רוצים שלהיה גרש במחרוזת יש לכתוב שני גרשים צמודים. בפלט לודפס גרש אחד. לדוגמא, ('058תת0 4 187''715תע') אסדנתט פקודה זו מפיקה פלט שיראה כך: ₪ 2 18י' 5דחאך הצורה הכללית של פקודת 178תח או אן[חד1תח הלא: ביטוי אריתמט?ל ה או מחרורזת 1 הפקודה 175א% או א]₪217₪ מעבירה את הערכלם המבוקשים לתוך אלזור בזיכרון המחשב, אשר נקרא לו מאגר (65++ט2) ונליעד אותו לבניית שורות הפלט. גודל המאגר כאורך שורת הדפסה, כלומר 132 תווים. כל שדה או נתון, אשר נעבלר למאגר תופס מספר מוגדר של מקומות (תווים). מללוי המאג מתחיל מצד שמאל (כתובת נמוכה) ומתקדם לצד *מין (כתובת גבוהה). אז + או מפדתשט כאשר שורת הפלט נשלחת למדפסת, ההדפסה בפועל מתבצעת באופן אוטומטל כאשר המאגר מתמלא. לאחר ההדפסה, המאגר ממולא ע"? תוול רווה (את218) והתהליך מתחיל מחדש. כאשר הפלט נשלח למסוף, מוצג הפלט באופן שוטף לאחר כל פקודה מבלל לחכות למילוי המאגר. המתכנת אינו קובע את הלעד הסטנדרטל של הפלט, מכלון שקבלעה זו נעשלת מראש ע"י האחרא? לתחזוקת המערכת. ברוב המתקנלם כיום, הפלט הסטנדרטי הוא למסוף. לשנה גם אפשרות לקבל תדפיס של הפלט שהופיע על המסך, ‏ או לקבל את הפלט במדפסת בלבד. השלטות לכך משתנות ממחשב למחשב ולכן לא נדון בהם כאן. קילם הבדל בין הפקודה 118תח לבין הפקודה א1787תח. בפקודת א1780עאח, אחהרל הכנסת הנתון האחרון למאגר, המאגר נשלח לאמצעי הפלט גם אם הוא לא מלא. פקודת 0118 אלנה מחליבת את הורקת המאגר אם הוא אינו מלא. המאגר לודפס רק אם הנתון האחרון המוכנס אללו ע"י פקודת 02118 ממלא אותו. במסוף, הפלט אמנם ‏ יופלע מלד גם אחרי שימוש בפקודת 178תח, אבל הסמן (מספעט6) לא יעבור לשורה הבאה, כמו שקורה ב-א118אח; אלא לשאר באותו מקום. פקודת 178עח הבאה תכתוב באותה שורה, מלד אחרל התווים שזה עתה נכתבו. , בדוגמא שלפנינו השתמשנו ב-א%מ171תח כל רצינו שהסמן יעבור לשורה הבאה לאחר הצגת השאלות. אפשר להגיע לתוצאה זו בשתי דרכים נוספות לאלו שכתובות בשורה (9): א. ]('?50130ת הש1ע5 טעגא') מעדתח ('?סגץג נת 5807 גאגא') אתמדזתט ' הפקודה אותדזי גורמת להמשך מללוי המאגר ולהצגת תוכנו. שנל המשפטלם, אשר נמצאים בשתי פקודות עוקבות, יופלעו בשורה אחת. ב. ; ('?45 שו 5407 אא 7תה0ה5ג תטסדא5 טתגא') מצד אזטזזתח הפקודה אתחזת גורמת להדפסה, או להצגה מלידלת של תוכן המאגר, ‏ גם אם הוא לא מלא, ולמעבר לשורה הבאה. הלות ו-א1187א₪ גורמת למדפסת או למסוף לעבור לשורה הבאה, היא ל?כולה להרשם בלי סוגריים עוקבים, כמו שראינו למעלה. הפקודה ₪178 לעומת זה, מעבלרה את הסמן רק לאחר שהיא מדפיסה את התוכן טבין הסוגרלים העוקבים ולכן אין לה משמעות בלל סוגרליים. (10) פקודת קרלאה: בטפת פסקל אפשר להשתמש בשת? פקודות קרלאה שונות: כגעת ו-אתתגתת. הצורה הכללית של פקודת פגמת ו-א]כע4מת הלא: אעפתטת ,סתעת הקרלאה מלתלדה חיצונלת נעשית אל מאגר בזיכרון. הפקודה עגעת גורמת למצביע (ע%6ת201) להתקדם במאגר עד שהוא נתקל במספר, ובדוגמא זו זהו המספר אשר ייקלט כערכו של תטזאם. המצביע ממשיך לחפש את הנתון עבור המשתנה 57401. בקרלאה היזומה ע": פקודת עאמת נוספת, החלפוש לתחיל מלד לאחר הנתון שהתקבל כערכו של 8807. הפקודה אזתגחת שונה מהפקודה כ282. כאשר קוראים את כל המשתנים בהוראת אזתגפת, המאגר מנוקה מתוכנו הקודם והמצביע מוזז באופן אוטומטל להתחלת המאגר, אשר מללצג כעת את שורת הקלט הבאה. פקודת כעגתת או אזכעגאת הבאה תמלא שוב את המאגר בנתונים חדשלם. היא תתהלל לטפל בנתונים החדשלם שבתתילת המאגר ולא מהמקום שם היה המצביע בסיום קריאת הנתונים הקודמלם. הנתונלם לועברו אל המשתנלם הרשומים בפקודה. בדוגמא שלפנינו, אם במקום (51407, תטז5)פאמת היינו כותבים: ; (58108) סגמת ; (58407) סגמת התוצאה היתה זהה לתוצאה הקודמת ושני הערכים הלו יכולים להופלע בשורה אחת במסוף, או בשתי שורות. נניח שכותבים כך: (תע581) אתסגמת ;,(58407) | כגתת שתי פקודות אלו גורמות לכך שאחרי קריאת אש581, התוכן של השורה הראשונה המוצגת במסוף היה נמחק מן המאגר והמצביע עובר לטורה חדשה. פקודות אלו מחללבות שהנתון השני לא יהלה באותה שורה במסוף. 5 לדוגמא, ננלח שהקלט נראה כך: השורה הראשונה במסוף: 3 2 1 6 5 השורה השנללה במסוף: 4 לאחר ביצוע הפקודות :,0) כעגמת ;(4,5) סגחת ערכי המשתנים להיו 2464 ,0=3 ,2=2 ,4=1 לאחר ביצוע הפקודות ;(ע,6) אעסגתת ;(4,8) אתפגתת ערכ? המשתנלם *היו 5 ,0-4 ,2-2 ,4=1 קלט לתכנית צריך לקיים את התנאלם הבאים: א. הנתונים צריכילם להלות קבועים קבללים בפסקל, ז"א בלי פסיקים ועם ספרות משני ציד? הנקודה העשרונלת. / ב. כל נתון צריך להתאים למשתנה אשר הוא מוצב בו. כלומר, מספר שלם לוצב במשתנה שמוגדר כשלם ומספר ממשל - במשתנה שמוגדר כממשל. אפשר להציב מספר שלם למשתנה ממשל, אלא שהוא לוסב לצורת הייצוג של נקודה צפה. ג. לפחות רוותח אתד (או פסלק) חליב להפרלד בין נתון לנתון. *' ד. אסור להלק נתון אחד בין שתל שורות במסוף, מפנל שבסוף שורה המחשב מוסיף תו מלוחד שאסור לו להופיע בתוך המספר. (11) פקודת כתיבה מורכבת: בפקודה זו משלבים *חד מחרוזות ובלטוללם ארלתמטללם, אשר מופרדים ע"י פסלקים. המחשב ידפלס את הכל בסדר הרשום בפקודת א178%0תח, החל מצד שמאל. בכדי שתוצאת הבלטול הארלתמטל בשורה (12) לא תהיה צמודה למחרוזת שקודמת לה, הוספנו שני רווחלם למחרוזת. מהדר פסקל יעביר להדפסה את המחרוזת והבלטויים שבתחום הסוגרללם ברצף, החל מסוגר שמאל? ועד לסוגר ימני. כאשר מדפיסים בעברלת יש קושל מסוים שעליו נעמוד בהמשך כאשר נציג דוגמא נוספת. (12) ביטוי ארלתמטל בפקודת 178תח: יש לשים לב לכך שבתכנית זו לא הוגדר מטתנה שנקרא 5018. המשוואה ששימשה להגדרת 5084 בתכנית הקודמת, נכתבה פה בפקודת א8%ד17עח. הביטול האריתמט? 4א%47+58102*58401 מורכב משנל משתנלים ממשללם וקבוע שלם - הרכב שמוביל לתוצאה ממשלת. כבר ראלנ שלש ברלרת מחדל (ת%10ק0 26+8016) למספר התוולם שלוצגו במסוף, או שיודפסו. ברירת המחדל למספר ממשל בילצוג מדעי הלא הקצאה של 12 מקומות במחשב א7, או 14 מקומות במחשב לבמ. המספר 6 אחרל הנקודתילם הראשונלם מציין שלא רוצים מספר באורך מלא, אלא באורך 6. המספר ‏ 2 לאחר הנקודתלילם הטנלים מציין שלא רוצלם ייצוג מדעל, אלא ללצוג עשרונל עם שתל ספרות לאחר הנקודה העשרונלת. הטבר טלודפס לעוגל לשתי ספרות עשרוניות. למשל, אם התוצאה המדולקת הלתה 2 לודפס המספר 215.81, שהוא הערך המעוגל לשתי ספרות עשרוניות. ברירת המחדל לאורך מחרוזת הוא כמספר התווים שבלן הגרש הראשון לבין הגרש הטשנל, אלא שגם זאת נלתן לשנות ע"? הוספת נקודתיים ומספר. למשל, המלה )4 06 תופסת רק 4 תווים, אבל ה-6 אחרל הנקודתיים לגרום לכך שלהיו שנל רווחים בצד שמאל שלה. בכל מקרה שמקצים לותר מקומות מאורך המחרוזת למעשה, הם מופלעים כרוותחים בצד שמאל. (13) פונקציה בפקודה: 401ח5 הוא משתנה ממש? שרוצלם להפוך את ערכו למספר שלם, כלומר בל: נקודה עשרונית. עושלם זאת בעזרת פונקציה (ם65610תטץ) שנקראת פאטסת. אפשר להסתכל ‏ על פונקציה כתכנית קטנה אשר מקבלת קלט ומפלקה פלט. הקלט נקרא ארגומנט (5תשתטק?2) והוא נרשם בין סוגרלים, לאחר שם הפונקצלה. הפונקצילה (א)פאטסת מקבלת כארגומנט %* רק מספר ממשל, לדוגמא: 7.69. התוצאה תמיד תהיה המספר השלם הקרוב בלותר לאותו מספר ממשל ובדוגמא זו - 8. מעגלים מספר עם שבר עשרונל של 0.5 בכיוון למעלה, למשל (2)8.5א00ת שווה ל-9. עוד על פונקציות ראה בסעיף הבא ובפרק 8. ברירת המחדל לגבל מספר התוולם אשר מוקצים למספר שלם בזמן ההצגה במסוף או בעת הדפסה הלא 10 תווים במחשב א%ג% ו-8 תווים במחשב יבמ. ניתן לשנות ערכלם אלה ע"* הוספה של נקודתיים ואחריהם מספר. עושים זאת בפקודת 178א% או אזחזזתחא, כאשר מציינים את המשתנה, או את הקבוע. בדוגמא כתבנו | 58207(:5)פאטסת בכדי להודיע שנקצה 5 תווים לתוצאה השלמה של הפונקציה פאשסת. אע"פ שמספר השעות לא ידרוש יותר משני תוולם כתבנו ‏ 5, כדל שלהלו לפחות ‏ 3 רווחים בצד שמאל של המספר, להבדיל בינו לבין המלה הקודמת לו -'ת/1'. כדאל לצלין, שאם מספר התווים המוקצים קטן מכד? להכלל את כל הספרות, מתעלמים מצלון ההקצאה ומדפיסים את המספר במלואו. 1 קלט ופלט של תמליל בעברית כאשר התוכן שמועבר למאגר להדפסה הוא מספרים או תמליל באנגללת, כלוון הסמן משמאל לימלן הוא הכלוון הנכון. כאשר התמליל הוא בעברלת האותיות נכתבות כביכול בכיוון הפוך. המחשב לתי?לחס לתמליל בעברית כפ? שהוא מתייחס לתמליל באנגללת ויעביר את התו השמאל? לצד שמאל של המאגר, או לצד שמאל של המסך. לשנם מסופים שבהם ניתן להצלג ולכתוב אותיות בעברלת אע"פ שכיוון הסמן הוא משמאל ‏ ללמלן, כמו באנגלית. בזמן כתיבה של תמליל בעברלת במסופים אלה חליבים להקיש את האותלות בכלוון הפוך, בכיוון התנועה של הסמן. מקלשלם תחילה את האות השמאלית ביותר ואחרלה את האות הבאה משמאל, לכיוון האות הימנית בלותר, שהלא הראשונה במשפט. אם רוצים ללישר את התמללל ללמין, חללבילם להוסיף רווחלם משמאל, לפנל ההקשה של האות הראשונה. לשנם מסופים שבהם אפשר לעבור למצב "עברית" בצורה שבה הסמן נשאר במקומו והאותיות "נדחפות" לכלוון למין. במסוף כזה מקישים את אותיות התמליל בעברית בצורה נכונה, מלמין לשמאל. אם צרלך ל?ישר לימין מוסיפים רוותלם בסיום שורת האותיות. קלימים מסופים שבהם תנועת הסמן ‏ אפשרית גם מימלן לשמאל בנוסף לכלוון התנועה משמאל לימלן. במקרה זה הזנת הנתונלם פשוטה לותר ודומה להזנת נתונים באנגללת. 27 בספר זה לא נדון באפשרויות השונות להקשה של עברילת במסוף. הקורא צריך ללמוד את תכונות המסוף שהוא משתמש בו ובמלדת הצורך, להתאלם את התוכניות הניתנות בספר. 8 פונקצ?לות פונקציה (ם6510מטע) הלא תכנית אשר ממלאת בדרך כלל משלמה מוגדרת אחת. לדוגמא, ‏ יש פונקצלות אשר כלולות במהדר, כמו העלאת מספר בחזקת שנלים, חישוב של סינוס, שורש ריבועל, אקספוננט ולוגרלתם ועוד. הפונקציה מקבלת נתונלי קלט ומפיקה כפלט ערך אחד בלבד, ששמו כשם הפונקציה. הקלט קרו? ארגומנט (6תפתט4?8) ורושמים אותו בסוגרלים לאחר שם הפונקצלה. הפונקציה (א)פאטסת למשל, מקבלת ארגומנט ממשי ומחזירה תוצאה שלמה. פונקציה דומה לה היא (א)6א0א1, שמסירה את החלק העשרונל של הארגומנט וכך הופכת אותו למספר שלם. לדוגמא: (6)7.69א120 שווה ל-7. לש פונקציות שמקבלות גם ארגומנט ממש? וגם ארגומנט שלם, אך התוצאה תמלד תהיה ממשית. לדוגמא, : סלנוס של א רדילנלם (98)א51 קוסילנוס של א רדיינים (005)8 ארכטנגנס של א (ברדללנלים) (8)א 0 הלוגריתם הטבעי של א (08)א1 שורש של א (א) 50 8 בחזקת א (א)פאת לש פונקציות שהתוצאה שלהן תהלה ממשלת או שלמה בהתאם לארגומנט. כלומר, ארגומנט שלם נותן תוצאה שלמה, וארגומנט ממש? נותן תוצאה ממשלת. לדוגמא, הערך המוחלט של א (495)8 א בריבוע (כלומר א*א) (505)8 העלאה בחזקה: מהדר פסקל אינו מאפטר לכתוב א בכדי להעלות א בחזקת צ. אם ץצ שווה ל-2, אפשר להשתמש בפונקציה (א)508, אשר כלולה בו. ע"י שימוש מתותכם בפונקציות, נוכל לבצע כל פעולה של העלאה בחזקה על פל הנוסחה הבאה: נתון: 'א=? ולכן: (א)ם1צ=('א)ם2(=1)מ1 | ומכאן: (%)2=610)2(=611 על פי נוסחה זו נכתוב את התכנלת כדי להעלות מספר בחזקה: ; (1טפץטס, דטפא1) צ [האלתאסמת א אגתססתת | (1) . בתכנית זו מעלים את א בחזקת ץצ *) (2) (* ומדפיסים את התוצאה שנקראת 2. (3) תאצ (4) :2 ,ל ,א (5) |08 אנססת | (6) ;('עליך להזין את הערך של המספר א והחזקה צ') א]מדזאא (7) ; (צ,א) אזפאחת (8) ; ((א)ם1*צ)תאם =:2 (69 ('הערך של"',6:2:א,' בחזקת ",6:2 "שווה ל-2:6:2,'7) א]מדדתח (10) .₪ (11) תדפיס ההרצה של התכנית: עליר להזין את הערך של המספר א והחזקה צ קלט: 45 2.42 פלט: הערד של"773.20 בחזקת 74.50" שווה ל-187.577 הסבר: (3)-(1) שם התכנלת . (5)-(4) הגדרת המשתנים שתוארו לעיל. (8)-(7) קרלאת הנתונים. (9) לאחר קרלאת המשתנים א ו-צ בשורה (8), אפשר לחשב את א בתזקת ץ. פאע היא פונקציה שמעלה את 6 לחזקה שמופלעה בארגומנט. מ1 היא פונקצלה שמוצאת את הלוגריתם הטבע? של הארגומנט, שלֶה. הערך שמופיע בארגומנט של אע הוא (א)ם1*צ ולכן משווים את 2 ל: (*)ת611. (10) הדפסת הפלט. לעתלם מזכירים בזמן הפלט גם את נתונל הקלט, כדל שאדם שלא הזין את הקלט אך מקבל את התוצאות לוכל להבין אותן ולהפיק מהן תועלת. מאפשרלם פה רק 3 מקומות בצד שמאל של הנקודה העשרונית של 2, אבל תודפסנה כל הספרות המשמעותיות, אם לש. הפונקציות (א)508 ו-(א)5081 ברוב המקרים, ‏ אלן צורך להטתמש בחזקות לותר גבוהות מ-2 או 3, ולא לותר קטנות מ- 1/2 (ז"א שורש). לכן נוכל להסתפק בפונקציות המוגדרות 508 להעלאה בחזקה של 2 ו-5081 לקבלת שורש רלבועל כמו שנראה בדוגמא הבאה: ; (צטקנטס, צטפאד) אמסתטפא אגתססתע. (1) בתכנית זו מכניסים את הקואורדינטות *) (2) 41 ו- 2,12א של שת? נקודות בגרף ומחשבים את המרחק (3) (* בלניהן, שהוא הפלט. (4) תגט | (5) (* קואורדינטות של נקודה התחלתלת *) 12 (6) (* קואורדינטות של נקודה סופית *) 2 ,2א (07 ; 089א1: (8) גת : אגתסתסת (9) אזסמת (10) ;(('הכנס נקודה התחלתית 1צ,1א ונקודה סופית 2צ,2א') א/מדדאתח (11) . )(2+ ,2א ,1צ ,1א) ספגחת (12) ((1צ-2צ)508+(1א-2א)ת50) 5081 =:אגתס6תפא (13) 29 :('המרחק בין הבקודה (' ,1:2 ,',' ,1:2א 0')') אתמדדתט (18) :;('לבין הנקודה (' ,2:2+ ,',' ,2:2א ,')') אשתדדתט (15) ('שוה ל-:777' ,7:2:א614תפא ) אותדדתט (16) .עאע (17) דוגמת הרצה של התכנלת: הכנס נקודה התחלתית 1צ,1א ונקודה סופית 42צ,2א% 5,700 ,2 דוגמת הפלט: המרחק בלן הנקודה (74,73) לבין הנקודה (77,10) שוה ל:7777.62777 הסבר: (4)-(1) שם התכנלת ותלאורה. (9)-(5) הגדרת המשתנלם עם הסבר מלווה. (12)-(11) קרלאת הנתונלם. (13) חלשוב מרחק בעזרת הנוסחא הלדועה: 2 > 1(02א-2א)) = אגסתחא (16)-(14) הדפסת הפלט. בשורה (14) רוצים שיודפס "(74,73)". כדל לסדר זאת צרלך להדפיס בנפרד 5 פרטים, משמאל ללמין: .')' תו‎ * .4 1א שערכו‎ * 5 9 .3 שערכו‎ 1 * * תו '(' ותמלי?ל מלמין לו. ל-1א ו-1צ קבענו רוחב של 2 במקום הרוחב הסטנדרטי של 10 מקומות לכל אחד כדי לקבל עריכה ברורה לותר של הפלט. במקרים רבים המתכנת רוצה ליצור פונקצלות חדשות, אשר מטרתן להעשלר את אוסף האופרטורים והפונקציות הקיימות של השפה בה הוא מתכנת. הן אלנן תכניות בפני עצמן ואת הקלט והפלט הן מבצעות בדרך שונה. הן מקבלות ערך אחד או לותר ומחזירות ערך מחושב אחד בלבד. בפונקציות המוגדרות ע"? המתכנת נדון בהרחבה בפרקים 8 ו-9. : 5 קבועלם ומשתנים שלמ?ם 1 הערך תאךאגא (*) המספר השלם הגדול ביותר שאפשר להשתמש בו בפסקל נקרא זַא1אגא. הערך שלו שונה במחשבים שונים, בהתאם לארכלטקטורה שלהם. 10 נתילחתס לבלטו? הבא: 15 טדע ץאךדאגא * 5. על אף שהערך הסופי שלו הוא דַא1אג)1 מחולק ‏ ל-3, הוא לגרום גלישה (ראה נספח), כל המחשב לא מסוגל לטפל בו כראוי. כאשר המחשב מנסה לחשב ץאךאג%*5 כבר נוצרת הגללשה ואף על פל שהתוצאה הסופלת תהלה קטנה מ-זאזא4א. אם נכתוב 15/עא1א5.0*4 לא תהיה בעיה, כל התוצאה של הכפלת ערך ממשל (5.0) בערך שלם (א1א4) היא ערך ממשל והמחשב יכול להחזיק מספר ממשל שערכו זַא1א.%*5. המחשב מסוגל להחזיק מספרים ממשיים הרבה לותר גדולים מ-צַא1א4א, למשל עד 8 במחשב אג/. צרלך לדאוג לכך שהתוצאה של פעולה כלשהיא בשלב כלשהו לא תהילה ערך שלם גדול מ-7ַא1אא. למשל, הפעולה 3 עדת (עאדאגא * 2.0)סאטסת תגרום לגלישה. חלשוב הארגומנט לתבצע ‏ כל התוצאה של זאזא*2.0 תהיה ממשית, ‏ אך הפונקציה פאטסת הופכת תוצאה זו למספר שלם אשר גדול מדל. אם נעטה חילוק עשרוני כחלק מן הארגומנט, כלומר (1/3א1א2.0*%4)פאטסת לא תהלה גלישה. במקרה זה הארגומנט להיה פחות מ-צַא1אא לפנל שהפונקציה תהפוך אותו לערך שלם. כאמור למעלה, ערכו של דַא1אגא שונה במחשבים שונים: ב-222-11 הוא שווה ל- 7,,. שהוא המספר הגדול בלותר טאפשר להחזיק במלה של 16 סלביות, דהלינו 1. במחשבים אגט ו-188/370 בעלי מלה של 32 סיביות הערך של דַא1אג% הוא 7 דהללנו 231-1. כאשר קוראים משתנים שלמים הקרלאה תפסק באחד משנל מקרלם: א. כאשר מגלעלם לתו שלא מתאים למספר שלם. למשל אות, נקודה עשרונלת או כל תו שאלננו ספרה. ב. כאשר מזינלם ספרה שגורמת לגללשה. כלומר, המספר שמנסים להכנלס בקלט גדול מ-7א1א1 . כאשר ‏ קוראים לתוך משתנה ערך גדול מן הערך אשר מותר להחזלק באותו מחשב, מקבלים תוצאה בלת צפויה, שאלן להתחשב בה. האחרלות לכך הלנה בגידל התכניתן, אשר צריך למנוע אותה. לשנם מחשבים אשר מתריעים על פעולה כזו ועל המתכנת לקלוט את ההודעה ולטפל בבעיה. : אם נקרא כקלט את הערך 15.72, המשתנה השלם 4 *קבל את הערך 15. הנקודה מצילנת למחשב שסיימנו לקרוא את ערכו של 4, שהרל נקודה לא לכולה להיות חלק ממספר שלם. 2 פפעולות במשתנים שלמלם בתכניות הבאות כל המשתנים הם שלמלם ולכן צרלכים לוודא שערכם לא יעלה על זאזאגא, לא בזמן הקריאה ולא כתוצאה מפעולות כשלהן. דוגמא ראשונה: בתכנית זו ננלתה שנתון מספר בן 3 ספרות. התכנית תדפיס אותו בסדר ספרות הפוך. ; ( פטס , זטפאד) דוו מססעגת אתס6סתע ‏ (1) ( * תכנית זו הופכת את הסדר של מספר הקלט * 6 (2) 11 תג (3) ;תתסמעאד :₪07א ,45207( דססדאסקצ ,תגק5דוו (8) אזסעת (5) ;('הקש מספר בן 3 ספרות') אתשדזתט (6) ; (115222) א;זסאחת (7) 0 פסא 48ת15א =: דספ1מסמצ (8) ; 10 טכ (100 עסא אגע15א ) =: 54807 (69 ; 100 טעת ת3תפדא =: סמא (10) (('המספר"',1:ת31522 ,' בסדר ספרות הפוך הלנו:') אמדדתט (11) (4401:1 ,254207:1 ,01:1סעדתססצ) אשמדנתט (12) .פא (13) כאשר נריץ את התכנלת נקבל: הקש מספר בן 3 ספרות 2 המספר 532 בסדר ספרות הפוך הינו: 205 הסבר: (2)-(1) שם התכנלת. (4)-(3) רשימת המשתנים שישתתפו בתכנלת. (5) התחלה של החלק הבלצוע? של התכנלת. (7)-(6) קרלאה של המספר שלש להפוך את סדר הספרות שלו. (8) פעולת 02 מספקת את ספרת הלחידות, שהלא השארית בחלוקת המספר ב-10. (9) מוצאים את השארלת ע"? חלוקה ב-100 ומקבלים את ספרת הלחידות ואת ספרת העשרות. כדל למצוא את ספרת העשרות בלבד מחלקים ב-10 ולא מתחשבלם בשארית. (10) חילוק ב-100 ללא שמלרה של השארלת יתן את ספרת המאות. (12)-(11) מקצים רוחב של תו אחד ל-%152.5 אף שיודעים שהוא לותר רחב מ-1. אם קובעים רוחב של 1, המספר יתפוס רק תו אחד, אם הוא בן ספרה אחת בלבד. המספר לוצג במלואו אם הוא כולל ספרות רבות *ותר, כמו במקרה שבדוגמא. שיטה ‏ זו מבטיחה שלאַ יווצרו רווחים בזמן תצוגת הפלט של 415228, כל הוא מוכרת לתפוס לותר ממקום אחד. כל אחת מהספרות 07כ0₪1טצ, 54807 ו-צסחא תופס מקום אחד בלבד ולכן מקצים להן רוחב של 1 כדל שלוצגו זו ללד זו ולראו כמספר אחד בן 3 ספרות. (13) סוף החלק הביצועל של התכנית. 12 דוגמא שנללה: במרכזת טלפונים לש מכשיר חדש שמודד את זמן ההתחלה של כל שלחה ואת משך השלחה בשניות. לש לכתוב תכנית שתפיק את זמן הסלום של כל שלחה: ; (07ק007 , זטפא ) 10 אגא | בתכנית הזו קוראים כקלט את זמן ההתחלה של השלחה, לפל ‏ *) טעות, דקות ושנלות בשעון של 24 שעות. משך השלחה ניתן בשניות. (* הפלט להלה זמן סיום השלחה. תגל (* זמן התחלת השלחה *) , בגצזאת5 ,דגאגכ , דגהפ (* זמן סיום השלחה, לחשב *) , 4צזאזז5 , גאגכ , 51.4 (* אורך השלחה בטנלות *) ; 088מא1: 151084 הסמתס א ;('הקט שעה, דקה ושנייה של התחלת השלתה') א80דךתא ; (דגצזאח5 ,דגאגכ ,5841 ) אעתכומת ;('הכנס את משך השלחה בשניות') אשדדתט ; (1451084 08808 ) אזסאמת (* חשב את זמן סלום השלחה *) ; 51080 ₪ + 1גצדאח5 =:גצזאחפ 1 טצזפ גצדאה5 + 41א%גכ =:גאגכ ]0 0 4צ1א58 =:4צזאחפ ;0 1 גאגכ + 58241 =:5844 פסו גאגכ =:גאגכ ;24 00 584 =:4ח5 ;('מסך השלחה הוא"' ,145108:1 808ת0 ,'"שניות') אתמד1תט ; אז7זת - ו 2 ,'/! ,2 ) אמדזתח ; ('השיתה החלה בזמן"' ,41:2צזַא58 ; אזמידת ,'/' ,2:גאגכ ,'' ,5822:2) אזפוזתט ;('השיחה הסתיימה בצמן"' ,4:2צדא51 . פא דוגמא להרצת התכנלת: קְלֶט: | הקש שעה, דקה ושנללה של התחלת השלחה 5 566 23 הכנס את משך השלחה בשניות 2211 פלט: משך השיחה הוא 3421 שנלות השיחה החלה בזמן 23/56/53 השלחה הסתילמה בזמן 0/53/36- (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (ג1) (12) (13) (18) (15) (16) (17) (18) (19) (20) (21) (22) (23) (28) (25) (26) (27) (28) 33 הסבר: (8)-(1) שם התכנלת. (6) משתני הקלט. (7) משתני הפלט. (8) משך השיחה - משתנה קלט. (13)-(10) הכנסת הקלט. (20)-(14) חישוב זמן סלום השלחה: מחברים את משך השלחה בשנלות למספר השניות של זמן התחלת השיחה (15). הסכום לכול להלות גדול מ-60 שניות. לכו ב-(16) מחלקילם את מספר השנלות ב-60 בכדי לראות כמה דקות נכללות בו. מחברים את מספר הדקות שמקבלים למספר הדקות של התחלת השלחה. ‏ אחרל שהוצאנו את הכפולות של 60 בשורה (16), משתמשים בהוראת 02 שבשורה (17) בכדי להוריד את מספר השנלות למספר בלן 0 ל- 59: מחלקלם את מספר הדקות ב-60 ומחברים את התשובה לשעת התחלת השלחה (18). לאחר שעושים זאת אפשר לראות כמה דקות בודדות נשארו (כלומר מספר קטן מ-60), שורה (19). אבל עכשלו יש בעיה אחרת: אולל מספר השעות יחד הוא יותר מ-24, שהוא מספר השעות המקסימלי ביממה. מטפלים בבעלה זו ב-(20). (27)-(21) הפקת הפלט. הכנת הפלט קצת מורכבת, כי בנוסף להודעה על התחלת השלחה או על סלומה, רוצים שהזמן יוצג בצורת אא/אא/אא, כלומר בצורה: שנלות/דקות/שעות. לכו ב-(23) ו-(26) הפלט מורכב מ-5 צעדים: א. הדפסת 5141 (קלט) או 5844 (פלט), כאשר מקצים לשדה רק 2 תוולם. ב. הדפסת התו '/'. ג. הדפסת %1א22 או ג24%, כאשר מקצים לשדה רק 2 תוולם. ד. הדפסת התו '/'. ה. הדפסת 1צזא51 או צא51, כאשר מקצלם לשדה רק 2 תוולם. 6 ה משחנים ומספרים ממש??ם (*) בתיאור הסכימט של מספר ממשי נאמר, שמותר לרשום כמה ספרות שרוצים לפנל ואחר?ל הנקודה העשרונית ושמותר לרשום עוד שתי ספרות אחר? האות 8. מספר הספרות המירב" שאפשר לכלול לפנל או אחרי הנקודה העשרונית נקבע לפי מספר הספרות המשמעותיות בילצוג עשרונל שאפשר להחזיק במנטיסה של ללצוג המספר בנקודה צפה. במחשבים שבהם המנטלסה מורכבת מ-23 סיביות, מניחלם שהיא מתחללה תמלד בספרה הבינרית 1 ואז כאללו הלא מורכבת מ-24 סיביות. המספר הגדול ביותר שאפשר להחזיק ב-24 סיביות הוא 1-22%, ערכו העשרוני הוא 16,777,215 ואפשר להצלג אותו ב-8 ספרות עשרונלות. כאשר יט מספרים עשרוניים בני 8 ספרות שערכם גדול יותר, לא נוכל להצלג את ערכם במנטיסה זו. לכן אפשר לומר שנוכל 4 להחזיק בצורה משמעותית רק את טווח הערכים טל מספרים בנ* 7 ספרות עשרונלות או פחות. מספר הספרות המשמעותיות לפני הנקודה העשרונית ואתרלה לא לכול במקרה זה לעלות על 7. לש אפשרות להוסיף עוד 32 סיבלות למנטלסה, ‏ ע"ל "חיבור" של שתל מללם ובכך לילצג מספר בנקודה צפה במנטיסה של 56 (24+32) סלבלות. מספר הספרות העשרוניות המשמעותלות שאפשר להחזיק במנטלסה עולה אצ ל-16. מספרים אלה, טבהם מספר הספרות המשמעותיות גדול יותר מהרג*לל הם מספרים בדיוק כפול (5ע6פחטא מ2?601510 200516). האקספוננט של מספר ממשל הינו המספר שאחר? ה-₪ מלמלן. אפשר להחזליק חזקה בינרית שעָרכה עד 7 ומכאן שהמספר הגדול ביותר שאפשר להחז*ק שווה למספר הבינר: 0.1111111*2127 שערכו העשרונל הוא 1.7*1038. לכן, המספר שאחרל ה-ע יכול להלות מספר שלם עך 37 וגם 38, אם המנטלסה קטנה מ-1.7. המספר הקטן בלותר טאפשר להחזיק הוא 3, כאשר המנטלסה חילבת להלות 0.5 לפחות, או במחשבים אחרלם 9. החזקה הקטנה בלותר שאפשר להחזיק בדרך זו הלא 38- וגם 39-, אם המנטלסה גדולה מ-2.94, או במחשבלם אחרים 1.47. אם ההבדל בין שנ? מספרלם מתבטא רק בספרות הלא משמעותלות, אסור להתללחס להפרש שבינ*הם. . לדוגמא, נתון: (100,000.6 + 900,000) - 500,000.7 * 2 של מספרלם מחושבלם: ‏ 0.8 = 6),,, 1 - 4ץ), 1 מספרים מעוגלים: 1, 1 - 1, 1 על אף שערכו של ביטוי זה שווה ל-0.8, אם מחזיקלם רק 7 ספרות ערך משמעותלות בנקודה צפה, שנל המספרלם יעוגלו ל-1,000,001 וההפרש שלהם *הלה שווה ל-0. לדוגמא, נתון הביטול הבא: 0 = 6 * 20/6 אם מחזיקלם רק 7 ספרות משמעותיות, החלשוב צריך להלות בשת? פעולות נפרדות: א. 3 = 20/6 ב. 9 = 6 * 3.333333 7 המבנה של התכנ?ת - סלכום 0 0-11] 8 כפי שראינו, תכנית בפסקל מורכבת מ-3 חלקים: א. כותרת התכנית (קת816861 תבצ8ַס:?) - שם התכנית ומכשלרל קלט/פלט. ב. חלק ההצהרות (ם560510 ת2601828%510) - תיאור של הנתונים, אשר מעבדלם בחלק השלישל. ג. חלק הבלצוע, או הפקודות (ם560510 %ת5%8%606) אשר מכלל את כל הפקודות שתתבצענה בתכנלת. חלקים ב' ו-ג' לחד נקראלם בלוק (81008). מכאן, שכל תכנית בפסקל מורכבת מכותרת ובלוק. חלקים אלו מתוארלם בשלד של תכנית שמופיעה למטה. 5 חלק ראשון: (כותרת התכנלת+ ; (01ע007, שקא1) תסת5 אהתססתק חלק שנלב (חלק ההצהרות, יכול להלות רלק+ 0 38 : א שי [המשך ההצהרות+ תג 8צהת2סהת ה +.'...... חלק שללשל: א [חלק הפקודות לא יכול להלות רלק) ; 108וסק ; 68אס 9 5 3 [איו צורך ב-;+ 0 . . עאת בין החלק הראשון לבין החלק השנל ובינו לבין החלק השליש?ל רושמים נקודה-פסיק. כדי להפרלד בין ההצהרות השונות ובין הפקודות השונות רושמלם גם-כן נקודה-פסיק. בסוף החלק השלישי? רושמים נקודה. חשוב מאוד, מנקודת ראות של הנדסת אנוש, להקפיד על הכללים לכתיבת התכנלת. כתיבה נכונה תאפשר קרלאה ובדיקה מהלרה של התכנלת ע"ל המתכנת או ע"? אדם אחר. זאת הלא גם אחת מהדרישות של תכנות מבנל מסודר. בטשלד התכנית נרשמו המלים 280080%, 57א60, תגט, א8801 ו-פאא כשהן מלושרות בשוליים השמאל?ים ורשומות אחת למטה מחברתה. התוכן של כל חלק מוכנס למינה. יש שמקפידים גם לרשום את התוכן של ההצהרות 51א00 ו-5/ בטורות נפרדות מן השורה בה מופלע שם ההצהרה. שלטה זו מומלצת כאשר לתוכן ההצהרה דרושה לותר משורה אחת. נוהג נוסף שתורם לקרלאות של התכנלת ולנוחות התיקון והאחזקה שלה הוא להגדיר כל קבוע בהצהרת 51א00. הקבועים היחידילם שיופיעו בתכנית ללא הצהרה להלו המספרים 1 או 0. האותיות ה"קטנות" שבשלד התוכנית תוחלפנה בהצהרות ובפקודות מתאלמות. מלים שמורות: המלים המודגשות הן מלים שמורות (%0%65 28656:086), אשר שללכות לשפת התכנות פסקל ואסור למתכנת להשתמש בהן למטרה שונה מזו שהוגדרה. בפרקלם הבאלם נלמד את המשמעולות של מללם נוספות לאלו שלמדנו עד עתה. רשלמת המלים השמורות ניתנת להלן: 20 צנפ 0 1.55 א צגתת פאג 0 א10ע6אטץ ץע 8 פא כ סאוסכ עס צסא זא פסא נ וו אז עך 7 דקפת תססות 00 0 08| אזז ₪ אגצ תנעאט אפקצך 0 אטפחד 56 8 [ תרג?ל?ם 1 ששאלות (1) בהמשך נתונים (א) (ב) (ג) (ד) (ה) (ו) (ז) (2) מתוך השמות המופיעים למטה, (א) (ב) (ג) (ד) (ה) (ו) (ד) (3) כתוב הצהרת 0 - מספר קטלוג: של פרלט. הטלבים לחישוב האלכסון וההלקף טל מלבן באורך ‏ 4 ורוחב . התבסס עללהם כדי להכין תרשים זרלמה מתאלם. התחל. קרא 4, 2. 60 שווה לשורש 4 בריבוע פלוס 5 בריבוע. 5 + 2 = כ. הדפס 6. הדפס כ. סיים. 01 חמ ךדיאמ 1 6אס.זצתמט 1 12 6דידסת ות 1 צאת-א צטפאד אילו אינם חוקיים? הסבר למה. משתנים ‏ עבור המשתנלם המופלעים למטה. דייק ביחס לסוג המטתנה (שלם או ממשל). תת - המחיר של הפרלט. זאט - שיעור מע"מ. זְזַתַסְתַק - הרווח לפנל מס על אותו פרלט. (4) צלין לגבל כל מספר > (%) > ע > 4+ עש (5) נתונה הצהרת שלם. ממשל. הצגה לא חוקלת (הוסף הסבר). ו. 286 לא. +. 32.0 לב. חה. 0.0099 לג. ט. 28937265 לדג ל. 0 טו. המשתנים הבאלם: ; עדא : ;1 : המופלע למטה אחת מתוך שלוש האפשרולות דלהלן: 12 4 19 14 9 תג . < > לס >+ שי . 17 אללו מתוך הפקודות הבאות שגולות: (א) 5 צעכ 5 =: 0 (ב) 0 402 4 =: 2 (ג) 4 =: א (ד) 6 עעכ א =: 2 (ה) 4 02 0 =: צ (ו) צ + א >: 2 (ז) 1+ ( =: ב (ח) 7? =: ב (ט) 1 + ( =: 2 (6) כתוב את הביטוללם שמופיעים למטה בצורה המקובלת בפסקל. 3 3 2 8 -- -- + צ 4+צ 4+צ / ג צא ד 4 צ+-= 4 צ -- + 2 3 (7) השתמש בהצהרת 00851 בכדי להצהלר על הקבועים הבאים ובחר להם שמות מתאימים. *‏ 453.59 *‏ 132 - 'מתתחדך זח' (8) למטה רטומות ‏ 3 שורות של נתונים ושתי הצהרות של משתנלם. רשום את הערכלם המלוחסים למשתנים אחרי סדרת הפקודות (א), (ב) ו-(ג). 2 4 0- :שורה 1 2.8 25 1.99 :שורה 2 02 5.7 4 :שורה 3 תת : 2,232,060 תאצ (תתססוא : 2,צ,א (א) ) אאפגתת (ב) ;(4,8) תפגמת :(צ,ת) אזסהתת 2) תאמת (ג) 0 אזסגתת ; אוזת ומת אאתפגחת 8 (9) איך יראה הפלט לאחר הבלצוע של קבוצות הפקודות הבאות (התו "7 מסמל תו רווח): א. ב1אמת: א תגצ ]5 =:א (א ,'ש"! ,3 ,' 0 מטןגט פאד') אזטדנתא 5 ;5 , '=70772+3א87508א7') אזטיזתט ג. ; תמסמעא1: 4 תג ;1גתת: 2 4:= 4. 8:= 5.6789) ; (24:3) מודת ; (8:7:2) משדתח א175[1ת (4:6) אואזתח .(2:5:0) מע1תח 2 תכנלות (1) כתוב תכנלת, אטר מקבלת כקלט משתנה בשם ץמזחו שמליצג גובהו של אדם באינצ'ים ומציגה כפלט משתנה בשם 60/2 שמילצג את גובהו של אותו אדם בסנטימטרלם. זכור שאלנץ' אחד שווה ל- 2.54 ס"מ. הכן גם תרשלם זרימה. (2) אדם רוצה להפוך שקלים לדולרים. עבור פעולה מהסוג הזה נגבים דמל עמלה. כתוב תכנית שמקבלת את הנתונלם הבאלם: = זא - מספר השקלים ברשותו של האדם. -.‏ 0802 - אחוצ העמלה . בדרך כלל הוא נע בין 1/2% ל-1/8%. = ת1גה5 - השער הנוכחל, "א מספר השקלים בדולר אחד. הפלט הוא מספר הדולרים שהאדם *כול לקבל תמורת השקלים שהוא ממלר. הכן תחילה תרשלם זרימה. (3) שנה את התכנית 08812א45 כדל שתמלא את הדרישות הבאות: א. על שכר העבודה (למעט מתנות) חל מס הכנסה של 5.3%. ב. התוצאות צריכות להופיע במבנה הבא (התו לסמן תו רווח): לתרה מס סה''כ שכר שעות לתשלום הכנסה תשלומים"" מתנה"" לשעה"7 "עבודה בה ------ אצא, אאא א אאא, את א אאא אאא, א אאא, אא אאא, אא אאת (4) כתוב תכנית," אשר קוראת שבל מספרלם ומתייחסת אליהם כמלדות של מלבן. הפלט :הלה הה?קף, השטח ואורך האלכסון של אותו מלבן. ‏ יש לכלול הערות בתכנית, כד? להסביר את המשתנלם ואת השלטה של החישוב. הפלט צריך להיות משפט שלצלג את משתנל הקלט ואת משתני הפלט. המספרים יוצגו עם ספרה עשרונלת אחת, כאשר הם מופרדלם מן המלה שלידם ברווח אחד לפחות. הכן תרשים זרימה לפנל שאתה מתח*ל לתכנת. >19 (5) כתוב תכנלת, אשר קוראת שני מספרים ומתילחסת אליהם כבסיס ואורך של הלתר במשולש ישר זוית. הפלט יהיה גובה המשולש, הסלנוס, הכוסלנוס והטנגנס של הזוילת שבין היתר לבין הבסיס. יש לכתוב הערות בכד? להסבלר את המשתנלם ואת שלטת החלשוב. הפלט להיה במבנה משפט שיציג את נתונל הקלט ואת הפלט. המספרים *וצגו עם ספרה עשרונית אחת, כאשר הם מופרדלם מן המלה שלידם ע"? רוותה אחד לפחות. הכן תרשלם זרימה לפנ:? כתיבת התכנית. (6) כתוב תכנית שמקבלת כקלט את האורך, הרוחב והעומק בס"מ של תיבה מלבנלית. כתוב תכנית שמחשבת את הערכלם הבאלם: * השטח של הדפנות בצדדלם. * השטח של המכסה והבסיס. * השטח של הדפנות מלפנים ומאחור. * הנפח של התיבה. )1( אם מטר מרובע של נללר אלומיניום עולה 30 שקל, כמה לעלה לעטוף את כל הקופסה בנייר אלומלנלום. (7) תלמיד קיבל 3 צלונים במשך הסמסטר. כתוב תכנית בכדי לחשב את הממוצע של 3 הצלונים, ההפרש של כל ציון מהממוצע, את הסטליה המוחלטת (ז"א הערדך המוחלט של ההפרש) של כל ציון מן הממוצע ואת סטלית התקן של הצלונים. סטללת התקן של 3 הציונלם 1א, 2א, 23 מוגדרת כך: | 3)%12+%22+832( - )+2 --------------------- | = אטןאטיך תא ץג צדיי5 3*2 (8) כתוב תכנית שמקבלת כקלט את המספר א ומחשבת את השורש, הרלבוע ואת המכפלה ב-5 וב-10, עבור 3 המספרים שלפנ? א ועבור 2 המספרילם שאתר? א. (9) נתוןו הרדילוס של עלגול. כתוב תכנית שמדפיסה את הקוטר, השטח וההלקף טל אותו עיגול. (10) סדרת פיבונצ'י מתחילה ב-0 וב-1. כל ערך נוסף בסדרה שווה לסכום של שנל קודמלו. למשל, הערכלם השלישל, הרביעי, החמלשי, השלשל, השבלעל והשמינ? בסדרה הם ‏ 0+1=1, 1+1=2, 1+2=53, 2+3=5, 3+5=8, 5+8=13. כתוב תכנית שמקבלת שנל ערכי פ?בונצ'? כלשהם עוקבים ומחשבת את שלושת הערכלם הבאים בסדרה. (11) כתוב תכנילת שמקבלת כקלט ערך במעלות פרנהייט ומחשבת את מספר המעלות ביחהידות צלסלוס. נוסחת המעבר הלא: ‏ 32 + 9/5*0 = ץ. 20 (12) כתוב תכנית בכדי לחשב את השורשים של משוואה רילבועית | 6+א4%**2+8 בעזרת הנוסחה (82-446)/+ 8- בהנחה שלש למשוואה שורשים ממשללם, 24 ז"א ש: 0< 46 -82. (13) כתוב תכנלת בכד? לחשב את השטח של משולש בעל צלעות 4, 5, 6 (בהנחה שצלעות אלו באמת מהוות משולש) על סמך הנוסחה: 0 =59 (5)5-4()5-5()5-6 - שטח, כאשר 2 (14) כתוב תכנית שמקבלת את מספר החשבון בבנק, את היתרה הקודמת ואת כמות הכסף שבעל החשבון רוצה להפק:ד או למטוך מחשבונו. כתוב תכנלת בכדל להדפיס את הלתרה החדשה בחשבון. (15) כתוב תכנית בכד? לחשב את עלות הבנזין לנסיעה, כאשר נתונה העלות של ללטר בנזלן, מרחק הנסיעה והקילומטרז' של המכונית לליטר בנזלן. . (16) כתוב תכנית שמקבלת את משקלו טל אדם בליברות ומדפיסה את משקלו באונקיות, בקילוגרמלם ובגרמלם. ל?דיעתך, ליברה אחת שווה ל-16 אונקלות וגם ל-0.45359 קללוגרמלם. (17) סוכן נכסי דלא ניידי מקבל דמל עמלה, כאחוז מסוים ממחיר הבית שהוא מוכר. המוכר מקבל את מחלר הבית פחות דמל העמלה ופחות הוצאות מכלרה. כתוב תכנית שמקבלת כקלט את המחלר, את האחוז המגיע לסוכן ואת ההוצאות. התכנלת מדפיסה את הסכום המגיע לידל המוכר. כתוב תכנלות עבור שנ? מקרלם אחרלם: א. לא לדוע האחוז שהסוכן מקבל אבל שאר הפרטים ידועים. מצא את אחוד העמלה. ב. לא לדועות ההוצאות, אבל שאר הפרטים ידועים. מצא את סכום ההוצאות. (18) אדם מטקיע ‏ ? שקלים ומקבל 1 אחוז רלבלת כל חודש. כמה כסף להלה לו בסוף א הודטים. השתמש בנוסחה %(2)1+1 = 5. (19) חברת "מן המוכן" רוצה למחשב את החנות שלהם. המחירים בשקלים לקילוגרם הם: * עוף - 3.50 . = קציצה - 1.70 = כבד קצוץ - 6.80 * פשטלדה - 0.60 * סלט לרקות - 0.84 = שניצל - 3.10 | כתוב תכנית שתקבל כקלט את מספר הקילוגרמים מכל מוצר שהלקוח קונה. התכנית תדפיס את החשבון המפורט, שעליו להיה כתוב בכמה עולה קללוגרם אחד ‏ של כל מצרך, כמה נקנה מאותו מצרד (בקילו) ובכמה עלתה הקנייה של אותו מצרך. בתתתית הרשלמה יש לרשום את ערך כל הקנלות ואת"כ את הסכום לתטלום כולל 15% מע"מ. 41 (20) משחק טוטו מתנהל בצורה זו: אנשים קונים טופס וממלאלם אותו בתוצאות של משחק? כדורגל באותו סופשבוע, כפ? שהם צופלם אותם. הזוכים הם כל מל שניחשו נכונה את תוצאות המשחקלם. הרווחים ממכירת הטפסים מגיעים ל-3 יעדים: * 10% נמסרים לממשלה. *‏ 15% הם דמל עמלה עבור הסוכן שמכר את הטופס. * שאר הכסף מחולק באופן שווה בלן האנשים שזכו. כתוב תכנית בכדל לחשב כמה כסף יקבל כל צוכה, אם ידועה כמות הטפסים שנמכרו, מחיר הטופס ומספר הזוכים. (21) נתונה מערכת של משוואות ללנלאריות מן הצורה: 0 = צם + אג ע = ₪ + אכ הפתרון הפשוט של מערכת זו הוא: עפ ב צ .ץצ פפ - 28 . פפ - פג כתוב תכנלת שמקבלת כקלט את הערכים 4,2,0,2,8,7 ומדפיסה את הפתרון לזוג המשוואות. תוכל להנלח שלש פתרון (מתל? אין?). מכונת החלשרב של פסקל 42 פרק 2 משתנים וביטויים בוליאנייס 1 משחנים בול?אנ??ם לעתים דרוש להעריך את היחס בין שני מספרלם ולפעול בהתאם לתוצאה. מה היא התשובה שהילת מצפה לקבל למשל, לשאלה זאת: ‏ "האם ‏ 34 שווה ל- 5‏ ?" האפשרולות הן שהמספרים שווים, ‏ או שאינם שווים. אפשר גם להשיב: נכון (6טע1) או לא-נכון (78158) בהתאמה. בפסקל שומרלם תשובה כזאת במשתנה בוליאניל (78218016 ת200168), אשר מקבל אחד משני הערכים שהזכרנו, מטתך או 8. במחשב, הערך "נכון" מלוצג ע"? הספרה 1 (אחד) והערך "לא-נכון" - ע"י הספרה 0 (אפס). נעיין בתכנית הבאה: ; (דטפינטס , צטפאד) זזה 15/4 |תססתק (1) (* קרא שנל מספרים שלמלם וקבע איזה מהם גדול יותר *) (2) : פא | (3) ; תתסמנא1 :2ת522זא , [מהפפדן (8) ;א3001 :64200 ,המעגח5 ,אגדא (5) אזסתת | (6) ;.('מהם המספרים שאתה רוצה להשוות?') אסמעזתח (07 ;((' להקיש את הראשון ואת השנ:') אמתתצזתטחט (8) ; (152072 , 481ע15א) פגחת (69 1 >> 15281 =: אהךגא (10) 1 = 19281 =: הת/חס. (11) ; 150482א < 1ת1ע5זא =: 64200 (12) ((152022א ,77':5ט' ,1תגע5דא ,' שאמש150ע') אעדדתט (13) (אאדת ,'7 15 2ת1524א > 1ת4ע52דא') אזתדדתט (14) (אמטגתפ ,' 7 15 482ק15א = 1תגקפדא') אתמדדתט (15) (64202 ,'7 197 4152482 < 1תגע15א') אתמעדתט (16) .פאא | (17) 43 הרצה של התוכנית הזו תפילק את הפלט הבא: מהם המספרלם שאתה רוצה להשוות ? להקיש את הראשון ואת השנל 10 5 50 טאמשפד פטתך 15 2תגק5דא > ן1ת29ת5זא .159 82ג55דא = 981הקפדון 8 -15 159482 < 1תגספדון הסבר: (1) שם התכנלת., (2) הצגה של מטרת התכנלת. (4) המשתנים ‏ 1152221 ו-2א1152 מקבלים את המספרים שנקרא כקלט ונשווהת אותם זה לזה. (5) כמו שמצהירים על משתנה שלם וממשל?, כך יש להצהיר במשפט 72% גם על משתנה בוללאנל. הכינוי א20014 מחליף את הכלנוי תתסעזא1 או תגתת, כדל לתאר את המשתנלים. השמות של משתנלם בוליאניים נקבעים לפ? הכללים המקובלים בקביעת שמות בשפת פסקל. המשתנים הבוליאניים האלה לקבלו במשך התכנית את הערך 1808 או את הערדך 8. למשל, אג1א יקבל את הערך פטת1 רק אם "נכון" ש-3152281 קטן מ-152432, | אחרת ערכו להלה | 11858ע, שמשמעותו "לא נכון". המשתנה הבוליאני את/(58 יקבל ערך חטת1 רק אם 152481 להיה שווה ל-282ת5זא והמשתנה הבוליאנל 6420 יקבל את הערך משא1 רק אם 15281א גדול מ-150422. (9)-(7) קרלאת המספרלם להשוואה. (12)-(10) בפסקל הסטנדרטי, משתנה בוללאנל מקבל את ערכוה רק ע"י פקודת השמה ולא ע"ל קרלאה מבחוץ, כקלט. בנלבים שונים של השפה אליפשרו לתת ערך למשתנה בוליאנ? גם ע"ל פעולת קלט. בצד למלן של פקודת ההשמה נרשום: * תנאל או תנאים שהמחשב יבדוק וליקבל עבורם תוצאת אחתך או 58ג?. * המלה 1808 או 4058ע2. הערך לאוחסן בכתובת של המשתנה הבוללאנל. (13) הכנת הפלט. כתבנו 7':5"ץ' בכדי שלהיו שני רווחים בכל צד של התור ץ. בפקודה זו הוספנו שנל רווחים בצד למין של . המספר 5 אתרל הנקודתללם לגרום לכך שלשמרו 5 תוולם עבור המחרוזת כולה, אך מכלון שלש רק 3 תוולם בין הגרטיים, יתוספו שנ? רווחים בצד שמאל. (18) הערך של המשתנה אגץ7א הוא משת1 או 2188ת ולכן הפקודה הזאת תגרום לכתיבת אחד משנל המשפטים האלה: א. מטסת1 15 2תגעפדא > 1סגספדא ב. 24185 15 2תהקפדא > 1 סגקפזא המהדר מקצה 5 תווים למלה מט0א7 (שתוצג עם רוח אחד משמאל) ולמלה 58גץ. אפשר לשנות ע"ל הוראות מפורשות את מספר התווים המוקצים למלים. למשל, 44 0 :אדא לגרום להוספת 5 רוותלם להוספה של 6 רווחים משמאל למלה (16)-(15) ביצוע דומה לזה שבשורה ( 2.2 בלעןול?ם בול?לאנ??ם המחשב לכול לחשב תנא? פשוט (ת01610מ00 מ ) ה בצד טמאל של המלה שזת, טאורכה 5, או שעת שאורכה 4. .)4 בנול כך: בילטוי ארלתמטל לחס ביטול ארלתמטל הלחסלם האפשרלים הם: = שלולון <> אי-שלויון > גדול מ- =< גדול או שווה ל- > קטן מ- => קטן או שווה ל- עבור כל תנאל אפשר לומר, שהוא קיים (08ת1) או שהוא לא קיים (2158) ולכן הוא לכול להלות קלט למשתנה בוללאנל. התנאי צרלך להלות כזה, שאפשר *הלה לקבוע את נכונותו. כלומר, הערכים שמשוולם צריכים להיות מאותו סוג. כפ?ל שאי אפשר להשוות תפוחלם עם תפוזים, כך אל אפשר להשוות משתנה ‏ בוללאנל טערכו 7508 עם משתנה בוללאניים כל ה ממשל שערכו נניח ש-4152281 שווה תתן ‏ לנו את התוצאה 08ת7 שתאוחסן 8% עבור שנל המשתב בהתאמה. ביטוללם ארלתמטללם אשר מה או להלות יותר מורכבלם, כמו למשל: 7 - ה0עעא אפטר לשלב לחד שנל משתנים, אריתמטיים (ססא,/21, /,*,- קבועים א כדי לקבל תנאילם מורכבים (5ת61610ת60 תנאים מורכבים הערך המלוחס לשנל תנאלם פשוטים ה כל אחד משנל ה ע"ל פס :היה 74188 רק אם כל אחד פועל על תנאל אחד בלבד וה ננלח שהכנסנו את ה הטבלה למטה, אשר ב הטונים על המשתנלם האלו. ערר 5% נחשב כ-0 ולכן ה 5-5 ו-4152482 שווה לם האחרלם, זתטם ו-64000, וולם חלק מתנא?י *כולים לה ,+) כדי לקבל ביטוללם אפשר לטלב לחד תנאלם פשוטים בעזרת האופרטורים הבול:אניים כא4, משולבלם ע"* ה תנאים <היה 08ת72. מאידך, ופך את הערך שלו מ ערכלם של שנל תנאים שונים לתוך ה קראת טבלת אמת (78516 [סטו) מסכמת את השפעת האופרטורלם אפטר להשוות שנל משתנלם וא קטן מן הערך 1805 שנחשב 1. 2. מאלדך, 2 ו זה נקבל את הערד ו-(12), ל-10. הבדלקה אגזוא. במקרה בפקודות (11) במשתנה כיל קבוע או משתנה אחד, <> (זַק * 4 - 08ם0) * 1401472 ארלתמטלים ‏ ע"? אופרטורים ארלתמטלים מורכבים. כך גם ו בלטולים 16%קוס0). תנא: עא4 להיה 7208 רק אם הערך המלוחס לשנ: תנאים המשולבים משנ:? התנאים הוא 4155ע. האופרטור 01א -8סת ל-24188 ולהיפך. משתנים 4 ו-2 בהתאמה. 15 4 [סא 8 08 2 5 פאא 4 8 4 וו מסתך ד מסתץ מסת 8% פסתץ 8 88 מסתץך פסתך מטאד כו מסתך 8 פטתך 8 וול 8 וע לדוגמא, נניח ש-23 שווה ל-5, 5 שווה ל-10 ו-6 שווה ל-2. אזל? הבלטול (4+0 > 2+7) סאג (7*6 > ) מהווה תנאל מורכב. ערכו של התנאל הפשוט השמאל? הוא 1808 מפני ש-2, שערכו 5, באמת קטן מ-7*0, שערכו 14. התנאל הפשוט השנל 6+ב>7+ת הוא 588גת מפבי טשערכו של 7 הוא 17, שאלנו קטן מ-2+0 שערכו 7. הלות והתנאל השמאל? נכון והתנאי הלימנל לא-נכון ושניהם משולבים ע"? עאג, הערך של התנאל המורכב הוא ₪ ביטול אריתמטל הוא שילוב של אחד או לותר קבועים או משתנים מספרלילם ע"ל אופרטורילם ארלתמטללם. בדרך דומה נלתן להגדלר בלטול בוללאנל (םת300188 ת65510:קא) כשילוב של תנאל אחד או לותר ושל משתנלם או קבועים בוללאנללם (הכוונה למלים 7808 או 70158), באמצעות אופרטורים בוללאנללם. הערך של ביטול ארלתמטל יכול להלות כל ערך בתחום המספרים שהמחשב לכול להחזיק. לעומתו, הערך של ביטול בוללאני מוגבל לשני ערכים בלבד, מסת1ך או מפםגץ. על אף התחום המצומצם של הערכים, ביטוי בוללאנל לכול להכלל :ותר אופרטורלם מאשר בלטול ארלתמטל, שהרל תנאל מכלל ביטויים ארלתמטילם וגם אופרטורלם של לחס. בביטול בוללאנל אפשר לשלב לחד כמה תנאים ע"? אופרטורים בוללאנלים. בגלל המספר הרב של אופרטורים אשר אפשר לכלול בביטוי בוללאני, לש צורך להוסיף על חוקל הקדימות המקובללם, כפ? שמפורט ברשימה שלהלן. ההרחבות הודגשו בקו: (1) בלטול בתוך סוגרלים. (2) - כאשר הוא סימן לשלילה, צַסא . (3) פסא ,תת , / , * , פאב 08+ - )64( (כ) כל , ל, ל ג" , 65 .. 4 כאשר מערלכלם ביטוי מתקדמלם משמאל לימלין ומטפלים תחילה באופרטורים ברמה הגבוהה ביותר. כאשר יש להבדילל בין שנל אופרטורים שנמצאלם באותה רמה, הקדלמות הלא לפי סדר הרישום שלהם, משמאל ללמין. אם נסיר את הסוגרללם בדוגמא הקודמת נקבל: 0 > 2+7 פאה 7*6 > 4 לפל חוקל הקדלימות מעריכים תתללה את 7*60 ומקבלים 14 (כל 6=2). אח"כ מעריכים את: 5 עא3 14, כאשר 2=10. אפשר לראות שהבלטוי הזה הוא לא חוקל כל האופרטור כא2 מתאים רק לשנל אופרנדים בוללאנלים ופה לש שנל אופרנדים שהם ערכים שלמים. במצב הקודם הסוגרלים חייבו הערכה קודמת של התנאלם הפשוטלם 6 ו- 2+7>4+0 והתוצאות הבוליאנלות שולבו כחוק ע"י האופרטור פא. השלמוש בסוגרלים אינו דרוש תמלד. אם נכתוב למשל, ביטול כמו 7+.>2 ונוסיף סוגרלים בצורה הבאה: (5>6)1+7, לא תרמנו דבר, שהרל בכל מקרה- מערלכים את 7 תחללה. העובדה שמצב כזה רצוי ומונע שימוש יתר של סוגרלים, הנלעה את מחברי השפה לקבוע את קדימותם של הלחסים כנמוכה בלותר. נכתוב תכנלת אשר יוצרת את טבלת האמת שראלנו קודם. 46 0 (עטפדט0ס) דמע שגד ]00 (1) (% בתכנית הזאת בונלם טבלת אמת. יש רק פלט *) | (2) תגט | (3) ;אמ001ת : 0 ,2 (4) אנת | (5) % אוו אש +ורררויתיטו ) אתטלנתה (6) אא תי ג'07777"תסרת' (7) נ' לודוופועסא' (8) ; א זטזתט (69 שת 0:=‏ ;פסתך =:ע (610 5 ,0 08 תע 7:50 ,0 7':50' ,ת) אתתדזתה (11) ((7':5' ,תע עסא ,7':5' ,0 סאג 2 (12) =:0- ;1908 =:ע (13) 5 ג ,0 08 7':50' ,0 ,7':5' ,תק ) אמצדתה (14) ְ(7':5! עסא ,7':5' ,0 פאג 2 (15) (מטתץ =:0 ;58עגע =:ק (16) ו 00 ,7:5 ,0 ,7':5' ,ק) אתמצדאט (17) ((7':5' ,תע עסא ,7':5' ,0 פאג ע (18) =:0 ג3158ץ =:2 (619 5 ,0 08 תע ,7':5' ,2) אשמצדתח (20) (7':5' ,תע עסא ,7':5' ,0 פאג תע (21) .סא (22) הפלט טל התכנית נראה כך: זוודדת צַסא0777 פאג 077772 08 תע ד קב ₪ אמות" אטותיה" ות" אטתן" 8 וו פטתדד ‏ - פפתגע מטתן" מנות" כו מותד" מטת" 8 מטת ₪ ₪ ₪ ד הסבר: בתכנלת זו כתבנו במספר שורות (10, 13 ועוד) שת? פקודות בכל שורה. אפשר לכתוב טת" שורות בשורה אחת ואף לותר, אך צריך להפריד ביניהן בסימן נקודה-פסיק. בכל זאת מומלץ לכתוב בכל שורה פקודה אחת בלבד. (2)-(1) שם התכנלת ותלאורה. (4)-(3) הצהרה על משתנים. (8)-(6) הדפסת הכותרת של הטבלה. שים לב שעל אף שכתוב פה 0 08 ק, 0 סאג על ו-ל ?0%א פעולות אלו לא מתבצעות, אלא מודפסות כמלל, מכלוון שהן רשומות בין גרשים. (9) אתתעזתח גורם לדללוג שורה ב*ן הכותרת ותוכן הטבלה. (12)-(10), (15)-(13), (18)-(16), (21)-(19) חוזרלם על אותן פקודות לכל אחד מ-4 התמורות של 71808 ו-74158. למשל, בתמורה הראשונה גם ‏ 2 וגם 0 שווים ל-1805. לכן מדפיסים ?2 ו-5 רווחלם, 0 ו-5 רוותים, הערך של 17 0 08 ע (שהוא 8, במקרה זה) ו-5 רווחלם, הערך של 0 פאג ע (מטתך במקרה זה) ו-5 רווחים והערך של 2 דסא (4158ע במקרה זה) ו-5 רווחלם. להדפסת הכותרת של הטבלה (שורות 6) מקלפים את שמות המשתנים, או את תלאור הפעולות הבוליאנלות בגרשים. כאן אין עושים זאת, כ לא מדפלסלם את הכלנויים אלא את התוכן של המשתנים, או את תוצאות הפעולות שביניהם. וק? די-מורגן (*) חוקל דל-מורגן מגדלרים יחסים שונים בין משתנים בוללאניים. בכך הם לכוללם לסייע בניסוח הפעולות הבוללאנלות. חוקים אלה קובעים שאם ג ו-5 הם משתנלם בוליאנלילם, יש צהות בלן היחסים הבאלם: 6 (ם פאג 4) זסא ו- (5 עסא) תס (4 יסא (2) (5 08 6 סא ו- (2 צסא6 פאג (4 דסא) בנוסף, כדאי לזכור שיש זהות בין הביטויים הבאים: (3) (ג זַסא) עסא ‏ ו- 4 (4) (5 = ) סא ו- (2 <> ) (5) (2 > ) 02א ‏ ו- (8 =< ) (6) (5 < 4) עסא ‏ ו- (8 => ) לדוגמא, נפשט את הבלטול הבוליאני הבא: ((כת > 6) פאה (ב > )) זסא בעזרת זהות (1) נכתוב את הבלטוי כך: (כ <> 66 סא תס (5 > )6 עסא בעזרת זהויות (4) ו-(5) נוכל לכתוב את הביטוי החדש כך: (נכ = 6) צסא) סא 05 (8 =< .6 בעזרת (3) נקבל: (ת = 66 8 (3 =< 6 43 תרגלל?ם 1 ששאלות (1) אם 0₪ת2=1, 2=747058, 8 ו- 4188ע=2, עליך להעריך את הביטוללם הבאים. רשום גם את סדר ההערכה. כ ת0 60 פאג 2 08 3 (68 כ פאא 6 08 5 כפאג ג (6 5 פא ג 01א 05 5 עסא פאג ג (6) 2 =< 0 08 2 = 2 (4) (כ =< 0) 08 (8 =1) (6) 2 > 0 פאג 25 > ג (6) (כ <> 60) פאג (5 <> 4) (8) 88 (2) * פשט את הביטול הבוללאנל הבא: (0 = 2) סא ((צ > א) 08 4 צסא)) צסא כאשר 4 הוא מטתנה בול?אני ו-0, 2, +, א הם משתנים שלמלם. (3) כתוב בלטול בוליאני שערכו 1208 אם: = 1 מתחלק ב-1 ללא שארלת. .‏ 1 אל זוגי. .‏ 1 אלננו בלן 5- ל: 4- וגם אלננו בין 4+ ל: 15+. (4) אם 1=4, 8 1 אלזה מבין הבלטויים ערכם אטתך? 2 961 . 2 *% 7-17 . = (10 => 1) פא4ג (0 < 1) = (50 > 1) פא (50 > 1) 05 (25 < 1) = (5 < 1) 05 (4 > 1) = (6 < 1) עסא 2 תכנלות (1) רצול שעובד חדש בחברה למלא את 3 הדרישות דלהלן: = למעלה מגיל 21. * בעל תואר ראשון. = בעל נליסיון של 5 שנים או לותר. כתוב תכנלת שתבדוק אללו מבין דרישות אלו המועמד ממלא. הקלט ‏ *היה ‏ 3 מספרים שלמלם: = גיל המועמד. = תואר: ‏ 0 יסמל שאין לו תואר. 1 לסמל שיש לו תואר. = מספר שנות ניסלון. כפלט נפיק בעבור כל מועמד 4 שורות במבנה הבא: אאאאא .דַס5₪0דתסז ‏ מסא זז ג אאאאא .61 0 עמפט קת .זג זז זאאטון סגא אאאא< .018 01 עשת זמ זוטון סא אאאאא :815107 אזא פגזה ג זם.זגאמא 0 פגאו אאאאא - הכוכביות מסמנות את המלה 08ת7 או 72188 לפל המקרה. (2) כתוב תכנית שתקרא שנל זוגות של מספרים שלמלם ותדפיס 4188ע או ששתך עבור כל אחד מן התנאים הבאלם: א. האם שנל הזוגות זהלם? ב. האם האיבר הראשון או האיבר השנל שווה בשנל הזוגות? ג. האם האלבר הראשון בזוג הראשון שווה לאיבר השנ? בזוג השני, או האם האלבר השנל בזוג הראשון שווה לאיבר הראשון בזוג השנ:? 4 (3) חברת אל-על רוצה לגלליס אנשי ביטתון מקרב תלמלדי האוניברסיטה. יש לה דרישות דלהלן: * זכר. . *‏ גמר 85 נקודות לקראת תואר. *‏ גובה למעלה מ-1.8 מטרלם. * משקל מעל ל-70 קילו. הקלט מורכב מ-5 נתונים : *" מספר סטודנט. *‏ מין (1 - זכר, 0 - נקבה) * מספר נקודות שהוא גמר. * גובה. * משקל. כתוב תכנית שתפדפיס את שורת הפלט הבאה עבור כל סטודנט: סטודנט מספר אאאא מתאים להיות איש ביטחון: אאסאא. התווים אאאא לוחלפו ע"י מספר הסטודנט והתווים 000% לוחלפו ע"? המלים שסתך או 7158 לפי המקרה. (4) חברה להפצת ספרילם מקבלת הזמנות ושולחת ספרים. לקוח קבוע משלם רק כאשר הוא מקבל את הספרים בדואר ("טיפול מלוחד"). לקוח רגיל חליב לשלם לפנל ששולחלם לו את הספרלם ("טלפול רגיל"). לקוח נחשב לקבוע אם הוא מקללם את התנאים דלהלן: א. קונה סחורה שערכה עולה על 8,000 שקל לשנה. ב. בעבר שילם את כל החשבונות בזמן (תוך 30 יום). ג. בעל וותק של לותר מ-5 שנלם. חברת ההפצה מוכנה לתת טיפול מלוחד גם ללקוחות שמקיימים את התנאלם דלהלן: (1) (א) ו-(ב). (2) (א) ו-(ג). (3) (ב) ו-(ג). (4)/ (ב). כתוב תכנלת שתקבל כקלט: א. ערך הסחורה שהלקוח קונה במשך שנה. ב. האם הלקוח שילם את החשבונות בזמן בעבר (1 - כן, 0 - לא). ג. מספר השנים שהלקוח קונה ספרלם מחברת הספרלם. הודעת הפלט צרלכה להיות: תו ללקוח טיפול מיוחד: אאאאא. התוולם אא יוחלפו ע"ל המלים משתך או 24158, לפי המקרה. הערה: לפנל כתיבת התכנלת צמצם את מספר התנאלם ל-2. 00 פרק 3 לולאות 1 הפקודה סס...מדאא ננלח שרוצים לחשב את ה נכיו תרשים זרלמה לפנ* שנתתיל לתכנת. 1 מאסא 0-9 שלעור השכר? כמה שעות? קרא . סב הסזפ משכורת של כל הפועלים שבמפעל ולא טל פועל אחד בלבד. 1 הסבר: בתרשלם זה לש סמלים, או בלוקים שונים, אשר נסביר את התפקיד של כל אחד מהם. המספרלם בראשלת הפלסקאות מתיחסלם לסמלים שבתרשים. (2) הגדרנו משתנה בשם 8א0 שערכו ההתחלתי? הוא 1. בהמשך, בכל פעם שנקרא את הנתונים של פועל ונעבד אותם, נגדיל את מא0א ב-1. לאחר שנעבד את הנתונים של פועל מספר 50, הערך של מא0א יגיע ל-51 וזה לסמן לנו להפסיק את העלבוד ולסיים את התכנלת. (3) מחבר, או נקודת קשר. אסור שחץ אחד יפגש עם חץ שני אלא בנקודת קשר. אסור ללותר משנל חצים להפגש באותה נקודת קשר. (4) מעויין מסמל החלטה. בנקודה זו צרלך להחללט אם להמשיך הלאה לכלוון שמתאים למצב 8<50א0, או להסתעף בכליוון למין, שמתאים למצב 50=>שאסא. (5) תהליך מוגדר מראש, או קטע. אם 8>=50א40 מסתעפים למלבן זה, שכתוב בו "עיבוד". יש לו צלעות צד כפולות, אשר מסמלות שתהליך העלבוד הרשום בו מורכב ממספר פעולות או שלבים, המפורטלם בתרשלם זרלמה נפרד. (3), (4) ו-(5) לחד מהווים מבנה חדש. עד עכשיו רשמנו את הסמלים זה לאחר זה במבנה סדרתי. המבנה .החדש מאפשר ביצוע הוזר, אשר תמלד מורכב מסמל החלטה, סמל של תהליך חלשוב או השמה, או סמל של תהליך מוגדר מראש (קטע) ומחבר. המבנה החדש נראה כך: מפזתע המבנה המוצג בתרשים הוא אחד משנל מבנים של אלטרציה (ם1608%10 - מלשון חזרה) ונקרא 088118כ2, כל הוא מאפשר לעטות עיבוד (20) רק כאשר (116ת0) התנאל מתקלים. מן הציור אפשר ללמוד מדוע מבנל אלטרציה נקראים לולאות (1/0008). (6) מגיעים לסוף התכנית רק כאשר 51=מא40, ז"א לאחר שמבצעים את הלולאה 50 פעמים. הלולאה מורכבת מן השלבים (7) עד (13). (7) הסמל של התחלה או סיום של תכנית מתאים גם לסלמול קטע, אשר מהווה חלק תוכנית נפרד שקרוי "עיבוד". בתוך סמל ההתחלה כותבים את שם הקטע (שהרל לפעמים יש כמה קטעלם כאלה) ובתוך סמל הסיום כותבי?ם "חזור" במקום לכתוב "סיום" (שהרל זה אלנו סוף התכנלת). המשמעות הלא חזרה לתוכנלת הראשלת, 2" לנקודה שממנה הסתעפנו ל"ע?בוד" ומשם להמשיך את הבלצוע. בתוכנית זו החזרה היא למחבר אשר מסומן במספר 3. (12) מטרת פעולה זו לעדכן את המונה, ז"א להגדיל אותו ב-1, כל ביצענו את הקטע פעם נוספת, כמו שהוזכר קודם, כאשר נגדיל את המונה מ- 50‏ ל-51 ונתזור במהלך הביצוע ל-(3) ואח"כ ל-(4), תוצאת ההחלטה ב-(4) תהלה שונה ממה שהלתה עד עכשלו. במקום להמשיך ל-(5), נמשלך ל-(6), מכלון שעכשלו 0<מאסא. תכנלת המבוססת על תרשלם זרימה זה מוצגת להלן: ; (עטקי00 , דטעא1) 1580873 אותססתע (1) בתכנית הזאת מחשבלם את המשכורת *) (2) (* של כל 50 הפועלים במפעל (3) % פאס (4) = אדסטס 548דו (5) תג (6) ;זומת :50848 ,5407 ,החד (067 , 68מא1 : מאסא (8) אזספת (9) ;1 =: פאסא (10) 20 אנפטס 5248דו => מאסא 18 (11) אזסעת ‏ (12) ; ('מהו שלעור השכר לשעה? כמה שעות עבד?') א1מדדאק (13) ; (51407 , ד ) אזפגות (14) ;7 * 58108 =: ת50 (15) 'מגיע לו שכר""' ,50848:8:2) אטדדתח (16) .('עבור"58401:6:1,'7, 'שעות עבודה"' (17) 1 + מאסא =: מאסא (18) פא (19) .סאפ (20) קלט לדוגמא עבור אחד מהמחזורים נראה כך: מהו שלעור השכר לשעה? כמה שעות עבד? 0 5 22 5 עבור"42.07""שעות עבודה מגיע לו שכר"7147.007 הסבר: (3)-(1) שם התכנית. (5)-(4) במקום לרשום את המספר 50 בחלק הביצוע: של התוכנלת, נגדיר תתילה משתנה ‏ 014 115248 ונטתמש בו בהמשך. נוהג זה <תרום להבנת התוכנית ולאפשר לבצע אותה בעבור מספר כלשהו של עובדים לאתר שינול הערך של הקבוע הזה. : (8)-(6) הצהרת המשתנים. המשתנים הממשיים אש581, 58407 ו-א8084 מוגדרים כמו בדוגמאות הקודמות. אאסא הוא משתנה שלם שלוגדל ב-1 בכל פעם שנסללם מחזור אחד של בלצוע של הלולאה. 33 (10) השמה של הערך ההתחלתל של 8א40, אשר יהיה טשווה ל-1 עד שנגמור את הביצוע של הלולאה בפעם הראשונה. אח"כ נשנה אותו ל-2, 3 וכו', עד 51 (שים לב, 51 ולא 50, כל הוספנו 1 למונה לאחר שביצענו את הקטע בפעם ה-50). (19)-(11) זו פקודה המקבילה למבנה 20₪81₪. צורתה הכללית הלא: ביטרי 90 7[ לא [--( מנצה) כאשר ערכו של הבלטוי שווה ל-1808, מבצעים את הקטע. כאשר ערכו טשווה ל-0185 לא מבצעים את הקטע, אלא ממשלכים בפקודה הבאה. הביטוי הבוליאנל בתוכנית זו הוא: אנעט0 15228 => מאסא. בפקודה (10) נקבע למשתנה עאסא ערך התחלתי של "1". בביצוע הראשון, אם-כן, התנאל אנפטס א1524א => פאסא | אכן אמת ולכן נבצע את הקטע. אבל אלפה הקטע? כאשר צלירנו תרשים זרלמה, הקטע נרשם בנפרד. בקידוד קלימת אפשרות כזאת (טנלמד עליה בפרק 8), אבל גם קיימת אפשרות לכתוב את הקטע במקומו, כאשר מצילנים את תחילתו וסופו ע"י המלים א28₪61 ו-פאע, בהתאמה. קטע אשר מופלע בגוף התכנלת נקרא פקודה מרוכבת (6מ5%585006 6מטסקמס0), אטר בתכנית זו הוא נמשך מפקודה (12) עד פקודה (19). אחת מן הפקודות הכלולות בקטע צריכה להשפיע על הביטול הבוליאנל, כדל שערכו יהפוך מ-7808 ל-258ע בשלב כלשהו של העלבוד. כך, בסופו של דבר, נפסיק לבצע את הלולאה. אחרת נקבל לולאה אלן-סופית. בדוגמא זו הפקודה שעושה זאת היא פקודה (18), אשר מוסיפה "1" למונה כל פעם שעוברלם דרך הקטע. לאחר שמבצעלם את הקטע 50 פעמלם, מא0א יהיה שווה ל-51, הבלטול הבוללאבל לפסיק להלות מט0א71, וביצוע התכנית ימשיך בפקודה הבאה שלאחר סלום הקטע. = ופקודה 08...20ע בתכנית הקודמת השתמשנו בשלוש פקודות שונות בכדי ליצור את הלולאה ולפקח על פעולתה. לכל פקודה לש תפקיד נפרד: * בפקודה (10) קבענו ערך התחלתל למונה, * בפקודה (18) קידמנו את המונה כד? שבסופו של דבר הבלטוי הבוללאנל להפך מ-71908 ל-14058, * בפקודה (11) הערכנו את הבלטוי הבוללאנל. קלימת פקודה אחת שמבצעת, מבחינתו של המתכנת, את שלוש הפעולות האלה וחוסכת ממנו את הטלרחה הכרוכה בכתיבה של פקודות נפרדות. זוהי הפקודה 08ע, שצורתה הכללית הלא: 7 המהדר בונה בעצמו את הפקודות לבקרת הלולאה. פקודות אלו לא נראות למתכנת, אסר ממשלך לראות רק את הפקודות שכתב. המשתנה מקבל כערך התחלת? את הערך של הבלטול הראשון ואז מבוצע הקטע לראשונה. בסיום הביצוע של הקטע גדל הערך של המשתנה ב-1 אם כתבנו 10, או שהוא קטן ב-1 אם כתבנו 70א20. בשלב זה נערכת בדלקה אם הערך החדש של המשתנה עוד לא גדול מן הבלטול השנל (אם כתבנו 10), או אם ערכו עוד לא קטן מן הערך של המשתנה השנ? (אם כתבנו סעאוסעת). אם התשובה הלא כן, ממשלכלם לבצע את הלולאה, אחרת ממשלכים עם הפקודה הבאה בתכנית. אם נשתמש בפקודה החדשה 70%, נוכל להשמלט בתוכנלת הקודמת את הפקודות (10) ו-(18) ולהחליף את הפקודה (11) בפקודה: 0 אדפטס ת3קפזוא 10 1 =: פאסא 208 (118) אם רוצים להתח?ל עם ערך גדול עבור פאסא ולהקטין אותו נוכל לכתוב: 20 1 סצאחאסע | פטס 1524 =: אסא 708 (115) המשתנה אסא הוא האינדקס של הלולאה 208 והוא לכול להופיע גם בתוך הלולאה. למטל, אם נכנלס לפנל פקודה (16) את הפקודת (מאסא)אזספדזתח, נוכל להדפיס את המספר הסידורל טל כל פועל ליד המשכורת שלו. מאידך, אסור לשנות את ערכו של האלנדקס בתוך הלולאה, שהרי? עדכון האלנדקס נעשה באופן אוטומט ע"* 08ע ואינו נמצא בשליטת המתכנת. לדוגמא, ‏ אם נכתוב 1אסא= : 5א0 בתוך לולאת 08ת, אז: מא40 *תעדכן פעַמיים. פעם אחת *בוצע העדכון כתוצאה מהפקודה הנזכרת ופעם אחרת ‏ - באופן אוטומט בסוף הלולאה. לכן מומלץ להמנע מעדכון של אלנדקס הלולאה בתוך הלולאה. אם נוסיף אחרי פקודה (9) את הפקודה (1%עש0 15248א) אזסגתת | ונצהיר על אזפטס 15245 כמשתנה שלם ולא כקבוע, נוכל לשנות את הפקודה (11) כך: אנפטס ת3ק5דון 0 1 =: מאסא 208 (116) בתוכנית זו אלן צורך לדעת את מספר הפועלים בזמן כתיבת התכנלת, אלא רק בזמן הביצוע. 1 חילשובל חזקות וטור טלילור (*) הפקודה 08ת, כפל שראלנו, כוללת בתוכה את המנגנון לביצוע תפקידים של שלוש הפקודות לבקרת הלולאה. יתכן מצב שבו הקטע שחוזרלם על:ו להיה מורכב מפקודה אחת בלבד ואז אין צורך במלות העזר אזססת ו-כעאם, כמו טנראה בדוגמא הבאה. 55 בדוגמא הבאה נציג דרך נוספת לזו שהוצגה לעיל, כדל לחשב את 4 בחזקת 5 עבור מספר שלם (שהרל אין אפשרות לחשב חזקות באופן ישיר בשפת פסקל, כמו שהזכרנו כבר). 8 הוא מספר שלם. 3 =: 5 אלתסעם ב 0 2 70 1 =: ך אסקע ;ג * 5 דא2סעת ב =: 2 11א0₪2ת 4 נוכל גם להשתמש בפקודה 08..20ע בכדי לחשב את ערכו של *6, אשר מוגדר ע"ל סדרת טלללור. שים לב, ככל ש-ה לותר גדול, התוצאה לותר מדויקת. תע 3 2א ,| א בפועל, אין צורך בתכנית לחישוב *6, כל הפונקצלה (א)עאע אשר מחשבת זאת מוגדרת כחלק משפת פסקל. התוכנלת שלהלן מוצגת בכדל להדגים שיטה ולא מכלון שהיא דרושה. 6* = 1 + ; (01פ1טס ‏ צטעא1) עאם אגתססתק (1) תגט (2) ;תתסעעאד : 1 ,אנתגטת תקד (3) תת : תגטת ,5000 ,א (4) אנסתת (6)5 ;('לדיוק של כמה אלברלם נחשב את *6 ומה ערכו של א?') אזעדצדתט (6) 97 את תבק5דו) אזפגות (67 =: תג0ם (8) 0 א1תגטם הגע5זא 70 אזססת (11) ; / א * תגטת =: תגטת (12) תת + 508 =: 500% (13) ; פא (14) :(' בחזקת ‏ ',6:2:א ,' " בדליוק של"7' ,אדתגטם תג52דא) אזתעדתט (15) ('איברים, שווה ל:77' ,50188:8:2) אזמדדתט (16) .פאפ (17) הרצה של התוכנית תוכל להפיק את הפלט הבא: לדלוק של כמה אברלם נחשב את *6 ומה ערכו של א? 0 ,7 5 בחזקת ‏ 4.00 בדיוק של 7 איברילם, שווה ל: 51.80 הסבר: (1) שם התכנלת. (4)-(2) המשתנה ‏ 5% הוא החזקה. המשתנה 8725 הוא הערך של כל אלבר חדט שמוסלפים לסכום המצטבר, 50804. הדיוק של התוצאה נובע ממספר האלברלם שלשתתפו בסכום, %זתג/ע 15228א. 1 משמש כאינדקס עבור הפקודה 08..20. (7)-(6) קוראילם ערכים למשתנים א1ת/ע 15248 ו-א, אשר יקבעו בהתאמה את מידת הדיוק ואת החזקה א שנעלה בה את הבסלס 6. 66 (9)-(8) ערכים התחלת:ים של תגטע ו-5008. הערך ההתחלתל של 50888 הוא 1 (אחד) וזהו האיבר הראשוון של סדרת טיללור. (14)-(10) מבצעים לולאה. בכל פעם שמבצעים את הלולאה, מוסיפים איבר אחד מן הסדרה עד שנוסיף את הערך של האיבר האחרון ‏ (ז"א האיבר שמספרו אזתגטם 45ק5זא) לסכום ההתחלת< שערכו ‏ 1. בפעם הראשונה שמבצעים את הלולאה מחשבים את 1/א ומוסלפים אותו ל-85084. בפעם השנללה מחשבים (2/א)*(1/א) אטר טווה ל-!%2/2 ומוסלפים אותו ל-/2ח[80 וכו'. האלבר האחרון שווה לבלטול: (אדתגעם 83זוו/א)*. ,*(2/א)*(3/1) אשר טשווה לבלטול: [אדתשם תג152ון / ת31ט6 עהקפוחא ומוסיפים אותו ל-5008. (16)-(15) הדפסת התוצאה, *חד עם החזקה א ומידת הדיוק אדתגטם 15948. יש לשים לב לכך שההודעה הלא בעברלת, לכן כתבנו א8ד1תא בטורה (15) וגם בטורה (16), כדל לטמור על הסדר ‏ הנכון טל המשפט. המחרוזת הראשונה מסתלימת בסוף שורה (15). אם לא הללנו כותבים פקודת א8%0ע1חש בשורה (16), שתי השורות היו מצורפות זו לזו והשורה (15) הלתה מופיעה בצד שמאל של הטורה (16) בסדר לא נכון. הפקודה א78%זאק בשורה (16) גורמת להדפסה נפרדת של התמל:יל שבשתל שורות אלו. בכתיבה באנגלית בעיה זו אלנה קיימת, כל התמליל שבטורה הטנליה הינו ברצף של השורה הראטונה, משמאל לימין. 3 לולאה ללא גבול עללון על אף הלעללות והנוחות של השלמוש בפקודה 08ע, לא תמלד היא עדיפה על הפקודה 0ת. .111.8. בדוגמא טל חישוב 4 בחזקת 3, מספר הלולאות הלה *דוע בזמן כתיבת התכנלת. גם בדוגמת המשכורת, כאשר השתמשנו בפקודה (116), הללנו צריכים לדעת בזמן ביצוע התוכנלת כמה לולאות (ערכו של אזפטס 115248) רוצים לבצע. מאידך, אם מספר זה לא ידוע בזמן בלצוע התכנלת, אי אפשר להשתמש בפקודת 20%. . דוגמא של מצב כזה, ז"א כאשר לא לדוע מספר הלולאות בתתחללת הביצוע, נראה בתוכנלת הבאה: ; (001201 , דטפאד) 74ת0א5 אותססתע | (1) התכנית הזאת מחשבת משכורת פועללם. *) (2) (* לא צרלכים לדְעַת מראש כמה פועלים *ש. (3) 0057 | (4) %4- = אזאוזעא 50% (5) כאטר הערך של תט581 ללה 1.0-.. תוא ל4לך *0 (6) (% שהגענו לסוף קלט הנתונלם. (67 - תגט ‏ (8) ;1 .0 ,1407 , 58108 (69 אזספת | (10) ;('מהו שלעור השכר לשעה?') א178ת (11) , ( שטד51 )אס מ (12) 0 אזוודפא 509 <> תטדה5 מ דג (13) אזסטת (14) 7 ;('כמה שעות עבד?) אומוזתט (15) ; (58407) אזתאחת (16) )17( 50128 := 501 * ,'מגיע לו שכר של' ,8:2:ת5012 ,'שקל') אתתצדתט (18) ;('בעבור' ,5801:6:1 , 'שעות עבודה' (19) ;('מהו שלעור השכר לשעה?') אותצזתח (20) (50108) אזסגחת (21) פא (22) .עאע | (23) הסבר: (3)-(1) שם התוכנלת ותלאור. (7)-(4) הגדרת הערך שלשמש כזקיף (7188, דגל) בכדל להפסיק את ביצוע הלולאה. ערך זה אלנו לכול להלות אחד מהערכים ש-58108 לכול לקבל. כאשר נקרא אותו הוא< לא לחשב כערך עבור המשתנה 58108, אלא כסלמן לסלום הנתונילם ולהפסקת ביצוע הלולאה. בתכנלת זו נבתר הערך 1.0- למטרה זו, כל 5 תייב להלות גדול מ-0. (9)-(8) הצהרה על המשתנלם שלשתתפו בתוכנלת. (12)-(11) קריאת הערך של 58108 בפעם הראשונה. גם לפנל התחלת בלצוע הלולאה חליבים ליחס ערך למשתנה 58108, כל הוא מופלע כחלק מן הבלטול הבולילאני שבתחילת הלולאה. ‏ אם 58108 לא להיה מוגדר כנדרש גם לפנל הבלצוע הראשון של הלולאה, לש חשש שלא נכנס אליה כלל. (22)-(13) פקודות אלו מהוות את הלולאה. ערכוה של אט1א58 עבור הקרלאה הראשונה ידוע כבר בתחילת ביצוע הלולאה. אם למשל לא *היו נתונים, תטזח58 לקבל את הערך 1.0- כבר בשורה (12) והלולאה לא תתבצע אפללו פעם אחת. אבל זהו מקרה לוצא דופן, שהרל אם אין נתונלם, לא מרלצים את התוכנלת. המקרה היותר סבלר הוא ש-58108 יקבל ערך חלובי בשורה (12), נקרא את הערך של 58401 בשורה (16), נחשב את השכר בשורה (17), נדפיסו בשורות (18)-(19) ולבסוף נקרא את ערכו החדש של 58108 בשורות (20)-(21). מקפידים לקרוא את 58108 בסוף הלולאה כדל שאם ערכו להלה שווה ל: אנאטזטפא 507 נוכל לסיים מלד את ביצוע הלולאה, או ליתר דיוק, להמנע מהתחלה נוספת שלה. כאשר: א1אטץעא 50%=פט581, ערכו של התנאל הבוללאנל בפקודה 1118 להיה שווה ל-141258 והלולאה תפסק. בתוכנית הקודמת כתבנו פעמלים את הפקודה (2₪42)58108. בפעם הראשונה כתבנו אותה לפנל התחלת הלולאה, כדל שיהיה למשתנה ערך מוגדר בתחילת הלולאה. בפעם הטנליה כתבנו אותו בסוף הלולאה כדל לקבל ערכלם לחלטוב במחזור הבא ובכדל לסיים את הלולאה כאשר ערכו של 58108 להיה שווה ל-א1אטצטא ע50. אם מניחים שיש בתכנית לפחות נתון אחד (וזה סביר), נוכל לפשט אותה, כפי שמוצג בתוכנלת הבאה: ; (דטקנטס, צטעא1) 15עת0א45 תססתת (1) 8ַג התוכנלת הזאת מחשבת משכורות של פועללם. *) (2) (* לא צרלכלם לדעת את מספר הפועלים. (3) )8( 7 = אזאטעטא 50% (5) פא (6) :50128 51407 , הטזהס (7) , תמסמצא :קזאה? (8) אזסטם (9) 1 =:18%א24 (10) סע אזאטדטא 502 <> ע1אג2 חח (11) אזסות (12) (('מהו שלעור השכר לשעה? כמה שעות עבד') אמתצדתטח (13) ; (58407 ,אט581) אזסגתת (14) )15( 50848:= 51108 * 07, ,'שכרו הוא"' ,50822:8:2) א[תדזתח (16) (('עבור""' ,58₪401:6:1 ,'שעות עבודה"' (17) (('האם לש עוד נתונים?') אומץזתטחט (18) ;('אם לש כתוב 1, אם אין כתוב 0') א1780תח (19) (ע1א24) אזפגמת (20) פא (21) . פא (22) הרצה של תכניףת זו זהה להרצה של התוכנית 08014א45%א, אולם בסוף כל לולאה תוצגנה על המסך הטאלה וההנחליה: האם לש עוד נתונלם? אם לש כתוב 1, אם אלן כתוב 0 הסבר: (3)-(1) שם התוכנית ותלאור. (5)-(84) המשתנה א1אטעעא 50% שונה פה מן הדוגמא הקודמת. בתכנלת 874ת0א15א4 הוא מליצג ערך ש-58108 מקבל בכדל לסללם את הלולאה. פה הוא מליצג ערך ש-17א2 מקבל. שם הוא נחשב לערך ממשי, כסוגו של 58108, פה הוא נחשב למספר שלם, כסוגו של עךא.2. (8) המשתנה ע1א24 ישמש כזקיף. כאשר ערכוה יהיה שווה ל- אדאטזטא 507 מפסיקים את ביצוע הלולאה. (10) הערך ההתחלתי של ע1א24 יהיה 1. למעשה כל ערך חוץ מזה שקבענו עבור אזאסזתא 502 יתאים עבור הערך ההתחלתל. (21)-(11) אפשר להתחיל את הלולאה מיד. בתחילת הלולאה קוראלם את 581 ו-58401 (בשורות (13) ו-(14)), מחשבים את השכר (בשורה 15) ומדפלסים אותו. טואלים אם לש עוד נתונלם ופועלים בהתאם: * אם א1אטעפא 17><50%א24 מבצעים שוב פעם את הלולאה, *‏ אם אזאטזאא 12=502א2 לא מבצעים את הלולאה פעם נוספת ומסללמלם את התכנלת. 99 לתרון גדול בשלטה זו הוא, שלא צריך לבחון איזה ערך אלנו מתאלם עבור אשדחפ כדי טשנוכל להשתמש בו כזקיף, אשר יסמן את סוף הנתונילם. לתרון נוסף הוא טלא צרלכים לחזור על (58108)א1כעגאת פעמלים, פעם לפני הלולאה ופעם בסופה. אבל למה לא להגדיר את הזקיף כמשתנה בוליאני? אם נעשה כך אפשר להלה לפשט את התכנלת עוד יותר ולשנות אותה כך: שורות (4) ו-(5) לא תהינה נחוצות, בשורה (8) המשתנה ע1א22% לוגדר כמשתנה בוללאנ? ולא כמשתנה שלם, בשורה (10) נכתוב 17:=740588א20, נחליף שורה (11) ב- 0ע עךאג2 ע0א אחא (שמשמעותו מובנת מאללו). הקושל הוא בכך שהתלקון המוצע לא יפעל ברוב המהדרים. בשורה (20) קוראלם את הערך של ע1א24%. ברוב המהדרלם הסטנדרטיים אסור לקרוא ערך בוליאני כקלט. לש דרך להתגבר על המגבלה שהוזכרה בעזרת הפונקציה הבוליאנית (תטסקעא1)ץ0סע. 1 הפונקצ? וללאנלת ₪0 פונקציה בוליאנית (ם610סתט1 מ200168) הלא פונקצלה שתוצאתה הלא אחד מן הערכים הבוללאנלים שטע? או 78156. הוראות שלמוש בפונקצלה זו שונות במהדרלם שונים. לדוגמא במחשב אג, אם קוראלם נתונים בעזרת פקודת סגחת ומיד לאחר הנתון האחרון מקישלם בו-זמנית על המקש 780א00 ועל המקט 2 (יש לבדוק אם כך הדבר במחשב שבו אתה פועל). הפעולה תגרום לפונקציה (עטפא1)עסע לקבל את הערך 08א12. אם קוראלם בעזרת אתסגתת, אפשר להקיש 180א00 ו-2 בכל מקום בשורה לאחר הנתון האחרון, ללא תלות במספר הרווחלם אשר מפרידלם בינו לבין 1801-2א60. במקום לכתוב (1טעא₪07)1 אפשר לכתוב רק ח0ע. ההנחה היא שמקור הקלט הוא לוח המקשים ולכן אין צורך לכתוב את המלה צ20א1. הנחה זו הלא ברלרת מחדל (מ510ק0 16ט2618). כאשר הקלט מגיע ממקור אחר יש לפרט זאת בסוגרלם לאתר המלה ע₪0. אפשרות צו נדונה בפרק 13, בדלון על קבצל תמללל. התכנילת הבאה משתמשת בפונקציה ₪07. ; (עטפדטס ,( עטעא1) 76מתסאפא אגתססתת | (1) התכנית הזאת מחשבת משכורת של עובדלם במפעל. *) (2) (* לא צריך לדעת מראש כמה עובדים יש. (3) תג (4) ;תת :50842 ,5107 ,אעזם5 (5) אז1סתת | (6)6 0 ₪0 דסא םודא (67 אזססת (8) :;('מהו שלעור השכר לשעה? כמה שעות עבד?') אזמדדאט (9) 5401 ,א1ע5) פגחת (10) < תדע =: 501.8 (11) ,'מגיע לו שכר של" ' ,50828:8:2) אתחדנתט (12) ('עבור""' ,5801:6:1 ,' שעות עבודה' (13) פא (14) 00 .אע (15) הסבר: (3)-(1) השם והתיאור של התכנית. (5)-(4) הגדרת המשתנים. שים לב, שעכשיו לא נחוץ להגדיר את המשתנים אתאטזפא 807 ואת ע1א24 כקבועים או כמשתנים בוללאנלים. הסיבה לכך הלא שהפונקציה הבול?אנלת מוגדרת במהדר של פסקל ולכן שורות (4), (5), (8), (10), (18), (19) ו-(20) שבתכנית הקודמת מלותרות עכשלו. (6) בזמן התחלת התכנית ערכו טל 80 הוא 74158 ולכן הערך של התנאל עסת עסא הוא מסתץ. בתכנית הקודמת הודענו למחשב להפס?ק את הלולאה כאשר המשתנה "1א24% מקבל ערד 0 (שורות 18 עד 20). בתוכנית זו המחשב *גלה שאלן 9ותר נתונים כאשר הוא לתקל בצילרוף 2-ת280א00 *חד עם קרלאת הנתון האחרון. המחשב לפעלל את הפונקציה הבוללאנית ע₪0 (ז"א *יחס לפונקציה ערך אטא1), אטר תגרום להפסקת ביצוע הלולאה. 5.5 ש?קולים לבח?רה של הוראת לולאה לש לטקול בכל מקרה אם להשתמש בלולאה 0 או בלולאה 20..א0ע. המבנה 00 מתאלם לותר למקרה שבו לדוע מראש מספר הלולאות שרוצים לבצע. המבנה 0 מתאלם למקרה של קרלאת נתונים ללא לדיעה מראש כמה לולאות לש לבצע. במהלך הבלצוע תנאל מסוים הופך להיות 4188ת ושינול זה גורם להפסקה של ביצוע הלולאה. דוגמא של השימוש המתאלם בשתל פקודות אלו נלתנת בתכנלת הבאה: ; (צטפטס , צטפאד) אזאטצד2ד א4ת0סתת (1) בתכנית הבאה מחשבלם עבור כל סטודנט *) (2) את הממוצע של הציונים שלו בחמלשה מבחנלים. (0)3 (% מדפלסלם את הממוצע ולידו גרף המורכב מכוכבים. (4) תא (5) , גאדפת זפ , 1181204 ,5080 , סדוזד 15048 (6) ; תמ6מנא1 :24טו ,0084%א ,אטצז2ך (67 אנסתת (8) 0 ₪0 צסא מתדאח (69 אזססת . (10) ; (002907) 2405 (11) ;(' הכנס בבקשה מספר תלמיד' ) א1780א (12) ; (עדאזד תהעפדא) פגטת (13) (('הכנס בבקשה 5 צלונים') אתשדזתח (14) =: 50% (15) 0 70 1 =: 1204א411 תסע (16) אזסטת (17) (*הציון הוא מספר בין 0 ל-100*) ;(אעו121) סגאת (18) אטצז?ץ + 50108 =: 508 (19) ; פא (20) ; (8018/5) פאזסת =: 24שמון (21) 1 20 10 =: גאצחת גתחופ תסע (22) ; אד (23) ;('"' ,10:ג2טון ,7':15' ,סדוזגד תגעפדא) מצדתט (24) 0ע (24שא * 0.2) פאטסת 70 1 =: טגאססא תסק (25) ;( '*' ) מחדתט (26) 0 0 1 =: גאדעת התחפ תסק (27) א ידט (28) פא (29) .פא (30) הרצה לדוגמא: הכנס בבקשה מספר תלמלד 11 הכנס בבקשה 5 צלונלם 800 90 70 00 שת" שורות הרררררררירר הררה ב ררה ההכ אמאאאאאאאאאאא אאא 807 11 1 16 כוכביות ]1[ 10 תוים]1 15 תוולם ‏ ]ך 10 תוים] הסבר: (4)-(1) שם ותלאור התכנלת. (7)-(5) משתנים שנשתמש בהם בתכנלת. (29)-(9) החלק הבלצועי של התכנית נמצא בתוך לולאה. נפסיק לבצע את הלולאה הזו לאחר שנסיים את הטיפול בתלמלד האחרון כאשר 50 להלה שווה ל-אטתץ. (11) ההוראה (2408)001201 תגרום לקידום דף (הַ73) אם להידת הפלט המלוחסת למלה 1 הלא מדפסת, או להצגה של מסך נקי אם היחידה המלוחסת למלהת עס הלא מסוף. (13)-(12) קרלאה של מספר תלמלד. (15) חשוב מאוד לאפס את 50808 בכל פּעם שמבצעים את הלולאה, כדל שהוא לא לכיל את הסכום המצטבר של כל הלולאות הקודמות. (20)-(16) קרלאה וסלכום של 5 הציונים של הסטודנט. (21) חישוב הממוצע. ההוראה פאטסת מבטלחה שהתוצאה תהלה מספר שלם, אחרת הלא תהלה מספר ממשל. (23)-(22) לולאה לשם "הדפסה" של 2 שורות ריקות בכדי להפריד בין הקלט והפלט של כל סטודנט. : (24) שורת הפלט: מספר התלמיד ברוחב 10 תווים, רווח של 15 תוולם, ממוצע הציונים ברוחב של 10 תווים ועוד רווח אחד. אין קידום של השורה. 02 (26)-(25) הדפסת כוכבילות באותה שורה. מספר הכוכבלות יחסי לערך של הממוצע טל אותו תלמיד. הדפסת הכוכבלות נתונה לשיקול דעתו של מתכנן הדוה. ההדפסה באותה שורה נעשתה באמצעות הפקודה 8זזת, המאפשרת כתיבות הוזרות ונטנות באותה שורה ללא קידום. (28)-(27) לולאה לשם "הדפסה" של השורה הנוכחית ושל 2 שורות רלקות נוספות בכדל להפריד בין הפלט אשר מת?לחס לסטודנטים שונלם. 6 הפקודה עאט. ץגמסעת מבנה האלטרציה השנל אשר נתאר בתרשים ושנדון בו עתה הוא מבנה 11אטסכ: המבנה השלם מורכב ממחבר, תהליך רגיל או תהליך מוגדר מראש, החלטה וחזרה למחבר. ההבדל ‏ בין 20081808 לבין 11א200 הוא בכך שבמבנה החדש עוברים בתהליך ומבצעים את הפעולה המוגדרת בו לפחות פעם אחת. ‏ רק אז בודקים את התנאי שנמצא במבנה ההחלטה ועל סמך תוצאות הבדלקה מחללטלם אם לתחזור למחבר. הפקודה המקבילה בפסקל מתוארת בתרשים הבא: ביטוי בולליאנ פקודה קלימים שנ* הבדלים בין לולאת 011118₪..20 לבין לולאת 1דאט. . דהמקפת: א. במבנה ה מבצעים את הבדיקה רק לאחר ביצוע הפקודה (או פקודות), כלאות למבנה ם71א00כ2. מאיד ; -- ד, במבנה ₪8108..20 הבדלקה קודמת 3 ב. במבנה ‏ 1עאש.. דאמקסת הלולאה ממשיכה להתבצע כל עוד הערך של הבלטול הבוליאנל הוא 24152 והיא מפסיקה כאשר ערך הביטוי הופך ל-7808. במבנה 0. .דחו המצב הפוך. הלולאה מתבצעת רק כאשר הערך של הביטול הבוליאנל הוא 1208 והלא מפסיקה להתבצע כאשר ערכו הופך ל-058ַ4ל. לפעמים כוונת התכנית ברורה ילותר כאשר משתמשלם במבבה ,11עאט. . ץ4חקחת. בדגלם זאת ע"* החלפה של הפקודות (6) עד (13) שבתכנית 5%08₪76.א בפקודות הבאות: ץתעעתת (6)6 ;('מהו שלעור השכר לשעה? כמה שעות עבד?') אתדדאט (07 ;(58407 ,5810) אתפגחת - . (8) )9( 5088 := 58710 * ,'מגיע לו שכר של" ' ,50₪48:8:2) אזתעדתחט (10) ('"עבור"' ,58201:6:1 ,' שעות של עבודה' (11) סע מצעאט (12) הסבר: אחרל ההוראה בשורה (6) לא צריכים א2₪01 ולפני השורה (12) לא צרלכים פאק. בפקודה %8108₪..20 מלים אלו שלמשו סלמנים לתחללה וסוף הקטע. במבנה הלולאה זזאט. . זמקפת המלה []גמעעת תוחמת את הקטע בתחללתו והמלה 112א תוחמת אותו בסופו ולכן לא צריכים מלות עזר נוספות. זוג ההוראות ₪0 דצאט..2%7ת2 מדגיש בבהירות יתר ובצורה חלובלת שנרצה לחזור על הלולאה עד שנגלע לסוף הנתונלם. ההוראה 20 ע0ם עסא 7108 מבטאת את אותו התנא בצורה שלילית: "בצע את הלולאה כל עוד לא הגעת לסוף הנתונלם". לכן יש להעדיף במקרה זה את הפקודה ץ]גמקתת. כאשר משתמשים ב-"₪07 עסא זאו" וגם כאשר משתמשים ב-ע₪0 דלאט. .וגמקאת יש צורך להניח שיש לפחות נתון אחד. הסיבה לכך הלא העובדה שהצלרוף 800-2א60 אינו ערך קביל עבור משתנה שלם או ממשל ותפקידו רק לסמן סלום קרלאה של משתנה ואת סוף הקלט. כדל לעשות זאת, צריך להלות בקלט לפחות ערך קביל אחד, אשר 120-2א00% לסמן את סיום הקרלאה שלו ושל כל הקלט. 1 האלגורלתם של אוקלידס נניחת שיש למצוא את הגורם המשותף הגדול בלותר של שנל מספרלם ‏ - 60 (ע7280%0 תסשת00 0268588%6). כדל לעשות זאת נסתמך על האלגורלתם של אוקלידס שאומר: א. אם א הוא ה-607 של ו-2, אז ההפרש בין שנל המספרים מתחלק ב-א. ב. ה-002 של שנל מספרים זהים שווה לאותו מספר עצמו. הוכחה ל-א' נובעת מן העובדה, שאם א הוא ה-007 של 1 ו-2 זה מחללב שלהלו שנל מספרים [ ו-ן2 כך ש: [ְגא=4 וגם וְפא=2 ומכאן נקבל: (ן4-ן5)א=-2. המשמעות הלא שההפרש -2 מתחלק ב-א. טענה ב' מובנת מאללה. השיטה המוצעת בכדל לחשב את ה-607 היא תהליך חוזר של חישוב ההפרש שבין שנל המספרים הנתונלם והתלפת הגדול שבלניהם ע"י ההפרש, עד ששני המספרים שוולם. לדוגמא, נתונים המספרלם ‏ ו-25. אם למשל 25<, נהליף את 4 בהפרש 2-2. נשווה 6 את 2 אל הערך החדש של 3 ונמשיך להחליף את הערך הגדול בהפרש שבלן המספר הגדול לבין המספר הקטן, עד שנגיע למצב שבו שני הערכים שווים. כעת קבלנו את 667 של זוג המספרים המקורלים 4 ו-5. נתכנת עתה את האלגורלתם של אוקללדס. ; (שטפנטס , צטפאד) פדתסטת אתססתת (1) תג (2) ; תפ6פעאד :4,2,007 (3) אנסחסת (4) ;('כתוב שנל מספרלם שלש למצוא את ה-607 שלהם') אְמצדתח " (5) ((4,9) כאחת (6) דמפטת (7) 00 4<2 ₪זזאט (8) =: 2 (9) 0 5<4 אדאח (10) 5-4 =: 3 (11) ;ם = 4 זעאט (12) ;א =: 007 (13) ('ה-607 שווה ל:' ,ע60) אמדזתח (14) .פאעת (15) הסבר: (1) שם התכנלת. (2) משתנל הקלט הם 1 ו-2 ומשתנה הפלט הוא 607. (6)-(4) קרלאה של נתוני הקלט. (9)-(8) מחסרים 8 מ-4 כל עוד 4 גדול לותר. (11)-(10) מחסרים 2 מ-5 כל עוד 5 גדול לותר. מהלך הבלצוע של התכנ*ת: נניה שנתון 4=98, 7.. כאשר 8<2, מבצעים שורה (11) והערך החדש של 5 להיה 217-98=119 (1 נשאר 98). 5 עדלין גדול מ-4 ולכן שוב פעם מבצעים את (11) ומקבלים 2=119-98=21 (4 נשאר 98). עכשלו ג גדול *ותר ולכן מבצעים את (9) ומקבלים 4=98-21=77 (2 נשאר 21). ממטשיכים ומקבלים 1=77-21=56, אח"כ 5- "-ידואח"כ מקבללם 4=35-21=14 (הערך של 5 נשאר 21). עכשיו 4 קטן מ-5 ולכן מחטבים 2 חדש: 21-14=7=ג-2=2 (הערך של 4 נשאר 14). עכשיו 4 לותר גדול ולכן מחשבים את 2=4-2=14-7=7 וזהו ערכו של 2. בשלב זה פקודה (12) נכנסת לתוקף, מסיימלם את הלולאה ומדפיסים את התוצאה בשורה (14). 2 המספר הגדול בלותר במחשב (*) השלם הגדול ביותר שאפשר להחזיק במחשב שיש לו מלה בגודל ‏ ת סלביות הוא 1 (ראה בספת]. ננילת שלא לדוע מה ערכו של ם ומעונלינים לברר זאת. על בסלס העובדה ש: [-+-27=צַא1א%א נוכל לכתוב את התכנית הבאה: 65 ; (01קד00) טח9הסז) ץ.זדוו אותססתע (1) תג (2) תתסתדא :אגא , דון תתת60 ,א ,א (63 אזסתת (8) )5( 6008 11 := % =: א (6) דחסעת (7) ;א * 2 =: א (8) א =: א (9) ; 1 + זו 0080 =: גד 608 (10) א+א =: אגא (11) ; זאזאגא =: אגא מזנאט (12) ;('המספר הגדול ביותר שאפשר להחזיק במחשב זה') אז[מדדתח (13) ;('הוא 77' , לאדאגא , הגודל של מלת המחשב') אזמד1תט (14) ('הוא""' ,11104:20] 608 ) אתתדדתט (15) .אא (16) הרצה לדוגמא: המספר הגדול בלותר שאפשר להחזלק במחשב זה הוא""77327677"הגודל טל מלת המחשב הוא"" 16 ה הסבר: (1) שם התכנית. התכנלת לא מקבלת קלט כלשהו ולכן אפשר לכתוב בסוגרלים את המלה 1שפץע0 בלבד. (3)-(2) במשתנה %₪% נרשום את הערך העשרונ הגדול ביותר של חזקה של 2 שהמחשב לכול להחזיק. 1 6028 הוא משתנה שמחזיק את מספר הסיביות של המלה של המחשב אשר ערכה שווה ל-א14. (6)-(5) במצב ההתחלתל ‏ 1=א ו- 4112=2 60280. כלומר, נתונה מלה בת שתל סיביות, שבה סלבית אחת מלועדת לסלמן וסיבית אחת מלועדת למספר. הערך הגדול ביותר (שהוא גם חזקה של 2) שאפשר להחזיק במלה זו הוא 1. (11)-(8) כופללם את א ב-2. הערך הגדול בלותר הוא לא מכפלה של 2 אלא אחד קטן ממנו, לפל הנוסתה 1-1-27%. נוסיף 1-א=א ל-א בכד? לקבל את אגא. עתה נבדוק אם ערך זה של אג% אמנם טשווה ל-7א1אא. אם התשובה הלא "כן" הגענו לגודל של מלת המחשב. אחרל הביצוע הראשון של הלולאה, הערך א משתנה ‏ מ-1 ל-2, א שווה ל-1 ואחה"כ 3=א1א, 11=3/ ת6028. ואמנם, 3 הוא הערך הגדול ביותר שאפשר להחזיק במלה של 3 סיבילות, כאשר הסיבלת השמאלית היא סיבית הסלמן. אי אפשר לכתוב 1-א+א=:א4א, כי אם אגא באמת שווה ל-זַא1א44, כאשר נחבר א+א תיווצר גלישטה ואל אפשר להלה לחסר את הספרה ‏ 1. לכן פועללם בשנל שלבים: תחללה מחשבים 1-א=% ורק אח"כ מחברים את א ל-א. אפשר גם לכתוב (1-א)+א=:א4. התוצאה תהלה זהה, כל מחסרלם לפנל שמחברים ולא מגלעים למצב של גלישה. 66 7 תרג?לל?ם 1 ששאלות (1) מה להיה הערך של 5 בסוף ה (2) נתונים תכנלת ונתונל קלט. תכנית שרשומה להלן: ; (007201 , טפא1) 0025 4 תססתת ; תתסתאד :5 ,7 תג אזסעת 1 = 2 =: 5 דועת 1 =: 5 1 =: 1 = מעעאט 0 100 70 1 =: 1 08ע 1 =: 5 . פא מהו הפלט שלה? ; ( 001207 , צטפאד1) 0 מז אתססתק נתוני הקלט הם: 9 8 4 6 (3) מהו הפלט של התכנלת הבאה: תג נתתסתעאז :2 ,0 ,2 ,3 אזספת /% =: 4 ;| =: 2 0) =: 0 ,7 =: 2 0 4>19 מזחח א (כ) פאמת ;2 =: 4 ; (ע ,6) מדזאח 8 + 0 =: 0 ; פא (6) מדזתח . פא 1 23 2 4 9 ; (תטענטס) ,מדדאט דהתקפת אגתססתת 07 =: 2 או תעסמ]אז:ע ,כ ,60 ,2 א 8 := 0 2 := 0 7 ש ודה ו + < ₪ ש ;? =: 0 (ע) פעדתט < כ מצעאט (8) מצזתט . פא (4) מהו הערך של אמאג1571א שיודפס בסוף כל קטע? תוכל להנלח שהמשתנלם מילצגים ערכים שלמים. א. :- =: אתא1תפדא 0 10- 10אאסע 5 =: אמפא1 אסד 1 + אתאה א =: המאהדטפדא ; (המא1574) אתמדדאט ב. 1- =: התאגדמפזא 0 10 170 6 =: 1אפפא1 פסק 0 2 0 7 =: 2אתפא1 8סע אד + [אמפא1 + מאגתטפדא =: מאגדתפזא ; (פא15314) אזמדתח ג. =: מאגותפזא 0 0 =< מאגץח5נא מ זדה את + מא1ח5זא =: מאגדצפזא 0 2- =< מאג4דח15ון ם,ז1זחו 3 - מא15014א = :מאגועפדא ; פאע .; (8א15074) אוזתדזתט ,. =: מאגוחפזא דמקתת 1 + תאגדח15א =: תאגדעפדא 0 2- < תאג דא ודו 2 - מא1911א =: מאהדמ5דון 1- =< תאגץח5דא ,זדדאט ; (פא15813א) אמתדדת 2 תכניות (1) הדפס טבלה שתכיל את א, 2**"א, שורט א והסכום של כל המספרים השלמלם מ-1 עד א עבור 25=>א=>1. הפלט צריך להראות כך: 08 א 35 1 (א) טפמתסחפ 2*אא א 1 1 1 3 14 2 : : '* (2) כתוב תכנלת שמקבלת כקלט את המספר א ומדפיסה !א (א עצרת). (3) אב חסך 2,500 שקלים עבור תלנוך אוניברסלטאל לבתו. הבת *כולה להרוולת 0 שלקלים לחודט. שכר ללמוד הוא 100 ש' לחודש והוצאות האש"ל הן 350 ש' לחודט. הכסף מופקד בבנק ומושכלם אותו עבור הוצאות בתתחללת כל חודש. הבנק נותן רלבית של 2% בסוף כל חודש. כתוב תכנית שתדפיס דו"ח שלפרט כמה כסף לש בחטבון בסוף כל חודש, עד לניצול כל הקרן שהופקדה. מבנה הדו"ח: לתרה בסוף חודש לתרה בסוף חודש חודש הכנסה הוצאות לפני רלבלת רילבית אחר:* רלבית 1 - . 200 - .450 -.2,250 -.50 -.2,300 2 - . 200 -.450 -.2,050 - .46 -. 2,096 (4) כתוב את התכנית שכתבת בשאלה 3 והוסף את האפטרות לקבל קלט ‏ לדני של ההכנסות וההוצאות החודשלות, במקום להשתמש בערכלם קבועלם מראש (200, 0 ו-350). (5) עליך להרחיב כמה מן התכניות שכתבת בפרק 1 (מתכנית 4 עד תכנלת 21) כדי שתפעלנה לא רק על קבוצה אחת של נתונים, אלא על מספר רב של קבוצות. כתוב את התכניות לשנל מצבים, כאשר אתה יודע את מספר הקבוצות וכאשר אינך *ודע זאת. (6) אב עשלר רוצה ללמד את בתו לנהל את כספה. הוא נותן לה %150 אבל דורש שתכין רשלמה של הפריטלם שהיא רוצה לקנות. ברטלמה צריך להופלע מספר הדגם של הפרלט ומחלירו. הבת מתליטה להשתמש במלקרו-מחשב שלה בכדי לבדוק אם הכסף שעומד לרשותה יספיק לה לקניותלה. הלא מזינה כקלט את מספרל הפריטלם ואת מחלרלהם. *תכן שהסכום הכולל גבוה מ-%150. התכנית תדפיס ברטשלמה את הפרלטים לפ? סדר הקלט, כל עוד המחיר הכולל שלהם אלנו עולה על %150. בסוף הרטלמה יודפס סכום הכסף שהבת מבקשת להוצלא, אם ערך זה קטן או טווה ל-%150. אם הסכום גבוה יותר, התכנלת תדפלס רק את הפרלטלם שהמחלר הכולל שלהם נמוך מ-%150. בסוף הרשימה לודפס הסכום שאושר והסכום שהנערה רצתה לקבל לשם קנלות, אם הוא גבוה מהסכום שהקצלב לה אבלה. (7) רוצים לבדוק אם מספר א הוא ראשונל. הטלטה הפשוטה בלותר הלא לחלק את א בכל המספרים אשר קטנים מ-א או שוולם ל-א. אם נחלק את א בכל אחד מהם ותמיד נקבל שארית, נוכל לומר ש-א הוא מספר ראשוני. הפלט יראה כך: המספר א הוא ראשובי: %%א0% כאשר א מללצג את הערך הנבדק ו-אאאאא יוחלף ע"? המלה מטסתך או 14158. רמז: מגדלרלם משתנה בוליאני ששווה לערך 1 פסא א ובדוק את ערכו בעבור הערכים טל 1 אשר קטנים או שווים לערך 2 1 א. 09 (8) כתוב תכנית שמשתמשת בשלטת נלוטון בכדי להוצלא שורש. השלטה מתוארת כך: אם / הוא אומדן של השורש של א, להיה 4((/2/א)+1) אומדן ‏ יותר טוב. אם הדיוק 2 נתון (למשל:0.001), יש להמשיך בתהליך עד שמקבלים אפ > !2-א|. הדפס את הערך של 2 ושל את. (9) בהמשך לתרג?ל הקודם, הצג טבלה של מספר הצעדלם שנדרשו בכד?ל. להגיע לדלוק הנכון עבור כל ערך של 2 מ-0.1 עד 0.001, כאשר לורדילם בצעדלם שגודלם 0.001 . , (10) נתון לות דיקט בעל המימדים הבאלם: רוחב: ‏ 1.5 מטרלם. אורך: ‏ 2 מטרלם. "₪ 5 מטרלם. בכדי להגילע לערימת לוחות דלקט בגובה 50 +.10מ', עליך לפעול כך: * התוך לרוחב את לוחות הדיקט שבערימה. בראשונה לרטשותך לוח אחד. * שים בערימה את גזרי הלוחות זה על גבל זה. שים לב שבכל שלב אתה מכפיל את מספר גזרל הדלקטלם. כתוב תכנית שתתאר את התהליך ותצלג אותו בטבלה. לדוגמא, שלב | רוחב הדיקט | אורך הדלקט | גובה הדיקט 55 2 15 0 .10 2 0-25 1 .0 2 0-5 2 .0 2 (5 3 (11) כתוב תכנית שמוצאת את השלם הגדול בלותר שהרלבוע | שלו קטן מ-555, 142. (12) נתונים 4 ו-8. כתוב תכנית שמוצאת את הערך א הגדופ ביותךָ אשר לקלים את התנאֶי: מ4%%. למשל, אם נתונלם 3=, 2=10 אז 2=א, כל 32410 ואם ‏ 3=א אז 33<10 ולכן התטובה הלא 2=א. (13) כתוב תכנילת שמוצאת את הסכום של א האלברים הראשונלם בסדרות האלו: א. 1 9% 7 + 5 + 3 + 1 (*) ב. 1אא +.....+ %א5 + 382 + א2 + 1 (*) ג. 1-א(1-) 1 1 1 -----+..4 07 -- + לא -- +30 -- + א (1-א2) 7 5 3 0 (14) אדם קונה דלרה ומקבל משכנתא. התשלום החודשי 5 עבור המשכנתא מוגדר ע'"? הנוסחה הבאה: א(1+1) 1ת .]] = | == כאשר: ן. א(:+1) :ו שווה לקרן (עלות הבלת). 1 טשווה לטיעור הריבית החודשית מובע במספר עשרונל (למשל 6). א שווה למספר החודשים לתשלום המשכנתא. כתוב תכנלת בכדי לחשב את התשלום החודש? עבור המשכנתא. נתונלם הערכלם סל ע, 1, א. (15) כתוב תכנלת בכדל לחטב את מספר הספרות בצד שמאל של הנקודה העשרונית במספר ממשל שהוא הקלט. רמז: חלק ב-10 עד שהמנה להיה פחות מ-1. מכונת חלשוב מכנית 1 "רבותי, פעולת המחשב מבוססת על השיטה החשבונית המקובלת" 752 פרק 4 הסתעפויות 1 ה הפקודה אד עד עתה למדנו על כתיבת תכניות שבהן הפעולות בוצעו לפל סדר הכתיבה של הפקודות, מהפקודה הראשונה ועד הפקודה האחרונה. לפעמלם רוצים לבצע פעולה אחת כאשר תנאל מסוים מתקללם ופעולה אחרת אם התנאל לא מתקלים. למשל, כאשר מחשבלם את המשכורת של עובד במפעל יש לחשב בדרך אחת אם הוא< עבד שעות (1) )4( ז'סהצ5*תטד5-- > תבסכן +51108*45 ->>- תג501 (5401-45) *ת1.5*510 3 רגילות בלבד ולחשב בדרך אחרת את משכורתו אם עבד שעות נוספות. את האפשרות של "הדרך האחרת" צריך לקחת בחשבון מראש, בעת עיצוב התכנלת. תרשים הזרימה הקודם מצלג טלפול במקרה כזה, באמצעות המבנה 58מאמתדע1. המבנה 88שאיתווע1 ("אם אז אתרת") מורכב מסמלים (3) עד (6). זהו אחד משנל מבנלם של הסתעפות מותנלת (8ת1ת0ת228 81ת61510מ00), או בהירה (םת5618010). כבמקרים אחרלם, אפשר להחליף את הסמלים (4) ו-(5) בסמלים המילצגלם קטע. התרשים הזה הלנו הרחבה של הבעיה לחלשוב משכורת שכבר עסקנו בה קודם. בסמל מספר (3) בודקלם אם הפועל עבד במשך השבוע 45 שעות או פחות. אם התשובה הלא חיובילת, הוא אלנו זכאי לשכר מלוחד לשעות נוספות ולכן עוברלם (מסתעפים) לסמל (4) ומחשבים את שכרו לפי השיטה הרגללה. במקרה זה לא מבצעים כמובן, את סמל (5). אם כתוצאה מהבדיקה מוצאים שהפועל עבד לותר מ-45 שעות, מחשבלם את משכורתו לפ" השליטה החדשה: את 45 השעות הבסלסיות כופלים בשיעור השכר הרגיל לשעה ואת עודף השעות (שעות נוספות=58401-45) כופלים ב-1.5 של השכר הרגיל, ‏ כל הפועל מקבל תמורה של 150% מהשכר הרגלל עבור עבודה בטעות נוספות. במקרה זה לא נבצע את סמל (4) אלא את סמל (5). בכל מקרה, מגיעלם למחבר (6) וממשלכים. מבנה שונה במקצת מן המבנה שדנו בו עתה, הוא המבנה אשעדע1 ("אם אז"). מבנה זה מתאים למקרה שבו תוצאה אחת של הבדיקה מחליבת פעולה המתוארת בסמל מלבן (מלבן רגיל או מלבן המליצג קטע), אבל תוצאה אחרת אלנה מחליבת פעולה כלשהלא. המבנה נראה כך: נוכל עתה לתאר את הפקודה בשפת פסקל, אשר מתאימה למבנים השונלם שאפשר ליצור בעזרת הפקודה א1: 8 אם לביטוי הבוליאנל ‏ יש ערך אטת בזמן ביצוע פקודה זו, נבצע את הקטע הראטון ("אחד") ולא את הקטע השנל. אם לביטול הבוליאני יש ערך 127058, קיימות שתי אפשרולות: א. מבנה א788ע1: אלן המשך לפקודה זו וממשלכים בבלצוע התכנלת. ב. מבנה 058מא1710: הפקודה ממשיכה אל המלה ₪158 שאחריה יש קטע לביצוע, למקרה שערך הביטול הוא 74188. נכתוב עתה תכנלת על פ: תרשלם הזרימה ונשתמש בפקודה 1%. ; (עטפצטס ,יטפאד) א אגתססתע (1) התכנלת מחשבת משכורת של פועל. *) (2) (* לוקחים בחשבון אפשרות של שעות נוספות. (3) 0057 -(4) (* שעות רגילות *) 5 = ת 5107 (5) תג (6) תחת :50848 ,5807 ,(השדתפ (7) אנסתת (8) ; ('מהו הטכר לשעה? כמה שעות עבד?') א1180אח (69 ; (58407 ,ת5₪10) פגתת (10) אמח ת 5801 => 581407 עך (11) סז * ע10ח5 =: 500.8 (12) 8 . (13) + 5 5807 * תט581 =: תג508 (14) ; (ת 58407 - 58407) * ת5810 * 1.5 י (15) (('מגיע לו שכר""' ,50128:8:2) א[מדדתח (16) ('עבור""' ,58407:6:1 ,'טעות עבודה"') אתמעזתח (17) .פא (18) הסבר: (15)-(11) בדוגמא זו יש פקודה אחת בלבד בקטע הראשון שבשורה (12) ובקטע הטנ בשורות (14) עד (15). לשם בהירות ורהלטות הקרלאה של התוכנלת הוצגו המללם קז ו-8058 כשהן "מלושרות" ‏ לשמאל ‏ זו מעל צו. גם הקטע הראשון והשנל "מיושרלם", כאשר שנלהם מודזלם למינה למלים ע1 ו-52ע. נניה שרוצלם להדפלס הודעה על כך טשהפועל עבד, או לא עבד שעות נוספות. לשם כך לש צורך להחללף את השורות (11) עד (15) בקטע התכנות הבא: אעחד 5 58407 => 58407 עך א ; 1407 * 58 =: תג.508 ('הוא לא עבד שעות נוספות') א%מדךתט [ כעאע כו אזסת + 3 51407 * 108א5 =:50848 ; (8 5407 - 51407) * 51108 * 1.5 ('הוא עבד שעות נוספות') אזמצזתח ; עאם 55 בדוגמא זו רוצלם לבצע לותר מפקודה אחת בכל אחד מהסעיפים של התנאל ולכן יש לחבוק את הפקודות האלו במפרידים א2861 ו-פאאע, לאתר המלים אחמך ו-2158. כותבים את המלים א5861 ו-פאת בשורות נפרדות, כשהן מוזזות קצת למינה מ-17 ו-2188 ואת הפקודות כותבילם בהזצה נוספת ללמין, לשם בהירות ההצגה של התוכנית. כלל? הכתיבה של התכנלת הם המלצה בלבד ואת פרטיהם נלמד בהמשך. 1 פףפסקודות א1 משולבות הקטע הראשון וגם הקטע השנל בפקודת ע1 שבתכנית 15808877 לכולים להכלל כל פקודה שהלא וגם פקודת ע1. למשל, נניה שלש שתי רמות של שעות נוספות. פועל אטר עובד למעלה מ-45 שעות מקבל 150% עבור 10 השעות הנוספות הראשונות (הרמה הראשונה) ו-200% עבור כל שעה מעבר ל-55 השעות (הרמה השניה). נגדיר קבוע שלהלה שווה למספר השעות הרגילות שהעובד צפוי לעבוד (45=ת 5807) וקבוע נוסף שלהיה שווה לסוף הרמה הראשונה של שעות נוספות (0%85=55). כדל ליישם מדיניות תשלום זו יש להחללף בתכנלת את השורות (11) עד (15) ולכתוב את הפקודות הבאות: אפחד ת 501 >> 58407 עד (61 סט =: 501.8 (2) 6)3( אמח 085 => 5807 עך (4) (ת 58407-58001) * ת1.5*9810 + ת 407א5*תט1ע5 =: 50128 (5) ₪ (6) + 1.5*58108*10 + ת ע0גהפ"תטדע5 =: 501.8 (7) ג (₪5א5101-0) * 2.0*51108 (8) בדוגמא זו, הקטע השנל לאחר 8 כולל פקודת ע1 נוספת. פקודת ע1 כצו נקראת פקודת 17 משורשרת (17 606ת81ם0). אם א 5101>=58401 מבצעים את שורה (2) ומדלגים להמשך התכנלת, לפקודה שלאחר שורה (8). אם 8 [58071<58.0, ממשליכים בשורות (3) ו-(4). אם 511>=0%5 | מבצעים את שורה (65 ומדלגים לפקודה שאחרי שורה (8). אם, לעומת זאת, 5101<0%₪85 מבצעים את שורות (8)-(7) וממשיכלם בפקודה הבאה. בקטע הבא מוצגת דרך נוספת לתכנות של התנאל הזה: אחו 2 58401 < צסג58 עד (1). אחז 05 < 58207 עד (2) + 1.5*580100*10 + 58407*עט501 =: 50.8 (3) )4( 2*5[110* ) 51107 -05 ( )5( ₪ (ת 1.5*50108*)58407-5₪407 + ת דסגאפ*תטדט5 =: 508.8 (6) : 8 ((6)7 ד =: 5018 (8) בדוגמא זו, הקטע הראשון לאחר אעאד כולל פקודת ע1 נוספת. פקודה זו נקראת פקודת 19 מקוננת (17 65666א), מלשון "קן". בקטע תכנות זה, אם מתברר אחרל הבדיקה בשורה (1) שאמנם 8 5101>=5801, עוברים לשורה (8), אחרת ממשיכים עם הבדיקה בשורה (2). אם 5₪407<088 6 מבצעים את שורה (3) ומדלג?ם לפקודה שאחרל סורה (8). לשורה (5) מגלעים אם 5וס=>51101, אך גם 5 51401<58401, ז"א 88א5801>=0>ת 58401. במקרה זה מבצעים את שורה (6) ומדלגים לפקודה שאחרי שורה (8). בטני קטע? התכנות הקודמלם, שבהם השתמשנו בפקודות ע1, המלים 17 ו-058ע2 הופלעו פעמללם: . = בקטע הראטון מוצגת פקודת 1% משורשרת: מפס..תד..תפת..ע1. * בקטע הטנל מוצגת פקודת 1 מקוננת: מפזם..תפס..עד..עך. כאשר אפשר לללחס קפזע ללותר מ-17 אחד, הכלל הוא ש-888 תמלד מלותס ‏ ל-ע1 אשר קרוב אללו ואשר עדללן פנויל. תמלד מתחלללם לילחס את המלים הפנלמלות ביותר קודם. לכן, בקטע השנל ה-17 וה-58:ע הפנלמיות שליכות זו לזו וה-ע1 וה-2158 החלצונלות שללכות זו לזו. זאת אומרת, ה-888 בשורה (7) מלוחסת ל-17 בשורה (1) וה-08%א בשורה (5) מלוחסת ל-ע1 בשורה (2). יש לשים לב לכך שטני הזוגות של 58םע8..ת1 (הפנלמיות והחילצוניות) מלושרות בהתאם. בכל מקרה, לא צורת הליטור והכתיבה קובעות את משמעות הפקודה, אלא הכלל שהוסבר קודם. 2 הפקודה 0455 אפשר להצלג הסתעפות מותנית באמצעות מבנה 6458. זהו המבנה הלחליד בשלטתי נבניח שהשכר שפועל מרוולח עבור שעות נוספות תלול בלום בשבוע. בימלם א'-ה' הוא מקבל % מהשכר הרג*ל עבור כל טעה מעבר ל-8 שעות, בלום ו' הוא מקבל % עבור כל שעה מעבר ל-5 טעות. בשבת, כולל מוצאל שבת, הוא מקבל 300% מהשכר הרגלל עבור כל טעת עבודה. בכדל לחשב את שכרו של הפועל ללום מסולם, דרוש משתנה נוסף שיצלין את לום העבודה (מ-1 עד 7). תרשים זרימה מתאים מופלע להלן:. = 77 מכלון שצריך לטפל בשלושה מקרים נפרדים (יום א-ה, לום ו ולום שבת), דרושים שנל מבנל החלטה, (3) ו-(4). אילו הלו למשל, 10 מקרים, הלינו זקוקים ל-9 מבנל החלטה. מכלון שתרטשים כזה עלול להיות מסורבל, נהוג להשתמש במבנה מלוחד, אשר מוצג בתרשים הבא: )1( (2) קרא תסדאם אסצ, ז'סת53 )3( סמלים (3) עד (7) מהוולם את המבנה המורכב 68458 ("מקרה"). בסמל (3) כותבים את הביטוי שעומד לבדלקה ואשר על פי ערכו מחליטים לאלזה כיוון להמשיך. בתרשים זה הביטול מורכב מן המשתנה 0%צ בלבד. סמלים (4)-(6) הם הקטעלם אשר לתבצעו בהתאם לתוצאת ההערכה של הביטול בסמל (3) ואשר רק אחד מהם לתבצע בכל מקרה. אחרל ביצוע הקטע המתאלים, החצים מתכנסים בסמל (7), שהוא הסמל היחיד בתכנות מבני שקולט יותר משני חצים. נתאר עתה את הפקודה בשפת פסקל אשר מקבילה למבנה 04588: 38 הביטו? אשר נבדק בפקודה 04588 חייב ל?יצג ערך שלם. הוא *כול להלות משתנה, כמו בתכנלת זו, או שהוא יכול להלות ביטול ארלתמט?. הקבועים, אשר מללצגים את טווח הערכלם טהביטוי יכול לקבל, נקראים תולות מקרה (189815 0886). הקטע הבא אחרל הנקודתלים מתבצע כאשר הבלטול שווה לאחת מתולות המקרה שנמצאות לפנ? הנקודתלים. משתמשים בפקודה 8 כאשר בוחנלם משתנלם שמקבלים לותר משנ* ערכלם. בפקודה 1 משתמשים כאשר בוחנילם משתנים שלכולים לקבל שנל ערכים בלבד. נכתוב תכנית על פל תרשים הזרלמה לחלשוב שכר לומל ונשתמש בפקודת 0258. אם הקטע מכיל לותר מפקודה אחת, נצטרך להקלף את הפקודות ב-א8801 וב-פאע, כמו שעושים בתכנות פקודת 1%. . ; (07קץט0 , דטעאד) 08078א5 אהתססתת | (1) התכנלת הזאת מחשבת משכורת לומלת *) (2) (* של פועל כאשר תנא? התשלום תלויים בלום בשבוע (3) תגט | (4) ;תת :5088 ,5107 ,אשד (5) ; עש6מאז :אסצ (6) אזסתת | (7) ; ('הקט לפל הסדר הזה: אסצ ,58407 ,תסדח5') אשמדדתהט (8) ; (אסצ ,58401 ,אט5₪1) פגמת (9) עס אסצ 6458 (10) את 8 => 98407 ע1 :5 ,4 ,3 ,2 ,1 (11) ץצסגזם * תטס1א5 =: 5082 (12) 8 (13) ; (5*051107-8 . 50108*8+5108*1 =: 50808 -. (14) אד 5 => 88407 ע1 :6 (15) ספת =: 508.8 (16) כו (17) ; (5+51108*2*)58407-5*ת8110 =: א808 ' (18) 513 =: 508.8 2 ּ, (19) ; פא (20) (('השכר הוא"7' ,8:2:ת8084 ) אומדדתח (21) ('עבור""', 1, "," שעות עבודה ביום"' ,0%:3+) א[מדדתח (22) .₪ (23) הסבר: המשתנה 0%צ יכול לקבל את הערכים 1 עד 7. אם הערך של 0% משתנה מ-1 עד 5, המחשב ‏ יבצע את השורות (11) עד (14) ולעבור לטורה (21). טורה (11) מדגימה שלותר מתוית מקרה אחת לכולה להלות קשורה לאותו קטע. 39 אם הערך של 0% הוא 6, המחשב יבצע את השורות (15)-(18) ויעבור מלד לשורה (21). אם הערך של 0%סצ הוא 7, המחשב יבצע טורה (19) ולא את הסורות שקדמו לה. המלה פאע בשורה (20) מסמנת את הסיום של פקודת 04588. אם הערך שהתכנית קולטת עבור 0%צ גדול מ-7 כתוצאה מטעות בקלט למשל, המשתנה לא יקבל ערך, כל אין תוית מקרה עבור אפשרות זו. כדי להמנע ממצב כזה, אפשר לתקן את התכנית, כדי שתתריע על שגיאה: אמח (8>א0צ) פאגב 0 0 (* כאן באות שורות (10) עד (20) %) :;('הערך של יום לא חוקל') אדו ממ לשנם מהדרים שמתירלם לרשום ₪088 או -- בסוף רשימת תולות המקרה כחלק אינטגרלי של פקודות 0455. בדוגמא שלמטה נדגים אפשרות זו: ; (תטעצטס , עטעא1) גבגזואסצ אגתסספק (1) בתכנית הזאת מחשבים את התאריך הלועזי *) (2) (* של מחר על פל התאריך הלועזי של הלום. (3) תג (4) תמ6מזא1 :20802058 אתואהצ ,גאג5 ,מפתכסאס, אסצ (5) נא 001 :אסצ לטגץ ,אפמפסא0 צטגדך (6) אנסעת (7) =: 0800858 צטגדך (8) =: אסצ עטגץד (9) ;('הקש בבקשה תאריך: יום, חודש ושנה') אמעדדתחט (10) ((8א54 ,6800058 ,אסצ) אזסגתת (11) ('הלום אחרי' ,4:1א58 ,'/' 10 ,'/' ,1:א0צ) אוזמדתח (12) עס 0051 085 (13) אזסעת :12 ,10 ,8 ,7 ,5 ,3 ,1 (14) 1 = :240000051 אתואצ (15) אפחעד 31 < אסצ עד (16) מטתך =: אסצ צטגץך (17) ; פא (18) אדסתת :11 ,9 ,6 ,2 (19) 1 =:34000051 דיוצ (20) אד 30 < אסצ עך (21) מטתץ =:אסצ צטגך (22) ; פא (23) עאג (0 = 4 פסא גאג58)) ע1 :2 (28) 8 ((0 <> 100 פסא גאגז5) ' (25) אמח (0 = 400 פסא גאג98) (26) אזספפ (27) 1 =:340₪02051 אדוו צ : (28) אחז 29 < אסצ עך (29) מטתד =: אסצ צטגד (30) פאא (31) )32( 88 אפפ (33) =: 20800858 אזואצ / (38) אתחך 28 < אסצ קד (35) 020 שטתד =: אסצ צטגד (36) 7 ; פא , (37) ו (38) (8 זוהל ההרחבה שהוזכרה קודם. הסבר מלא יבוא אח"כ. *) (39) (('לא נלתן לחשב. טעית במספר התודש') אַש7[תח ו (40) מטתך =: הפתפסא0 צטגץ (41) (* כאן סוף הקטע של 88דשתמח07 *) (42) ; פא (43) אחמד אסצ לטגד עד (44) ;('לא נלתן לחשב. טעלת בכתיבת *ום בתחודש') אזמדדתח (45) אד אפמפסמסגת אזואצ = אסצ עד | (46) אזסטת (47) ;1 =: אסצ (48) אפחעד 12 = אפתפסאס עַך (49) אזסת (50) )51( < 0800898 := 1; 1האגחם =: גאגם5 (52) פא (53) )54( ₪ 1 סוס =: 0802851 (55) פא (56) )57( 8 ; 1+א0סץ =: אסצ (58) אד (0802058 צטגד אס אסצ צטגד) צסא עד (59) ('הוא"' ,3:1אג88 ,'/' ,0₪00058:1 ,'/' ,1:אסצ') אמתדדתט (60) .פא (61) הרצות אפשריות: א. , הקט בבקשה תאריך: לום, חודש ושנה 7 ,13 ,12 היום אחרי 12/13/1987 לא נלתן לחשב. טעלת במספר החודש 0 הקש בבקשה תאריך: לום, חודש ושנה 5 ,2 ,28 היום אחרל 28/2/1985 הוא 1/3/85 ג. הקש בבקשה תארלך: לום, חודש ושנה 3 ,2 ,29 לא נלתן לחשב. טעית בכתיבת לום בחודש הסבר: (1) בתכנית זו הקלט הוא תאריך לועזי. הפלט יכול להלות אחת משתל תשובות: א. אם התאריך שניתן כקלט הוא תאריך תוקי, כלומר מספר החודש פתות מ-12 ומספר היום מתאים לאותו חודש, הפלט הוא התאריך של הלום הבא. ב. אם התאריך שניתן כקלט אילנו תאריך חוקי, הפלט הוא הודעת טעות ותיאור של הבעלה. 1 (9)-(8) קבלעת ערכים התחלתילם. (11)-(10) קבלת הקלט. (12) כאשר לא רוצים להדפיס רווחים, מציינים רוחב של 1 עבור הערך של המשתנה, למשל 0802858:1. במקרה צה, אם המספר הוא בן שנל תוולם, שניהם לודפסו, אחרת לודפס תו אחד בלבד. (18)-(14) בחודט רגיל יש 31 יום. אם 0% גדול מ-31, אסצ עטגך *הפוך להיות שטתץ. (23)-(19) טלפול מקביל בחודשים שלש בהם 30 למלם. (31)-(24) חישוב מספר הלמים בחודש פברואר בשנת עלבור (החודש בן 29 לום). בדרך כלל כל שנה שמתחלקת ב-4 הלא שנת עלבור, פרט למקרה של מספר שנה שמתחלק ב-100. גם כאן יש יוצא מן הכלל: שנה שמתחלקת ב-400 הלא בכל זאת שנת עלבור. (37)-(33) חישוב מספר הימלם בחודש פברואר בשנה שאינה שנת עלבור. (42)-(38) המלה 018980158 אינה סטנדרטית בפסקל ולכן אינה קילמת בכל הגירסאות של השפה. השלמוש בה מפשט את התכנות של מבנה 0458. בלל אפשרות זו, היינו צרילכים לבדוק את המקרה של 60802058<12 ע"י פקודת ע1 נפרדת. בקטע הזה מדפיסים הודעת טעות כאשר מספר החודש אלנו מספר שלם בלן 1 ל-12. אפשר גם לכתוב בקטע זה מספר פקודות, מבלל להשתמש ב-אזַ6קת וב-תאפ. התחום נקבע ע"י המלים 158אקשא01 ו-פאח. (45)-(44) הודעה על טעות בהזנה של מספר הלום בחודש. (56)-(46) אם הקלט הוא היום האחרון בחודש, אז היום הבא חללב להלות הלום הראשון בחודש הבא, ראה שורות (48) ו-(55). אם הקלט הוא גם הלום האחרון בחודש וגם החודש האחרון בשנה, אז החודש הבא הוא החודש הראשון בשנה ומספר השנה עולה ב-1, ראה שורות (52)-(51). (58)-(57) פקודת 2188 זו הלנה בת צזוג של פקודת ע1 שבשורה (46). אם תארלך הקלט הוא לא היום האחרון בחודש, מוסיפים אחד ליום הקלט כדי לקבל את תאריך הפלט. (60)-(59) הדפסה של תאריך הפלט כאשר לא היתה טעות בתארלך הקלט. 2 הפקודה 600 ננלח שהתשלום עבור עבודה בשעות נוספות לאישה עם ילדים' קטנילם גבוה לותר מאשר התשלום הרגיל. במקום 150%, 200% ו-300% עבור תשלום שעות נוספות בלום רגלל, ביום שלשל ובמוצא? שבת בהתאמה, שיעורל התשלום לאישה הם 175%, 225% ו-325%, בהתאמה. איך ‏ נוכל להכניס פרט זה לתכנית 415%00018 אשר כתבנו קודם? : ו : 12 הפקודה אלנה מתאלמה לפתרון בעלה זו, כל יש בה מנגנון כדל לטפל בערכים שונים של משתנה אחד בלבד. בדוגמא זו לש שנל משתנלם: הראשון מציין אם לפנלנו "עובד רגיל" או "אלשה עם ללדים קטנלם" והשני מצילן את היום בשבוע. כל תולת מקרה תצטרך להלות מורכבת משנ*ל ערכלם בהתאמה, כאשר הראשון לציין מצב משפתתי והשני לצלין את מספר הלום בשבוע. תולות מקרה כאלו, המצביעות על הערכים של שנל משתנלם, אינן תוקלות בשפת פסקל ולכן אי אפשר להשתמש כאן בפקודת 0458. לש לפחות שתי דרכלם לתכנת בעלה זאת. הדרך הראשונה הלא להשאיר את מבנה 5 כמו שהוא ולהוסלף פקודת ע1 לכל מקרה ומקרה. ננלח שהערך של המשתנה הבוליאנ: אדס4תחצ הוא אשת1 בעבור אלשה עם ילדלם קטנים, וערכו 241588 בכל מקרה אחר. נתכנת לדוגמא את הפתרון, אשר מתאלם לתוית מקרה 7: אפחץ אדכעצ עך :1 =: ת501 בוו ; 51108*3*51107 =: ת1ה50 החסרון בפתרון ‏ זה הוא שלמעשה יש 6 מקרים שונים. שלושת המקרים הלסודלים התלויים בלום: 0%>=5+, 0%=6צ ו-7=א0%+ ושלושה מקרים נוספים בכדל לטפל בעובדת שלש לה ילדלם קטנים. התכנית מבליטה רק 3 מקרים, אשר קשורלם למשתנה %סץ. ההתללחסות למשתנה אזכגתחצ החבויה בתוך הקטע שקטור לכל תולת מקרה. אללו הלו 5 משתנלם הילנו זקוקים ל-5 רמות של פקודות 0458, או של פקודות עז מקוננות זו בתוך זו. קילנון יקשה מאוד בהבנת התכנלת. דרר אחרת כדל לפתור בעלה זו הלא ע"? טלמוש בפקודת דילוג (את1תסת8ץ2 מ6%10ט:5%5ת1), או סלעוף שנכנה אותה 6010 ושהמבנה שלה הוא: תוית-פקודה ( 6050 הפקודה 6010 מבצעת הסתעפות בלת? מותנלת (8ַמ1תסת2?8 1 כאשר מגיעים אליה בזמן בלצוע, התכנית מפסלקה את רצף הפקודות ומדלגת תמלד לפקודה מסולמת, אשר התוית (18281) שלה רשומה בפקודת 6010. בזה הלא שטונת מו הפקודות שגרמו להסתעפות מותנית (ח1, 0458), אשר אלינן מעבירות תמיד את הפיקוח אל מקום קבוע בתכנלת. נכתוב את התכנלת לטלפול בתנא? הבעלה החדשים. (ת טס , צטפאד) 9 אתססתת | (1) התכנית הזאת מחשבם משכורת יומית של פועל. *) (2) (* מתחשבים ביום בשבוע וגם במצב משפחתל. (3) , . זו (4) )5( 1 תגט | (6) ;תת :50848 ,58407 ,תטדת5 (7) ; תתא : אעפת עס ,אסצ (8) 3 ;א : דמצ אזסאת ; (אתת011 ,אסצ ,507 ,תטדאפ) סגחת ( 7<א0צ) 08 (1>אסצ )| חך אחוד אזסעת (;('יש טעות בנתונים') אתחעדתט (* צא מן התכנלת *) 0 60070 ; פא אחז 0=אתפכזזאס עך 8 =: תאדסא. אצ וז אא 1=אתתפ1דאס עד מטתץ =: אדסג ואצ " כ (* צא מן התכנלת *) 600 אחז (5=>אסצ) פאג אדפמחצ עד אזסעת אחך 51107>=8 עד "תדע =: 50128 מ ; (75*051407-8. 1*ותזז8+51*ק5110= : 50148 (* דלג אל נקודת המפגש *) 9 600 פאה . אחא (5=>אסצ) עאג (אדפגתתצ עסא) עד אזסע אחז 5₪407>=8 עד =: 0.8 7 מפ ; (5*)51401-8. 50108*8+51100*1 =: 5גם80 (* דלג לנקודת המפגש *) 9 600 ; פא אחז (6=אסצ) פאג אדפג.זפצ עד א א 51401>=5 עך 1-7 =: 5018 8 ; (25*%511/07-5 , 2*וו5+511*ת5010 =: 50808 (* דלג לנקודת המפגש *) 9 6010 ; פא אוחו (6=אסצ) פאה (א4תפגמצ עסא) עד אזסחת אחח 58407>=5 עד 7 =: 50848 8 ; (511101-5 %*50108*5+5111018*2 =: 501.8 (* דלג לנקודת המפגש *) 9 6010 ; פא אחז (7=אסצ) פאג אדפג,תאצ קד אזספת 4 )9( )10( )11( )12( )13( )18( )15( )16( )17( )18( )19( )20( )21( )22( )23( )28( )25( )26( )27( )28( )29( )30( )31( )32( )33( )38( )35( )36( )37( )38( )39( )40( )41( )42( )43( )48( )45( )46( )47( )248( )49( )50( )51( )52( )53( )58( )55( )56( )57( )58( )59( 508.5 := 50108*3.25*107; (* דלג לנקודת המפגש *) 9 6010 (60) פאת (61) אפחד (04=7צ) פאג (אדסג1תצ צסא) עד (62) 3*107*תט501 =: 508.8 (63) (* נקודת מפגש, מחבר *) (‏ :99 (64) ('הטכר הוא""' ,80828:8:2 ) אמצדתט (65) )('עבור""' ,58201:6:1 ,' שעות עבודה ביום"' ,3:א0צ (66) .פא :1000 > (67) הסבר: | (4) כל מספר שלם בין 1 ל-9999 לכול לשמש תוית. התוית משמשת ככתובת של פקודה לבלצוע, כדל שנוכל לפנות אללה בפקודה 6010. על השילמוש בתולות צרילכים להצהיר בהצהרת תולת (מ 26018:8510‏ 28561), שמקומה מלד אחרל הצהרת התכנלת. אל אפשר להשתמש במספר כתולת ללא הצהרה מראש. המבנה הכללי של ההצהרה: . ר 5 ההצהרה בשורות (4)-(5) מכרלזה על שתל התויות 99 ו-1000, אשר נשתמש בהן בחלק הביצועי של התכנלת. נסמן בתויות אלו שתי פקודות שאליהן רוצים להסתעף. סדר הכתיבה הוא (משמאל): גוף-הפקודה רווח(מומלץ) נקודתיים תולת (17)-(12) בדרך כלל נמנעים מלהשתמש בפקודה 6010. אבל יש מקרים בהם הדבר נות. למטל, אם מנסלם לאמת את הנתונלם, כמו בקטע זה, אפשר לכתוב: אמזנז (7=אסצ) ת0 (0=אסצ) עד ('יש טעות בנתונים') אמצזתח (* שאר התכנלת *) כ בשיטת תכנות זו, כמעט כל התכנלת כלולה ב-2158 וזה לא נוח כאשר הלא ארוכה. לכן מעדיפים להעביר את הבלצוע, במקרה של טעות, לפקודה מספר 0 בשורה .)67(‏ יש לשים לב לכך שכאשר השליטה מגיעה ל-1000 אלן מה לבצע, שהרל הגענו לסוף התכנלת. התולת 1000 אלנה התוית של פאע, כי פאע אינה פקודה לביצוע ולכו אינה לכולה לקבל תולת. התולת 1000 הינה התולת של פקודת דמה (%מ5%6856₪86 קמתטכ), או פקודה רלקה (6מ55886₪0 עְסקתת) שמקדימה את פאם. משתמשלם בפקודת דמה בשני מקרים: א. כאשר הפקודה 6010 מעבירה את השללטה לסוף התכנלת, כמו במקרה זה. ב. כאשר יש קטעל תכנות רבים אשר מסתעפים לאותו מחבר. חשוב לותר להדגילש את התוית כנקודת כינוס, מאשר להבליט פקודה כלשהיא שקטורה לאותה תולת. 55 כאשר משתמשים בפקודה 6010, כדאי לכתוב הערה שמסבירה לאן מפנים את השללטה, כפי שנעשה בשורה (16). (24)-(18) בדלקת נתונים וקביעת ערכים בוליאניים ע"י פקודות השמה. ההערות לגבי הקטע (12)-(17) מתאלמות גם פה. (32)-(25), (40)-(33), (48)-(41), (56)-(49), :(61)-(57), (63)-(62): אלה המקרלם שהיינו רוצים לפרט בעזרת פקודת 0458, אם אפשר הלה להשתמש בה בתכנית זו. הפקודה 6010 מאפשרת לבנות מבנה 0458 מלאכותי, כמו שמוצג בקטעים המוזכרים. בעבור המבנה המוצג בשורות (62)-(63) אין צורך בפקודת 6010 ובהסתעפות, שהרל הפקודה הנושאת את התולת 99 נמצאת מלד אחרלו. (64) התוית 99 משמשת כנקודת מפגש ("מחבר"). בתכנית זו כתבנו אותה כפקודת דמה ‏ ולא כפקודה לביצוע. אפשר היה להצמיד את התוית 99 לשורה (65), שלש בה פקודה, מבלי להשפיע על הלוגיקה של התכנית. בחרנו לכתוב אותה בנפרד בשורה (64) עם סימן הפרדה (;), כדל להדגיש שעלקר חשיבותה כנקודת מפגש, בדומה ל-עאע של פקודת 0288. (66)-(65) הדפסת הפלט. 434 הנחלות לש?מוש ב-6010 (*) 1 התפתתחות מבנל תכנות בפסקל שפת התכנות העללית הראשונה היתה שפת פורטרן (אגת2007). נצלג כאן מספר מבנ תכנות בסיסלים, אשר הלו נהוגים בשפה זו ונדגים את הפתרונות המוצעלם בשפת פסקל אשר פותחו בכדיל לפשט את התכנות ולהקל על התכניתן. מן הראול להדגיש שבניבים החדשים של פורטרן יש מבנלם דומים למבנים של פסקל. בגירסאות המקורלות של א%ת7087 הלו. רק שלושה מבנל פיקוח כדל לשנות את מסלול ההתקדמות הסדרת? של התכנלת: א. הפקודה אתחך..ע1 (בלי מפת). ב. הפקודה 6010. ג. הפקודה 20 שכללה. חלק מן האפטרויות של פקודת 08..20 בפסקל. למעשה, ניתן להשתמש במבנלם (א) ו-(ב) ובצלרופיהם בכדי להציג את כל המבנלם הכלולים בפסקל. בדוגמאות שבהמשך, המלים באותיות "גדולות" הן מלים שמורות של השפה. את המלים באותלות "קטנות" יש להחליף בשמות משתנלם, ביטולים, או פקודות, בהתאמה. 66 שם המבנה המבנה בפסקל 0-7 - ₪. .אשד .ע1 אפחץ 161 ע1 1פטא ₪5 12 תכנות בפסקל אשר דומה לפקודות פורטרן בסלסיות 0 אעחץ נטסנס ע1 ;1 6010 ; 682טא 1 601710 ; 081טאת :1 21 אפחץ גטפגם צסא עד :1 אמח 1601 עסא עד 6010 ;ת5862%60 [טטק =:11ת8מ2 ;תסץ[6 [גטק =:12צת208 את 12ת8ת2 < 11ת208 עך 0070 ;1תהת2 =:6ת58ת15ת ; 68טאק אפזזיד 22 = 6ת₪15068 ע1 :1 0פ. .דח 0 51601 מזחט הטוא תנאט. . דאמפמת דמקסת 8טאק :ג לאט 0 =: 6ת%8ת₪15 208 מסץ61 1גתום 0 ם60ם₪86 1גום ס2 א פאם. .0455 עס 1501 60458 ; 681טאק : 076021 ; 682טאק : 606022 6010 ; 68טא ; 6+1מ15058ת =:6מ15(58ת 6070 1 26-26 001ו6[:=217ת15058ת אחחך 6260021=ת6ת58ת₪15 1 ; 681טאק אפ 676622=ת6ת58ת15ת 17 ; 682טאק מתוך הדוגמאות שהוצגו אפשר להסיק שלא כדאל להשתמש בפקודה 0. הפתפקלד של פקודה זו כלול כבר בפקודות אחרות בעלות עוצמה, ומטרתן להקל ולפשט את התכנות. 2 מבנים בפסקל לעקיפת 6010 אשר כלולות ‏ בשפת. פסקל בדוגמא הבאה אפשר לראות את התועלת של הטימוש במבנים הקיימלם בשפת פסקל, לעומת מבנים מאולתרלם הנבנלם בעזרת פקודת 6010. 7 הבעיה: יש למצוא את המספר הגדול מבלן שלושה מספרים נתונלם. עם 6010 מבנים של פסקל, ללא 0010 ;(8,0,) פגאת :1 דקפת אוד 8=<ג עך כפגאתת 2 6070 אפאץ (4<=6) פאג (1<=8) עד אמח 5<=0 עך 4=: 11% 0070 טכיורן 1 0070 אמעץ (5<=0) פאג (2<=4) עד אתחך 4<=60 ע1 :2 8=:אגו 00170 כו 4 0070 6=: 1% ,=:אא ‏ | :3 דא 60010 .4=:א4 :4 0070 =: א אמעץ עסע עסא עך 60070 וש א מומלץ להשתמש בפקודה 6010 רק במקרים הבאלם: כאטר אין מבנה בשפת פסקל שמתאים לדרלשות התכנלת. למשל, בתכנית א. 9 נדרש מבנה שגורם הסתעפות לתוית הנכונה על סמך ערכם של שנל משתנים. אל אפשר לתכנת צאת עם מבנה 058 של פסקל. ב. כדי לצאת ממסלול הפקודות אל קטע תכנית נפרד, כאשר מגללם מצב שגלאה חמור, אשר אלנו מאפשר להמשיך בבלצוע התכנלת. אפשר אזץ לכתוב את קטע התכנות למצב השגיאה בתוך פקודת 2058, אבל אלן זה רצול להדגיש מקרה חרלג לעומת עילקר התכנלת. בשורות (12)-(17) של התכנלת 45%080179א בצענו הסתעפות לתולת של סלום התכנלת במצב של שגיאה. כאטר עובדלם במסוף, אפשר להמנע משימוש בפקודה 0010 אם מתכנתלם את הבדיקה של הקלט בעת הזנתו לתכנית: /- =:01+צ סע (7<אסצ) 08 (1>אסצ) מז ; (אסצ) אזפגמת בטיטה זו קובעים למשתנה 0%צ ערך התחלתל, אשר נמצא מחוץ לתחום הערכלם הקבילים. אח"כ חוזרים על פקודת 252 עד אשר המפעיל יצין ערך קביל למשתנה. אפשר להשתמש בפקודה %מקמת ולתכנת את הקטע הזה בדרך שונה, מבלי לקבוע ערך התחלתל למשתנה א0צ: דעות (אסצ) א.זסאאת (7=>אסצ) פאג (1=<אסצ) תצאט השינול בתנא נובע מן העובדה שבפקודה ₪118 ממשלכים כל עוד התנאל אמת, ובפקודה זַמפַתת מפסיקים כאשר התנאל מתאמת. לכן, התנאל בפקודה 28241 הוא הטשלילה של התנאל שבפקודה 1118₪. לפי חוקל די-מורגן (עיין בפרק 2) נקבל: |08 הטשלילה של: 7 תס 1>אסצ הלא: (7=>א0צ) פאה (0%<=1צ) בשפת פסקל ישנן פקודות, אשר עדליפות על הפקודה 6010. עם זאת, כאשר משתמשלם בה מסלבה כלשהל, רצו? להקפיד על הכללים הבאלם: א. לא לדלג לאחור. דילוגים אלו מקשים על הקרלאות של התכנלת. ב. להוסיף הערה בפקודת הסיעוף וגם בלעד הדילוג. מחבר? שפת פסקל רצו להנלא את המתכנת משלמוש בפקודה 6010 ולכן חל?לבו הצהרה מראש של תויות, הגבילו אותן למספרלם טבעיים ולא התירו שימוש בשמות סימלללם. ' יה נה התכנ?ת בטלב זה הכרנו את המרכלבלם השונלם של שפת פסקל: א. תוולם מלוחדלם כמו: - , +, /, * וכו'. ב. תוולם מלוחדים כפולים כמו: =:, <>, =>, =< וכו'. ג. מלים שמורות, כגון עא4, א2₪61, 0455 וכו'. ד. שמות מוגדרים מראש, למשל אג2001₪, מפעגע, מגתת, 106, 7ת50 וכו'. (שמות אלו שונים ממלים שמורות, כל אף על פל שהם מוגדרלם מראש כפונקציות המוכרות ע": המהדר, המתכנת יכול להגדיר אותם מחדש כמשתנלם או כקבועים ואז הם מאבדלם את משמעותם המקורית). ה. שמות המוגדרים ע":י המשתמש: משתנים, קבועלם וכו'. ו. מספרלם שלמים. ז. מספרים ממשילם. ח. תויות. ט. מחרוזות, שהן סדרות של תווים המוכללם בלן גרשלים. י. מפרידים, שהם רווחים, סימן סוף שורה והערות. אין כללים לגבי המיקום של מרכיבי השפה השונים בתכנית ובשורות הקלט המוזנות למחשב. אפשר לרשום תולת באמצע שורה, או לחלק פקודה אחת על פנל מספר שורות. עם זאת, יש שנל כלללם לגבי מלקום המרכיבים השונים, כפי שנראה להלן. בהמשך נצלין תו רוות בסימן " כפל שעשינו עד כה: א. חייב להלות לפחות מפריד אחד בין מרכיבים עוקבים כאשר הם שמות, מללם שמורות, או מספרים. למשל, אם כותבים 80210 100 בל? רווח בין ה-פסא וה-10, המהדר ‏ "מב:ן" שהכוונה למשתנה חדש 40210, שהרל זהו שם חוקל למשתנה. הוא לא ידע שהכוונה היא לפעולה 802 עם מחלק 10. ב. אסור שיהיה מפריד בתוך אחד ממרכיבי השפה, חוץ מאשר במחרוזת, כי המהדר יסיק שלפניו שנל משתנלים. למשל, אם מגדירים משתנה בשם 40010 וכותבלם 0 פס המהדר לתרגם זאת כשתל מלים, כאשר הראשונה הלא פעולת כסא והשנייה הלא המספר 10. כאשר כותבים 6.2"2+12 והכוונה היא ל: 1012א6.2, הרווח מבטל משמעות זו, כל הוא נמצא באמצע מספר ממש?. צריך לכתוב 6.22+12 ללא כל רווח בין התווים. 509 אסור לכתוב א7"7"18< >מאסא- תע כי תו רוות בין התווים של סימן הלחס מחלק לטניים תו מלוחד כפול <>. הרווח שבין התו המלוחד הכפול לבלן המספר 7 מותר, אבל אלנו הכרחי?, כל הוא נמצא בין שנ? מרכיבים שונים, שאלנם מחייבים מפריד בלנלהם. כללי הפיסוק הם: א. בסוף כל תוכנית, לאתר ה-פא₪ האחרון, תכתב נקודה. ב. בין פקודה לפקודה לכתב התו נקודה-פסלק. מלים כמו פעאם, ספמם, מנעאט אינן נחשבות כפקודות אלא כמלות עזר, או חלקל פקודות ולכן אין לכתוב נקודה-פסלק בסיום הפקודה שלפניהן. על אף שלא כופים על הכותב תבנית כלשהל, רצוי לכתוב את התכנלת לפי כלללם מוסכמים. בדרך זו, גם אנשים אחרים, בנוסף על המתכנת שכתב את התכנלת, לוכלו לקרוא, להבין ובמלדת הצורך גם לתקן אותה. מומלץ לקילם את הכללים הבאים: א. ליישר בצד שמאל של השורה את המלים השמורות הבאות: סק נ יוו 0% תג אזסעת פאע ב. להזלז למלנה ולכתוב בשורות נפרדות את א280[1 ו-פאע וליישר אותן בקו אחד. . ג. להזלז למינה ולכתוב בשורה נפרדת את התוכן של ההצהרות: תג ,אא 60 ,תת , לדוגמא: ונ וו ; '*' = צ008א ;א :2 ,ץצ ,א ד. רצול לכתוב רק פקודה אחת בשורתי ‏ במקום לכתוב: ;א=:7 ;2:=1 רצוי לכתוב: =:2 ;א=:7 ה. תבנלת של פקודות מורכבות: אס ; 6081 אהסטאסק ; פא 20 ח. ו. ז. ט. תבנית של הפקודה 58/ע..אקחך..עך: אעחץ נ1הת6 עך 1רטטאסק ₪ 682ו6%ק קז מיושר עם 2298, 681טא6ק מלושרת עם 482טא6ק. תבנית של פקודה ע1 משורשרת: אעחץך 11ט16פ עך 1 ₪ אוםוץ 15012 עך1 12 ₪ אאחץ 13טטנע עך 3 ₪ ;80 בפקודה 1% משורשרת רצול ללישר את המללם והפקודות הבאות: * המלה 2258 עם המלה 1 הקודמת לה. * המלה 1% השנללה עם 681טא6%ק, אשר שייכת לפקודת ע1 הראשונה. * המלה ע1 השלישית עם 6%0682ק של פקודת ע1 השנליה. * ₪083א6%ק עם 484טא8%ק, במסגרת הזוג 058ע..17. תבנלת של הפקודה 1 מקוננת: ן . אעחדך ‏ 016611 עך אתחך 10212 עך אפאך 10013 עך 1 כו 2 ₪ 3 כו ;86 המלילם הבאות מלושרות: * המלה 158 הראשונה עם מלה ע1 השללשלת (וגם עם 083טא6ק). * המלה 2158 השנליה עם ת1 השנליה (וגם עם 684טא6ק). * המלה 218₪ השללשית עם ע1 הראשונה. תבנלת עבור הפקודה 8..20זעח: 0 81ת6 ₪ אזסאת 8 פאע 01 לי. תבנית עבור הפקודה 11אט. . דמקקת: ץגמקות ; ₪081א6ק אהטאסק צאט יא. תבנית עבור המבנה 0כ..אסק: 0 מסץ61 1גק 0 0םת580 1גטק=:א66ת1 708 אזסשת ; 681וסק אף8טאסק ;פא יב. תבנית עבור מבנה 6.58..07: 07 6ם88ת15ם 0158 1 :076021 א8סטאסק :67608 ; סאם בדרך כלל רצוי ליישר את זוגות המלים האלה: * א2₪01 עם פאת, * 18 עם 58עת, * [מעתת עם מנצאט, * 6885 עם פאע. הדגמה של כללי הכתיבה של תכנית פסקל: יש להדפיס את כל המספרלם בסדרה של מספרים, שסימנם זהה לסלמנו של המספר הראשון בסדרה. , ; ( דטקטס , דטפאד) אדו פמפפג אתססתת (1) תא (2) גת :תדו (3) ,3001 :אסמ5נת אג51 (8) אנסעת (5) :('כתוב מספרילם') אתדדתט (6) : ּ ; (152(9ו) כגחת (7) (* הסלמן של המספר הראשון בסדרה *) ;0=<ת1524א4 =: אסחפדת אגאד5 (8) קת (69 ; (19202ו1) סגחת (10) או (0=<ת41524) = אסמפדת אגא51 עד (11) (15232) אממדדתט (12) )13( ₪ ('לא מתאים') א [מדדאט (18) עס .הדא (15) .עאע (16) 22 הסבר: (8) בודקלם את הסימן של המספר הראשון ומחזיקים אותו במשתנה הבוליאנל א50זת אג5. אם המספר החיובל או אפס המשתנה 8154808 א51%4 מקבל ערך של שטתץ?, אחרת הוא מקבל ערך של 58עגע. (11) משווים את הסימן של המספר האחרון שקראנו עם הסלמן של המספר הראשון בסדרה שהותזק ב-א1580ת א51%4. אם הסימנים שווים, כותבים את המספר בטורה (12), אחרת כותבים את המללם "לא מתאלם" בשורה (14). מן הראול לשלם לב לפרטים הבאים במבנה התכנלת: א. המלים %התס0תע, תג%, אזסאת ו-פאם מיושרות בצד שמאל של הדף. ב. התוכן של הצהרת תגט כתוב בטורות נפרדות (3) ו-(4) בהתאם לסוגי המשתנלם ומוזז למלנה. ג. המלים אנסתת ו-פאם בשורות (5) ו-(16) מלושרות ומופיעות לבד בשורה. ד. כל הפקודות בין א5861 ו-פא8 מוכנסות פנלמה ומיושרות בקו אחד. ה. המלה 1תתעת2 בשורה (9) מלושרת עם המלה תאש בשורה (15). ו. המלים ך ו-₪188 מיושרות בשורות (11) ו-(13) וכך גם התוכן של הפקודות האלה בשורות (12) ו-(184). 6 תרג?ללים 1 שחאלות (1) כתוב פקודה *1 פשוטה, עם תנאל אחד בלבד, אשר שקולה לפקודת 1 המורכבת שמוצגת כאן: אאחך 60>א ע1 אזסטת אאחץן 0>צ עד 2?+ץ+א%=:4 פא כו אפחץ 5=א ע1 2++צ+א=:4 (2) אם נתון אעת=81 ו-22=7455, מה הערך של 4 אחרל שתי הפקודות הבאות: א. אעחת 21 ע1 ב. אפחך 81 עד 5 אמח 52 עד א :4 ספ 5=: אתחד 82 17 פאע 58 4: (3) קרא בעיון את התכנלת הבאה וענה על השאלות שבהמשך: ; ( 007207 , דטעאד1) 6311205 אתססת2 תג 93 ;009דא1 :1 ,גאדתפתגם תגע5דא , תגספדן אזסעם ; (15209א) פגחת ; ( 24950188 15228) סגמת חוכו 0 50 סא פאג (48ת15א <> 511 1528) 8 ₪ אזסחם , 1 :ך ( 24951104 1524ו1) פגות ; פא אמח 1554 = גאזתפתות תגפ5זא עד ('המספר מופלע במקום"' ,1:3 ,'ברשלמה') אתתדזתח ןו ('המספר אלנו ברשלמה') אומדדתח . פא א. מה עושה התכנלת? ב. מהו הפלט עבור הקלט הבא: 1- 13 21 7 85 42 25 46 22 85 7 (4) נתונה תכנלת אשר קוראת את מספר הימלם בחודש וסלושה נתונל מצב לכל 94 לום: .1 מצלין אם לרד גשם. אם ירד גשם ערכו שווה‎ - 6578 * 008₪/א - מילדת החום הנמוכה בלותר.‎ * *‏ 064008 - מלדת החום הגבוהה ביותר. ; (2טעץ 00 , לטעאד) 05084 אתססתע תג ; א :58מכ24000 אצאצ אסצ ,הסטיגאא , ג0סל63 ,05 את ; (34002858 אזוהצ) עגתת 0=:אצ 645118 : =0 ; 00 (3400058 אנועאצ > אסצ) פאג (6451=0) םדו אס ; (008אא ,1 6) כפגמת 1 =: 0+ ;פא אמעץ ‏ 0 < 645883 עך ('יום"' ,5:א08צ,'הלה גשום' ) אהתדדתט כו ('לא היה אף לום גשום בחודש') אזעדדתט . פא קרא את התכנית בעיון וענה על השאלות הבאות: א. מה עושה התכנלת ? ב. אלך היית מרחלב את התכנלת כדי שתפלק את המלדע הבא: 1. הלום הגשום הראשון שבו מלדת החום הלתה מעל 59 2. הלום הגטום הראשון שבו מידת החום הלתה למטה מ- 70. 3. שלושת הלמלם הרצופלם בחודש שבהם לרדה כמות הגשם הגדולה בלותר. 2 תכנלות (1) כתוב תכנית שמקבלת כקלט שני מספרים שלמלם 4 ו-5 ומוצלאה כפלט משתנה בוליאני שערכו 1808 אם 5 מתחלק ב- ללא שארלת. (2) בסופרמרקט מסולם נותנלם כ"נקודת ההנחה". כתוב תכנלת את החשבון הסופי לתשלום. הנחה של 5% על כל קנייה מעל לסכום שמוגדר שקוראת רשימת מספרים אשר הראשון בהם מצלין נקודת ההנחה ושאר המספרים מצ?ינים את מחיר המוצרלם שניקנו. המספר אפס (0) מסמל את סוף הרשימה. צלין בפלט ‏ אם הקונה מקבל הנחה ומהו נתונים לדוגמא (קרא משמאל ללמלין): 0, 50, 80, 60, 0, 30, 100, 60, 80, 30, 70, 60, 500. (3) כתוב תכנית טקוראת קבוצות של 3 מספרים שמליצגים את אורכל הצלעות של מטולש, שרוצים להרכיב מהם. הפלט לכל קבוצה הוא אחת מן ההודעות הבאות: * הצלעות מהוות משולטש שווה * הצלעות מהוות משולש שווה * הצלעות מהוות משולטש שונה * הצלעות לא לכולות להרכיב צלעות. שוקיים. צלעות. משולש (ז"א סכום האורכים של זוג כלשהוא קטן מהאורך של הצלע השללשלת). (4) קללמלם כלשהל. נתונים מקודדים נתוניל הזלהול הם: צבע שיער: שחור = 1 חום - 2 ג'לנג'י - 3 בלונדיני- 4 על צבע השיער וצבע העינלים של אוכלוסיה גודלה לא לדוע מראש ואלן זקלף או דגל כדל לציין את סוף הקלט. כחול ₪ 1 חום 2 ירוק - 3 צבע עלנלים: כתוב תכנית שתציג בטבלה את גודל האוכלוסיה ואת אחוז האנשלם שלש להם כל צירוף של שלער ועלנלים, לרוקות. כתוב תחללה הנבנית בעזרת פקודות 6010. (5) כתוב תכנית שמקבלת כקלט את הספרה 4 ומספר שלם 5. בוללאנל השלם 83. שערכו למשל אחוד תרשלם זרלמה. לש להשתמש בפקודת 0455 "מלאכותלת" האנשים בעל? שיער חום ועינלם הפלט הוא< משתנה שטתץ אם הספרה 4 היא אחת מן הספרות שמרכלבות את המספר (6) כתוב תכנית שמחשבת את הפתרון למשוואה הרלבועית: 0+ . נתונלם המקדמים 4, 28, 6 ומוגדר הדיסקרימיננט 82-440(**0.5) = 2 בתשובתך התלתס לטלושת המקרים הבאים: 6. כתוב תכנלת בכדל להדפיס אותם בסדר *‏ 20 - יש שנל שורשים ממשללם. *‏ 2=0 - לש רק שורש אחד. = 60 - יש שנל שורשים לא ממשללם. (7) נתונלם שלושה מספרים 4, 8, עולה. 5 (8) כתוב תכנילת שמקבלת כקלט סדרה של זוגות מספרים. המספר הראשון הוא הצלון של תלמלד בהסטורלה והמספר השנל הוא הצלון של אותו תלמיד במתמטלקה. הפלט ליכלול שנ*? ערכים: מספר התלמידים שקיבלו צלון יותר גבוה בהיסטורלה מאשר במתמטלקה ומספר התלמלדילם שקיבלו ציון יותר גבוה במתמטלקה מאשר בהסטוריה. (9) כתוב תכנית שקוראת סדרה של צלונלם ומדפיסה כפלט: ממוצע הצלונים, מספר הכשלונות (צלון פחות מ-60), מספר הצלונים שנכנסו לממוצע, ואת הציון הגבוה בילותר והצלון הנמוך ביותר בכלתה. (10) כתוב תכנלת שמקבלת כקלט את הגודל של.זולת במעלות. בדוק אם גודלה הוא בין 0 ל-360 מעלות והדפס את גודל הצוית ואת הרבלע שבו נמצאת הצלע העליונה שלה. למשל, זוית בת 45 מעלות נמצאת ברביע הראשון, זוית בת 290 מעלות נמצאת ברביע הרבליע?. אם הדוילת גדולה מ-360 מעלות לש להדפלס הודעת שגיאה. (11) יש להרחלב את התכנית שבתרגיל הקודם כדל שתוכל לקבוע את הרבלע של הצלע העליונה של הזולת עבור כל זולת, אפילו אם גודלה לותר מ-3609. (12) שפר את הפלט של כמה תכנלות אשר הוצגו בפרקים קודמלם כדל שהמלה מספך או 14058 לא תופיע כחלק מן הפלט. יש להשתמש בפקודות ע1 ו-0458: * תרגילים לפרק 2: תכניות 1 עד 4. * תרגילים לפרק 3: תכנית 7. (13) בסקר שנערך בכדיל לקבוע את מלדת הנילצול של קיבולת המכונלות הנכנסות לעיר נרשמו הנתונים הבאים עבור כל מכונית: * מספר האנשים במכונלת. * הקיבולת המירבית של המכונלת. כתוב תכנית אשר תדפלס טבלה שתכיל את: . * מספר המכוניות עם 1, 2, 3, 4, 5, או 6 נוסעלם. *‏ מספר המכונלות עם ניצולת של: 20% 200% 0% 0% / 2% ניצולת מכונלת הוא הלחס בין מספר הנוסעים במכונית לבין הקיבולת המלרבלת שלה. (18) כתוב תכנית שמדפליסה את גילו של אדם בשנלם, אם נתון תארלך הלידה והתאריך הנוכתל. (15) (*) כתוב תכנלת שמחשבת ומדפיסה את הסכום של שנל מספרים שלמלם בתנאי שהסכום שלהם לא גדול מהערך "א1אןג;4 ולא קטן מהערך +אזאגא-. כלומר, אין מצב של גלישה. אם לש גלישה הפלט הוא הודעה שמצלינת אם היתה גלישה מעל לגבול העליון או למטה מן הגבול התחתון ובאלזה שלעור. פתור את התרגיל בשתי דרכים: א. ע"י העברה של המספרים השלמים לליצוג ממשי. ניתן לעשות זאת ע"ל הכפלה ב-1.0, או ע"? הצבה של משתנה שלם לתוך משתנה ממשל. ב. ע"?" פעולה במספרים השלמים. אם 4( ו-2 חיובלים, אסור לשאול אם 66 זאזאגו<ת+4, כל אם התשובה הלא חלובלת המחטב אלנו ‏ *כול להחזיק את הסכום סל 4 ו-5, שהוא עתה גדול כותר מ-%א1א4. מותר לשאול אם 8-ץאדאא<, כל זהו ערך קטן לותר מהערך המקסימל? המותר במחשב. (16) (*) עורכים סקר בכדל לבדוק את דעת הקהל בשנל נושאלם: א. אם להחזיר את יהודה ושומרון. בּ: אם להעלות את המשכורות של חברל הכנסת. כל משתתף הייב לבחור אחת מן התשובות האפשרלות הבאות: 1 - מסכלם באופן מלא, - מסכלם, לא בטוח, לא מסכלם, - לא מסכים בכלל. כל משתתף צריך לצללו את ההזדהות המפלגתית שלו: : - מזדהה עם הללכוד, א - מזדהה עם המערך, 8 - מזדהה עם מפלגה אחרת. ו גא 200 ה כתוב תכנלת אשר תבצע את הפעולות הבאות: א. תספור ותדפלס את התשובות הטונות עבור כל אחת משתל השאלות. ב. תספור ותדפלס את מספר התשובות לפל ההזדהות המפלגתלת. ג. תשווה את התשובות לכל שאלה בלן התומכלם בליכוד לב*ן התומכים במערך ותדפיס את תוצאות ההשוואה. (17) סטודנטלם רוצים לדעת באיזה מקרה העלות הכללית של לימודלהם תהלה נמוכה יותר: א. לימודים במטך 4 שנים ועבודה בקלץ. ב. לימודים במשך 3 טנים מלאות, כולל לימודים בקיץ, במקום עבודה. הנתונים הדרושלם להחלטה: א. שכר ללמוד שנתי, ללא סמסטר קלץ (4). ב. שכר ללמוד בקיץ (4/3). ג. עללה באחוזלם בשכר הלימוד משנה לשנה (5). ד. הכנסה בקיץ מעבודה (0). ה. על?ה באתוזים בהכנסת הקיץ משנה לשנה (8). הקלט לתכנלת כולל את הערכים 4, 2, 6. הפלט הוא חלשוב העלות לפל כל אחת מהאפשרולות, לטיקול דעתו של כל סטודנט. (18) כתוב תכנית שמקבלת כקלט תאריך לועזל (במאה ה-20) וקובעת באיזה לום בשבוע חל אותו תאריך. הטתמט בשלטת החלשוב דלהלן: א. חלק את שתי הספרות האחרונות של השנה (4) ב-4 ושמור את המנה (5). ב. 8+ ---> 0 ג. ‏ 042 ---> 8, כאשר 2 נקבע לפ? הטבלה הבאה: 17 מספר החודט מספר החודש ס|ס 5 0 ל[ = = 0 ₪ ₪ ות א ד. הבר לום בהודש (צ) ותקבל צ+ק ---6ס. ה. ‏ יום בשבוע שווה ל: 7 כסא ? כאשר יום ראשון הוא 1, יום שנל הוא ‏ 2, וכו', עד יום שבת שהוא 0. דוגמא: אם תאריך הקלט הוא 17/8/88, נקבל: = 3 5 = 7 פסא ע 1 8 05 5 התאריך 17/8/48 חל בלום חמלשל. (19) קלילמלם 8 מספרים קטנלם מ-500 בעלי תכונה מלוחדת. אם לוקחים כל ספרה במספר, מעללם אותה בחזקת שלוש ומחברים אֶת התוצאות, הסכום :הלה טשווה למספר המקורי. למשל: ‏ 153 = 33 + 53 + 13. מצא לפחות אחד מהמספרלם האחרים בעל? תכונה זו. מסוף גרפי ‏ (יבמ) 08 פרק 5 מערכיסם 1 משתנ?ם רב-ערכ?ל?ם במלמד אחד מנהל ‏ בית החרושת מודאג מכך שהפועלים מבלים הרבה בסוף השבוע ומאתחרלם לבוא לעבודה ביום ראשון. כד? לתעד את טענתו, הוא רוצה לראות את סכום שעות העבודה של כל הפועלים בכל אחד מן הלמלם המלאים בשבוע (א'-ה'). הוא לוכלת את טענתו, אם סכום שעות העבודה של כל הפועלים לחד בכל אחד מן הלמים ב' עד ה' לותר גבוה מזה של יום א'. בהמשך ‏ כתובה תכנלת, שמקבלת כקלט את שעות העבודה של כל אחד מ-50 הפועלים. הקלט בעבור כל פועל מורכב מ-5 מספרלם שמליצגים את מספר השעות ‏ שהוא עבד בימים א' עד ה', בהתאמה. הפלט הוא סכום השעות שכל הפועלים עבדו בכל אחד מ-5 הלמלם. ; (001 , התא ) 9 אותססתת (1) (א התכנית מחטבת את מספר השעות שהפועלים עבדו בימלם א' - ה' *) (2) תגט (3) (* טעות לכל יום *) ,584075 ,5814074 ,584073 ,584072 ,51071 (4) .1 :(*סכום לכל לום*) 5₪1דא1, צאצטדת, דז51דו51 , 51 , א150ת (5) ; תע6מא1 :1 (6) אזסתפת (7) 0=: 5117 117 ; 0=: 1/1 ;5₪1.1581:=0 ;1:=0א588 :0=:אסמ15ת (8) 0 50 10 1 =:1 ת0ע (9) אזסמת (10) ; ( 51015 ,076 ,514073 ,584072 ,5784071) סגתת (11) ; 51071 + אסח5נת =:א580זת2 (12) 2 + אח5 =:זאח51 (13) )14( 518.7581:= 571.151 + 514073 ; 04 + עמדטדת =:צתצטזת (15) 5 + 011511 =: ד5דון0 (16) ; פאםת (17) (1581א04 , צמדטדת ,581581 ,דאחא5 ,אסמפדת) אעמדזאה (18) .את (19) .>9 הסבר: בתכנית זו יש ריבול של משתנים וגם ריבוי של פקודות. יש הקבלה בין המשתנים 512071 עד 584015 המתבטאת בפקודה (11) ובהמשך. ‏ גם המשתנלם אסעפנת עד 08/1581 מקבילים, כפי טנראה בפקודה (8). הפקודות (12) עד (16) גם כן מקבילות, כאשר כל אחת היא כמעט העתק של קודמתה ורק נעשו בה התיקונלם המתאלמלם בכד? לציין את היום המתאלם בשבוע. 5.1 מערך חד-מימדל - ווקטור ניתן לפתור את הבעלה של ריבול המשתנלם, אם ניתן שם אחד לכל קבוצה של משתנלם. למשל, לקבוצה 58011 עד 584015 נוכל לקרוא 58401 ולהבדיל בין משתנה למשתנה בתוך הקבוצה ע"ל הוספה של מצלין (5ק25021ט5) בסוגרללם מרובעלם. בהתאם לכך, המשתנה 58401 הוא משפנה רב-ערכל או מערך (צְ1278), כל הוא מורכב מ-[58₪401]1, [5₪401]2, [401]3א5, [58401]4 ו-[01]5ג91. נוכל עתה לכתוב [58407]1 בכדל לתאר איבר כלשהו של המערך 5801 ולהתילחס למכלול הערכים במערך זה אם ניתן ל-1, בזה אחר זה, את תחום הערכים מ-1 עד 5. נוכל לתאר את מערך 51401 גם כגוש של כתובות (תאלם) רצופות בזיכרון טל המחשב, כפי שמוצג בתרשים הבא. נוכל עתה לכתוב [5807]1 בכדל לתאר איבר כלשהו של המערך 581401 ולהתללחס למכלול הערכים במערך זה אם ניתן ל-1, בזה אחר זה, את תתום הערכלם מ-1 עד 5. נוכל לתאר את מערך 5807 גם כגוש של כתובות (תאים) רצופות בזלכרון של המחשב, כפל שמוצג בתרשים הבא. , ד פר כ וו שו ה א [5] ספ [4] צ'סתא5 [3] עסתח5 [2] עסב53. [1] נסתגפ גם את המשתנים א31540 עד 68001581 נוכל לקבץ בקבוצה, או במערך בשם אסצ. אם נשתמש במציין 1 כדל לתאר איבר כלשהו במערך, נוכל לכתוב: [1]אסצ. לאחר ההגדרות שכתבנו, כל אחד מן השמות 5801 ו-0%+ מליצג קבוצה של ערכים, אשר סדורים בזה אחר זה במערך חד-מימדי, אשר נכנה אותו רשלמה (1155) או ווקטור (0502ם0). : נשבץ את המערכים 58.01 ו-0%+ בתוכנית הקודמת, במקום המשתנים הבודדלם ונקבל את התכנלת המשופרת: ; (1טפינטס ,טקא ) 080710א5א אגתססתע (1) (א התכנית מחשבת את מספר השעות שהפועלים עבדו בימים א' עד ה' *) (2) תאגט (3) 10 ,תומת עס [1..5] צגתתג :אסצ ,58407 (4) אמסתזאז : ,1 (5) אנספת (6)6 0 5 70 1:=1 תסע (7) =:[1]אסצ (8) 0 50 20 1:=1 תסע (69) 0 70 1 =:1 ת0ע (6)10 אזנסחת (11) ([58401]1) כגפת (12) [ ]0 + [נ]אסצ = :[נ]אסצ (13) פא (14) 0 5 10 1:=1 תסע (15) ([]אסצ) אזמדדתט (16) .אע (17) הסבר: (4) כשם שמצהלרים על משתנים, כך דרוש להצהיר גם על מערכים. בהצהרת המשתנים מצלינלם סכל אחד מן השמות 5801 ו-08צ הוא מערך (ְ8עע4) בן 5 איברים מסוג םגתת. טווח המצללנים של כל אחד מהמערכים הוא מ-1 עד 5, כמו שנרשם בתוך הסוגרלים המרובע?ם. מפרלדים בין הערך של המצלין התחתון לבין הערך של המציין העליון בשתי נקודות. המלה שאחר? ?0 מגדלרה את סוג המשתנים שבמערך. במקום מגחת נלתן לכתוב תמ6מעא1 או א200105%. כל איברל מערד אחד צריכלם להיות מאותו סוג, שהרל יש רק מלת תואר אחת (גמת במקרה זה) בעבור כולם. (8)-(7) מאפסים את 5 משתנל הסלכום של הלמים על לדל שימוש במשוואה אחת: 0: [1 ]אסצ. המציין 1 יקבל את כל הערכים האפשריים בתתום בעזרת פקודת 0% גם אם הלו 100 משתנל סיכום, התכנית לא היתה גדלה במספר הפקודות, אלא רק בצמן הבלצוע. בכדל לטפל ב-100 משתנים לש להחליף בפקודת הצהרה (טורה 4) ובפקודות הבילצוע המתאלמות את המספר 5 במספר 100, כדל שהלולאה תתבצע 100 פעמלם במקום 5. (13)-(12) שת? פקודות לקריאת נתונים ולסיכום, במקום הפקודות (11) עד (16) שבתכנית הקודמת. התכנית תקרא 50 סדרות של 5 ערכים עבור כל אחד מהפועלים. 2 שלמוש במערך חד-מלמדל נציג דוגמא נוספת לשלמוש במערך חד-ממדל. נניח שמורה בודק מבתן ורוצה לתת לסטודנטלט ציונים *חסי?לם. לציון הנמוך ביותר הוא קובע ערף 0 ולציון הגבוה בלותר הוא קובע ערך 100. כל שאר הציונים לחושבו באופן לחסי? בתוך תתום זה. למשל, אם הצלון הגבוה בלותר הוא 2, יקבע לסטודנט זה הצלון 100. לסטודנט שקליבל את הצלון הנמוך בלותר - 3, לנתן הצלון 0. הסטודנטים שצלונלהם בתוך התחום 63 עד 72 לקבלו ציונים שערכם *חס? למלקומם הלחסל בין הציון הנמוך והגבוה. הנוסחא המתאלמה לחלשוב של צלון לחסל היא: ), אאא אשצדעץ - אטצך2ץך ( א אגא אשצ121 - 64704 אטצ21ד שש 1 אדקך המשתנלם 64/04 אטצך2?ד ו-008גא אשטצד2ך מללצגים את הצלון המקסימל? ואת הצילון המינימלי, בהתאמה, מבלן כל הצלונלם. נכתוב תכנית לפתרון הבעלה: (ענזקידטס , צטפאך) אזאוד2ץ סע (1) תגט (2) ; 6 דא עס [1...50] צגתתג :אשצך?ך (3) ; סנא :2 ,7 ,01 אשצך2?דך ,הסחואא אטצדקדך 6704 אטצךלי (4) אנסתת (6)5 ;('כתוב את הצלונים הגולמלים') אתצדתט (6) :[1]אטצנלד) כגתת (7) 2 =: אסטאגא אטדקך (8) אד =: 64004 אנוצד2ד (9) ;2=:ך (10) וחקת (11) :ג[1]אטצ21ד) כפגחת (12) אע 6300 אטצנ2ד < [1]אוצדת2ד חד (13) [1]אטצ121 =: 64708 אטצדך (14) כ (15) אמא אס6סא אטצ21ד > [1]אוצדקץ קך (16) אצ =: אסטאגא אשצד2ד (17) 1 =: ך (18) זאטס (19) ציון יחסי') אזחדדאט (20) =: 1 (21) 0 0 1:=1 תסעל (22) התהההרהרהרהררת :;('ציון גולמל אזסעת (23) ונפ (אס6טאגא אשצד2ד - [1]אטצ121) * 100 =: דפגאסגצ אטעדקך (28) ; (068ונאא אשצ121 - 64004 אטצד2ד) = (25) (1[:20]אטצ21ך ,51המסהצ אצ1ל) אמדדתא (26) פאע (27) .פא (28) הסבר: (9)-(7) קוראים את הציון הראשון וקובעילם שבינתיים הוא מללצג את הציון הנמוך ביותר וגם את הציון הגבוה בלותר. (18)-(12) קוראים את שאר הצלונים ובודקים כל אחד מהם בכדי לקבוע אם הוא גבוה מן הציון אשר נקבע כגבוה בלותר עד עכשלו, או אם הוא נמוך מן המלנימום הקודם. (21) מספר הציונלם שקוראים, 1, קטן באחד מהערך הנוכחי של 1, כי את ך מקדמלם בסלום הלולאה. (25)-(28) הביטוי (אסטאגא אטצ1לך -‏ [1]אעטצ121) הוא מספר שלם וכך גם הביטרי (אסטאגא אשש64004-121 אשצדקד). אסור לבצע את החילוק הבא, כל הוא תמיד יתן תוצאה של 0, כאשר המונה קטן מן המכנה: (968א אטצדקיד - 64004 אשצ121) טדם (מסטוגא אנוצד?ד - [1]אטצדקץ'). 12 לם את השבר ב-100. כפל הוא באותה רמה של חילוק ולכן ל למנוע זאת כופל - 0 את התוצאה הנכונה. אפשר גם הכפל ב-100 שרטשום משמאל מתבצע קודם ומקבללם לכתוב: / (אסטאגא אעצד2ך - [1]א0צ21) * 100) מאטסת =: ד8מסגץ אעוד2ד ( (מסטוגא אטצ21ך - 04004 אטצד2ד) היתרון טל שלטה זו הוא בכך שמקבלים את התוצאה מעוגלת ולא מקוצצת. למטל, אם 60 = מסטאאא א0צ121, 90 = 0 אדקד, 5 = [1]אעטצד2ץ, נקבל תוצאה 16 לפ השלטה הראשונה ולפי השילטה הטנליה נקבל 17, כל 7= 16.66 )2א300. אם 4 אאשצצדקד שווה ל: אסא אעצ21ך המכנה להיה שווה ל-0 וזה לגרום לשגיאת בנכצוע. על אף שמקרה זה נדיר, כדא? לבדוק תנאי זה לפנל שנכנסים ללולאה של שורות (22)-(27). 2 משתנלם רב-ערכ??ם בשנ? מ?מדים המערכלם 57401 ו-א0+ מליצגים ערכלם אשר סדורים בזה אחר זה במערך חד-מימדי, במבנה של רשימה (115%6) או של ווקטור (ע066%0). קללמות קבוצות של ערכים אשר מסודרים במבנה של מערך דו-מימדל (ע258 0-11 מערך כזה הוא טבלה (18016), או מטרלצה (א1ע5ג]/). 5.2.1 שימוש במערך דו-מלמדל 7-26 2 1 נדגים באמצעות תוכנית את השלמוש במערך דו-מימדל. במפעל מסוים קובעלם את משכורות עובדל המלנהלה כפונקציה של שנות הוותק בתפקיד ושל רמת ההשכלה. הנתונלם ערוכלם בטבלה שבהמשך ומליצגים מספר (אחוז) שבו יש לכפול את השכר הבסלסי בכדל לקבל את השכר לכל עובד. לותר מ-15 | בין 10 ל-15 | בלו 5 ל-10 פחות מ-5 טשנות וותק הטכלה 15 100 1-55 100 בלל בגרות 200 5 100 15 בגרות 25 200 15 100 תואר ראשון לפתחות התכנית שבהמשך מחשבת את המשכורת של 25 עובדל המלנהלה שבמפעל. ; ( עויס ,מטפאד) 1158089711 אותססתק (1) (* התכנלת הזאת מחשבת את השכר של עובדי המלנהלה *) (2) תא (3) ;זאחת עס [1..4 ,1..3] צגתתג :50848 (4) ;תפ6מעאד :אתדחט ,[גא5גח ,סמטס תגקפדא ,7 ,1 (5) 13 אזסתת (6) (('קרא את הטבלה לחישוב משכורת') א0מדדת (7) 0 50 1:=1 אסע (8) 0 4 20 1:=1 תסק (9) ,[5088]1,1) סגאת (10) 0 25 10 1:=1 פסע (11) אסשת (12) (('קרא מספר-עובד, השכלה, וותק') אמדזתח (13) ; (אתצחט ,ג.זהאפז , סמטס תגק5דא) אזסוגמת (18) (('השכר של עובד מספר' ,1:סמש0 15248א) אזמתדנתט (15) ('טוה ל-7' ,10:2:[אתצמט ,גתהאפגת]50025) אזמתדדתט (16) פא (17) .פא (18) הסבר: (4) הצהרת משתנים עבור מטרלצה דומה להצהרת משתנים עבור ווקטור. בהצהרת המשתנלם דרושלם שנל צוגות של מספרים בכדל להגדיר את תחום הערכלם של שנל המצליינלם. הזוג הראשון מתילחס לתחום השלנול של אלנדקס השורות בטבלה והזוג השנל מתללחס לתחום השלנול של אינדקס העמודות. האיברים של כל זוג מספרלם מופרדלם ע"ל שת? נקודות סמוכות, כאשר פסיק מפריד בין זצוג לזוג. (10) מציינים איבר בשורה 1 ועמודה 1 ע"*: [50148]1,1. המשתנה ‏ 1 בלולאה החלצונילת מקבל ערכלם מ-1 ל-3. כאשר 1:=1, המשתנה 1 אשר בלולאה הפנלמלת משתנה מ-1 ל-4. כלומר, ‏ 4 המספרלם הנקראים תתילה ‏ הם [1,1]ק50828, [1,2]ת508%, [1,3]ת50842, [1,4]ת5014, הכתובים בשורה הראשונה של הטבלה. אח"כ הערך של 1 בלולאה החלצונלת עולה ל-2 ושוב פעם 1 משתנה מ-1 ל-4 בלולאה הפנלמלת. לבסוף, הער של 1 להלה 3 ו-1 לשתנה מ-1 ל-4 במהלך הקרילאה של השורה השללשלת. 2 כלללם לשימוש במערכלם (*) בתכנלת 45%088111/ אפשר הלה להגדיר את המערך הדו-מלמדי בצורה שונה, במבנה של צגתת8 מקונן: םאת עס [1..4]צגתתג עס [1..3]צגתתג :50145 משמעות הצהרה זו היא: 50848 הוא מערך של 3 איברלם, שכל אחד מהם הוא מערך של 4 איברים. כדל לפנות לאיבר (1,1) של מערך שמוצהר בצורה זו נכתוב [נ][5084]1. כלומר, פונים לאיבר 1 של 56848 ולאיבר 1 בתוך אלבר ד. אסור לעשות פעולות אלגבריות על מערך, אך מותר לעשותן על האלברילם שלו. למשל, נתונלם המערכים 4 ו-5 אשר מוצהרים בצורה זהה, כמו לדוגמא: המאת עס [1..10 5 :2,282 אסור לכתוב 2+5, 2-2 וכו', אבל מותר לכתוב: [1,א]9+[1,1] | [ם,א]8-[2]1,1 | וכו'. יוצא מו הכלל יחיד לכלל שאסור לעבוד עם מערך שלם הלא פעולת הצבה. למשל, 108 עבור 8 ו-2 המוצהרים קודם מותר לכתוב 4:=5 במקום הפקודות הבאות: 0 70 1 =:1 08ע 0 10 10 1 =:1 תסע [2]1,2 =:[4]1,1 אם 50814 מוגדר בהצהרה של צגתת4 מקונן, מותר לכתוב [2]ת3[:=504]ת.508. התוצאה הלא ש-64 האלברים ב-[508.2]3 יקבלו את הערך של 4 האיברים של [50149]2. במהדרלם שונים הכניסו מספר הרחבות למבנה הלסודל: א. שנל המבנלם את עס [1..4 ,1..3]צגתתג :1ת.ח50 תת עס [1..4]צגתתג עס [1..3]צגתתה :508482 נחשבים זהלם. המבנה הראשון הוא רישום מקוצר של השנל. כתוצאה מזה, ההתייחסולות הבאות: [נ] [1] 508.8 [נ,1] 5008 גם כן נחשבות זהות ואפשר להשתמש בכל אחת מהן בלל קשר למבנה של הצהרת המערך. ב. בנוסף לפקודת הצבה אשר פועלת על המערך כולו כגוש אחד, ניתן גם להשוות שניל מערכים שלמים במשפט תנאל בוללאנל אחד. במהדר כזה מותר לכתוב אפעד 5 > 2 עך 8 אשר זהה לקבוצת המשפטלם הבאלם: מסתץ =:א1ג 0 5 70 1:=1 תסע 0 10 170 1:=1 א0סע אעחד [נ ,2]1 > [ ,1] חד 5 =:5416 אמעץ אנטגם עך האס פקודות הפועלות על איברי מערך נדגים בתכנית הבאה שלמוש בפקודות הפועלות על איברי מערך: ; (צטפצטס , צטפא1) 24דתדומת מטעדד אגתססתק | (1) בתכנית הזאת מחשבים את סכום הערכלם בשורות ובעמודות *) (2) (א במטריצה 4 ומדפיסים אותם יחד עם המטרלצה המקורלת. (3) 007 | (4) 5016 אגא (5) ; 07=8כטזו גו (6) תגט (6)7 ; תאז 07 [ 0 . אגא..1 ,07ת0ח5 אגא..1] צגתתג: (8) , ;דא עס [ 01 - אגא .1] צגתתה:ב (9) ; המוא 08 [ 'ססטוו. און. .1] צגתת :6 (10) תתסמזאת :1 ,7 (11) אזססת (12) (* מלא במטריצה 2 את הערכים המתאלמלם *) (13) 20 1 אגא 10 1:=1 תסק 0 אזסתת ;('הכנס שורה של ' ,2/0001:2 אגא ,' ערכים') אממצדתט 20 דספטיא אגא 0 1:=1 08ע ) פאאת אזפומת פא (% אפס את הווקטורים 2 ו-0 )*‏ , 20 ות אגא 10 1:=1 תסץ :]1 0 עספטעג אגא 10 1:=1 תסע :6 (% מצא את הסכומלם הדרושים *) 120 אגא 70 1:=1 תסל 20 צספטוא אגא 0ד 1:=1 תסץ אא :‏ [1]תּ [ + :ןס ; פא (% הדפס את הפלט בצורה זו: ג בשמאל, 2 בצד למלן, 6 למטה *) ; (408)007201 0 5907 אגא 70 1:=1 פסע א 0 דספטוא אגא 70 1:=1 אסק :([,1]) מדדתט (5]1[:15) אתחדדתט ; פא ;זז ; א 0 בססטגא אגא 70 1:=1 תסק ([נ]6) מודתט . פא מהלך של הרצה לדוגמא: הכנס שורה של 8 ערכים 3 65 23 38 45 23 33 22 הכנס שורה של 8 ערכים 3 89 76 76 85 76 45 32 הכנס שורה של 8 ערכים 6 46 63 65 54 46 43 32 הכנס שורה של 8 ערכים 3 76 31 42 65 43 54 63 הכנס שורה של 8 ערכלם 8 23 87 55 66 87 58 32 הכנס שורה של 8 ערכים 2 54 54 23 90 67 38 64 1066 )14( )15( )16( )17( )18( )19( )20( )21( )22( )23( )24( )25( )26( )27( )28( )29( )30( )31( )32( )33( )34( )35( )36( )37( )38( )39( )40( )41( )42( )43( )44( )45( צורת הפלט: 208 3 65 23 34 45/0 23 33/5 22 02 3 89 76 76 85 76 45 32 2117 6 6 63 65 45 46 43 0 34 | ל-42 2107 33 | 76 1 42 65 43 54 63 8[ 4% 23 87 55 66 87 54 32 2 2 54 54 23 90 67 38 68 0 5 0-> 291 353 4 295 405 342. 267 247 הסבר: (20)-(14) מילו? המטרלצה 4 לפ? סדר שורות. (25)-(22) אלפוס הווקטורים ו- .6‏ יש מהדרלם שקובעים ערך התחלת: 0 לאלברלם של ווקטור של מספרים, אבל כדל לא לטעות מומלץ לאפס את הווקטורים האלה בצורה מפורשת. (32)-(27) לולאה כפולה כדי לחשב את הסכום של השורות בזו אחר זו. לאחר סרלקת הסורה הראטונה האיבר [8]1 מקבל את ערכו הסופל, אשר שווה לסכום האלברים בשורה. מספר אחד בלבד נכנס לכל אחד מהאלברלם [6]1, [0]2.. עד [0]8 בהתאמה. ‏ בכל פעם שקוראלם שורה נוספת, מקבלים [8]1 לאותה שורה וצוברים עוד ערך לכל [6]1. רק בסוף קרלאת השורה האחרונה, הסכומים [0]1 מקבלים את ערכם הסופל. (34) פקודה לקלדום הנייר במדפסת לדף חדש, לשם הדפסת הפלט. 3 ספוג? נתונ?ם שמוצהר?ם ע"? המשתמש כל משתנה שהוגדר עד עכשלו, הוצהר כאחד מסוגי הנתונים תת6מצא1, מ4מת, או אגםססת. לא הוצהר סוג נתונים לערכים קבועים, מכלון שהסוג נקבע לפ צורת הכתלבה של המספר. המטתמש ‏ יכול להגדיר סוגים אחרלם של נתונים ולהצהלר שמשתנה כלשהוא *הלה שליך לאותו סוג. נציג שתי דרכים להגדרה של סוג נתונים ע": המשתמש. 1 הגדרה של תת-תחום המשתמש *כול להצהיר על סוג חדש של נתונים ע"? הגדרה של תת-תחום ( ַאַתהעפט5). תת-תהום הוא קבוצה חלקית של סוג נתונים שהוגדר כבר. ההגדרה 5 מפפצ1 קובעת למשל, שהסוג 0028 מורכב מן המספרים 1 עד 5 שנבחרו מתוך סוג הנתונלם 1868%8א1. הערך המוזכר ראשון חליב להיות קטן מן השני ומופרד ממנו בשת? נקודות סמוכות. מספר האלברלם בתוך תת-תתום ה*לב להיות סופל ולכן אסור לבנות תת-תחום עבור מספרים ממשלים, שהרל ידוע שיש מספר אין סופי של מספרלם ממשלים בין כל שנ* ערכים. 107 אם כותבים מאוחר לותר בתכנית 4:0028 תגט, הכוונה הלא שבמשך התכנית המשתנה א יקבל ערכים אשר מוגבלים לתחום המוזכר. אם ננסה לתת לו ערך אחר, נקבל הודעת שגיאה. הצורה הכללית של הצהרת מקצ?1 הלא: "ו | ופי -6953 הגבוה ( >> הקטן הסוג ביותר - ביותר . לפעמלם מוצגת סדרת הצהרות כזו: : 00 1=תחדא ו 07 1 חודאן. . 0005=1 מקצך :1 א הצהרת 128 צריכה להרשם לאחר 1 ולפני 8ג0, כי ההצהרות מתבססות זו על זו. שם הסוג 06028 מופיע בהצהרת מעקצ1 ושוב פעם בהצהרת 048, כאשר תפקידו רק לקשר ביניהן. ; נלתו לקצר ולהכנלס את ההגדרה של 0028 בהצהרת 728 בצורה זו: : 1=100תחץך או 07 ...4:1 תג הטתמשנו בהגדרה של תת-תהום בתכנלת כ כאשר הגדרנו את המערך %צ: : עס [1..5]צגתתה :אסצ , 507 תג אפשר לחלק את ההצהרה הזאת לשניים ולכתוב: 1..=תסאת | מקצך קפס [מ6אגת]צגתתה :אסצ ,1407 תג 2 מגנליה משתמש לכול להצהלר על סוג חדש של נתונים ע"ל מנללה (ת0ס61העסתטמת), שבה מפרטים ומצלינלם את כל המרכלבים של הסוג החדש. סוגי נתונים המוגדרים בדרך זו מזכירלם את הסוג א2001%, שמכיל רק שנל ערכים: מטת1 ו-58תגע. אם ננסה לתת למשתנה בוללאנל ערך שונה משנלים אלה, נקבל הודעת שגיאה. בצורה דומה נוכל לכתוב: צעדטדע ,57 ,בא ,א21580) =גבטטגנפגפאסצ מקצד ; (ד4תת1ם 57 בהצהרה ‏ זו קובעלם ששבעת הערכים הרשומלים שייכים ‏ לסוג | חדש שנקרא 51 ס+. ההצהרה העוקבת: טס נאסצ תגט קובעת, שבהמשך התכנית המשתנה 0%+ לוכל לקבל ע"* הצבה רק את אחד מן הערכלם הכלולים בסוג ג2451.400אסצ. אם מנסים לתת לו ערך אחר מקבלים הודעת שגלאה. אפשר לשלב את ההצהרות של הסוג והמשתנה ולכתוב: (1התז51 , 511501 , דמפדזוס ,ועדת ,51581 ,דא ,אסע15ת) :אסצ תגט 18 - נתאר בתרשלם את השלמוש הזה בהצהרת מקצך: הסדר בו רושמים את הערכים קובע את לחסם ההדד? במשך התכנית. ‏ מן הדוגמא הקודמת נובעים הלתחסלם הבאלם: ימתס > > תאמח > אסאפזת הערכלים אספזת עד 57148847 לכולים להופלע בכל מקום בתכנית, טם מותר לכתוב ערך שלם או בוללאנל: = בפקודת הצבה, = בביטול בוליאני, שנמצא בתוך אחת מן הפקודות אמזזא או [גתקעת, בהצהרת מערך, כאשר מפרטלם את תחום המצלינלם, = בפקודה 708 או 0458. אל אפשר להשתמש בסוג נתונלם זה בפקודות קלט/פלט. הערכים המוגדרלם בהצהרח 7198 לכולים להלות מלוחסלם למשתנה מאותו סוג ע"ל פקודת הצבה, אבל לא ע":< קרלאה מן החוץ בעזרת פקודת כ4חתא. למשל, אסור לכתוב (א0צ)פגתת ולספק כקלט ערך כמו זַא88פ5, כמו שאסור לקרוא כקלט ערך עבור משתנה בוללאני. כמו כן, אל אפטר לכתוב (אסצ)א/מעדאא ולצפות שהמחשב יציג את הערך "זָאמחפ", אפילו אם זה הערך הנוכחי של המשתנה 0%צ. עם זאת, לט לזכור טאפשר לכתוב את הערך של משתנה בוליאנ? בעזרת פקודתף א]8ד1תח. קלימות הרחבות של שפת פסקל, בהן ניתו לבצע פקודות קלט/פלט גם על משתנלם בוללאניים וגם על משתנים המתוארלם ע": מנללה. אפשר לכתוב הצהרת 128 שמסתמכת על הצהרת מפעיד קודמת, למשל: , צעדטדת ,דא5ד:58 , דאפ ,א1580ת) = 4ו(511 וס מקציך ; (513847 511881 , 01581 (% לום עבודה מלא *) , ד5ד ה . .אסחפדת = זזוסצ כאשר משתמשים בסוג נתונים אשר מתואר ע"ל מנייה אפשר להבלן את המשמעות של המשתנים המופלעים בתכנלת גם ללא הסבר נוסף, בתנאל שנותנלם להם שמות מתאלמלם. בתכנית הבאה השתמשנו במשתנלם המתוארים ע"ל מנללה. (דטפצטס , דטפאד) ג2דתדהאמת מטפדך אותססתת (1) בתכנלת זו מחשבלם את הכמות של פירות שונלם *) (2) טשנמכרו בארץ ואת הכמויות של כל סוג*? הפלרות | (3) (* שנמכרו בכל אחת מן הערים הגדולות. (4) | מקצ (5) ; (אזטא אד ,20218 )500 (6) , 54 תחתה ,דט מחד ,א 1 5טתמנ )=1סכנח (07 / ; (פססז5 , גדדז (8) פוט (9) 1.9 ;אד עס [צספטאג , סותתז ‏ צהתתג :ג (10) ; תתא ע0 [7סתע5]צגתתה :2 (11) תמדא עס [צססטות ] צהתתה :0 (12) )13( 1: 0; ו :1 (14) )15( 1 (* מלא מטרלצה 4 בערכים המתאלמלם *6 (16) 0 ותטגאג 70 א1מסטעגץ =:1 פסע (17) (* הסבר לפונקציה 082 ראה בסעלף 5.3.3 *) אזססת (18) ('הכצס שורה של"' ,1:2+(0820)458000 ,' ערכים') אתמדדתט (619 0ע 254002 20 אם .ןפת =:1 פסק (620 )) סגמת (21) אזסטת (22) ; פא (23) (* אפס את הווקטורים 2 ו-0 *) (24) 0 אצטגאג 70 אדאסטעקגץ =:1 תסד (25) =:[1]ת (26) 0 451002 70 4 41פטתסנ =:נ פסע (27) )28( 0]1[:= (* מצא את הסכומים הדרושלם *) (29) 0ע אצטגאה 70 אדמסטעגץ =:1 פסע (30) סע 45002 10 אמ ,זהפטתתנ =:נ תסע (31) אסא (32) )33( 9]1[1:= )34( 6]1[:= 60][+4]1,[ ; פא '/ (35) (* הצג את הפלט בצורה זו: ‏ באמצע, 5 בצד למלן, 6 למטה *) (36) ; (01פ7ט00) 2408 (37) 00 אתטגאג 10 א1מסטעגד =:1 תסע (38) את (39) סע 25002 10 אם,1הפטתת =:1 פסע (40) ;([4]1,1) מדתט (41) (2]1[:15) אתמדזתט (42) ; פא (43) ; דט (44) אזתזזת (45) 0 45002 70 אמתהפטתתנ =:7 תסע (46) ([60]1) מצנתח (47) .עאע (48) הסבר: (8)-(6) כותבים את שמות הערכים הקשורים עם כל אחת מן השורות והעמודות. (18)-(10) שימוש בסוגים שהוגדרו קודם בהצהרת המשתנלם. (17), (20), (25), (27), (30), (31), (38), (40), (46) כאשר עוברלם על טווחה הערכים של המשתנים, מציינים את הערך המלנלמל? של הטווח לפי שמו (00818ע13 או 4ת1הפטתע) ואת הערך המקסימלי לפל שמו (א:טגא או 502 ). הפקודה מתבצעת מן הערך הקטן עד הערך הגדול. 110 = הפלט של התכנלת נשאר ללא שלנו: על אף הטלנול בשלטת התכנות. 3 פונקצלות שניתן להפעיל על משתנלם 3 | 3235-ו ה בהמשך נציג מספר פונקצלות שניתן להפעיל על משתנלם מסוג המוגדר ע"? המטשתמש. א. הפונקצלה (ם)כפתס אפשר להשתמש בדרכלם החדשות שהוצגו להצהרת נתונים ע"* המשתמש, בכדל לכתוב גירסה חדשה של התכנית 8110ת0א1845: (% גירסה 2 של 10דת0א5א *) ; (דטפצטס , זטפאד) 2 אאתססתת (1) (% התכנית מחשבת את מספר השעות שהפועלים עבדו בלמים א'-ה' *) (2) אפצד | (3) (1581ווז01 , צמדטדת , ז5₪ד5 , דא58 ,אסא5דת) = 1האסצ = פאט ‏ (5 תת עס [אם 1 אסצ] צהתת :אסצ ,5107 (66 וצ :7 6 (7) ת6₪מעאד :1 (8) אזספת | (9) 0 דוס סד אסא5דת =:1 תסע (10) 0=: [ ]אסצ (11) 0 50 110 =:1 תסע (12) 0 641581 10 אסאפדת =:1 תסע (13) אזסעת (14) | ([1 ]51101 6 מ (15) [נ]1+5₪401[]אסצ =: [1]אסצ (16) ; פא (17) 00 641511 170 אסמפדת =:1 208 (18) ([נ]אסץ ,' --ה7דו ,1+(08)1) אתמקדתא (19) .אא (20) הסבר: (4)-(3) המשתמש ‏ מגדיר 0%4081? כסוג אטר נקבע על ידו. הוא אלנו משתמש באחד מסוג: הנתונים הסטנדרטלים. (10) המשתנה 1, טשסוגו [םתאסצ, *כול להשתנות בתוך תתום הערכים, אשר מפורטים בהצהרת 7+28: * בפקודה 0 מותר שלנול בין ערך קטן לערך גדול, = בפקודה 70א0כ2.. .208 מותר טלנול בין ערך גדול לערך קטן ממנו. (19) אי אפשר להצלג בפקודה א/1780תח ערכים סמוגדרלם ע"< המשתמש. למשל, אסור לכתוב (1)א/91187/. עוקפים אללוץ זה באמצעות הפונקציה (080)1, מלשון 81ת01ת0 - מסודר, אשר נותנת את המקום הלחס? של 1 ברשימה שבהת הוגדר. לפרלט הראשון ברטלמה מ?לחסים ערך 0, לפריט השני מייחסלם 1 וכן הלאה עד לפריט מספר א, שמליחסים לו ערך 1א. לכן, 1+(201ת0 *תן מספר מ-1 עד 7 שהוא מספר היום בשבוע. מספר השעות שהפועלים עבדו בלום 1 נלתן ע"ל הערך של [1]אסצ. 11 ב. הפונקצלה (ם)5006 פונקציה נוספת שאפטר להפעיל על סוגל נתונים המוגדרים ע"* המשתמש הלא (נ5000)0, מלסון ע50006550 - "הבא אחר?". הלא נותנת כתוצאה את האלבר שנמצא ברטלמה אחר? האלבר 1, למשל זא588=(א5000)21580. הביטו: (8000)08441581 לא מוגדר, מכיון שהאיבר ז084/%158 הוא האיבר האתרון ברשלמה. בדוגמא הקודמת נוכל להחללף את השורות (18)-(19) ע": הפקודות הבאות: אסעפנת =: | (1) 20 צעצטנת =>1 מתנצח | (2) את (63 ([1]אסצ ,' הרווט' ,1+(1)סתס) אפמעדתחט (4) ()58000 =:1 (65 פא (6) ;([0]אסצ 77777'0' 10+(1)ת0) אמענאח | (7) הבלטו: (8000)014%1881 לא מוגדר ולכן אל אפשר לכתוב בשורה (2): ךזאה=>1 מתדעא. אם כותבים כך, אפשר לגרום לשגלאה בביצוע הפעולה בשורה (5), כל הלא תצלב' ב-1 ערך (1א5000)0₪4%158 שאלנו מוגדר. לכן מבצעים את הלולאה רק עד שמקבלים צש1/1ת=:1. בסוף הביצוע האחרון של הלולאה, (5000)1 בטורה (5) להיה שווה ל-084/41581 ובשורה (7) נבצע את ה-אתע1זתח עבורו. בתכנילת הקודמת, במקום השורות (1)-(7) כתבנו: 0 1581 20 א1580ת =:71 תסע ; ([1]אסצ ,' ההווט' ,1 + (נ)סת0) אתמדדתו הערך הגבוה ביותר ש-1 מקבל בפקודת 208 זו הוא 084%1581, כמו שאפשר ללמוד מו התיאור של הפקודה שניתן בסעלף 4.4. לכן, לא תהלה חרלגה מעבר לגבולות ז אס שהוגדרו עבור המשתנה 1. ג. הפונקצלה (ם)פמתק פונקציה הפוכה ל-(50000)1 הלא (1)פתתע, מלשון ע666580סתתק - "צה שקודם". למשל, צמדטזת=(זח5זא)פעתע. | הבלטוי (אסא15ַת)כעת2 אינו מוגדר מכלון שהערך א21580 הוא הראשון ברשלמה ואין לפניו ערך אחר. נוכל להחליף טורות (18)-(19) בתכנלת 0112א0א445% בקטע הבא, שיתן את אותן תוצאות, אבל בסדר הפוך: / 01 =:1 (1) 0 1א =>1 מתזחח (2) אזסעת (3) ; ([1]אסץצ ,' הייוי' ,1+(1)כת0) אזמודתט (4) (2)פעתע =:1 (5) ; פא (6) ([]אסצ ,' ' (1+()082) אתמצנתא | (7) גם בקטע תכנית זה, כמו בתכנית של הפונקצלה (ם)5000, אפשר להחליף את הטורות (1)-(7) בפקודות אחרות: 20 ספת סזאאסכע 1581 := תסץק ;([1]אסץ ,' ' ,1 + (1)כתס) אתחזתט 112 ד. הפקודה 04288 לסנם מהדרלם אשר אלנם מאפשרלם לכתוב ערכים של משתנים המתוארים ע"ל מנלל אם יש צורך הצ ערכים אלה, נלתן להחללף את ה הבאות: 8, רג?ל?ם 1 שאלות אנססת (1) עס 1 0455 (2) ; ( 'א50דת' )פד ו 5 ( ' דזפדו0' ) אדדתזט 0 (5) ; פא (6) (1[:10:2] אסצ) אזמדזתא (7) ;את (8) (1) הכן הצהרות 198 עבור המקרלם הבאלם: *‏ למל השבוע. * צבע? הקשת. * רמות ההשכלה: גן, עממל, * מינים (זכר, ונקבה). = 12 חודשל השנה. תיכון, הנדסאל, אוניברסיטה. (2) הכן הצהרות 128 מסוג תת-תחום עבור המקרים הבאים: = מנקודת ההקפאה עד נקודת הרתלחה בפרנהללט. * שנים במאה הזאת. = ימל עבודה (תת-תחום של למל השבוע). (3) בהמשך כתובה תכנית אשר מקבלת קלט ומפלקה פלט. מה להלה הפלט שלה פי הקלט הנתון? ; (צטפנטס ,צטעא1) 101תטפא 4ותססת מקצך 102207 = >= אא 5 ;0207 ע0 [א1אאת540]צגתת = אססכ תג 50148: 00; ;0207 :א ; תעסמנאד :אגא , עדיו ,אגכג א1ספת 1 =:א. 448:= 0 ₪05 עסא מזזזחו אזסמ ; (א(508%) פגחת ה. שורה (19) שבתכנלת בפקודות על 13 =:41ג א =: [אגכה ] א פד ; פאע 0 אצאפעג 10 1 =:עמדהדנפנא פסד אזסאת אמזזיך אא > [7ד 15 עדא קד א [ ו אדו =:אגוו (עתך ד ,5:'ד' 1 [ ד ו ) 18 פא פא . פאו1 נתונל הקלט הם: 3 216 200 185 98 129 141 9 85 9% 3 8 95 100 120 3 (8) לפניך התכנלת הבאה. קרא אותה בעיון וענה על השאלות. ; (דטקץטס ,דטפאד) 8908 |נתססתק מקציך :0 ,01 , ט1₪חא) = תקדחץ תגט לצ :דדצגת [הצזס ;סאד 5 טס ה73פדוו, אנטג זא תהק 5פדא, זיסצגוס. אדוו 3 :0407 פס+ אנספת 0 דוע 10 ד = :11 תגקפדא 0 גדא 0 עסא אוו אזספת ג (01צס פסא) פגחת +00 פד =:01צתחס תהקפדא אשחד 1 = 07צ02-084א עך ג =:שדצגת דה צגזס אש 2 = 07צג02-01א קד =:דדצגת ה צזס אעזוד 3 =:07צ084 פסא עד =:77ץ4 דגצגחס שס דדצגת דהצגחס 59 ; נ+ד17א קדו =:אזט1א תתפדע :0 1+ ו =:011118 5248דון :מ 1 ְ% ד =:01כ ת3ת5דוע :כ פא ;פא א. איך הללת מסלים את התכנלת הזאת? ב. כלב נחשב לזקן אם גילו למעלה מ-7 שנלם, חתול נחשב לזקן אם גילו למעלה מ-5, ודג נחשב לזקן אם גילו למעלה משנתילם. יש להוסלף 1158 לתכנית את הפקודות הדרושות בכדל שתפיק גם את מספר הלות הבלת המוגדרות "צעלרות" ואת מספר חלות הבלת המוגדרות "זקנות". 2 תכניות (1) המכפלה הפנלמית של שנל ווקטורלם הלא: 13 ₪ ז"א [א]ת*[א] +...+ [2]פ*[4]2 + [4]1[*8]1. כתוב תכנית שמקבלת כקלט את:: * המספר א, אשר מללצג את מספר האלברים של שנל הווקטורים, * א האלברים של הווקטור הראשון, * א האלברים של הווקטור השנל. חשב והדפס את המכפלה הפנלמלת של שנל הווקטורים, אם נתון 100>א. (2) כתוב תכנית שקוראת את הערכלם בווקטור ומחליפה כל איבר בסכום של כל האיברים אשר קודמלם לו. (3) כתוב תכנלת שקוראת ווקטור לא מסודר של א ערכים שלמים, כאשר כמה מהם מופיעים לותר מפעם אחת. הפלט להיה: * אותו ווקטור באותו סדר, כאשר כל ערך מופלע בדיוק פעם אחת. * מספר 4 ששווה למספר האיברלם בווקטור החדש. | למשל, אם הווקטור המקורל הוא: 4 9 15 8 17 8 15 7 ווקטור הפלט יהיה: 4 9 17 8 15 7 והערך % יהלה 6. (4) נתונה מטריצה במבנה ריבוע קסם (8:6ט80 8816/), שבו סכום המספרים שווה בכל שורה, בכל עמודה ובכל אלכסון. 8 3 4 וש סצ 6 - 2 כתוב תכנלת שמקבלת כקלט את המלמדלם של הריבוע ואת הערכים שלו ובודקת אם הוא ריבוע קסם. אפשר להניח שהרלבוע קטן מ-10א10. (5) ריבוע לטינל הוא מערך טל א*א שמכליל מספרים, כך שמספר כלשהו לא מופיע יותר מפעם אחת בטורה או בעמודה. ריבוע זה עומד בדרישות אלו: 4 3 כ 4900 כ 4500 + 1 4 2 1 3 2 כתוב תכנית שבודקת אם מערך בגודל א*א (10>א) הוא רלבוע לטינל. (6) האחד ‏ בלנואר 1986 חל ביום רביעי. כתוב תכנית שמדפיסה לוח עבור השנה א+1986 (עבור כל א). הפלט לחודש מסוים צריך להיראות כך: 15 )7( 16 צפהטא ו 7 תת מז סו אטן אסא אפ 4 3 2 1 11 10 9 8 7 6 5 8 17 16 15 18 33 12 25 28 23 2 21 10 19 31 20 29 28 277 26 נגדיר שתי מטרלצות 4 ו-83: 8..... 8 3 > ו פך ₪ א 2 3 תייייי*2חה 1 אמל......נמל כתוב תכנית בכדי לבדוק אם מטרלצה 3 הלא סימטרלת, ז"א אם גְנְ"ן81 עבור ם > 1 5 1 ועבור ₪ 5% [ 5 1. הערה: הגדרה זו מתאימה רק למטרלצה רלבועית, ז"א למצב ת=ת. כתוב תכנלת בכדי למצוא את המכפלה 0 של 4 ו-2, שעבורה 1 מוגדר כך: (8) מוסד לגמללות חסדים מנסה למכן את חלוקת הכספים למשפחות. כתוב תכנית שתקבע את הסכום שמשפחה מקבלת על פי הטבלה הבאה. נתונל הקלט הם: 116 טבלה לקבלעת השכר, רמת ההכנסה של המשפחה, מספר הללדלם במשפחה. מספר הילדים עד 000 - 0 10 2,000 200 100 ועוד 4,000 לכל ילד נוסף - 10,000 4,000 0 ס2,0 10 0 ועוד 1,009 0 נ' - 20,000 | 1,000 | 2,800 | 4,800 0 1,020 0 ועוד 2,9 0 - 30,000 1000 10 2,020 4,000 0 ועוד 22,009 0 נ' - 40,000 | 800 10 2,000 2.00 0 ועוד 9 0 נ' - 50,000 00| 2,100 0 ועוד 99 0ללד ג' למעלה מ- 00 ו ודט (9) כפתוב תכנית שמקבלת כקלט נתונים על כמות הגשם הממוצעת בכל ח ומפיקה כפלט: * כמות גשם ממוצעת בשנה, על פלי משקל שווה לכל חודש, * החודש הגשום ביותר, * החודש השנל הגשום בלותר. * החודש שבו ירדה כמות הגשם הקטנה בלותר, ההפרשים בלין כמולות הגשם שירדו בכל חודש וכמות הגשם הממוצעת בכל החודשים. השתמש בהצהרת 28צ1 להגדרת התחודשלם. (10) קיימת הנחה שלש לחס בין גילו של אדם, לבין מספר הלמים שהוא חולה בשנה. במפעל מסוים נערך רלשום של קבוצת עובדלם, כפי שמתועד בטבלה הבאה: גיל (א): 22 34 27 25 21 24 8 22 6 2 למי מחלה (צ): 2 0 1 2 0 4 3 0 4 6 כתוב תכנית כדי לבדוק אם לש קשר בין המשתנים האלה ע"* חישוב מקדם המלתאם שמוגדר כך: א א א 0 ((ג)ץ 5 + [ (1)א 2 + - (1)ץ * (1)אָ תע א 1=1 =1 11 א א א א (ך 3((2)צ 5) - 1(2)א 8] א + ([ 3((2)אָ 6 - 1(2)א 8] א ) 11 11 1=1 11 א שווה למספר התצפיות (בדוגמא זו - 10), (צ)א הוא הערך של תצפית 1 של משתנה א ו-(1)צ הוא הערך של תצפית 1 של משתנה צ. (11) מטווק רוצה לעשות סיכום של המכלרות במשך השנה לפל פרלטלם וחודשל מכירה. כתוב תכנלת שמקבלת כקלט מספר פרלט, כמות שנמכרה וחודש המכירה ומפיקה דוה, כפי שניתן בדוגמא.. : הנתונים ממוללנים לפל מספר פרלט, אבל בתוך כל קבוצת פרלט אין מלון לפכ חודטל המכלרה ויש לקחת עובדה זו בחשבון בעת התכנות. קלט לדוגמא מוצג להלן: : ' מספר פריט כמות חודט 100 1000 ₪ 100 70,000 2 100 10 4 100 > 22,000 3 7 2,000 3 7 0 4 7 00 3 7 2,000 10 27 | 48,000 5 17 הפלט ליראה כך (אפשר להצלג את הנתונים לכל פרלט בטורה אחת): מספר פריט ינבואר פברואר | מרפס אפריל | מאל לונל | יולל 100 0 0 32,000 | 15,000 | 0 0 0 27 0 0 0 56,000 248,000 0 0 אוגוסט ספטמבר אוקטובר נובמבר | דצמבר 0 0 0 0 0 0 0 2,000 0 0 (12) בתרגיל זה נתונל הקלט הם הצלונלים של 8 סטודנטים ב-5 בחינות. כתוב תכנית שתצלג בטבלה את המלדע הבא: * ציון של כל סטודנט בכל מבחן, * צלון ממוצע של כל סטודנט בכל המבחנים, *‏ ציון ממוצע של הסטודנטים עבור כל אחת מ-5 הבחינות, * ציון ממוצע של כל הסטודנטים בכל הבחלנות. בתכנון הטבלה קבע את השורות לסטודנטים ואת העמודות - לבחינות. [8 פרק 6 נתוניסםס לא מספריים 1 משתנים מסוג תו המשתנלם אשר עסקנוו בהם עד עתה השתללכו לאחד משלשה סוגלם של נתונלם סטנדרטיים אשר מוגדרלם בפסקל, או לסוגי נתונים נוספים שהוצהרו ע"? המתכנת בהצהרת 28צ1 או בהצהרת תג/. שלטת הסוגים הסטנדרטיים הם 7868א1, תגתת ו-א80008. סוג סטנדרטי רביעל הוא - "תו", או 0842 (מלשון ע828066ת0), אשר מיועד לילצוג תווים כלשהם ולאו דווקא ערכים מספריים. משתנה מסוג תו לכול להכיל תו אחד בלבד. תו הוא סמל כלשהו כמו אות, ספרה, סלמן פלסוק או סימן מוגדר אתר, אשר נלתן להצלגו בצג או להדפיסו. במחשב התו מלוצג ע"ל צלרוף כלשהו של סיבלות, כפל שנראה בהמשך. אפשר למשל להשוות סדרות של תוולם זו לזו, אך אל אפשר לעשות בהן פעולות חשבוניות, גם אם הן מורכבות מתווים שכל אחד מהם הוא ספרה. הסיבה לכך היא העובדה שצורת הליצוג של מספרים לביצוע חישובים שונה מצורת היללצוג של תוולם. 1 שלטות קידוד של תווים (*) בנספה הוסבר שמספר שלם מוחזק כמספר בינרי בשנלים או בארבעה בתים ושמספר ממשל מוחזק בצורת מנטלסה ומעריך ב-4 בתים או לותר. המחשב מחזלק תווים בזיכרון בקוד של 8 סיביות. הקודים הנפוצים הלום הם: 86216 ו-9011. א. 220210 (0066 886מ08ע502ת1 81ת2661 4 עעהת21 0666ם66א₪) בקוד זה משתמשים ב-8 סיביות בכד?ל לייצג 28=256 תווים שונים. ה?יצוג של תו מחולק לשנל חלקים: אלזור (6ב20) וספרה (21815), אשר כל אחד מהם מורכב מ-4 סיביות. 4 סלביות 4 סלביות ספרה איזור 1|9 מכיון שאפשר לילצג כל 4 סיביות כספרה הקסדצלמלית אחת, נקבע לכל תו קוד בן שתל ספרות הקסדצימליות. הטבלה הבאה מדגלימה את הקוד ההקסדצלמל? עבור הספרות והאותיות. גם לשאר הסימנלם לש ללצוג מתאלם. תוולם ללצוג 0 עד 9 0 עד 9ע 4 --1 1 -- 09 נ--ת 1 -- 9כ 2-5 2 -- 89 כדל לללצג מספר אין צורך להחזיק את 4 סלביות השמאליות בלותר (האלזור), כל הן שוות לכל הספרות. מכאן, שאפשר לשמור נתונים מספרלים במבנה עשרונל ארוז ( [8מ2861 240866) כלומר, ב-4 סיביות ולא ב-8 סיבלות, אשר דרוטות למבנה עשרונ? מלא. לשם הדפסה או הצגה יש להפוך מבנה זה למבנה עשרוני מלא ולבצע פעולה הפוכה אשר קרויה א460%פאש. שלטת 880216 מקובלת בעיקר במחשבים מתוצרת אפד. ב. 45011 (86ת8ת0ת56מ1 מ08%10ת0+ת1 ע0ס+ 0066 55820826 מ108ע6ת12). קוד זה פותח בחסות מכון התקנלם בארה"ב בשלתוף פעולה עם כמה לצרנל מחשבים. הקוד הוא בן 7 סיביות ולכן הוא לכול לילצג 27=128 תווים שונים. הסיבית הטמלנית בכל בית מיועדת לביקורת תקלנות. בהתאם לדרלישות החומרה נקבע אם מספר הסיביות "1" ("דלוק"-א0) בכל בית להלה זוגל (צ28218 תשע₪) או אי-זוגל (ץ78215 064). בהתאם לכך תפקיד הסיבית השמלנית הוא להשלים את מספר הסיביות כנדרש. אם בעת קרלאת הנתונלם המחשב מגלה שמספר הסלבלות במצב "1" שונה מן הדרישה, הוא מודיע על שגיאה בהעברת הנתונלים. לדוגמא, נתון תו שהסיביות שלו הן 1101110 ומספר הסליביות "1" הוא אל-צוגל. במחשב בעל ביקורת של אל-זוגלות, תהילה הסיבית השמלנלת ‏ "0" ובמחשב בעל ביקורת טל צוגיות תהיה הספרה השמלנית "1", כדי שמספר ספרות "1" בתו להלה צוגל. הייצוג של כל תו בִּ-45011 הוא בשלושה חלקים: ספרה בלנרלת 0 או 1 ואחריה שתי ספרות אוקטליות, שכל אחת מהן מללצגת 3 סיביות. ספרה ספרה 0 אוקטלית אוקטלית 1 הייצוג של הספרות ב-245011 הלנו בין הערכים האוקטללים 060 ו-071. הללצוג של האותיות הוא בין 101 לבין 132. נתאר בטבלה את התוולם של האלפבית האנגלי ואת תווי הספרות ולמטה מכל תו: '*. הקוד שלו ב-880210 (בייצוג הקסדצימלי). * / הערך הדצימלי של קוד ₪50210. ' הקוד שלו ב-45011 (בללצוג אוקטלל). הערך הדצימלי טל קוד 425011. 10 נ ננננט מנטטם 8 5 55 5 50 מש |[ ו של קוד 50216 |193 4 |199|198|197|196|195 0 212211 הערך הדצלמלל טל קוד 245011 5 07 0 |71 |72 3 |74 |75 |76 |77 ונ ננ םטט ט טוט | ]מ 5 שי | ו לש מב ב של קוד ₪806 |213 4 |217|216 | 226| 227 8 |233|232|231|230|229 שו ה 0 0 הערך הדצלמלל של קוד 458011 |78 |79 1 [82 |83 |84 |85 7 |88 מטמנטמטנם מפפטפםט הערך הדצלמלל של קוד 380216 0 243|242|241 6 |245| 246| 247 | 288 | 2849 ו ה 0 הערך הדצלמלל של קוד 49011 8 |49 |50 |51 2 [53 |54 |55 |56 |57 ס וו 007 11 2 הגדרת תוולם בתכנלת (*) כדָל להגדלר בתכנלת קבוע מסוג 08.8 חליבים להקיף אותו בגרשים. למשל, אם המשתנה 2 הוא מסוג ת014, מותר לתת לו ערך התחלת? טל 7 בפקודת ההצבה 'ְ'=:4. לדוגמא, קטע תכנית: תגצ ,תס :2 ; ת08עעאז :2 אזסאת ;'7' =:4 4 =:3 יש הבדל בין התוכן של המשתנים 1 ו-5 לאחר פקודות הצבה אלו. ב-2 נקבל בקוד את הייצוג של התו ‏ 7: 7ע בשיטת 880216, או 067 בשלטת 25011. ב-5 נקבל את היילצוג הבלנרל של המספר 7: 00000111 או 07 בייצוג הקסדצלמלל. אפשר לללחס שנל ערכים מספרלים זה לזה בעזרת סמל מתאים כד? לקבל תנאל, שהוא בלטול בוליאני. למשל, לאחר בלצוע קטע התכנית הקודם, לתנאי 8>7 להלה ערך 4058ע. גם משתנים לא מספרלים לכולים להשתתף בבלטול בוללאנל, אך יש לזכור שמשתמשים להשוואה בקוד הללצוגי שלהם. למשל, לתנאי '4>'9 יש ערך מטתך לאחר ביצוע הקטע הקודם, בו הצבנו '7' ל-2. הללצוג של '7' ב-80210ע הוא 77 וערכו העשרונל הוא 247. הילצוג של '9' ב- 880210 הוא 9ע, שערכו העשרונל 9. לכן הערך '7' קטן מ-'9'. נניה שמציבלם את התו "1" במשתנה , כלומר '' =: 2. הערך של התנאי '46'0 הוא 4158ע, כי הילצוג של '' אלנו קטן מן הליצוג של '0', הן ב-₪80216 והן ב-45011. עתה נניח שמצלבים '1;='7. מהו הערך של התנא:? '4>'7 ? התשובה לשאלה זו מותפנית בשלטת הקלדוד במחשב: א. בשלטת ₪8₪0216, הליצוג של '7' הוא 7ע (ערך עשרוני 247) והייצוג של 'ץךָ' הוא 23 (ערך עשרונל 7). לכן, הערך של '7' לותר גדול והתנא: '4>'7 שווה ל-72688. : ב. בשלטת 45011, הילצוג של '7' הוא 067 (55) והייצוג של '7' הוא 128 (84) ולכן '4>'1 שווה ל-ששתץ. אפטר להיווכת מדוגמא זו שהסדר הלחסי של התווים שונה בשלטות ייצוג שונות. סדר זה נקרא סדר המלון (08מ586006 8ת00118%1). מן הראול לצללן שבכל סדר מלון נשמר לחס הגליוני, כלומר סדר מלון עולה בין הספרות לבלן עצמן ובין האותיות לבין עצמו. השינויים העיקריים הם בהשוואת תוולם מקבוצות שונות כמו למשל, ספרה עם אות, או תו מלוחד עם ספרה וכדומה. בשלטת 880210 הערכים של המספרלם גדולים מערכי האותלות ובשיטת 45011 ערכ? המספרים קטנים מערכל האותיות. לפעמים חשוב לדעת את הערך העשרונ? של תו כלשהו במחשב, או להפוך ערך מספרל לתו. קלימות שתי פונקצלות שמסייעות בכך: 122 א. הפונקציה 082 נותנת את הערך העשרוני של התו שטרשום כארגומנט של אותה פונקצילה. למשל, (2)712%ת0 הוא הערך העשרונל של התו שנמצא במשתנה /ג7. לדוגמא, 082)'2'(=76 במחשב הפועל ב-45011. ב. הפונקציה ההופכלת הלא 088, אשר נותנת את התו שהערך העשרונל שלוו שווה לפרמטר של 088. למשל, (088)76 הוא התו 6. הערך העשרוני של הפרמטר של לא יכול לעלות על 127 במחשב 25011, או על 255 במחשב 880216. הפונקציות 08% ו-2ת02 הן פונקצלות הפוכות ולכן ניתן לכתוב: א. טג = ((צגד)פתס)תח0 ולדוגמא, ''1' = (088)076=('' )ת )אס - תא = ((חגק5דוא)6)פפס ולדוגמא, 6 = ('082)'0=( (080)76)כ08 נשתמש בפונקצלה 08% כדל להדגים הדפסה של כל התווים שאפשר לליצג במחשב ששיטת הליצוג שלו היא 45011. אפשר להדפיס רק את התווים שערכם העשרוני בין 2 לבלן 127, כל התווים שערכם קטן מ-32 אינם מלועדים לייצוג אלא לתקשורת בין המחשב והמסוף. הפקודות להדפסה: 0 127 70 1:32 תסע ((005)1 ,7':4' ,1) אתמדזתט קטע מן הפלט ללראה כך: + 3 ]== ₪ ==] 3 קרלאה, כתלבה ועיבוד של תוולם ננלה שנתונלם שלשה משפטים. לדוע שהראשון, השלישל והחמישל הם שאלות, השנל, הרביע?ל והשישי הם תטובות. אחרל המלה האחרונה בכל משפט יש נקודה או שלש מעט26% 08771886 (במסוף, הכוונה היא למקש שכתוב עללו מצט6%ת ושלוצר תו שמסמן סוף שורת קלט). התכנית צריכה לבצע שלוש פעולות: א. להדפלס כל שורה של קלט. ב. להוסלף סילמן שאלה לשאלות וסימן קריאה לתשובות. ג. לספור את מספר התווים בכל שורה (בל" הנקודה בסוף המשפט, ‏ אם לש) ולהדפיס את התוצאה. רווחים לפנל המשפט לא לודפסו ולא *כללו בחישוב אורך המשפט. ; (01פעט0 , צטעאד) אדץ154א אגתססתת (1) 051 (2) ;'.' = גפטאאא (3) 13 ;'?' = בח אגות5 (8) ;'' = גזתא אגא514 (5) (* הסלמן 7 מלועד לציון של תו רלק בלבד *) = תס))/חת (6) פאצט (67 ,תתסתנא : 1 ,מאסא (8) ;תס : שעג (69) אזסעת (6)10 (* לש שש שורות *) 0 6 170 1:=1 אסק (11) (* קריאת משפט *) אזססת (12) 0= : מאסא (13) ('קרא את המשפט') אְמדדתח (14) דחקתת (15) (* מסלקים את הרווחים המלותרים *) (טג1) סגתחת (16) זס תת <> טגד מדדאטס (17) 0 (אזסע דסא) פאג (בגפטאתא <> טגד) מנדאח (18) את (19) ; 1+תאס =:מאסע (20) ; (ט1) מדדתט (21) (טגד) פגאת (22) ו ; פא (23) (* כותבים את.התו האחרון *) ,סטאמא <> עטגץ חך (28) אד (25) אזסחת (26) ; 5+1אס =:מאסו (27) (צג7) מודתט (28) ; פא (29) אפעד (0220)1 עד (30) (4זמזז5 אגא51) אזע וח (31) כ (32) ; (4דתפא אגא51) אזפדדתט (33) (('מספר התוולים בשורה:"7' ,5א0א) אממדדתט (34) אזסאתת (35) פא (36) .פא (37) הסבר: (6)-(3) מגדירים 4 קבועים מסוג 0848 ומצלבים בהם ערכים. האורך של קבוע מסוג 01.45 בהצהרת 851א00, או של משתנה מסוג 018 בפקודת השמה, חליב להלות אחד (1). תו צרלך להופיע בתכנלת בתוך גרשים בודדים. אם כותבלם בפקודת הצבה ג=:/11 כאשר 2 אלנו מוקף בגרשלם, המשמעות הלא ש-4 הוא שמו של משתנה אחר, אשר מתכוונים להציב את ערכו ב-10. כדל להציב את התו 4 עצמו יש לתחום אותו בגרשים. מבחלנת המחשב, רווה הוא תו ככל תו אחר ונלתן להגדלר אותו בשם, כמו שעטשינו בפקודה (6). אם הערך שרוצים לתת למשתנה (או לקבוע) הוא גרש, כופלים אותו בתוך הגרשים. נכתוב למשל ''''=:10 כדי להציב ב-/ג7 את הערך של גרש. 14 (16) בכל פעם שמופעלת הפקודה (/4ג42)1חת המחשב קורא את התו הבא בשורת הקלט במסך ולא *ותר. קרלאה זו שונה מקרלאת מספרים שלמלם או ממשללם. בקרלאת מספר, המחשב מדלג על כל הרווחלם בשורה עד שהוא מוצא מספר שלם או ממש וקולט את כל התווים אשר שליכלם לאותו מספר. הזלהוי של סוף המספר הוא פשוס, כל לאחר הספרה האחרונה של המספר לש תו כלשהו אשר אלנו לכול להלות שייך לו, למשל אות (חוץ מ-5, אשר מללצג אקספוננט), רווה, או סימן מלוחד. בסוג הנתונים ת084, רוות הוא תו הוקל. לכן אילן צורך להמשלך בסריקה לאחר קרלאת הת הראשון, ולא חשוב מה ערכו. כאשר קוראים נתונלם מן החוץ כותבים את התו במסך בל גרשים, אע"פ שבהגדרה הפנלמית בתכנית חללבים לכתוב גרשלם. הם נדרשילם כד?ל להבדיל בין תו כערך קבוע ותו כמשתנה. אבל בקרלאה מן החוץ, האפשרות הלחידה היא שקוראלם תו כערך קבוע ולכן אין צורך בגרשיים. בסוג? הנתונלם מגתת ו-8ת0ש?א1 אין הבדל בין הצגה פנימית בתכנית לבין הצגה חלצונלת בעת הקלט, כל בכל מקרה עוסקילם בערך קבוע. (17)-(15) כדי לסלק תוול רווח מובילים, יוצרים לולאה שקוראת תווים מבלי לטפל בהם. כשהיא נתקלת בתו שונה מרווח הלא מחזיקה בו לטלפול בהמשד. (23)-(18) איך נדע מתל מסתיימת קרלאת שורה? אם המשפט מסתיים בנקודה, ערכו של ץד יהיה נקודה ונוכל לבדוק זאת. אם המשפט מסתילם ב-1886תע08 מע23600, נוכל להעזר בפונקציה בוליאנלת מלוחדת, (טעא1)את0ע₪, ראשי תיבות עבור 11868 +0 6מע: סוף שורה. ערכה תמלד 88גע, חוץ מאשר אתרל קרלאת התו שלפנל םתעטם6ת 1886ע08, כאשר ערכה הופך ל-אשתך. ברילרת המחדל עבור הארגומנט של א01ע הלא עטקא1 ולכן נהוג לא לכתוב אותו במפורש. כאשר התוכנלת מבצעת (ש74)עגמת, לאחר שקראה את התו האחרון בשורה, /71 מקבל ערך של "רווח" כאילו צורף תו רוותה לשורת הקלט והפונקציה א/20 תחזור להלות 22158. בפעם הבאה כאשר תתבצע הפקודה (צטגץ)תפאפת נקבל כקלט את התו הראשון בשורה הבאה. סימן "סוף שורה" מוגדר במסוף ע"י התו םעט60ת 08221888 ולא ע"ל החלוקה הפיסית לשורות. לכן, שורה לוגלת אחת לכולה להשתרע על פנל כמה שורות פיסלות, אם לא נכלל בה מעטס6ת 1886:ע08. (24) עד לפקודה זו התכנלת קראה את התו האחרון בשורה, אבל לא כתבה אותו. אם הת הוא נקודה אין צורך לכותבו, שהר? מחליפלם אותו בסימו שאלה או בסלמן קריאה. אבל אם הוא תו אחר והלולאה הופסקה כל המשפט הסתילם ב-תעט260 21886ת08, צריך לכתוב אותו וגם להוסיף 1 למונה. (32)-(29) משתמשים בפונקציה בוליאנית שמקבלת כארגומנט מספר שלם ומחזירה את הערך הבוליאנ? 1208 אם המספר הוא אל?-זוג? (022), אחרת הלא מחזלרה 8. רוצלם להוסיף סימן שאלה רק במשפטלם האל-זוג?ים ולכן עושים זאת כאשר (022)1 שווה ל-08ע1, כלומר במשפט אי-זוגי. כאשר (022)1 שווה ל-14[,58 נמצאים במשפט זוגי ולכן מוסיפים סימן קרלאה. (35) אם משפט מסתלים בנקודה, לש להפסלק את הקרלאה גם באמצע השורה, כאטר סלמןו סוף שורה טרם נקרא. ‏ גם אם הלולאה הופסקה כתוצאה מהפעלה של הפונקציה א₪01, סלמן סוף השורה טרם נקרא. כדל להתחלל את הקרלאה מחדש 15 בשורה הבאה, משתמשלם בפקודה א421מ2 אשר מקדמת את הסמן לתחילת השורה הבאה. פקודה זו לא נחוצה, כל התוכנית ממללא מדלגת על הרווחים המובילים במשפט. לכן, אפללו אם הסמן היה מכוון אל אמצע השורה הקודמת, נדלג על כל הרוותים בסוף אותה שורה ונגיע לאותיות הראשונות בשורה הבאה. פקודה זו נרשמה רק "למען הסדר הטוב". 08 טטלפול בתווים - בעללת הפללנדרום פלינדרום (62008ת7811) הוא כלנול למשפט, אשר אפשר לקרוא אותו משנל הכיוונים ולקבל את אותו התוכן, בתנאי שמתייחתסלם רק לאותיות שלו ומתעלמלם מרווחים ומתווי פלסוק. למשל, המשפט: "224% א%'1 ,אגכגא" הוא פלינדרום. התוכנית הבאה קובעת אם משפט שאורכו עד 100 תוולם ושמסתיים בנקודה הוא פלינדרום. ; (1שפעטס , עטפאד) ₪אסתפא1 גת אגתססתת (1) תאצ (2) תס [1..100]צגתתג :07 (3) :0006 ,1 (4) 0% ,1 (5) ;תס :טגך (6) אזסתת (7) ;('הקש את המשפט לבדלקה. כתוב נקודה בסופו.') א[מדדתט (8) :ד (9) דמקפסת (10) ; (טג1) פאחת (11) אש ('2' => טגד) פאג ('ג' =< שג9) עד (12) את (13) 1 (18) טג =:[ד]ץס (15) פא (16) ;'' = טגץ מדצנאט (17) 0 (18) (* בדוק אם התוכן של המערך 01 מהווה מאסתפא.ז1? *) ל 1 (20 0ע ([01]1[=01]1) פאה (1>1) מ דחו (21) אזסעת (22) 1:=1+1 (23) 1:1 (24) ; פא (25) 0 אסעתס 10 1=:א תסק (26) .([א]01) מדדתט (27) אש (1=<נ) עד (28) ('718') מדדתט (29) ₪ (30) (('ד''א15י') מדדתט (31) ( 'פאסתפא1גע 74 ') אהמדדתו (32) .פא | (33) 16 הרצות לדוגמא: הקש את המשפט לבדלקה. כתוב נקודה בסופו. . זזאאות מאסתפאדעגע 4 15 תגאאגת הקש את המשפט לבדיקה. כתוב נקודה בסופו. 1 עסתפא גת 2 1'א5ד 01עמ480 הסבר: (17)-(10) קרלאת המשפט לתוך המערך 01. מכניסים למערך אותלות בלבד. (18) מספר התווים שמכניסים למערך מאותסן ב-808ת0. (25)-(20) משווים את האות הראשונה אל האות האחרונה. אם אלן שלולון, מפסלקים את ההשוואה. אם הן שוות, משוולם את האות השנליה אל השנליה מך הסוף וכן הלאה. ההשוואה תפסק בגלל אחת מן הסלבות הבאות: א. כל אות מתחללת המשפט שווה לכל אות במקום מקביל מסוף המשפט. הלולאה מפסלקה כאטשר מסללמלם את ההשוואה של החצל הראשון של המשפט אל החצל הסבל. : ב. ‏ יש אי-שיולון בלן אחת מן האותיות מתחילת המשפט לבין האות המקבילה מסוף המשפט, ז"א פגשנו בזוג של אותיות אשר שונות זו מזו. (31)-(28) אם היציאה מן הלולאה הלא בגלל סלבה (א), אז המשפט הוא פלינדרום ונכתוב ‏ 15. אם לוצאלם מן הלולאה בגלל הסלבה (ב), אז המשפט אינו פלינדרום ונכתוב 1'א15. הלות והמלה 1'א15 נמצאת בתוך גרשים, צריך לכתוב את הגרש של %'א15 פעמיים (כלומר ''א15), כדי שהוא לא *תקבל כסוף המחרוזת. 2 הפקודות פגחת ן-אזדתא קריאת תווים מן המסוף נעשלת תו אחר תו, פרט לקלט אשר מוגדר כמספר שלם או ממשל. במקרה זה הפקודה עגמת יודעת להמטיך ולקרוא תוולם (שהם ספרות המספר) עד שהיא נתקלת ברווח או פסלק ומפענחת תווים אלה כמספר בן ספרות אחדות. מן הראוי להדגיש שהכוונה כאן הלא לקרלאת נתונים מתוך מאגר הקלט שבזיכרון אל המשתנים של התוכנלת. תהליך הקרלאה הפלסל נעשה בדרך שונה במסופים מסוגים שונים. יש מסופים הפועלילם בשלטת ק50פ-%ל5%68 ומזינים את הזיכרון בתווים בודדים בכל הקשה. לעומתם יש מסופים הפועלים בשלטת םמ502866 11גע, אשר מזלנים לז:כרון את כל אשר הוקש מאז ה-מעט66( 21886ע08, או עססתת. כדי לדמות את הפקודה 222 בקרלאת מספרים שלמלם, מוצגת תכנלת שקוראת מספר כסדרה של תווים ומתרגמת אותו למספר עשרונל המורכב מאותה סדרה של תווים. 127 (1שעצטס , צטפאד) גדתא אתססתע (1) )2( 3 :טג (63 התמדא :תדו (4) את (5) ; :ד (66 ; (4%ד) פגאת (07 0 '"' <>טגץ מתדאט (8) אזסעת (9) ;('00'0ת0 - (צג7)כת0 + 109415228 =:תגע5דא (10) (צגי') פגחת (11) ; פא (12) (159425) אזפדדתט (613 > . את (14) הסבר: (10) מוצאים את הערך העשרונל של התו שנקרא. למשל, אם התו הוא הספרה ‏ 5, ערכו העשרונ" בשלטת 25011 הוא 53. מפחיתים ממנו את ('820)'0א08, שערכו העשרונל הוא 48. הערך החדש של 15248 הוא .10*0+53-48=5‏ אם התו שקוראלם אתרלו הוא 9, שערכו העשרוני הוא 57 ב-45011, הערך החדש של תא יהלה: 10*5+57-48=59. תהליך זה נמשך עד שמגלעים לתו רוות. (13) לבדלקת ההצלחה של התהליך מדפילסלם את המשתנה 1528 כמספר שלם. לעתים קרובות מוסלפים פסיק בתוך תוול המספר, למשל 5,817. הפקודה פגתת אינה יכולה לקרוא מספר שיש בו סלמן הפרדה כזה ותקבל אותו כשנל מספרים: 5 ו-817. אפשר לערוך מספר תלקונים בתכנילת זו כדל שתוכל לקלוט מספר המלוצג עם סלמני הפרדה בתוכו. לא נעסוק בכך כאן אלא באחד מהתרגילים שבסוף הפרק. בזמן כתיבה מתורגם כל מספר מצורת ייצוג בינרית לצורת ליצוג בתוולם. הפלט נשלח למסוף כתווילם בודדים בקוד המתאלם לסוג המסוף, כאשר פועללם במסוף ססספ-%?558. במסוף מסוג ת66ע11-5602טע, הפלט נשלח בשדות, בשורות או במסך שלם בהתאם לעניין. התכנית הבאה מדמה את פעולת הפקודה מזַזַאא: 18 ; (צטעדטס ‏ דטעא1) גע1דא אגתססתת. (61 פאגט (2) תתא :2 ,7 תגק5דא (3) ;תס תס [1..10]צגתתג :מסגסגא (4) אנסחת (5) ;('הקש מספר') אתצדתט (6) ; (15808א) אזסגעת (07) = (8) 0 (1>=10) פאה (45><0ע5דא) מתדאח ‏ . (9) אזסת (10) ;(10 ססא 15248א+('0')כתס) 68 =:[1]עסגתגא (11) 0 שדכ 48ק15א =:ת1קפדא (12) 41 (13) ; פא (14) 1 (15) 0 1 סצאאסע 1:=1 תסע (16) ([1]אסגתא) פדזתח (17) .סאת (18) הסבר: (7) המספר שנקרא בפקודה גת מוחזק כערך בלנרל. (11) מוסיפלם לספרה הלמנית ביותר (10 פסא תג%152) את המספר 48 שהוא הערר של '0' ב-45011. למשל, אם הספרה הימנלת במספר היא 5 נקבל (018)53, כאשר 53 הוא הערך העשרונל של קוד 25011 עבור התו '5'. (12) מורלדים את הספרה הלמנלת ביותר מן המספר ומוסלפים ‏ 1 לאינדקס ‏ 1 בטורה (13). (13)-(11) ממשלכים לבצע פקודות אלו עד שמסיימלם את הטלפול בכל הספרות סמרכיבות את המספר הנתון (ז"א עד ש: 8=0ג1152). (16) חללבים להתחלל להדפיס מן הספרה המשמעותית בלותר ולכן מתחילים ממקום 1 במערך ולורדים עד למקום 1. הפלט עבור מספר שלם הוא סדרה של ספרות. לעתים רוצים להוסיף פסלק בכדל לצלין חלוקת הספרות לטלטות ולכתוב למשל 4,729 במקום 4729. לשם כךָ צרלך לוותר על השלמוש בפקודה מעזתח עבור מספר ולהשתמש בתכנית הדומה לתכנלית לזא שהצגנו למעלה. במקום המתאלם מדפיסים פסלק. 3 מחרוזות סוג הנתונלם תס מלועד לטיפול בתווים נפרדים, אך רוב המלדע האלפבלתי ערוך במבנה מלים, או משפטים. השם הכלל: לקבוצה של תווים כלשהם הוא מחרוזת (אַת1ע5%). אפשר להגדלר מחרוזת כמערך של תווים כדל שאפשר :היה לפנות אל כולה בשם אחד - השם של המערך. למשל, שפצך ;תס ע0 [1..25] צגתתג = סאזַא7פ תג ;6 :2מאגא , [מאאא לאחר ההגדרה, אפטר לבצע פעולות שונות על מערכים אלו. 1 פעולות במחרוזות תווים א. קרלאה של נתונלם אל מחרוזת 44181א: 0 25 70 1:=1 תסע ; ([1]1טאגא) כגמת ; א |59 ב. ג. ד. 100 העברה של תווים ממחרוזת 8₪1א אל מחרוזת 482אא: 0 25 70 1:=1 תסע =:[2]1אאאא הדפסה של מחרוזת 1מאגא: 0 25 70 1:=1 פסעל :([₪1]1אבא) מודתט ; אזמ1ע השוואה של מחרוזת 481א אל מחרוזת 2איאא: תו נחשב לקטן או גדול בערכו מתו אחר לפי מקומו בסדר המיון במחשב. בהטשוואה של מחרוצות, המחרוזת הראשונה נחשבת כקטנה יותר בערכה מן השנליה, אם התו הראשון שלה קטן מן התו הראשון של חברתה. לעומת זאת, אם התו הראשון גדול לותר במחרוצת הראשונה, הלא נחשבת גדולה מחברתה. אם התו הראשון טשווה בשתל המחרוזות, משוולם את התו השנל ואם גם הוא שווה, ממשלכים לבדוק עד שמגיעים להכרעה. אם מסיימים את ההשוואה בלל להגיע להכרעה, המחרוזות נחשבות שוות. לכן ניתןו להשוות את ₪1/א עם 4182א ע"? הפקודות הבאות: 2=:ך :א :0 דאמקמת אוד [2]1עאאא > [1]1מאגא חד פעתץ =:אגדאא ו אמצ [2]1מאגא<[1] נפאגא דד =:04220 1 =:ך 2 08 (64202 תס אגנא) מדזאט אמח אגזגא עד ('1שאגא קטן מ-2מאגא') אזמדתט לו אמח 6000 עד ('1פוגא גדול מ-₪2אהא') אמתדדוט כו ;('1אאוא שווה ל-2שאגא') אזתדזוחט הנול וו פעולות במחרוזות שלמות: לותר נוח לעבוד עם המחרוזת ₪01עא ו-82א בלחידות שלמות ולא כמערכלם. לשם כך, לש לכתוב במקום א' עד ד' שהופיעו למעלה את הפקודות הבאות: ((נפאאא) אזפגתת (1)* 1 =:2מגא (2)* ((1עאא) אתתדזת (3)* אמעחד 2מואא > וגא 1 (2)* ('1פאגא קטן מ-2מאגא') אזמדדאט ₪ אחוד 2מאגא < [פאגא חד ('נמאגא גדול מ-2מאגא') אזמדדאט מפ ('1פאגא טשווה ל-2מאגא') אזמדדת רוב המהדרלם מאפשרים לכתוב את הפקודות (2), (3) ו-(4) ולש שמאפשרלים לכתוב | גם | את הפקודה | (1), כאשר מגדירים את [מאגאא ו-2עאא כ-צגתתג 00א0גת. המלה 80א210% מתילחסת לעובדה שהתווים במערך זה הם ארוזים, כדל שאפטר להלה להחזיק אותם בצורה ?ותר דחוסה. כדל לגרום את ארלזת הנתונים, על המתכנת רק להוסיף את המלה 80א20 לפנל המלה צגאת בהצהרת 128 או 4%/. *ש מהדרלם שמעניקים תכונות אלו למערך גם מבל? סיוגדר כ-80א240. 2 שלמוש במחרוזות נדגים בתכנית הבאה את השלמוש במחרוזות: התכנית מלועדת לסייע בערליכת שלדוכלם. נתונים פרטלם אודות. האנשים והנשלם אשר רטומלם כבר במחשב ומשתתפים בתכנית ואודות מועמדלם חדשים, אשר מתחפשלם בנל זוג מתאלמלם. נתונ? הקלט לכל משתתף הם: א. שם, ב. מין, ג. מלדת האהדה לנושאלם מסוימים, שנמדדת בסולם מ-1 עד 5. בפרט ג, אם התשובה לנוטא ספורט היא למשל 1, משמעותה שהמועמד/ת לא סובל/ת ספורט. אם התשובה הלא 5 משמעותה להלטות אחר ספורט. תשובה 3 מצילנת עמדה נייטרלית, 4 - גישה חלובית לספורט ו-2 - גישה שלילית. בתהליך העלבוד מקבלים את הנתונלם עבור מועמד/ת לחילפוש בן/בת זוג. סורקלם את הנתונלם של כל המשתתפים מן המין השנל וקובעים אלזה מהם הוא המתאלם ביותר למועמד. כדי למדוד את מלדת ההתאמה בין שנל אנשלם נשתמש בשלטת | הרלבועלם המלנימל?לים. בשלטה זו מוצאלם את ההפרש בלן כל אחת מהתשובות של המועמד בכל נושא לבין התשובות של בן הזוג הפוטנצלאלי באותם נושאלם. מחשבים את רלבועל ההפרשלם לכל התשובות ומחברלם אותם. ככל שסכום הרלבועים יותר קטן, ההתאמה נחשבת לותר טובה. לדוגמא, התשובות של אברהם בנושאים ספורט, מוסיקה ודת הלה 3, 4 ו-2 בהתאמה, התשובות של רבקה הלו 3, 2 ו-2 והתשובות של לאה הלו 8, 2 ו-5. על פל נתונים אלה נקבל את התוצאות הבאות: סכום הריבועים בעבור השלדוך אברהם-רבקה להלה: | 3-3(2=13)+4-2(2)+5-2(2). בעבור השלדוך אברהם-לאה סכום הריבועים להלה: 3-4(2=5)+4-2(2)+5-5(2). סכום הריבועים קטן יותר בעבור השידוך אברהם-לאה מאשר בעבור השלדוך אברהם-רבקה ולכן הטלדוך ‏ אברהם-לאה לותר מתאלם. ; (עשקנטס , צשקאד) ד אתססתע (1) )2( 07 20=ד 15 און (3) 00 ת1524וו (4) שקצץ (5) ;תס עס [1..20]צגתתה כעאסגק =6חו5 (6) 07( 902 = דודו אגא .1 =אדקי דד (8) תה5דא. .1 =07,זמת5 (9) פאט (10) (* משתנל עבודה *) (11) ;אתסתצאד :אדטמזת אדוו (12) )13( 1: 0; אדו 1598 ,תדגא ,7 (14) (* פרטלם אודות המועמד *) (15) נ:תאחס :פגאגטץ אזון (16) : פגווהטון זפ (17) ןי עס [5458₪107]צגתתה :סשהאהטוו צסטטופיד (18) (* מידע אודות המשתתפים *) (19) ;ו עס [אתט דפ דוע] צה תתה : עדו אד (20) ; זאד עס [אדעדהד54דוו] צגתתג :אדטפדת 5004 (21) עס [0, 51 , אדע דה דפ דא צגתתג : עד הדו צסעתתןפד (22) עס [אדעדד15ו] צהתתג : החדה הדו 5 (23) ; תת0מזאד עס [אדעדד5₪דא] צגתתה :אדטסד דד דוו (28) אזסעת (25) :('כמה אנשים משתתפים?') אומדדתט (26) (4 דוו 15238) אזסאחת (27) (* הכנס פרטים אודות כל אחד מן המשתתפלם *) (28) 0 ועד תעדו 10 1:=1 חסק (29) | את (30) :('כתוב את שם המשתתף') אזמדדקט (31) ([1] 15 5₪1) אזפגחת (32) :('מין?') אמתדזתט (33) ([1] תמדא אדא) אזפאחת (30) (('תטובות לנושאלם?') אזתדדתט (35) 0 סמות תגפפזא 10 1=: חפסל (36) ,ד 15 דסטפד) סגחת (37) אזסאמת (38) ; פא (39) (* טפל בכל מועמד *) (40) 0ם ₪0 עסא מזדוט (41) אזסת (42) :('כתוב את שם המועמד') אתחדדחט (43) ; (םגןזן 51) אזפגמת (44) :('מין?') אזתדדאט (45) ; (עהאאטון אזא) אזסאפת (46) :('תטובות לנושאים?') אתתדדחט (47) 0 501 תגפפזא 10 1:=1 08ד (48) : 11 ] פגנהטזץ 'סטטפד') סגחת (49) אזסות (50) (א חשב את ההתאמה של המועמד לכל משתתף מן המין השנל *) (51) סע דעוו תהעפדא 10 1=ד 08ד (52) :[ ]א1טתדת 0 (53) 0 אדו פד 0 1 =:1 תסל (54) אא [1]עםדתחפדון אדוו <> סגאגטא אזא עד (55) 0 ץ0ותם תגעפדא 20 1 =:7 תסץ (56) 112 + [ד]אנטפנת 5018 =: [ד]אנטמזת 500% (57) ( [ 1 50 - [1, ד | עדא 01/ח191) א80 (58) (% מצא את סכום הרלבועים המלנלמל: *) * (59) ; זאזא ו =.אזספזת אדא (60) 0 יפד 15948א 10 1 =:1 סע (61) אוד [ז ]שמ דמפדא אא <> סאאאטא אדא 12 (62) אחז ואנטפדת אדות > [1]אדטמדת 500% עד (63) , [ד]אדטפדת 50% =:ותטמדת אדוו (64) (* בחר את המתאלמים בלותר עבור המועמד הזה *) (65) 0=:אדאדדן (66) 20 אתי ידוו 115248 10 =:1 08ע (67) אחז [ד ] עטידה5דון אדא <> סגאאטע אז עד (68) אמצ אדטפזת אזא = [18010]1ת 50% 1 (69) אזסעת (70) ; 1+ו1דיד ו = :111% (71) 1=: [אזותדו ]טס אדו (72) ו ; פא (673 (% הוצא כפלט את המתאלמים בלותר *) (78) ; ('שם המועמד הוא:' ,סא4חוץן 4מ5) אזעדדתה (75) ; ( 'המשתתפ לם המתאלמים ביותר:') א1750א₪ (76) ספ אדאדדן 0 | =:1 08ע (77) ([ [ ד ]דעס עדו קדו אמ ) א זיז (78) פא (79) .סאפ (80) הסבר: (27)-(26) קלט של מספר האנשלם שישתתפו בקבוצה הבסליסית. (39)-(29) קלט נתונים בעבור כל אחד מן המשתתפלם. מנלחים שהמהדר שמשתמשלם בו מאפשר לקרוא צאת4 24080 בלי לולאה. לכן כתבנו בשורה (32): ( [ ד ] עמי ידו 58 ) אזסאמת. (79)-(41) לולאה גדולה שמטפלת בכל מועמד שרוצים לשדך. (50)-(43) קריאה של נתונלם אודות המועמד. (53)-(52) אלפוס של המערך א1801ת 8010%. (58)-(54) אם המין של משתתף 1 שונה ממלו המועמד, מחשבים את סכום רלבועל ההפרשים שבין התטובות שלו לבלן התשובות של המועמד. כותבים את הסכום הזה במקום 1 בווקטור א1801א 80108. (64)-(60) סורקים את הווקטור אטמ1ת 508 כדי למצוא את הערך המלנלמלל שבין ערכ? כל האיברים בווקטור זה. הסכום עבור משתתפים שמינם שווה למינו של המועמד לא רלוונטי ולכן מחפטים את הסכום המינלימל: אשר קטור לאנטים מן המין האחר. (73)-(66) אללו הלינו מסתפקים במשתתף אחד עבור המועמד, :כולנו להחזלק את מספרו של המשתתף שסכום הרלבועלם שלו הוא המלנימלל. מכלון שרוצלם 133 להתללחס לאפשרות שלש לותר ממשתתף אהד עם אותו סכום רלבועילם מלנלמלל, סורקים פּעם נוספת את הווקטור א21801 5010%. עתה מכניסים את מספרו של כל משתתף שסכום רלבועלו שווה לסכום הריבועים המלנימלי לווקטור חדש שנקרא א1ט0ד אע (78)-(77) מדפיסים את השמות של המשתתפים שמספרם נמצא בווקטור בשם אנטסך 1%ע15א, שהם בעלי אותו סכום רלבועים מינלמלל. 24 חתרג?לים 1 ששאלות (1) מה מדפיסה התכנית הבאה ? ; (צשפדטס ,צטפאך) גחו אבת6סס מקציך ק<0 [1..6]צגתתה כמאסגת = 7ת02סק6גא אתגצ 027 א עס [1..12]צהתתג :תדטפ ; 11022 :82א₪0א , נמאסא אזסאת ג ' =:[1]תד53 :15 ' =:[58118]2 0 0 1 =:1מאסא 8סד 0 2 70 1 =:2מאסא סד ; ( [82א0א] 519) א תדו ([1]ת581) אזתצדתט . פא (2) מה מדפיסה התכנית הבאה על פל הקלט אשר הלא קוראת? ; (צטפעטס , צטפא1) מדסתג' אבתססתק מקצי עס [1..10]צגתתה סמאסגע =588% 506 תג 506 0 [1..25]צגתת :אחח5 ,תתסעזא ע0 [1..25]צגתתה :תדחסא ;את :א ,א ,2 ,ך אזססת ;(א) אתסאחת 0 א 70 1 =:1 08ק :]אסא ,[1]ע5) אזסגתת ) אזסגתת 0 א 10 =:1 פסק אמח א < [1]תדאסא חך ([4]1ח5) אזפנדתט . פא 138 הקלט הוא: 5 2 8 8| 2 21 0 201 1 2006 ו 100 (3) קרא את התכנלת שבסעלף 6.1.2 שבפרק זה, שבו מציגים תווים ואת ערכם העשרונל בטיטת 450611. הוסף לה פקודות כדל להדפיס ליד הערך העשרונ גם את הערך בקוד אוקטלל. הנחליה: הפוך מספר עשרונל למספר אוקטל: ע"ל חלוקה נשנית ב-8 והחזקת השארלת כספרה אוקטלית עד שהמספר המקורל לורד ל-0. למשל, אם המספר העשרונל הוא 43 עטה את הצעדים הבאים: א. 43/8 שווה ל-5 עם שארלת 3 (3 הלא הספרה הלמנלת בליצוג אוקטלל). ב. 5/8 טווה ל-0 עם שארלת 5 (5 היא הספרה השנליה מלמין). ג. התוצאה הלא היצוג האוקטלל אַ53 של המספר העשרונל 83. (4) קרא את התכנית ג1ת% שבסעלף 2 בפרק זה שקוראת מספר כסדרת תוולם. הוסף לה פקודות כדי שלהלה אפטר לקרוא כקלט מספר שלם עם פסיק לסימון אלפים. (5) קרא את התכנלת זא שבסעלף 2 והוסף לה פקודות כדל שהיא תכלול פסיק לסלמון אלפים בזמן הדפסה של מספר שלם (אם המספר גדול מ-999). 2 תכנלות (1) כתוב תכנית שקוראת תמל:ל באנגלית ומדפיסה אותו כפלט, כך שכל אות מוחלפת ע"ל האות שבאה אחרלה באלפבלת: האות 6 מוחלפת ע"? האות 2 וכו' ו-2 מוחלפת ע"י 4. (2) כתוב תכנית שקוראת רשימה של שמות ומדפלסה אותם בסדר הפוך. האורך המקסלמל: של שם הוא 25 תוולם. (3) כתוב תכנית שקוראת שם של אדם, את גובהו בס"מ ואת משקלו בקללוגרמים. הלא מדפלסה את הנתונלם שקלבלה ובנוסף מחשבת ומדפלסה את ממוצע מספר הקללוגרמלם לכל מטר גובה. (4) הקלט עבור תכנית טירות לבורסה מכיל 3 נתונלם: (א) שם המנלה (ב) מחיר היום (ג) מחיר אתמול למטל, פלתוח לליזר 139 17 תעשלית מחשבלם 221 2027 כתוב תכנלת שמדפליסה רשלמה של המנלות שעלו או לרדו ביותר מ-10%. (5) הכלל בכתיב אנגל? הוא שהאות 1 קודמת לאות 5, חוץ מן המקרה שזוג זה בא אחרל האות 0 ואז הסדר צריך להיות 5 לפני ‏ 1. כתוב תכנלת שקוראת תמליל ובודקת אם כלל זה מתקללם. אם הוא לא מתקללם התכנית מדפלסה את המלה השגולה. 15 (6) העלות למשלות חבילות דואר בארץ מבוססת על 3 קרלטרלונלם: א. מקום הלעד - 8 - מקומל. 2 - עיר גדולה (ירושלים, ת"א, חיפה, באר-שבע). א - עלר קטנה, מושב, קיבוץ וכו'. ב. משקל - א - קל (פחות מקללו). - ממוצע (בין קילו ל-10 קילו). 0 - כבד (למעלה מ-10 קילו). 8 - רגלל. 5 - אקספרס. ג. שירות - התעריף למשלוח חבילה נמדד לפל נקודות, אשר נקבע להן מידל פעם ערך שקלי כדל לדעת את התשלום בפועל. הטבלה שלמטה מאפשרת לחשב את המחיר למטלוח חבילה: בחלק העליון של הטבלה מופיעות כל התמורות השונות של לעד, משקל וסוג שלרות. בחלק התחתון של הטבלה נרשם התערלף בנקודות. 2 נק'/קללו 3 שה ספ שב טבנ ל כתוב תכנית שמקבלת כקלט את מקום היעד (א, 8, א), משקל בקילו, סוג השלרות (8,5) והערך השקלי של "נקודה". התכנית מפיקה כפלט את המחלר למשלוח החבילה. 16 (7) כתוב תכנית שמקבלת כקלט שורות של תמליל באנגלית, מכניסה אותן למערך ומדפלסה אותן. אם צלרוף התווים ""א/" מופיע בתחללת השורה, הלא תודפס בהזזה של א מקומות לימין, כאשר א הוא מספר בין 1 לבין 120. (8) כתוב תכנלת שקוראת זוגות של מלים באנגלית ומדפיסה אותן אתת ליד חברתה לפל סדר אלפבתי, משמאל ללמלן. למשל, שתי המלים 6006 צעב7 תודפסנה בסדר הפוך, אבל שת? המלים פאָס2 8 תשארנה בסדר זה. דאג לכך ה להלו 5 רווחים בלן המלה הראשונה והשנלילה ושהצוגות יהיו ממוספרלם החל מ-1. (9) קרא משפט, אשר מסתלים בנקודה, ותכנת את הפעולות הבאות: א. מצא את מקומו של הרווח הראשון והכנס אותו למשתנה בשם אסמפדת הסטסת. ב. מצא את האות הראשונה במלה האחרונה והכנס אותה למשתנה בשם 0 זדו. ג. ספור את המללם במשפט. (10) התוכנלת הבאה מטפלת באלתור מבצעי פשע על 5י שתי קבוצות של נתונלם: א. כרטסת הפושעלם הידועלם למשטרה, שכוללת את הנתונים: שם, גובה, משקל. ב. פשעים שהתבצעו לאחתרונה ומתוארלם ע"י הנתונים הבאלם: תיאור הפשע, גובה ומשקל משוערים של הפושע. כתוב תכנלת שתדפלס את תיאור הפשע ואת שמות החשודלם בביצועו. החשודלם הם אנשלם שגובהם חורג בפחות מ-5 ס"מ מהגובה המשוער ומשקלם חורג בפתחות מ-5 קילו מהמשקל המשוער של מבצע הפשע. (11) (*) כתוב תכנלת אשר סורקת תמליל באנגלית בכדל למצוא את השכלחות הלחסלת של המופעלם של כל אות. בנה מערך: תתססואך ע0 [580₪1002]1..26 הוסף 1 לאיבר [5108110001]1, כאשר ‏ 1+('0525)'4-(0)140ת0 שווה ל-1 בעבור כל תו (12%) אשר נקרא כקלט. קה בחשבון שהתכנלת צריכה לחבר *לחד מופעים של אות מסוימת כאות גדולה וגם כאות קטנה. (12) כתוב תכנלת אשר קוראת סדרה של 10 מספרלם רצופלם בנל שלושה תוולם כל אחד ומחשבת ומדפלסה את הסכום שלהם. שלושת התווים של כל מספר לכוללם להכיל ספרות, סימן + או - ורוותים, באחד מן הצירופים הבאלם: = 3 ספרות. = רווה או סלמן ושתל ספרות. *‏ רוות, רוות או סלמן, ספרה. קלט לדוגמא נראה כך: ובו ןו וו ]41| צ)| 0 8 7 6 5 4 3 2 1 (13) כתוב תכנית שקוראת ומדפיסה תמל:ל ומחשבת את הערכים הבאלם: = מספר השורות בתמליל. = מספר המשפטלם. = מספר המללם. ג' 17 אפשר להנלח שכל משפט מסתלים בנקודה-רוות וזה השלמוש הלחהלד של זוג תוולם זה. אפשר גם להנלח שמלה מורכבת אך ורק מאותלות. (14) (*) בטורת הנתונים הראשונה מופיע המספר א ולאחריו א< מחרוזות בנות 0 תוולם כל אחת. כתוב תכנלת אשר: * קוראת את א המחרוזות. * מחשבת את מספר הפעמלם שהתו 1 מופיע בכל אחת מהמחרוזות. *" מדפיסה את המספר הסידור" של המחרוזת המכילה את המספר המירבי של מופעל התו 1. אם לש שיויון בין שתי מחרוזות, אפשר להדפלס את המספר הסילדורל של אחת מהן בלבד. * מדפיסה בכמה מחרוזות ההופעה הראשונה של האות 5 הלא לפנל האות ?, בתנאל ששתל האותיות מופיעות. (15) (%) כתוב תכנית שקוראת שורות של מכתב לתוך מערך. בראש ובגוף המכתב מופיעלם הסימונים *מאגא* ו-*210*. בסוף המכתב, ישנן שורות קלט נוספות שבכל אחת מהן כתוב זוג של מללם, שהראשונה הלא שם והשנייה ‏ - חארלך. הפלט צריך להיות מכתבים מוכנים, כאשר בכל מכתב ירשמו השם והתאריך שהתקבלו בקלט במקום המלים *שאגא* ו-*418ע2" בהתאמה. מספר המכתבלם המהוולם את הפלט הוא כמספר הזוגות של שם ותארלך בקלט. (16) (*) כתוב תכנית שמקבלת כקלט קטע תמליל ומדפיסה אותו בשורות עד 60 תווים. הסלמן "/" מצלין התחלת פיסקה חדשה, שבדוגמא זו תתחיל מן המקום הרביע בשורה חדשה. התו ‏ "/" לא יודפס בפלט. אסור לחלק מלה לשנללם. סלמני פיסוק כמו נקודה או פסיק נחשבים חלק מן המלה הקודמת. בפתרון הבעלה יש לטפל בשלושה מקרים שונים: * מדפיסים שורה מלאה, * מגלעלם לסימן "/", * מגיעים לסוף הקטע. 18 פרק 7 חיפוש, מיון ומיזוג 7.1 מבוא בפרק 6 למדנו להחסן נתונלם במערך חד-מלמדי, או ווקטור. בפרק זה נלמד לבצע טלוש פעולות נפוצות על האלברים של מערך: חלפוש, מלון ומלזוג. מעריכים שכמחצית מזמן העבודה טל מחשבלם מוקדש לפעולות אלו. א. חיפוש (8מ1ם50820): סריקה של כל האלברים במערך כדי למצוא את האלבר, או האלברים, שמקללמים תנאל מסוים, או שהם שווים לערך מסולם. ב. מיון (8ת50%01): סידור האיברים במערך לפי הערך שלהם, בסדר עולה מקטן לגדול, או בסדר יורד מגדול לקטן. ג. מלזוג (8ם6:81א): אילחוד של שנל מערכים ממויינלים לתוך מערך חדש. מערך זה גם ממוילן וגם מכלל את כל האלברלם שהלו בשנל המערכלם המקורללם. האלברים במערכי?ם לכולים להילות מספרים שלמים, ממשיים, תווים או שמות (ז"א מערכים של תווים). 2 חלפוש 1 חיפוש ללנלארל לש שתי שלטות נפוצות לחלפוש אלברלם במערך. השיטה הפשוטה בלותר הלא חיפוש ליניארל (ם56820 צ8סם1]). חיפוש זה מתחלל באיבר הראשון במערך ומתקדם לקראת סופו, עד שנתקלים באלבר הרצול. נדגים בתכנלת את שיטת החלפוש הללנלארל: מחפשלם את המספר של חבר ברשלמת מספרל טלפון, אשר מסודרת בסדר אלפבלתל. ; (צטקטס , דטפאד) מאסקםזתך דטת522דון סע (1) 1-9 פקעצע (2) ;תס ע0 [1..20]צהתתג כמאסגתק =אתם5 (63 ;תס ע0 [1..10]צגתתג כמאסגת =תגפפדא (8) תג (6)5 :ג1אפטת 0008 ,1 (6) ;תדו עס [1..100]צגתתה :אדת לדו דגאדהפתת (67 תס [1..100]צגתתה :50407 דגאדמפחת (8) א :תתטגת0 אמחפ (9) ; א3001 :24?דוזא (610 אזסתת (11) ; (( האדופת 6008) פגחת (12) (* קרא את השמות והמספרים שברשימה *) (13) סע אדפעת 0080 70 1 =:1 תסע (18) אזססת (15) ; ([51₪0407]1 ץגאדמפמת) אזסגמת (16) ([1]אדתה5דו דגאדמפחת) אזסגמת (17) ; פא (18) 0 ₪02 עסא א.זדאט (619 את (20) ; (תמט0 5₪1) אזסגחת (21) =:.2דווא (22) 1=:ך (23) 0 ג2דונדא צסא פא (גאדאפטת 0028 => 1) ₪ דוט (24) אפ ([510401]1 1אדתפעת = תמטגעס א4ח90) עד (25) מטסתץ =:24דותא (26) )27( ₪ =: (28) ::'' ,תתטגתס את58) אמתדדתט (29) אטח 24?וותא עד (30) ([ד1]א1תת5דון דהאדאפסת) א.זאדדתט (31) ₪ (32) ('לא נמצא ברשלמה') אזמדדתח (33) . פא (38) .פאת (35) הסבר: (18)-(12) קרלאה של רשלמת השמות והמספרלם. מנלחלם שהמהדר מאפשר לקרוא "תג 0 צגתתה כמאסגע" בלל לולאה. (34)-(19) חיפוש מספר של חבר ברשלמת המספרלם (אם לש). (28)-(28) לכאורה, היה לותר קל להחליף שורות אלו בפקודות לותר פשוטות: סאג (אאזפעת 6028 => 1) מתדוט 0ע (תתטס 51 <> [₪01]1ח5 דגאדפעת 2 =:1 בפקודות אלו מתחילים את החיפוש באיבר [58₪407]1 1א1אפמת ומשווים אותו ל-01008 [זפ. אם השמות לא שווים, ממשלכים לסרוק את הרשילמה עד שאחד משנל מאורעות מתרחש: א. תתט014 51 טווה ל-[51001]1 דגא זזפתת. ב. מסיימים לקרוא את הרשלמה. 110 היתרון טל שלטה זו הוא בכך שאין צורך במשתנה הבוליאנ: 1%724א. החיסרון שלה הוא בכך שהיא עלולה לגרום לשגיאת ביצוע במהדרים מסוימים, אם השם שמחפשים אינו נמצא ברשימה. במקרה זה, 1 לגיע לערך 1%4+1ַ51עת 6000, למשל 101 בדוגמא זו, אשר נמצא מחוץ לתחום המערך. כאשר זה קורה, התנאל: ( 018 51 <> [1 ]507 דגודופתת) פאג (44זא5את 00200 => 1) להיה 74188, מכיון שהחלק הראשון של הביטול 1>=0008 אינו קיים. החלק השנל של התנאל להלה אז [588₪407]101 צגאדהפטת. אינדקס אשר נמצא מחוץ לתחום הנכון (למשל 101) :גרום להודעת שגליאה. השאלה הלא, אם המהדר לבדוק את החלק השנל של התנאל כאשר החלק הראשון כבר אלנו קלים. מכיון שישנם מהדרים שבודקים את שנל החלקים בכל מקרה, מומלץ להשתמש בשלטה שמופיעה בגוף התכנית ולא בדרך מקוצרת לכאורה. (34)-(29) לוצאים מן הלולאה כאשר מוצאים את השם של החבר ברשימת השמות (24=7808ץא1א, | השם נמצא במקום 1 ברשלמה). אפשרות נוספת לצאת מהלולאה הלא לאחתחר שסורקים את כל הרשלימה ולא מוצאים את שם החבר (458ע=1724א, 1 שווה ל: 4+1אזאפתת 60280). לכן מדפיסילם את המספר של החבר אם פתתן=4?זאזא, אחרת מודיעלם על כך שהוא אינו נמצא ברשימה. תהליך החיפוש הלינלארי הוא פשוט, אך לא לעיל. אם יש א אלברלם במערך, מספר ההשוואות שנצטרך לבצע עד שנמצא את האיבר הרצוי הוא 1 במקרה הטוב ביותר (כאשר האיבר שמחפשלם נמצא בראש הרשלימה), או א במקרה הגרוע בלותר (אם האלבר שמחפשים נמצא בסוף הרטלמה). מספר ההשוואות הוא 2/א בממוצע. 2 חילפוש בלנרל שלטה הרבה לותר לעילה לחיפוש הלא שיטת החלפוש הבלנרל (ג56826 עצ8ת21). לש הגבלה לשלטה זו, כל אפשר להשתמש בה רק על מערך ממולין, אשר *כול להלות בסדר מיון עולה או בסדר מלון *ורד. חיפוש ללניארל, כפל שראינו קודם, מתאים גם לרשלמה לא ממוללנת. חיפוש בינרי דומה לשיטת חיפוש במילון או במדריך טלפוו. פותחלם את הספר לאמצעו. ‏ אם למזלנו פתחנו אותו בדף הנכון, מחפשים את המלה ומסללמלם. אם הערך של המלה שמחפשלם קטן מן הערך של המלה שמופיעה בדף הפתוח לעלנלנו, עוברלם לדף שנמצא באמצע החלק הראטון, ז"א בין התחלת הספר לבין הדף טפתחנו. אם הערך של המלה שמחפשים גדול מן הערך של המלה שמופלעה בראש הדף שפתתנו, עוברלם לדף שבאמצע החלק הטנל של הספר. ממשלכים בשלטה זו, ז"א בחלוקה ל-2 של תחום הדפים שבו לש אפשרות למצוא את המלה המבוקשת, עד שנמצא את הדף שבו היא כתובה. בדוגמא זו מנלתלם סדר מלון עולה, אך אפשר לחפש בטלטה זו גם כאשר סדר המלון *ורד. לדוגמא ננלח שמחפשים את המספר 6 ברשלמה בת 7 אלברים שנמצאלם בסדר עולה: הערכלם: 7 8 16 13 1 9 4 מספר האלבר ברשלמה: 7 6 .5 4 3 2 1 הערךר האמצע? ברשימה הוא 13. מכלון ש-16 גדול ממנו, עוברלם לאמצע האלזור הימנ שכולל את האיברים בעלי הערכים הגבוהלם לותר "27, 18, 16" ושולפים 141 את המספר האמצעל 18. הוא גדול מן המספר המבוקש ולכן עוברים לחפש בין המספרלם משמאל, שערכם קטן לותר. באיזור זה ישנו רק מספר אחד 16, שהוא המספר המבוקש והבדלקה מסתליימת. אילו מספר זה היה למשל 15, הללינו צרלכלם להגיע למסקנה ש-16 לא נמצא ברשימה, כל עשינו את כל הצעדים האמורלם להוביל אליו, אך ללא הצלחה. בדוגמא זו מצאנו את המספר המבוקש לאחר ההטוואה השלישית. זהור מספר ההשוואות המלרבל שלש לעשות ברשלמה של 7 איברים. ברשימה של 15 איברים, לש צורך לבצע עד 4 הטוואות. זוהי הסוואה אחת לותר מאשר בדוגמא הקודמת, כל לאחר החלוקה הראשונה יש שת רשימות של 7 איברים. בצורה כלללת, המספר המירבי של השוואות מתואר בטבלה למטה: מספר מלרבי של השוואות 1 3 ,2 ל 6 3 .4 תכ אם 2%71=א, נקבל ש: אכְאַס1=1-א, או 1+א1082=א. א נשאר ללא שלנול אע"פ ש-א גדל, עד שנגלע ל: ‏ *2=א: בנקודה זו א1082 גדול ב-1 מערכו כאשר 2*71=א. נוכל לסכם ולומר ש: 1+(א6)1082אנות1=א הוא המספר המלרב? של ההשוואות בחיפוט בינרי במערך של א איברלם. נתאר עתה את האלגוריתם לבלצוע חיפוש בינרי עבור דוגמת התכנות הקודמת למציאת שם במדריך הטלפון. מלא את המערכים אזאתל5ד דהאדאפפת צסאמ5. זתאדופפת 112 1-> אסאפנת תא1ופעת- 00021 --> אסתאסת > תמטתאס-אם53 [1ה2עא5] 1סא2-515האזהפטת ? 1+1ת2עאם ‏ --= א1580ת1 1-1ג2צאם -->- אסתהסגת [ ד ת2 ות ] י2-5₪15%0'תא51טת) (? אסמתם = (אסתאסג < א0א5דת) תס [1ה ]972‏ 1-5858017גאזהפפת מפטתאס-אמא <> תדפיס ממטתחס --אמהפ איננו ברשימת הטשמות תדפיס אמטת-אפס [1ה22אם] אזפה52זא-2תאזהפפת 13 הסבר לתרשים: (3)-(2) קרלאה של מערך השמות והמספרים. (6)-(4) מבנה 200118 לקרלאת שמות חברים וחיפוש שמם ברשלימה. בכל פעם מסתעפים למבנה (6) שמכיל את החלפוש הבלנרל. (9) בתתחילת החיפוש הבינרל טווח החיפוש הוא כל האיברים במערך. לכן, א150ת הוא 1 ו-א4080 הוא גאדאפאת 6098. (14)-(10) לולאה של פקודת 110א200, שכוללת בתוכה את הפקודה 1%. הפעולות (10) עד (13) יכולות להיות קטע נפרד. (10) מוצאים את האלבר האמצעל במערך הנתון. (12)-(11) אם אמטג08 58% קטן מן הערך של האיבר האמצעי, חשוב לדעת את הערך של האלבר שנמצא לפנלו, 7221-1/₪. (13) אם אעט6 501 גדול מן הערך של האיבר האמצעל, עוברים לקבוצה העליונה של האיברים והערך של א21580 יהיה גדול ב-1 מהערך של ₪1721. אם המ/ג0 חפ שווה לערדך האמצעי, אין צורך ב-(13), אבל הפקודה בכל זאת תתבצע. (18) סוף מבנה מ11א200. מחזירים את הבלצוע להתחלת הלולאה אם עוד לא הגענו למצב של הכרעה. (15) אפשר להגיע להכרעה כאשר: א. מוצאים את שמו של החבר ברשימה ומבצעים את שורה (14). ב. סורקים את כל המערך ולא מוצאים את הערך המבוקט. הדבר קורה כאשר ערכו טל א1580ת3 עולה על א40880 ואז מבצעים את שורה (17). 43 תכנות בפסודו-קוד את האלגוריתם של החיפוש אפשר לכתוב בשלטת פסודו-קוד (6068 258060), אשר מחל לפה במקרים רבים את תרשימל הזרלמה. הכתיבה של פסודו-קוד דומה במידה רבה לתכנות, אלא שחלק מו הפרטים והלוגיקה כתובים בצורה כללית ולא בפלרוט הדרוש בתכנלת. בתרשימל זרימה לש לעתלם קושל גרפי להצלג מבנים מורכבים ולכן כותבים קטעים נפרדים בכדי להציג תלקים שונלם של התהליך. בדוגמא הקודמת למשל, היתה לולאה של 58מא עד בתוך 111א200, אשר גרמה לקשיי שרטוט והבנה. לש לחס חד-חד-ערכי בין הפסודו-קוד ותרשימל זרלמה, אלא שבמקום לצייר את המבנים, כותבים את שמותיהם. אין צורך להשתמש בשמות המבנילם דווקא, אלא משתמשלם ברוב המקרים במלים אשר מתאלמות לשפת התכנות שבה מתכנתים. להלו תכנות פסודו-קוד לחיפוש שם במדריך הטלפון בשיטת החלפוש הבינרל: אזטעת (1) ; 1פעתת תס פגמת (2) 14 ; 07 ד זןדתפמת פגאאת (3) ד 5דון דהודחפפת סגחת (4) 0 ₪0 עסא א.זדאט (5) אדסח (6) פמט 51 סגמת (7) --> אסמפדת (8) )9( פע 6009 --> אסח0‎ ; )10( וחקת‎ )11( (א4080 + אסאפנת) --> דג?דום‎ / )12( אחז [ד 2 ] 5107 'גודופמת > תתטגס 5% עד‎ )13( התעלם מהערכלם העליונים ע": עדכון הערך של א24090‎ >-- )14( ₪ --> התעלם מהערכלם התחתונים ע"* עדכון הערך של אסמפדת (15) ;(סלום הלולאה צאט (16) א תפס 5181 <> [ד24דו ]53407 דגאנאפפת עד (17) כתוב שהשם המבוקש לא נמצא (18) לכו (19) כתוב את שם החבר ומספרו הסלדורל (20) פא (21) פאק (22) לאחר הכתיבה של האלגורלתם בשלטה זו מחליפלם את הפעולות (13), (15), (16), (18), (20) בפקודות פסקל אשר מקבילות להן. בדרך זו מקבלים שלד של תכנלת בשפת תכנות. עתה יש צורך להשלים ולסלים את התכנלת כנדרש. בהמשך הספר הצגנו אלגוריתמלם בשלטת תרשלמל זרימה בלבד, אך בפתרון התרגללים התלמלד יוכל לבחור בין שיטת תרשימל זרלמה לבין פסודו-קוד. נשבץ עכשיו תהללך של חיפוש בינרי לתכנית הקודמת מאסמקע]עד דַ8ת1524ו1. יש להגדלר בה שלושה משתנלם נוספים: 0 :17221 ,40008 ,א0סת5זת. במקום טורות (22)-(33) באותה תכנית, נכתוב עכשילו את הפקודות הבאות: 0 =:א1580ת ; 511 002 =:א00 דועת דע (א40180+א1500ת) =: ךיות אמז [7241 ] 5107 ד'תוראפתת > המטגחס 58 עד (* חפש בקטע התחתון *) 1 =: 00 (* חפש בקטע העללון *) בו 1 =:אסמפדת ; (א40100 < א0א58ד1ת) תס (תמטהחס 51 =[דלדום ]דסומ5 דהאדמפתת) מצדאט אחז תתטחס 541 <> [241דם ]5017 דאדמפעת עך ('אין אדם בשם"' ,(תפטגע0 5884) א[מדדתט זו ; [ 241יז ]ןדה54דא צגאדתפפת ,7':10' ,(תתטגתס 584) א[מדדתו הלה אפשר להרחלב את הדוגמא גם למקרה של אינדקסים מסוג תג08. לשם כך יש לכתוב: [5000]217241=:א15₪0ת וגם: [₪7241 ]סמתק=:א40₪80, במקום לכתוב: 1 :15 וגם: 1241-1)₪=:א4010. 15 המספר הממוצע של השוואות בחיפוש ליניארל הוא 28/2 ובחיפוש בלנרל מספר ההשוואות הוא 1021 )סאתזת. נובע מזה שכאשר 8<א, מספר ההשוואות בתיפוש בלנרל קטן ממספר ההשוואות בחיפוש לינלארל. אולם, בביצוע לולאה של חלפוש בלנרל יש יותר פעולות מאשר בביצוע לולאה של חיפוש לינלארי ולכן גבול הכדאלות אינו נקבע לפי התנאל 8<א בלבד. על פל הנלסלון, מומלץ להשתמש בחיפוש בלנר? כאשר יש רשימה ממויינת בעלת לותר מ-20 איברלם. בכל מקרה אחר החיפוש הללנלארל עדלף. 2 מלןו מיון (50?5) הוא הפעולה של סידור אלברים לפ? תכונה מוגדרת, כמו למשל לפל הערך שלהם. אפשר למלין בשנל סדרל מלון (085מ580006 8ת0011861): א. סדר עולה (02602 8ת61ת1506) - לאחר המלון, האיבר בעל הערך הקטן בלותר להלה הראשון ברשימה והאלבר בעל הערך הגדול בלותר להלה האחרון ברשימה. ב. סדר יורד (0%662 8מ01מ26500) - לאחר המלון, האיבר בעל הערך הגדול ביותר יהיה הראשון והאלבר בעל הערך הקטן ביותר להלה האחרון ברשלמה., בהמשך ‏ נציג שלוש דרכים למלון של נתונים, אשר ערוכים במערך חד-מלימדל (וקטור) 4 שמוגדר כך: מעצך צגתתג עס [א..1]צגתתה:ב 1 מלון ע"ל סרלקה (6עס5 מ610ע86תך) מניחים שהערכים המשובצלם כבר בווקטור הם ממוללנים. את הערך החדש צרל*ך להוסיף לוקטור במקום המתאים לפ? סדר המלון. אם הוכנסו כבר א ערכים לוקטור 4, אפשר להכנלס לוקטור בדרך זו את האיבר החדש א, שמספרו הסידורל 1+. הפעולות הדרושות הן: א. מוצאלם את המקום 1, כך ש: [4]1 > א. ב. מזיזים את האלברים ממקום 1 ואילך למקום הבא בווקטור. ג. מכנלסים את א למקום 1. התכנות לביצוע השלב הראשון: =: 08 =:0 0 פמעגמסא פאג (% => 1) מעתדאח אעחד [נ] > א עד =: 0105 8 2 7 =00 אם א אינו קטן מאלבר כלשהוא בתחום [1] עד [א%]4, הערך של 1 לגיע לערדך 1. המסקנה תהיה שלש להכנלס את האיבר החדש << למקום ‏ 1+% ש- מצביע עליו, כלומר בסוף הוקטור. 166 התכנות לבלצוע השלב השנל: 0 1 ס0עאאסס א ;[ד] =:[1+1 אם %< אלנו קטן. מאיבר כלשהוא במערך 4, המשתנה 1 יהיה שווה ל: 1+ ופקודת 20% זו לא תתבצע. כלומר, אם א גדול מכל ערך בווקטור, אי צורך להזיז אף אלבר שהוא. התכנות לביצוע השלב השלישל: ;א =:[4]1 כל סריקה בווקטור 4 נקראת מעבר (2855). נסתכל עכשלו על תוצאות המעברים במלוןו הרשלמה שמופלעה למטה. כוכבלת מסמנת את האיבר הנוסף בכל מעבר. אחרל אחרל אחרל אחרל אחרל אחרל אחרל רטימה המעבר | המעבר המעבר המעבר המעבר המעבר המעבר מקורית | הראשון השנל השלישי | הרבלעי | החמלשל | השישל השביל 10 *10 10 *8 *1 1 1 1 12 *12 10 8 *6 6 *4 8 12 10 8 8 6 1 12 10 10 8 6 12 12 0 19 19% 12 4 19 למיון הרשימה בת 7 אלברים נדרשו 7 מעברל מיון, כל בכל מעבר נוסף אלבר אחד לרשלמה הממוללינת. 2 מלון ע"ל בתלרה ללנלארלת (מ56166%10 ש68ם11) נניח שלשנם א ערכים לא מסודרים בווקטור. נבצע את הצעדים הבאים בכדל למללן אותם: א. נציב 1 במשתנה ת, אשר מלועד להצביע על הערך הקטן ביותר בווקטור. נשווה את [4]8 אל [2]2 ונקבל שת? תוצאות אפשרלות להשוואה זו: = [ת]4 =< [4]2. ת לשאר 1. = [ת]4 > [4]2, 5 לקבל את הערך 2. ב. נטווה את [4]3 אל [ת]. אם [4]5 > [4]3, אז 5 להפוך להלות 3, אחרת הוא לשאר ללא שלנול. ג. נמשיך כך עבור [4]4, [5] וכו', עד שנשווה את [א]1 אל [2]5. לאהחר כל הטוואה, האינדקס ‏ 3% יצביע על האיבר שערכו קטן לותר. לאחר ההשוואה האחרונה האינדקס יצביע על האלבר הקטן בלותר והמשתנה [4]5 *כלל את הערך הקטן מבין כל א הערכלם בווקטור. ד. עתה יש להתללף את [4]1 ב-[ת]2. עכשיו האלבר בעל הערך הקטן מכל האיברלם נמצא במקום הראשון בוקטור. כך מסתלים המעבר הראשון. 107 המעבר השנל דומה לראשון, אלא שמציבים ‏ 2 במשתנה ת. עורכים את החלפוש מהאלבר ‏ [4]3 עד האיבר [א]4, כדי למצוא את האלבר הקטן ביותר מבין 1-א איברים שאחרי האלבר הראשון. כזכור, האלבר הראשון נבתר במעבר הראשון כבעל הערך הקטן ב?ותר. האלבר הקטן ביותר שנמצא עכשיו ?וצב לפל ערכו במקום השנל במערך ולהלה השני בסדר המלון. כך ממשיכלם במעברלים, עד אשר מגיעלם לכך שכל האלברים מסודרים כנדרשט. התכנות עבור מלון בשלטה זו: 0 1-א 70 1:=1 תסע (1) אזסאת (2) :א (3) 0 א 710 1+1 =:1 פסע (4) אצ [ת]ג > [4]2 עד (5) :תת (6) אפחעז ת <> 1 עד (67 אזססת (8) [ד] =:זא.א24 (69 ;[ת]א =:[4]1 . (10) :אגא =:[ת]4 (11) פא (12) ; פא (13) (1) נשווה כל איבר, מ-[4]1 עד [1-א]4 אל קבוצת האלברלם הבאלם אחרלו. (3) במצב התחלת? מנלחלם שהקטן מבין כל האיברים העוקבים נמצא במקום 1. (84) קבוצת האלברלם שבאים אחרי [4]1 כוללת את [4]1+1 עד [א]4. (6) המשתנה 5 מסמל את האלנדקס של האלבר הקטן בלותר שטופל עד עכשיו. לכן, המשתנה ‏ ת יקבל את ערכו של 1 אם [4]1[>4]8. בסוף הבדיקה של שורות (4)-(6), 5 יהלה האלנדקס של האלבר הקטן בלותר בכל התתום (ז"א מ- [1]א עד ל- [א]4). (12)-(7) לש תמלד אפשרות שהאלבר שהיה במקום 1 הוא הקטן ביותר מתוך האיברלם שנשארו ולכן אין צורך בהחלפה כלשהל. אם נקבל 1><8, נובע ש-1 לא הלה האלבר הקטן ביותר ולכן נחליף אותו באיבר את כד? שהאלבר הקטן ביותר להלה במקום 1. במעבר הראשון 1=1, אח"כ 1=2 וכן הלאה עד 1-א, כאטר מסתללמים מעבר? המלון. 1028 לדוגמא נצלג מילון בשיטה זו: אחרל אחרל אחרל אחרל אחרל אחרל רשימה המעבר המעבר המעבר המעבר המעבר המעבר מקורית | הראשון השנל הטלישל הרבלעל החמלשל השלשל 1 1 1 1 1 1 10 4 4 4 4 4 12 12 6 6 6 6 8 8 8 8 8 8 10 10 10 1 10 10 10 8 6 6 6 12 19 19 19 19 19 19 19 12 12 12 12 4 4 3 מלון ע"ל החלפה (5025 סִקַתהת0א2), או מלון בועות (50:6 16ספט2) תיאור השיטה: א. במעבר הראשון משוולם את האלבר הראשון אל השני ומחליפים בלנלהם, אם השנ? קטן מן הראשון. עתה משוולם את האיבר השנל (החדש) אל השללשל ומחללפלם אם דרוש. כך ממשיכלם עד שמשווים את אלבר (1-א) אל איבר א. בדרך ההשוואה וההחלפה "*תגלגל" (ז"א יעלה כמו בועה) האלבר הגדול ביותר אל סוף הרשימה. כותבים את האלנדקס של האיבר הראשון בזוג האחרון שהחלפנו ומעבירים אותו למשתנה 1. מן האלבר השנ? בזוג האחרון שהשתתף בהחלפה ועד סוף הווקטור כל האיברים כבר מסודרים ואין צורך לבדוק אותם במעברים הבאלם. ב. במעבר השנל שוב משווים את האיבר הראשון עם השנל, השנ עם השללישל, וכו', עד להשוואה האחרונה שהיא השוואת אלבר (1-1) אל איבר 1. ג. בכל שלב מספר ההשוואות לורד לפחות ב-1, כל מן האלבר השנל בזוג האחרון שהחלפנו לאחרונה ואללך - הווקטור מסודר. ד. התהליך מסתללם כאשר לש מעבר שבו אלן אף החלפה. דוגמא של מלון ע"י החלפה: מעבר ראשון לאחר החלפה לאחר החלפה לאתר החלפה מקורל 1=4 ראשונה שנייה שלישית סוף מעבר ראשון אס 03 4 0% 08 4 45 1 4203 4 שר ת) ,4 1|9 מעבר שנל לאחר החלפה לאחר החלפה 1=3 ראשונה שנליה סוף מעבר שנל ו ₪42 | 60 4 וס תה 4 מעבר שליש? לאחר החלפה 1=2 ראשונה סוף מעבר שלישל | ₪ = 4 ₪ ₪ 1 סוף המיון שימו לב לכך שהערך של 1 ירד ב-1 בכל מעבר. אם הווקטור הלה לותר מסודר, או ממויין, אז הערך של 1 *כול היה לרדת עוד יותר ממעבר למעבר. דוגמא נוספת: מעבר ראשון לאחר לאחר לאחר מעבר שנל סלדור מקורל החלפה החלפה החלפה 1=8 ראשונה שנילה שלישלת 3 4 4 4 4 7 5 5 5 7 4 6 6 7 5 5 7 7 6 6 6 סוף מעבר ראשון 0 סוף המלון בדוגמא זו, 1 ירד במעבר השני מ-3 ל-0 ולכן אין צורך במעבר נוסף. תכנילת מלון בשיטת הבועות: ;א=:1 (1) 0 > מצאח (2) אזססת (3) :1 (4) 0 7-1 70 1:=1 קסק (5) אצ [1+1]א < [4]1 עד (6) אזסות (67) =:דאא? (8) =:ן[4]1 (9) :א =:[2]1+1 (10) 1:1 (11) ; פא (12) :1 (13) ; פא (18) 100 הסבר: (1) בווקטור המקורל יש א אלברלם. (12)-(6)6 השוואת הזוגות. המשתנה ‏ 2 מקבל את הערך של האיבר הראשון בזוג האחרון שנבדק. (13) המשתנה 1 מקבל את הערך הסופל של 1. בפעם הבאה הזוג האחרון שנבדוק לתחיל מאלבר 1-1. המשתנה 2 יקבל ערך חדש של 0 ורק לשתנה במהלך ההחלפות שתתבצענה כתוצאה מפקודת 1 בשורה (6). 08 השוואה בלן שלטות המלון (%) א. מלון ע"י סריקה בשיטה זו מספר ההשוואות קטן לותר מאשר בשיטות האחרות ובממוצע דרושות לו 4א הטשוואות. אפשר להקטלן את מספר ההשוואות אם משתמשלם בשלטת חלפוש בינרל במקום בשלטת חלפוש לינלארי בכדי? למצוא את המקום של האיבר שנבדק. בדרך זו מספר ההשוואות מתקרב ל-א1082*א. במיון ע"י סרלקה מספר ההחלפות גדול. ככל שהרשימה יותר ארוכה, מספר ההחלפות לותר גדול. ב. מלון ע"* בחלרה לינלארית במעבר הראשון משוולם את האלבר הראשון עם 1-א האלברים האחהרלם. במעבר השנל משווים את האלבר השנ? עם 2-א האיברים הבאלם אחרלו. במעבר השלישל? משווים את האלבר השלישל עם 3-א האיברים הבאים אחרלו וכו'. מספר ההשוואות שווה ל: 2+1+.....+(2-א)+(1-א). זהו טור ארלתמטל שסכומו הוא: (ראשרך + אחרוך) (- 595 האיברים-) = [1+(1-א)] (--) ב אכ1-א+ 2 2 במעבר ‏ 1 מחללפים את [4]1 בקטן מבין כל האלברלם שבאלם אחרלו. לש אם-כן, החלפה אחת בכל מעבר ולכן יש 1-א החלפות בכל 1-א המעברלם. בשיטה זו מספר ההשוואות זהה, גם אם הווקטור המקור? מסודר במלואו או בחלקו. ג. מיון ע"? החלפה, או מלון בועות שיטה זו אלנה לעללה *ותר מבחלנה מתמטלת מאשר מלון ע"? בחירה ללנארית, אך היא לותר מורכבת ממנה. המספר המלרבל? של מעברים הוא 1-א₪/ מכלון שלאחר כל מעבר, לפחות זוג אחד נוסף כבר מסודר. גם בשיטה זו, כמו במלון ע": בחילרה לינארית, יש 1-א השוואות במעבר הראשון, 2-א במעבר השני, עד שלש השוואה אחת בלבד במעבר האחרון. לכן, מספר ההשוואות הוא 1(/2-א)א. ברוב המקרים אי צורך לבצע את כל 1-א המעברים. בדרך כלל, המעברים שאין צורך לבצע הם בסיום התהליך כאשר מספר ההשוואות קטן ולכן התחיסכון אלינו גדול. הבעיה העלקרלת בשלטה זו היא מספר ההחלפות. הרצוי הוא, שתהלה החלפה אחת בכל מעבר, דהלינו 1-א בכל התהליך כמור במלון ע"י בתלרה ללנלארלת. למעשה, מספר ההחלפות בממוצע הוא מחצלת ממספר ההשוואות, כלומר 1(/8-א)א יך. החלפות בכל התהליך -/ | בטילטת מיון זו כדאל להשתמש כאשר הנתונים כמעט מסודרים בתתילת העבודה. מספר המעברלם וגם מספר ההשוואות וההחלפות להיה לותר קטן. ד. המלצה = מלון ע"? סריקה טוב כאשר מספר האלברים קטן (למטה מ-20). * מלון ע"* בחירה טוב אם הרשלמה גדולה. * מלון ע"? החלפה טוב אם הרשלמה כמעט ממוילנת ויש להחליף רק איברלם מעטלם שאלנם לפ? סדר המלון. מו הראו? לציין שיש שיטות מיון מורכבות ולעילות יותר מאלו שהוזכרו כאן. הסיטות שהוצגו הן הפשוטות והמקובלות לתכנות. 5 תכנפת המלון כסיכום לפרק שלטות מלון נצלג לדוגמא תכנלת מלון שלימה עם תרשימי זרלמה. נניה שקללמים הנתונים הבאים עבור כל פועל במפעל: - שם. - משכורת. - אחד משלושת הצלונלם 4, 5, 6 אשר מגדלרים את איכות עבודתו. נתונים אלה אלנם מסודרלם. ‏ יש לקרוא אותם למחשב, לערוך את הפלט הנדרש ולהציג אותו. הפלט הוא רשלמת העובדים מסודרת (ממולינת) בסדר אלפבתל של שם העובד. הנתונילם לכל עובד כוללים את שם העובד, המשכורת והצ?ון. במקום קוד הציון לש להדפיס את הכינוי שלו: 'אגצט2צמעא' במקום הקוד '4', '100' במקום 'פ', ו-'גלששא' במקום '0'. תחילה יש לקבוע את שלטת המלון ולהכין תרשים זרימה. נקרא את הנתונלם ונמיין אותם בעת הצבתם במערך שבזכרון. השלטה תהלה למצוא את המקום בעבור השם החדש במערך מסודר של שמות ולהציב אותו במקום זה, כלומר מלון ע"ל סריקה. המשתנלים ש*וגדרו בתוכנלת: אנפטסאגא: מספר מקסימל: של עובדים שהתוכנלת תוכל לטפל בו. 1[]: גגודל המערך שמחזיק את השם של הפועל (מערך של תוולם). פמטס: מערך שמחזיק את השם של העובד שהתקבל כקלט. 61 אטצ121: הציון של העובד החדש. 8ְ508: השכר של העובד החדש. אסץאא: שם של אינדקס עבור המערך 080258 כ0/8. התחום הוא מ-1 עד ל-₪08א0. אנסטס 152(8א: מספר העובדים שקראנו עד עכשליו. אזפצס: מערך של שמות העובדלם. כל איבר ב-0/21% הוא בעצמו מערך שמכלל את השם של כל אחד מן העובדים. אוצז?ז: מערך שמכיל באיבר 1 את הציון של עובד 1. הצלון הוא אחד האותיות 'ג', '8', או '60'. %8: מערך שמכיל באיבר 1 את השכר של עובד 1. 12 -ו תגעפא: שם של אינדקס במערך אזפטס. התחום הוא מ-1 עד ל-אדפטס 115248. ו משתנה בוליאנל שערכו משתח עד שמוצאים את המקום הנכון שבו ילוכנס השם של הפועל הנוסף 0842458 ספטס. )גת 5ג152א: המקום הנכון ברשימת העובדים עבור הפועל הנוסף ששמו נמצא במערך 8 פמטס. תרשים זרימה לפתרון בעלה זו מוצג בהמשך. א. תרשלם זרימה ראשל (שורות (18)-(54) בתכנלת). צסא) סאת (505 אנפטס תהקפזא קרא נתונל עובד-חדש הסבר: ממשלכים את הטיפול בנתונים כל עוד לא מגיעים לסוף הקובץ. מניחים שגודלו של הקובץ (א14עש0 15248) לא עולה על גודל המערך (א18פט0 %גא) שהוקצה כדל להחזיק את שמות העובדילם. ב. קרלאת נתונים של עובד חדש (שורות (22)-(25) בתכנלת) קרא ז1פתסת חס ספטס [אסאתא] קרא אפתכתחט, 50 אפתסתטאס.אטצ21דך הסבר: קוראלם את האותיות שמרכיבות את השם של העובד הנוסף ומכניסלם אותן למערך 58 1חפ. קרלאה זו נעשית בתוך לולאת 20..א0ע בתוכנית. כדל להמנע מסיבוך יתר של התרשלם, השתמשנו במבנה חדש שאלנו סטנדרטל, אבל נוח למל שמתכנת בפסקל את הפקודה 708..20. בתוך המבנה רשום שם האלנדקס וגבולו התחתון והעליון. אחר-כך קוראים את המשתנלם 50 ו-0₪42258 א0צ121 עבור אותו עובד. ג. עיבוד (שורות (26)-(43) בתכנלת) הזזת איבריס שמקומם אחרכ פתסתטס. פמק הסבר: שלטת המלון הלא חלפוש המקום המתאים ברשימת הטמות עבור הנתון 0842458 כ0/8 שעכטשיו נקרא, ז"א שמבצעים מיון ע"י סריקה. כאשר מוצאלם את המקום המתאים, מזיזים במקום אחד את השמות שרשומים במקום זה ואילך אל כלוון סוף הרשימה. כך מתפנה מקום עבור השם החדש. 158 ד. החיפוש מקום ברשלמה עבור השם החדש (שורות (26)-(33) בתכנלת) ברשימה --> תת11152 מטסתץ --> 5מפתחסא --> 11528 (מתק15א) 50006 פמפתסא =>תק115) פאת -פתספדא (אנפטס הפתסתת-.תת152 52 -4> -+> פמקת61ו מפזתע הסבר: | החיפוש נעשה ע"י השוואה של 0842058 כעמט0 אל כל אחד מן השמות ברשימה, עד אטשר מוצאים שם שערכו האלפביתיל לותר גדול ממנו. שם זה נמצא במקום שכלנולו ₪ 1528 וצריך להחליף אותו ע"י 040458 כע/0. כאשר קולטים את השם של העובד הראשון אין צורך לעשות חיפוש. במקרה זה 15248 (שערכו ההתחלתל הוא 1) גדול מ-1%כט0, 15208!! (טערכו עדייןו 0) ולכן לא נכנסים כלל ללולאה. 15 ה. הזזת איברלם שמקומם אחרל 0820258 סתטס (טורות (34)-(43) בתכנית). הזזת איברלם טמקומם אחרל 8% תקתוזס. ממטס אזפטס 8ה52זא=:אתפ5זא [תת5דוע] אזפטס=: [ (8ג159א)5000] אנפטס זפ תסתזזס תדו [תק5דוא] תת90]1=: [ (8ת59צא) 5000] 90 [155א] אטצד2ץ =: [ (פּת159א) 8000] אטצצ2 [פתסתזס--8ת150] אנפטס זפ תכת- פמט -7> [5₪תסתצס- תתק5דוא] תתז90 ₪4פתסתס-8ת801 --> [5₪תסתס- תתפ5דו] אטצצ2ל תסתזוס ,. אטצ221 --> --> אצפעס 111528 1 + אצפטס-תק5זא הסבר: מזיזים כל שם שמקומו שווה למספר הסידורי 01120458 15248( או למספר סלדורל כותר גדול. | רושמים | 082451 כעץ0 במקום | שהתפנה ע"? הזזת [640458 8238דע] א1סטס ומוסיפים 1 ל-א1סט0 א1524א. מבצעים פעולות מקבילות במערכים עבור שכר וציונלם. כאשר מטפלים בעובד הראשון אין צורך בהזזה כל אנסטס 115288 עדיין שווה ל-0 ו-6842488 1115248 שווה ל-1. לא תתבצע כל הזזה ולא נכנס כלל ללולאה. 156 ו. הפקת הפלט (שורות (45)-(53) בתכנלת) כתוב , [מ598ד1ע] אצפטס [פתפ5דא] 508 הסבר: כותבים את השם ואת השכר של כל עובד. ז. טיפול בציון (שורות (48)-(52) בתכנלת). אצ [תה55דא] , נ=:פתפפזא אדסטס. תתקפדא 107 ח. תכנית המלון 118 ; (1טעצטס , צטעאד) 0113ת5%0ג 1תססתק 00 ; 00 1= 00 ; 001=25 מקצין .0 עס [מסעתס..1] צגתתג כמאסגת =כמטס [זם תג ;אסא .0 :אדפטס בדו ;,א00ת : פסקגח6א : 0%א ;אדסטסאא. .1 : מפהסגחס תגע5דא ,תג52זון פס 51 ע0 [אדפטסאאא. .1] צגתתא : אנפטס ;תת עס [אדפטסאגאא. .1] צגתתג : ת.ח50 .ג : הפגכגת6 אסצך2?ך ;''..'' עס [אדפטסאגא..1] צגתתג : אטצ21ך סמטס 58% : א5גתגחס ספמטס : 0251 50.5 אזססם ; 0=:א1מט0 38פ5ד 0 (אנפטסאגא > אנפטס 15248ו) פאג ע0ם צסא מתזתטח אס (('הקט שם, שכר וציון') א]שדדתח 0 עספתס 70 1 =:אסאגא תסע ; ( [480% ]612458 ספט0) עגפת ; (6140251 אטצ21ך ,058 5088) א,זפאמת ;1 =:115242 ; שחת =: 014285 520 (אדפטס 5048זו => 45ק5דא) סאב פסקגחסא ,דוו אמצ [48ע5דא]א1פטס > 02451 פמטס עך 5 =: 05 וו ; (5000)015945 =: 1115248 ;159 =:0142458 ת2פ5ז 20 זז 8גק5דון ס'אזוסת א1פטס 8גק5זא =:415242 708 אז ; [ 15289 01 =: [ ( 5000)01115248 ]001% ; [ 111524] 50112 =:[ (5006)15248 ] 50142 [ 49ק5זו ] אסצד2יד =: [ (50060%15288 ] אטצ21 ; פא ;1 כמ : [040458 8 52דוע] ןפטס 0 505 : [0840458 15248א] 5018 אד =: [084045₪ 15248א] אשצ21ך 01 גד =:07018 1115248 ; פא סע א1פטס ת4ל5דע 0 1 =:48ק15א אסע אזסתת ;.(08422458:10:2 5088 ,15 : [ 15248 1 פט0) מדאח עס [52428דא]אשצז2ץ 655 ; (10: 'אגצט2נ' ) אזמדדאט:'ג' )1( )2( )3( )4( )5( )6( )7( )8( )9( )10( )11( )12( )13( )18( )15( )16( )17( )18( )19( )20( )21( ; (5:'טסד') אתפדדו:'ם' (50) (8: ' נוא ) אזמידדתט:'0' (51) פא (52) פאם (53) .פא (54) הסבר: (25)-(22) קוראים את אותיות השם, תו אתר תו בעזרת לולאה. מכיון ש-08801 טשווה ל-25, פלרוש הדבר הוא< ש-25 התווים הראשונים שלקראו ישתללכו ל-612458 פמטס. אחרל הטם אפשר להשאיר מספר כלשהוא של רווחים עד שכותבים מספר, שיתקבל כערכו טל 40258ם0 ת50. מיד אחרל המספר צרלך להופיע הערך של ₪ אטצ21ץ, ץ"א אחד מן הערכלם 'ג', '5' או '0'. אם נשאיר רוות אחד אחרל המספר, הרוות יתקבל כערכו של 0842451 אשצ121 ויגרום לנתון שגול. רוב המהדרלם מאפטרים לקרוא מחרוזת שלמה בל? צורך בלולאה. במהדר כזה, שיכול לקרוא תא עס צגתתה פתאסגת בלי לולאה, נוכל להחליף את השורות (23)-(25) בפקודה אחת: (42458ה6 אשצ21ך 05 5018 0458 כמטס) את (33)-(28) פקודות פסקל עבור הקטע "חיפוש מקום ברשלמה עבור השם החדש". במקום השורה (32) אפשר לכתוב 1115248:=%15248+1. הפונקציות 5000 ו-עעת? מוגדרות לא רק עבור סוגי נתונים המוגדרלם ע"? המשתמש, אלא גם עבור הסוגים המוגדרים באופן אוטומטל: = תתסתדא1 - למטל, 5000)10(=11, = 045 - למשל, ''=('ג')5000, = אגת3001 - למשל, 05א8000)74158(=7. (44)-(34) תכנות הקטע "הזזת איברים שמקומם אחר? 6840458 סמטס". בפקודות (34)-(39) מזיזים את הנתונלם של העובדים כד? לפנות מקום ברשימה עבור העובד החדט. בפקודות (40)-(43) מכניסים את פרטל העובד החדט למקום המתאלם לו לפל סדר המלון. ט. דרך נוספת לפתרון הבעלה לכל עובד יט 3 סוגל נתונים. היה לכאורה אפשרל להכלן טבלה שרוחבה 3 ואורכה כמספר העובדים (מערך דו-מלמדל), אבל דרלטת קדם למערך הלא, שכל האלברלם ילוגדרו בצורה זהה. כאן, הטשדה "שם" (מסוג כמש/0 518₪4) שונה בסוגו מהשדה "טכר" (.זגתַ3) ומהסדה "צלון" (תת-טווח של 0848). אופל הנתונלם, אשר שונים במבנה שלהם, מחללב להגדיר שלושה מערכים שונים, כל אתד עם הגדרת הנתונים המתאלמה לו. אפשרות נוספת היא להגדיר את הנתונים של כל פועל כרשומה. בנושא זה נדון בפרק 9. בתכנית ‏ זו המלון נעשה בזמן קרלאת הנתונים בשלטט הסריקה. הלה אפשר לקרוא תחילה את כל הנתונים ואחר-כך למיין אותם בטלטת מלון ע"? החלפה, למשל. 1:19 בקטע התכנלת הבאה מוצגת קרלאה אקראית של נתונ? עובדים למערכלם אדעטס, 08 ו-א0צ121 מבלי למ?ין אותם לפל הסדר האלפביתי של שמות העובדים. :טס תגספדא (1) 0ם (אדמטסאגוא > אדסטס תגשפדא) שאה (תסם צסא) מתדא (2) אזסעת | (3) 1+וד טס ת53דוע =:אדפטס תפדוו (4) ;('הקש שם, שכר, ציון') אמדדתח (5) 0 תס 70 1 =:אסאגא תסע (6) ; ([אסאו] [אדפטס תגפפדא] אדפטס) פגמת (7) ( [4 טס תתפפדוו]אטצד2ץ , [אדפטס תפפדא] תג50) אזסגחת 1 ; פא 9 הסבר: (7)-(6) קוראים כל שם למקומו במערך 0%21%. האלברלם של המערך 021% הם בעצמם מערכים מסוג 0/0 5881 ולכן צריך לציין באופן מפורש את המקום בתוך המערך הזה שאליו קוראלם את הנתונלם. בפקודה זו רשומלם שנל אינדקסים, שכל אחד מהם כתוב בלן סוגרלים מרובעים. לטנם מהדרים אשר מאפשרים לכתוב רק פקודה אחת במקום הפקודות שבשורות (6)-(7). פקודת הקרלאה החדשה תהלה: ‏ ([14סט0 8גע5דא]אדפטס) סגאפת כאשר רשילמת השמות נמצאת במערך 0%21%, אפשר למלין אותה בשלטת ההחלפה. בתוך קטע המלון מבצעים באופן איטרטיבי את הקטע שנקרא "החלפת איברים". בסוף ביצוע פעולה של "החלפת אלברלם", רושמלם בתוך המשתנה 1 את המספר של האלבר הראטשון בזוג האחרון שהוחלף. בפעם הבאה תיעשה החלפה בין 2 האלברלם הראטשונים. ‏ אם אלן צורך להחליף איברלם, 1 לשאר עם ערכו המקורי 0 והתהליך של 1118..20ה0 לפסיק לפעול. גם אם נקבל 1=1 בסיום של המעבר הקודם, אין צורך להמשיך כל לא נשארו זוגות אלברילם להשוואה. תרשילם זרימה לקטע זה: ---- אתק15 אצסטס, תתפפצון ,ז-> תהפפדא 100 <[ד] אצפטס [ג+1] אצפטס ?2 ; [ד) אצפטס -->- 58הסתאס. פטטס ;[1] תה503 -4 5תסגס. תתזוספ ; [1]אשצ221 --> 58הפגאס אטצצ2ל ; [1+1] אצפטס --> [צ] אנפטס ;[1+1] תפתאס5 -> [ד] תת08פ ; [נ+1]אטצד2ע -> [ד]אטצד2ע ; 511 תאס. פמטס -= [1+1] אצסץס ;תס תגאס -> [1+1] תג508 תפוס אטצד2--> [1+1] אסצנ2 הקלדוד עבור קטע המיון נלתן להלן: אדסטס 5048דו =: ת34ע5זאא (1) 0 < תגקפדא ממזוח (2) אנסתת (3) )4( = 0 נ-ת45ת15א 70 1:=1 א0סע (5) [1+1 ]ונפטס < [ד]אדפטס עד (6) אמזיד (67 אזססת (8) [ד]אדפטס =: 0840454 פוטס (9) [509]1 =: 010458 50148 (10) ; [1]אטצ21ע =: 40458ה0 אטצ21ך (11) [ 1+1]ופטס =: [1]א1פטס (12) [50845]1+1 =: [50848]1 (13) [1+1]אוו21ד =: [1]אטצד2ד (14) פפטס =: [1+1]א1פץס (15) ;חס 8008 =: [508]1+1 (16) ,65 אשצ21ד =: [1+1]אטצ121 (17) 5 1 =: (18) ; פא (19) 5:1 (20) ,םע (21) פקודות (5)-(19) מתליחסות לקטע "החלפת איברים". 11 4 מלזוג נניה שלשנם שני ווקטורלם ממוילנלם, אשר רוצלם לאחד אותם לווקטור אחד שגם הוא ילהיה ממוילן. הדרך הפשוטה היא לצרף את שנ? הווקטורים האלה לווקטור אחד ואח"כ למלין אותו. שלטה זו אלנה לעילה כל היא אינה מנצלת את העובדה ששני הווקטורלם כבר ממוללנים. שיטה הרבה *לותר לעילה למלזוג לוקחת בחשבון את העובדה ששנל הווקטורים כבר ממולינים: סורקים במקביל את שנל הווקטורים ומעבירים את האיבר הקטן לותר מבין האלברלם של שנל הווקטורלם אל ווקטור שלישי, שהוא ווקטור הלעד. שלטה זו מחיליבת רק השוואה אחת והעברה אחת לכל איבר שלהלה בווקטור המטרה הממוללן. כתוצאה להלו א השוואות ו-א העברות, לעומת מספר הרבה ליותר גדול של פעולות בשלטות מלון אחרות. תכנילת למלזוג שנל ווקטורלם: ; (דטסקנטס , צטפא1) 1206 גתסספק (1) תתט (2) ,תתא ע0 [1..100]צגתתג :0 ,2 ,ב (3) עתסתדאת :תע ,א ,א ,א ,1 ,ך (4) אנססת | (5) (* שתי פקודות בשורה אחת *) :א ;0=:א (6) ;('הכנס את האלברים של ווקטור ג') אזתד1תח (7) 0 ₪0 סא מ דוו (8) אזספת (9) =:א (10) ([א]4) פגתת (11) ; פא (12) ;('הכנס את האיברים של ווקטור 5') אהשמדזתח (13) 0 עס סא ₪ זדאט (18) אזסחת (15) )1+א =:א (16) ([א]4) פותת (17) ; פאת (18) :ד (19) 1:12 (20) 0=:א (21) 0 (א => נ) פאג (א => ד) מזזחט (22) את (23) =:א (24) אע []8 > [4]1 חך (25) אזסטת (26) =:[8א]0 (27) 1 (28) פא יְ (29) כו (30) את (31) 1 =:[א]0 (32) אמח []5 = [1]ג עד (33) 1 =:ך (36) 12 1 =:1 (35) פא (36) ; פא (37) אחד א >> 1 עד (38) 0 א 10 1=:ת אסע (39) אזסספ (40) ; 1+%=:% (41) [פ]א =:[א]0 (42) פא (43) מפזת (44) אחח א >> תד (45) 0 א 10 7=:ת תסע (46) אזססת (47) 1 =:א8 : (48) [ע]5 =:[א]0 : (49) פאק (50) ,עאת (51) הסבר: (4) המשתנלם א% ,1 ,1 יציינו את האינדקסים במערכים 4, 8, 6 בהתאמה. (37)-(22) בוחרים את האלבר הבא ב-2 או ב-8 ומכניסים אותו ל-0. (29)-(26) טלפול במצב טבו האיבר הבא ב-4 קטן מהאלבר הבא ב-8. מעבירים את האלבר מ-4 אל הוקטור החדש 6. (32) אם האיבר הבא ב-4 אינו קטן מהאיבר הבא ב-8 (כלומר האלבר ב-8 קטן מן האלבר ב-4, או טשווה לו), מעבירלם את האלבר מ-5 לוקטור החדש 6. (34)-(33) אם האלברים ב-4 וב-8 שוולם, מעבירים ל-0 רק איבר אחד. לכן, מקדמלים את האינדקס של 4 מבל* להעביר את האלבר ל-6, כל את האלבר מ-3 כבר העברנו בפקודה שבטורה (32). אם רוצים להעביר את שנל האיברלם צרלך להשמלט את השורות (33) ו-(34). במקרה של שלוולון הלינו מעבירלם את האיבר שמקורו ב-5 ואח"כ - את האיבר שמקורו ב-4. (50)-(38) טלפול באלברים של אחד הווקטורים כאשר אלן איברלם נוספים בווקטור האחר. ו (43)-(38) אם נשארו איברלם בְ-, בשעה שב-8 אין איברים נוספים, מעבירים אותם ל-6 בזה אחר זה. (50)-(44) אם ב-8 נשארו אלברים כאשר אין כבר אלברלם ב-4, מעבירלם איברים אלה ל-0. 13 5 תרג?ללם 1 ששאלות (1) שנה את התכניות למיון לפל שלוש השלטות אשר רשומות בפרק זה, כדל שתבצענה מלון בסדר *ורד, מגדול לקטן. (2) טנה את השיטה שהוצגה למיון ע"ל סרלקה, בכדי שתמיין ווקטור קללם עם ערכים (ולא כפי שמוצג בדוגמא). (3) הרחב את התכנלת למלזוג של שני ווקטורלם ממויינים בכד? שתמזג שלושה ווקטורים ממוללנים. (4) (*) שנה את תכנית המלון לפל שלטת הבועות, כדל שתפעל בדרך הבאה: א. תעביר את האלבר הגדול לסוף הרשימה (מקום ם) ע"? הטוואות, כמו שמוצג בפרק זה. ב. תשווה את האלברים בצוגות, החל מן הזוג האחרון, שמורכב מן האלברלם (ם,1-ת), עד הזוג הראשון שמורכב מן האיברים (1,2) ותעבלר את האלבר הקטן בלותר למקום הראשון. ג. תעביר את האלבר השנל בגודלו למקום 1-ם, בדרך דומה ל-א'. ד. תעביר את האלבר השני בקוטנו למקום 2, בדרך דומה ל-ב'. ההשוואות וההעברות תמשכנה בדרך זו עד אשר נקבל ווקטור ממולין. (5) (*) הרחב את השלטה הקודמת כדי שכל מעבר יתחלל תמיד רק מהמקום של ההחלפה הקודמת, ויגיע רק עד למקום של ההחלפה שלפנ? האחרונה. 2 תכנלות (1) בארגון מסולם המשכורת המלרבית הינה קבועה לפי שנות וותק, כפי שרטום בטבלה. אם יש לותר מ-25 שנות וותק, או פחות מ-3, אין חובה לנהוג לפל כללים אלו. , שנות וותק משכורת מירבית 1-5 -.475 20 -.578 13 -.682 1-0 -.810 2|5 -.950 כתוב תכנית שמקבלת כקלט שמות של עובדלם ושנות הוותק שלהם. הפלט להלה דו"ח אשר לכיל את השמות של העובדים והמשכורת המלרבית שלהם על פל שנות הוותק. בסיום לש להדפלס את מספר העובדים בכל קבוצת וותק. (2) נתון ווקטור של ערכים לא מסודרים. כתוב תכנית בכדל למצוא את החצלון, אשר מוגדר כערך האמצעי של הווקטור. שלבל הפתרון: * מסדרלם את םת האלברים בסדר עולה. * אם ם הוא אל-זוגל, ההציון הוא הערך שמספרו הסידורל הוא 1(/2+םת). 164 . אם ם הוא זוגי, החציון הוא הממוצע של שנל ‏ האלברים שמספרלהם הסלדורללם הם 2/ם, 1+(2/ת). (3) הטמות של תלמלדלם בבי"ס מסוים מסודרים ברשלמה ממויינת בסדר אלפבלתל והשמות של התלמלדים החדשלם נמצאלם ברשלמה בלת? ממולינת. כתוב תכנלת אשר קוראת את השמות של התלמלדלם החדשלם, שמה אותם במערך ואח"כ קוראת את הרשלמה של הפלמידים שכבר לומדים בבלת הספר. התכנילת מדפיסה ‏ רשימה מעודכנת של כל התלמלדים בזמן הקרלאה של הרשימה הממוללנת. (4) חזור על תרגיל (3) כאטר שתי הקבוצות של שמות התלמלדים אינן מסודרות בזמן הקלט. (5) לתכנית המטפלת בהשבת אבלדות לט שנל סוג: קלט: = תיאור המצלאה, שם המוצא ומספר הטלפון שלו. = שם המאבד ותלאור האבידה אם ילש התאמה בין תלאור האבידה לבין תלאור המצלאה, התכנית מדפיסה שורה עם הפרטלם הבאלם: תיאור האבידה, שם המאבד, שם המוצא ומספר הטלפון שלו. כתוב תכנית אשר מסדרת את הקלט מן הסוג הראשון בסדר אלפבית? ומכנלסה אותו למערדך. כאשר היא מקבלת את הקלט מךן הסוג השנל ‏ הלא עורכת חיפוש לינארי או בינרי במערך הממולין, בכדי לבדוק אם קללמת התאמה. (6) קרא את תרגיל ‏ 11 בפרק ‏ 5. עכשלו תניח שהפרלטים מאותו הסוג אלנם מקובצלם לחד, אלא מעורבים בין שאר הפרלטים. בנה טבלה מסודרת של הפרלטים והשתמש בשיטת חלפוש בינר: כדי לדעת אם פריט חדש כבר נמצא בטבלה. אם הוא לא נמצא בטבלה יס להוסיף אותו. אם הוא< כבר נמצא, ‏ יש לחבר את הכמות שנמכרה מנתונ? הקלט אל סכום המכירות של אותו פרלט באותו חודט. בסיום לט להדפלס את טבלת המכלרות המעודכנת. (7) נפון מערך דו-מימד: [א,1]א0צ121 אשר מכלל את הציון (מ-0 עד 10 של סטודנט ‏ 1 לשאלה א. הווקטור זו נותן את השקלול של שאלה א בתישוב הציון הסופל. כתוב תכנלת אשר מקבלת כקלט את השמות של ₪ הסטודנטים כשהם ממוללנלם בסדר אלפבלת?, את המערך אצזלז ואת הווקטור גא%א158א. התכנלת צריכה להפיק כפלט רשלמה של שמות הסטודנטלם והציונים שלהם, כשהיא ממוללנת בסדר יורד, לפל הצלון. (8) חברת שלווק גדולה מעסיקה עובדים מכל חלקל הארץ. נתונים שלושה פרטלם אודות כל עובד: שם, מספר אלשל ושם העלר בה הוא עובד. כתוב תכנית אשר מפיקה לפל הוראת המפעיל אחד מבלן הדוחות הבאלם: א. שם העובד, מספר אישל ועיר. המלון לפ? שם העובד. ב. מספר אלשל, שם העובד ועלר. המלון לפ? מספר אישל. ג. שם עובד ומספרו האלשל. שם העיר יופיע ככותרת לכל רשלמת העובדים באותה עלר. הרשימה ממוללנת לפ? שמות העובדים בכל עלר. (9) משרד שליחויות מקבל חבללות למשלוח אם משקלן אינו עולה על 10 ק"ג ואם 15 10( 16 כל אחת ממידות האורך, הרוחב והגובה שלהן אלנה עולה על חצל מטר. ‏ דמל המשלוח נקבעים על פ? המשקל: משקל: ‏ 1 2 3 4 5 6 7 8 9 10 מחלר: 5 2.0 2.5 3.0% 3.4 3.8 4.2 4.50 4.8 5.0 אם מלדות החבילה חורגות, אך סכום של שנ? מלמדלם אלנו עולה על מטר אחד והסכום של שלושת המלמדים אלנו עולה על מטר וחצל, אפשר לקבל את החבילה למטלוח במחיר כפול, על פ? משקלה בקילוגרמלם. נתונל הקלט הם: מספר סלדורי של הפעולה, משקל החבילה ושלוש המלדות שלה. הפלט הוא דוח עבודה, אשר כולל נתונלם שונים בהתאם לתנאל מסולם: = אם החבילה קבללה: מספר סידורל של הפעולה ודמל המשלוח שנגבו. = אם החבילה התקבלה למשלוח במחיר כפול, יש לצילן זאת בהערה. אם החבילה לא התקבלה לש להדפלס את נתונל הקלט והערה מתאלמה. בסוף הדוה *₪ להדפיס את מספר החב?לות שהתקבלו, את סכום דמל המשלות שהתקבלו עבורן ואת מספר החבילות שנדחו. ) נתונות רטימות צלונים של סטודנטים ב-5 קורסים. בכל רשלמה נתונים הטם של כל סטודנט שהשתתף בקורס והצלון שלו באותו קורס. כל רשימה מסודרת בסדר אלפבלתל. סטודנט לא חיליב ללמוד בכל הקורסים ולכן שמו לא חייב להופיע בכל רשימה. ילש להדפיס רשלמה טל שמות כל הסטודנטים לפ? סדר אלפבלת?. לכל סטודנט יש לרטום את הקורסים שהשתתף בהם ואת הצלון הממוצע שלו בקורסלם אלו. פרק 8 פרוצדורות ופונקציות מבו קט הוא חלק לוג: של האלגורלתם לפתרון הבעלה, שאפשר לתחום אותו כיחידה שלימה. באלגוריתמלם שבהם ישנם חלקלם שיש לבצע פעמלם אחדות במהלך הפתרון, הטשלמוש בשלטת הקטעלם לכול לפשט הן את המבנה הלוג:י של הפתרון והן את התכנות. כאשר כותבלם תרשלם זרימה לתכנית מתארלם בתרטלם נפרד כל קטע שמוגדר בה. כאשר מקודדים תכנלת שהתרשלם שלה מחולק לקטעים, אפשר לכתוב את הקטע בנפרד, או לכתוב אותו במקומו בגוף התכנלת. בתכנלות שהודגמו עד עכשיו הוצגה רק האפשרות לכתיבת קטעלם. בגוף התכנלת, בדרך כלל בצורה של לולאה. לט לכך מספר חסרונות: א. התכנלת ארוכה ובכך קשה ילותר להבדיל בין המהלך הע?קר?ל שלה לבין הפרטים. אפשר לכתוב הערות ליד כל קטע אשר מתח:ל במלה א2801, אבל אין בכך פתרון לבעיה החשובה של הצגת המהלך כולו. כאשר נוקטלם בדרך זו צריך ללמוד את כל התכנית לפנל טאפשר לטפל בחלקלם שלה. ב. כאשר לש צורך לבצע קטע תכנות פעמים אחדות כותבים אותו מתח*לתו עד סופו בכל מקום שהוא דרוש. כדי להתגבר על בעלות אלו משתמשים בשיטות תכנות של פרוצדורות (68:ט0066ת2) ופונקציות (5ת6%10תט2ע). אפשר לכנות פרוצדורה ופונקציה בשם הכולל שגרה ( 8ם061פט5), אשר מתארת תכנית לבלצוע פעולה מצומצמת שכלחה, או פעולה אשר חוזרת פעמלם אחדות בתכנית העלקרלת. בהמשך נלמד מת? ואיך להשתמש בהן. 2 פפרוצדורות בתכנית הבאה נכתוב גירסה חדשה של התכנית 445%08813 שהוצגה בפרק 3. תרשים הזרימה נשאר ללא שלנול. 17 ; (צטעצטס , צטפאד) 8714ת0א15ן אאתססתע (1) (% תכנית זאת מחשבת את המשכורת של כל 50 הפועלים במפעל *) (2) ּ פאט (3) ;זתת :0 ,507 ,תטדע8 | (4) ;פת6מצאז :אאסא | (5) (* בתרשים שבפרק 3, קטע זה נקרא "עלבוד" *) דוס פתטספססתתע (6) אזססת (7) ; (5407' , א5810) פגחת (8) 7 * או1ח5 =:50848 (9) ; ('הטכר עבור"' ,58401:6:1 ,'טעות הוא"' ,50848:8:2) אועדזתח (10) 1אסא =:מאסא 0 (11) ; פא (12) (* התכנית הראשלת *) אנסעת (13) ; 1=:מאסו (14) (* קרלאה לפרוצדורה *) אףפדחס 20 50 => מאסא מתזחאח (15) .אע (16) הסבר: בתכנית זו לא כתבנו את הקטע "081580" בגוף התכנית כמו שעשינו ב-4159%00873, אלא רק את המלה /081518. הפלרוט של הפקודות בקטע זה נעשה בפרוצדורה בעלת שם זהה, החל משורה (6). בשורה (66 כותבים את המלה אמוסתססתת ואחרלה את שם הפרוצדורה, אשר משתמשלם בו להפעלתה בהמשך התכנלת. את הצהרת הפרוצדורה (ם8%10ץ286618 6עט2:0006) שבשורה (6) כותבים תמלד אתרל הצהרת המשתנים של התכנלת. המשתנלם שנמצאים בתוך הפרוצדורה הוצהרו בהצהרת המשתנים של התכנלת הראשלת. כל משתנה שמוצהר בתכנית הראשלת וכל ערך המלוחס אליו, תקף גם עבור הפרוצדורה. כל שלנול בערכו של משתנה כתוצאה מבלצוע הפרוצדורה, תקף לגבי התכנית כולה. בדוגמה הבאה נשנה את התכנית הקודמת כדי שתוכל לטפל בכל מספר של פועלים, ולא רק ב-50. בנוסף לזה, נחשב את השכר הממוצע, מספר שעות עבודה הממוצע וגם את שלעור השכר הממוצע לשעה של הפועלים. מכלון ש-3 הפעולות האחרונות עוסקות בחישוב ממוצעים, כדאי להגדיר פרוצדורה אחת לחלשוב ממוצעלם ולקרוא לה 3 פעמלם. ( : תרטים זרלמה לתכנלת: 1.8 (גת072י, תת50₪3 , 15989א) הלטאטו כתוב ממוצע ש א תת<יסיי, ד'סתהפ , פהק15א) הקלטאפא ן כתוב ממרצע ש צסהחפ ( ג072', אטז53 , תה115) ה2טאפון 1.9 (מצתת , פתטסא, צפת,זת6, תמפואטא) מ זטא-,נטפד תטנצאתזתא (מסתתפשת , הסתחתון, תפפאטא) ה2טאטוע 110 הסבר: + התרטלם הראשל משתמט בשת? פרוצדורות עלקרלות. הראשונה, 7מטא מ0פ11, מפקחת על לולאה שקוראת לפרוצדורה משנית שקוראת את הנתונים, מחשבת שכר ומדפיסה. הפרוצדורה העיקרית השנ:לה, ₪0022א, מחשבת ממוצעים של מספרים שנמצאים במערך. משתמטים שלוש פעמלם בפרוצדורה לחישוב הממוצע: בכדל לחטב סכר ממוצע, ממוצע השעות ושלעור הטכר הממוצע לטעה. לפרוצדורה בתכנית זו קטורים מספר משתנים שיוסברו בהמשך. כאשר משתמשים בפרוצדורה בתכנית הראשלת לש לרשום את טשמה (למשל 2שא, | או ץש זא תטפדד) ולאחריו בסוגרלים - את השמות של המשתנלם הנדרשים בפרוצדורה. בתוך הפרוצדורה עצמה, מכלנים רשימה מקב*לה טל משתנלם, שבה נמצא לרוב שמות אחרלם, כל הפרוצדורה מלועדת לשימוש כללי ונכתבת לעתים בנפרד מהתכנית הראשית. לכן, במקום 115248 כתבנו ממפועטא בפרוצדורות עמזטא מטפך1 ו-024 ובמקום א0ז58, 07 ו-5088 השתמשנו במערכים הכלליים פתשסא, טעגת ור-%צ541 בהתאמה. בפרוצדורה 2/0024 השתמשנו בטם 444068 שהוחלף בכל קרלאה ע"ל אחד מן המערכים אתודתם, 58407 או 508%8. התכנלת הבאה מבוססת על התרשימים הקודמלם: ; (טפינטס, דטפאד ) 5 אהתססתת (1) תקצץ (2) ,זומת עס [1..100] צגתתג = מקצדצאאה (63 תג (4) מק צךצתת התטנ ,5807 ,ת5014 (5) ת0מעאד :15248 (6) ;ות :707244 (7) םוטא מטעזד מתטסתססתע (8) ; תמדא : תמפאטא) 0 (9) ; (מפצנצגתת :מדגת ,תטסם ,צא5414 אגץ י (610 תג (11) ; :ד (12) ; הנדא בדתא מאטסתססתע (13) י .> אדסספ (14) ; ( 'הכנס מס'' שעות ושכר לשעה') א/מדזאח (15) ; ([ד]פדגת ,[1]פהטסמ) אתפגפת (16) , ; [ד]מידגת=[ ]פ5תטסת =:[1]צת541 (17) ,' שעות הוא"' ,1[:6:2]צת5414) א]מדתא (18) ('השכר עבור"' ,30085]1[:6:2 , (19) ; פא (20) (* פרוצדורה ץקזטא מטעדך *) אזסת (21) סע תמפטא 20 1:=1 08ע (22) (* קריאה לפרוצדורה *) הסדא זתא (23) ; פא (24) סאד תמפותוא) ג2?טוון מתטקתססתת (25) מקצוצגתחה :61תגון (26) 11 ; (,1ת:08פת/) תג (27) תג (28) פתסתעאך :ד (29) ;תת :56 (30) (* פרוצדורה 2 *) אזסטת (31) 7-ו (32) 0 תמפוא 10 1:=1 תסע (33) [ד] תא + 504 =:אפ (34) תתמטא/50 =:תס תב (35) ; פא (36). (* התכנית הראשלת *) אזסעת (37) (('כמה עובדים במפעל?') אזמצדתט (38) י ; (9ע15ון) אזסאתת (39) ((תט1ח5 ,58407 ,50838 ,תגק5דא) דסא ,זסקדד (40) ; (107248 ,5018 , 158וע) הקטוסא (41) (('השכר הממוצע הוא"' ,101224:8:2) א[מדדתט (42) ; (107238 , 5807 , תהק15ון) בוו (43) ;(מספר ממוצע של שעות הוא, ;170724:8:2) אזתדדחט (48) ; (1017244 ,אטזח5 , 28ק15) הלש (45) :('השכר הממוצע לשעה הוא"' ,101244:8:2) אזמדתט (46) .פאע (47) הסבר: (7)-(2) בשורות אלו מגדירים משתנלם גלובליים (182165ע8/ 610281) וסוגלם גלובללים (פ65כַצ7 1 אלה הם משתנלם וסוגים שלהלו מוגדרים במהלך כל התכנית ונוכל להשתמש בהם בכל פרוצדורה בלל כל הצהרה נוספת. (47)-(37) קטע ‏ זה מהווה התכנית הראשלת אשר מקבילה לתרשים הראשל. לאחר קליטת מספר העובדים (115248), קוראים לפרוצדורה 7ק]חא 00ע11 בטורה (40). פקודת הפרוצדורה "7 זחא זטקדי: שורה (40) נקראת פקודת הפרוצדורה (%מ558%0₪06 6ע2:06660). הלא כוללת את שם הפרוצדורה ובסוגרילם - רשלמת פרמטרים אמיתילם 7828₪066:5(‏ 100081), אסר מהווים את הארגומנטים של הפרוצדורה. הארגומנטים האלה לחללפו את הפרמטרלם הפורמללים (6665מ2878 81מעסץע) שבהצהרת הפרוצדורה ובגוף הפרוצדורה עצמה. בתרגיל זה, המשתנה האמלת? 1528 לחליף את הפרמטר הפורמל: תמפוטא. המשתנה 1598 צריך להופיע בהצהרת תג (ראה שורה (6)). סוגו מוגדר כ-8088זַא1, ולכן הוא יכול להחליף את תעמאטא, שסוגו זהה. על המתכנת לדאוג לכך שסוגו של פרמטר אמיתי יהיה זהה לסוגו של הפרמטר הפורמל שהוא מחליף, אבל אלן צורך להזכלר את סוג המשתנה האמלתל בפקודת הפרוצדורה עצמה. מן הראוי לציין שסדר הפרמטרים חילב להיות זהה בהצהרת הפרוצדורה ובפקודת הפרוצדורה. נלתןו לבדוק זאת ע"י השוואה של הפרמטרלם האמלתיים בשורה (40) עם הפרמטרים הפורמליים בשורות (8)-(10). פקודת פרוצדורה שליכת לחלק הביצועי של התכנלת ומצפים לכך שהלא תתבצע כאשר 112 רושמלם את שמה ובסוגריים - את רשלמת הפרמטרלם האמלת*ללם. במהלך הבלצוע, הפרמטרלם הפורמלללם. לוחלפו ע"< הערכלם הנוכתלים של הפרמטרלם האמלתללם. במקום 1115228 אפשר הלה | לכתוב את המספר 10, את הבלטוי 19+ת10%%15248, או בלטול ארלתמטל כלטהוא שערכו הוא מספר שלם. בזמן הביצוע, המחשב *ערלך את הביטול ולעביר את ערכו המספר? למשתנה תמם]תזא וישתמטש בו בפרוצדורה. משתנה כמו אמפ!תזא נקרא פרמטר ערכ? (מִסִםסמַבז28 6[ג/) כל הוא מקבל את הערך סל הפרמטר האמלתל, מחסין אותו במשתנה תממאטא ומשתמש בו בפרוצדורה. אלן צורך להגדלר בתכנית משתנה אשר יקבל את הערך הסופל של מתפוטא, כל ערךָ זה אלנו דרוש בתכנלת הראשלת. אם הללנו כותבלם את המלה ת לפנ: תממאשא (כמו שכתבנו %45 בטורה (27) לפנל מ6גתח2) הללנו מודיעים לתכנית לא להגדיר משתנה חדט בשם תמפאעחא, אלא לללחס סם זה למשתנה 15228, שהוא פרמטר אמלתל שקיים בתכנלת הראשית. במצב כזה, הפרמטר האמלתל חללב להיות משתנה ולא בלטול ארלתמטל, כדל טנוכל לללחס אליו את השם תממותוא. פרמטר כזה נקרא פרמטר משתנה (נַסמַ6תַ2828 6), כל מותר להחללף אותו רק בפרמטר אמלת? שהוא משתנה ולא בפרמטר שהוא ‏ בלטול ארלתמט?ל. משתמשלם בפרמטר משתנה כאשר ‏ רוצים לא רק לקבל נתונים מן התכנלת הקוראת (8ת08111 מהעקס:), אלא גם להחזיר לה תוצאות כלשהן. המהדר מטפל בהעברת התוצאות אל הפרמטר האמלת?, אשר מחליף את הפרמטר המשתנה. לרף הצהרת הפרוצדורה "טא מטל11: הצהרת הכורכ (10)-(8) זוהל הצהרת פרוצדורה מקלפה. אחרל המלה 80000088ע ושם הפרוצדורה כותבלם בין סוגרלים את הפרמטרים הפורמל?ים, .דבר שלא ראלנו בתכנלת 4 5%0א. פרמטרים אלה נקראלם כך מכלון טהם נכללים בהצהרת הפרוצדורה כדל ל:לצג את סוג? הארגומנטים שמשתמשלם בהם. למשל, תתמאעא הוא הפרמטר הראשון ‏ וסוגו הוא 008שדא1. הפרמטר תעג]תוזא לא הוגדר בהצהרת 748 ולכן הוא קלים רק כאב טילפוס (ז"א בצורה פורמללת) ולא במצילאות. כאשר קוראלם לפרוצדורה, בשורה (40) מצלינים פרמטרלם אמלתללם, שלחליפו את הפרמטרלם הפורמלללם, כפי טיוסבר להלן. , ב בשורה (10) רשומים 3 פרמטרים משתנלם, שמטרתם להחזיר לתכנית הראשלת ‏ 3 מערכלים מלאים שמכילים את השכר, השעות וטלעור השכר לשעה של כל אחד מעובדי המפעל. הצורה הכללית של הצהרת פרוצדורה הלא: 133 כמו שראלנו בתכנית הקודמת, אפשר להגדלר פרוצדורה בלי ארגומנט כלל ולהסתמך על המשתנים שהוגדרו בתכנלת הראשית. אפשר גם להגדיר פרמטרים ערכללם ומשתנים לפי הצורך. : / בשורה (10) הוגדר הסוג של צת]54, 5תסס₪ ו-מדגת כ-מקצןצגתת, אשר מוגדר בתכנית הראשלת. קיימלם מהדרים שדורטים ששמות סוגים בהצהרת פרוצדורה להלו מוגבלים למלה אחת ואלנם מאפשרים לכתוב "תגחת ע0 [1..100] צגתתג" בתוך ההצהרה. במהדר של א%2% למשל, מגבלה זו לא קיימת ואין צורך להגדלר את הסוג הגלובל: מקצץצהתת. לאחר הצהרת הפרוצדורה בא גוף הפרוצדורה שנקרא בלוק (א2106%). הבלוק יכול להכיל את כל ההצהרות המוכרות לנו, דהיינו: זאת ‏ .(8) 07 (ם) שפצ (6₪) (עם בלוק) מאטפע6סתע | (6) פקודות למיניהן (8) בפקודה (12) מצהלרים על משתנה 1. משתנה זה, שמוצהר בתוך הפרוצדורה, נקרא משפנה לוקלי (08:18516 1,, או משתנה מקומל, כי הוא מוגבל לשימוש של הפרוצדורה בלבד ולא. לשימושה של התכנית הראשלת. אם נתליחס אללו בתכנית הראשלת נקבל הודעה על משתנה שלא הוצהר. .ו בשורה (13.)). יש הצהרת פרוצדורה נוספת. אפשר להגדיר פרוצדורה בתוך פרוצדורה בכדי לקבל פרוצדורה מקוננת (286ט2:0606 48). הפרוצדורה החלצונית לכולה לקרוא לפרוצדורה הפנימלת, אך לתכנית הראשלת אין גישה אליה. ‏ אם הללנו רוצים לאפשר גלשה, הילנו צריכים להצהיר על ג/71א 881 כפרוצדורה נפרדת ולרשום אותה לפני ולא בתוך, הפרוצדורה [ששטא מטקדץ. הפרוצדורה 710/4א 8814 ממלאת את המערכים ₪0085, 78גת ו-צ5410. משתנים אלו הועברו אליה ויועברו חזרה, לא בתור פרמטרים, אלא בתוקף היותם מוגדרלם לפרוצדורה ְ₪זפא מטפדץ שקוראת לפרוצדורה ג/%11 81/. אפשרי לקרוא להם מערכים גלובליים (פצְ8צץ/ 010281) שפ הפרוצדורה הפנימית 4ש71א גזחא. (20)-(13) הפרוצדורה הפנימלת גטךדא זתא. (28)-(21) החלק הביצועי של הפרוצדורה [שתפא מטקזץ. (36)-(25) פרוצדורה נוספת שמקבילה לפרוצדורה ‏ ץשתזקא 11200 (הפרוצדורה גטזצא דחא נחותה מהפרוצדורה :מא 1120 ומקוננת בה). אפטשר להציג את היחס של פרוצדורות מקבילות ופרוצדורות נחותות בתרשים המבנה הכללל של פרוצדורה: שמות הפרמטריסח הפורמליים וסוגיהם גוף תוכנית |08 הפרוצדורה 71% 818 היא חלק של הבלוק של הפרוצדורה "אתטא יטפז1 ולכן היא נחותה ממנה. הפרוצדורה ₪022 אינה חלק של הבלוק שכפוף לפרוצדורה כלשהל. הלא מילצגת שימוש חוזר של הצהרת פרוצדורה בתוך התכנית הראשית. כאטר כותבים את תבנלת משפט ההצהרות והבלוק של הפרוצדורה, מומלץ לכתוב את המלה 8תטכמ0סאע למטה מן המלים 4%ת06ת2, תג ויתר ההצהרות. את ההצהרות של הפרוצדורה לא רושמים למטה מן המלה 0080088א2 אלא בהזזה למלנה כמו שרואים בשורות (11) ו-(28). אם יש פרוצדורה מקוננת, הצהרת הפרוצדורה הפנימלת לא שונה מן ההצהרות האחרות של הפרוצדורה החלצונלת והיא. מופיעה למטה מהם, כמו טכתוב בטורה (13). שם הפרוצדורה ./71א זא רטום למטה מהצהרת 48/ של הפרוצדורה החיצונלת. 253 פונקצלות לעתים הקלט לפרוצדורה הוא רשלמה של ערכלם והפלט הוא ערך אחד שנובע מפעללולות המבוצעות על ערכ? הקלט. עבור המקרה הזה קללמת פרוצדורה מסוג מלוחד שקוראלם לה פונקצלה (מ510סתטת). הטלמוש המקובל בפונקצלה הוא כאשר: א. מספר הפרמטרים המשתנלם מוגבל ל-1. ב. הפרמטר המשתנה הוא משתנה רגיל ולא מערך. מכאן, שבתכנלת הקודמת הפרוצדורה סזטא 0ק1ך לא לכולה להיות פונקציה כל קטשורים אליה 3 פרמטרים משתנלם, שהם מערכלם. מאלדך, עבור הפרוצדורה 10024 מוגדר רק פרמטר משתנה פשוט אחד, מ6ַַתמ40 ולכן הלא יכולה להכתב כפונקצלה, אשר מוצגת כאן: ; תתסתנאד : חתפותזא) 2טוות אסצצסאטע ‏ (1) ,זופת : (מקצדצהתת : ה0אגו (2) ;מפסתעאד :1 אגל (3) : אפ (4) אזספת (5) 0 פמפועזא 10 1 =:1 ת0ע (6) ; [0₪]1תא + 504 =:508 (07 תותוא / 504 =: 24 (8) ;פאת (9) הסבר: (2)-(1) שורות אלו הן הצהרת הפונקציה (מ26018+8610 םס%1סמטע), אשר דומה להצהרת פרוצדורה עם החלפה של המלה 2906005 במלה א10ע0אטע. כותבים תחילה את המלה א6110אטת ואחרלה כותבים את השם של הפונקציה: 111024. לכאורה חסרות בשורה (2) המללם :קט שכתבנו עבור הפרוצדורה אתטאמא, | אך אין בזה צורך. מכיון שפונקציה מלועדת רק למקרה שבו התוצאה היא משתנה אחד פשוט, הוסכם שהשם של המשתנה המוחזר להלה כשם הפונקציה ובמקרה שלנו - ב2שמא. אבל אם 1024 מחליף את 20788468, איפה הוא התיאור של סוג המשתנה (%1ת2)? תיאור זה נמצא בסוף שורה (2) אחרל הנקודתיים שלאחר הסוגר הלמנל של סוף רשלמת הפרמטרים הערכללם. 15 המבנה הכללי של פונקצלה: שס הסוג שמות המיוחס הפרמטרים לשס הפורמלילם הפונקצלה הפונקציה וסוגיהם התוכנית כדי שהפונקציה תוכל להחזלר ערך, שמה צרלך להופיע בצד שמאל של פקודת הצבה, כפל טרטום בשורה (8). טם הפונקציה ₪0022)! החללף את המשתנה מ6גאע87 שהלה הפרמטר המשתנה בפרוצדורה. שם הפונקציה ₪002 אלנו משתנה רגיל ואלנו לכול להופיע בצד למין של פקודת ההצבה בתוך הגדרת הפונקצלה. התפקיד היחיד שלו הוא לסמש כתובת לתוצאה שתועבר לתכנילת הראשלת. הטימוש בפונקציה שונה במקצת משלמוט בפרוצדורה. פקודת פרוצדורה, אשר כוללת רטימה של הפרמטרלם בפועל, נותנת לנו למעשה פקודה חדשה. לכן היא לכולה לעמוד בפנל עצמה, כמו שכתוב בשורות (40), (41), (43) ו-(45) בתכנית 5. לעומת זאת, פונקציה משתתפת בתכנלת בתפקיד של אופרנד ולא של פקודה ולכן היא אינה *יכולה לעמוד בפני עצמה. מכאן שאפשר לכתוב שם של פונקציה בצד *מלן של פקודת הצבה, עם או בל? פרמטרלם נוספים. למשל, בהסתמך על הפונקציה 242 נוכל להחהליף את השורה (41) בתכנלת 8115א0א5ג!! ולכתוב: ; (ת5010 , 5048דא) ג2טושא =: 107244 היינו לכולים לכתוב (אם היה צורך בדבר) פקודת הצבה כזו: 15% + (8ט501 , 1)15238) שא * (5ג508 ,תגק5דא) ג2?סשן =: 707244 הבילטול בו משתמשלם בתוך התכנית לקרלאה והפעלה של הפונקציה נקרא מפעיל הפונקצלה (:8%0תק681כ מסנפסמטץ). הוא מכלל פרמטרים אמלתלים במקום פרמטרלם פורמלללם, בדיוק כמו בפרוצדורה. הפונקציה מיועדת למקרה שיש רק פרמטר משתנה אחד, אשר מללחסלם אותו לשם הפונקציה. ‏ אין הגבלה מבחינת המהדר לכתוב ‏ פרמטרילם משתנים כפרמטרלם פורמליים, אך דרך כתיבה זו נוגדת את הרעלון של השלמוש בפונקציה. כשצריך להחציר לותר מערך אחד, מומלץ להשתמש בפרוצדורה ולא בפונקצלה. לוצא מן הכלל הוא המקרה שהארגומנט הוא מערך, שבו מומלץ להשתמש בפרמטר משתנה בהצהרת הפונקציה. גם במקרה זה רוצים למעשה להשתמש בשם המערך כפרמטר ערכל ולא להחזלר אותו. אבל, אם כותבלם את הארגומנט כפרמטר ערכי, הערכים שלוו יועתקו למערך מקומל שמוגדר בתוך הפונקצלה. לעומת זה, אם כותבלם את הארגומנט כפרמטר משתנה, המערך לא יועתק לתוך השטח המקומ של הפונקצלה, 1-6 אלא רק כתובתו תועבר אליה. העברת הכתובת בלבד לותר יעללה מבחינת הבלצוע של התכנית. לכן, במקרה זה, עדיף להעביר את המערך כפרמטר משתנה. במהדר הסטנדרטי של פסקל יש הגבלה שהמשתנה המיוחס לשם הפונקציה חל*יב להלות משתנה פשוט ולא מערך, אך לתכן טמהדרים מסולמים ?תירו גם משתנה מערך. כדוגמא נוספת נצלג פונקציה בוליאנית, אשר בודקת אם "שנה" שמועברת אליה כפרמטר ערכ? הלא שנה מעוברת: . , אוזססת :(חת6מצאד:ההתצ) דמתתמטפו אסזצסאטע אזסת (0= 0 פסא פגמצ)0(08<> 100 פסא תגמצ)פא (0= 4 ספסא תגחץ)=: [מתממטפו ; פא התכנלת מבללטה את העובדה שטנה תהלה מעוברת אם מספרה מתחלק ב-4, חוץ מסופל מאות. אבל גם שנה שהלא סוף מאה תהיה מעוברת אם מספרה מתחלק ב-400, למשל טשנת 2000 הבאה עללנו לטובה. ₪ 8 שמות לוקל??ם וגלובל??ם (*) שם (שמגא) הוא כל עצם (מ1%0) שיש להצהיר עללו. בהתאם לכך, העצמלם הבאים הם שמות: א. תולות (185615), ב. קבועים (58מ558ם00), ג. סוגל נתונים (65קע1), ד. משתנלם (8:18016%/), ה. פרוצדורות (65עש2:0006), ו. פונקצלות (5ם610סמטת), ץז. קבועים שהם איברלם טל סוג המתואר ע": מנילה (68קץ1 8660:פתטתע). עבור כל שם קילמות: א. נקודת הגדרה (מם1610ת26%1 + 6מם201) בחלק ההצהרות של התכנלת. ב. נקודת ליסום (מ1168510סק4 0% 5ת201), בחלק הביצועי של התכנלת. נקודת ההגדרה של שם חללבת להקדלם כל נקודת יישום של אותו שם (חוץ מלוצא מן הכלל אחד שנלמד עללו בהמשך). בדרך זו המהדר *כול לטפל בכל השמות בתכנלת במעבר הלדור (מ000118%10) אחד בלבד. התחום (מ0ס1ק6ת) של שם הוא הבלוק שבו הוא< מוגדר. ההלקף (50006) של שם הוא התחום שלו, למעט כל התחומלם שלש בהם שם זהה. השם מוכר (0151516) בתוך ההלקף שלוו ובמקומות אחרים בתחומו הוא אלנו מוכר (151516טמ1). אם בלוק 4 מכיל את בלוק 5, נוכל לומר: א. שם המוצהר ב-4 מוכר ב-5 אם, ורק אם, לא מצהירים על אותו שם ב-5. שם זה הוא שם גלובלי (ששגא 010581) ב-8. ב. שם המוצהר ב-4 וגם ב-5 הוא שם לוקל: (שתגא 10081) ב-5. ג. אם נקודת *ישום של שם המוצהר ב- נמצאת ב-5, אסור להצהיר על שם דומה ב-5, מכיון שאז הוא מאבד את משמעותו המקורית בתוך בלוק 5. 177 הכללים האלה תקפים לגבי? שמות המופיעים בפרוצדורות או פונקציות. בדוגמא שבהמשך נצלג את השימוש בכלללם האלה: ; (צטקנטס , צטפא1) 5071 אגתסססק 07 = 2 מעצד 5 . תגצ :תע ; ת08מזא1 :0 ו )2 2, (4 ;150% מתטפמססתע 0% תגצ 60: 0 , ; 7658א :7 אזסמם התוכן של אסצפז3 ; פא ; 0172081 [אתח5 מתטפעססתע שפצ 0 > 2 ; דאדאק 1א51₪ מהטסמססתק ו תגט ,2 אזספת התוכן של זאדאת זַא5%8 ; פא - אזסתם הג התוכן של | 1א08120 דא5%8 ; פא אזספת תוכן התכנלת הראשילת . פא הסבר: (1) את שמות הסוגים המוגדרים אוטומטלת, תתסעצא1 ו-4ת23, אפשר להגדליר פעם נוספת ועל ידל זה לבטל את הגדרתם המקורלת. לא מומלץ לנהוג כך. (2) המשתנה השלם 6, שהוצהר בתכנלת הראשלת, לא מוכר ב-א1580ת, כל הוא "מוסתר" ע"* משתנה בעל שם זהה שסוגו 5. סוג 5 הוא סוג גלובל? שמוכר גם ב-א1580ת. (3) ב-א31580 משתמשים בקבוע 6 מסוג 2 (שהוצהר בתכנית הראשלת) כד? להגדיר את הקבוע 8. לו הללנו מגדלרילם את 5 מחדש ב-א21580, ההגדרה של ₪ הלליתה חסרת משמעות. 18 (4) אין קשר בלן המשתנה 8 המוגדר ב-א21580 וה-8 המוגדר ב-1א01120 דאעחפ, כי הם נמצאלם בתחומ?ם שונים. המשתנה 8 ב-א21580 הוא משתנה לוקל ולכן כתובת הזילכרון שהוא משתמש בה תשוחרר בסיום הביצוע של אסא5זת. (5) המשתנה 1 בפרוצדורה 141אק 1א58₪ מסתיר את 1 של [א68120 זאאחפ. הסוג 4 שהוצהר בפרוצדורה 1א08120 אאא58 כולל את הערכים א ,1 ,8.8 ו-א עדילין תקפים ב-1אדאת זאאא5, אבל 71 אינו תקף. אפשר להתייחס אל 1 כמו (5000)8 או (א)עמת2, אך עדיף לא להשתמש בסוג 4 כלל ב-זאזא? אאא כדלי לא לבלבל את המתכנת ואת הקורא. התיאור של ההלקף והתחום של השמות השונים בתכנית זו ניתן בתרשים: מתגעת ,המסטעאך נא0סק1טס-נאפת צאזאתק-1אטחהפ ל ב עאוסעינאס -א5\ אצת בתרטשים זה התחום של כל שם מתואר בחץ, כאשר החלק הרצלף שלו מליצג את ההלקף של השם והחלק שמקווקו מללצג את החלק בתחומו שבו השם אלנו מוכר. רצול להגדילר שמות לוקליים. הדבר מונע את האפשרות שערכו של משתנה גלובלל ילשתנה כתוצאה מהגדרה של משתנה אחר באותו שם, בין ההצהרה המקורלת והשלמוש הנוכחי טל משתנה זה. כאשר צריכים להחזיק ערך של משתנה בין הפעלה להפעלה של אותה שגרה, אפשר להשתמש בפרמטר משתנה. צרלך להגדיר סוג משתנה גלובלל כאשר משתמשים בשם הסוג כדי לתאר סוג של פרמטרים פורמליים בהצהרה של פרוצדורה או פונקצלה. 1.9 בזמו בדיקת הביצוע של שגרות בונים תכנית ראשית שמטרתה רק לבדוק את השגרה. תכנילת זו כוללת את כל הסוגים הגלובל?ים שמשתתפלם בשגרה (וכאמור מוטב למעט בהם) ומנגנון להכניס קלט ולהצלג את הפלט בצורה לעילה. שימוש במשתנים לוקליים: רוצים לדעת את מלדת החום הממוצע בחודש. עורכים מ-3 עד 10 בדיקות כל לום, מוצאלם את הממוצע שלהן בכל יום ואת הממוצע של הממוצעלם האלה לחודט שלם. נצילג את הפתרון בתכנלת: ; (עשקצטס ,ספא ) 1.004 .6109881 אתססתל (1) יְ 01| (2) = גת (3) = 11א6גטתת (4) תא (65 ;תתסתדאד :תגתעפדא ,א ,1 ,2 (6) נמת :500 ,5071 ג2טויא , הזז5 ה2טון (7) נא 58001 מתטכתססתע | (8) תג (69) ;0 :ד (10) אנספת (11) 0 טגנססת 10 1:=1 תסץ (12) :('*') מדדתט (13) > אמדדתט (14) פא (15) : ( ה ספא : צאטדתא 1593א) ב2ימות אסבנסאטץ | (16) : תג (17) ; תת6תדאד:ד (18) :ו ,504 (19) אזסמת (20) : 0:0 (21) ; ('הכנס"' ,ופא 15248 ,'נתונים')אתתצדתח ‏ . (22) סע א1אטדטא תגעפדא 10 1 =:1 תסע , (23) אזסעת (28) ; (1528ון)סאת (25) א + 504 =:50008 (26) ; פא (27) ; אזתת (28) טא 11522 4תח50= : שו (29) ; פאק (6)30 (* תכנית ראשלת *) אזסעת | (31) ; 0:0 (32) :('כמה ימים לכנסו לממוצע הסופי ?') אמדדחט (33) ; (א) א זפאאת. (34) 0 א 0 1:=1 08ק (35) אס (36) ;('כמה מדידות נעשו בלום ' ,1) א[מחדתט (37) ; (111528) א;זסאחת (38) (1542ו) וו =: גוז הטסו (39) > 20 א1א0טתת 10 1 =:1 תסק (40) ; אזטיד ו (41) 1000 ; (ממוצע הממוצעים שווה ל:7' הרצה לדוגמא: טא 008 (42) ;(2 7 :5 007 א דד (43) טא 61008 (48) חן הלוו + 5008 =:5010% (45) ; פא (46) ; א זמד1 וו (47) ; טא 00 (48) א 1001 (49) ;א/50 =:5071 24שאמון (50) ,2: 502 2שאמון) אזמדדתא (51) ץבא 6001 (52) .פא | (53) כמה ימלם ל?כנסו לממוצע הסופ:ל ? רהבכרררת 20 הררר- -תההרר- התהתררר ההרהררר הכרהררת <ההכהכתי אא 7 2 ו אא אאאצאלאלצאא בתכנלת זו לשנם משתנלם שהוגדרו פעמלם אחדות, למשל 1, 5080%8, אגק5דא. בסורה (40) חייבים להשתמש במשתנה 1 ולא 1, כי הלולאה החילצונית משתמשת כבר ב-1. כדל להבין את הלחס בין המשתנים, נסתכל בצילור שבו רשמנו את ההצהרות של המשתנלם בתכנית ואת ההגבלות שלהם. 11 מטתנים נראים: ; (1שפצטס , עעקא1) 06 .610841 אאתססתת 0 תשפצטס ,פטעא1 ,1גססע ,61081 1 = 0 2 = אס גשפת אזאס)טעת , טגאססת תאצ תתא ,א ,1 ;סא : ת(ת152א ,א ,1 50 ,5021 ג2טומט , גתשזז5 2טימחל מו , אא ספת נת : 5004 ,5091 ג טמא , 5 א= : הקעזא אפחץ (1)פפס עד 2=:א ₪ 0=:א [המקתת אע (%+נ) דאסטפנת עך אזססם מטתך=: דא ('המספר"' ,א%+1) אזתדדתט ו ; פא 2 =:א ; 24ואנא 1דאט אז זט פא פא ; פא ;אנת א10צסאטע : תש ;דוס תהעפזא :אתתגמסתן , הפתתספ אז1סעפת אתחץ 4>ק קך 1<ת =:1אסמפזת ככוה אמח (ע)פפס צסא עד = : ד תפות אז1ספת :((5001)2) פאטסת =:מפתתסמ5 :ו 0 (0<>א סמו פסא 2) פאה (5₪8ת580=>אם גסםו) ממדא ; 01142 =: אק זו 501 < אםןהחסטה =:1אסטפדת ; פא 1 |( 0 תג :607 18 )41( )42( )48( )45( )46( )47( )48( )49( )50( )51( )52( )53( )584( )55( )56( )57( )58( )59( )60( )61( ;א 00 :1.7 (62) אזספת (63) (* הערך הסופי של הנתון יהיה במשתנה 015248 *) ;1524:=0 (64) (* אם יש רוותלם בתחילת הקלט, יש לדלג עללהם *) ץמעת (65) (08) סגמת (66) ; 07 תס (' ' <> אס) תתאט (67) אמח ('-'=ם0) 05 ('+'=מ0) עד (68) אזססת (69) ;'-'=08 =:5₪0777 (70) (* קרא את הספרה הראשונה *) (0₪8) סגמת (71) פא (72) (* התו הראשון הוא ספרה ולא סלמן *) 8 (73) ;5 =:זד0ח5 (78) (* קרא תוולם והרכב מספר*) 20 ע₪0 עסא סאג (' ' <> 01) מתדחט (75) אזעת (76) אחחץ ('9' => 08) פא ('0' =< א08) עד (77) ; ('20'0ת0 - (2)08ת0 + 10*%15248 =:ת1524ו1 (78) (08) סגמת (79) ; פא (80) אזנ 511 עד (81) אגתזא*1- =:ת4ק15 (82) ; פא (83) (* תכנית ראשלת *) אזסתת (848) 0 תפסא עסא מדזחט .(85) 464תסט הזחא (86) .עאע (87) הרצה לדוגמא: הכנס מספר 22 המספר הראשוני הקרוב ביותר ל: 6632 הוא: המספר"6637 | הסבר: בכתיבת הפרוצדורה למציאת המספר הראשוני, אשר קרוב למספר 1 ושווה לו או גדול ממנו, לש לבצע את הפעולות הבאות: (1) לבדוק אם 1 הוא מספר ראשונל (שורה 21). (2) אם 1 אינו מספר ראשוני, בודקים אם הוא זוג?ל (שורה 26). (3) אם הוא זוגי, בודקים את המספר האל-זוג? 71+1 שאחרלו. אם הוא לא זוגי, בודקים את המספר האל-זוגי 1+2 שאחריו (שורה 31). (4) אם המספר שנבדק בשלב (3) אלנו ראשוני, מתקדמים עו שניים ובודקים לראשונלות (36). ממשלכים בשלטה צו עד שנתקלים במספר ראשונל. בדרך דומה אפשר למצוא את המספר הראשוני הקרוב ל-1 וקטן ממנו. לשם כך יש להחליף בשורות (31) ו-(34) את הביטול א%+1 בביטוי א-1. 15 הסבר לפונקציה זא0ט58זת: כל המספרלם, אשר קטנים מ-4 הם ראשונלים, חוץ מ-1. לכן ערכו הבוליאנל של 14) עונה על השאלה אם מספר קטן ‏ מ-4 הוא< מספר ראשונל (טורה ‏ 47). אם התשובה הלא משת1 (ז"א המספר הוא 2 או 3), המספר הוא ראשונל. אם 2<4 ואם המספר הוא אל צוגי, צריך לבדוק את כל המספרלם ‏ מ-1 עד 5 ולראות אם אחד מהם מחלק את 2 בל:? שארלת. כד? לעשות זאת, מחהלקלם את 2 בכל מספר החל מ-3 ועד 2, שורה (55). אם אחד מהמספרים האלה מתהלק ללא שארית, יוצאים מן הלולאה. אפשר לצאת מהלולאה בשנ? מקרלם: א. כאשר מגיעים עד 42 ולא בוצע חילוק ללא שארלת. ב. לא מגיעים עד ע/, אבל אחת מפעולות החילוק התבצעה ללא שארלת. כדי לבדוק אם לוצא?לם מהלולאה מסיבה א' שבה ‏ הוא ראשונל, או מסלבה ב' שבה 2 איננו ראשונל, מספיק לכתוב את שורה (57). הסלבה שהלולאה בשורה (55) הלתה צרלכה להגלע רק עד 2/ היא שאם תע אלננו ראשוני, אפשר לכתוב אותו בצורה הבאה: 2=*8. יש שתי דרכים לפתרון משוואה צו: א. 4=8=/2 ב. אחד מן הגורמלם ג או 5 קטן מ-42. אם 5 הוא פריק, אחד מן הגורמים חליב להלות קטן או שווה ל-2/. לכן, אם בודקים ולא מוצאים גורם שווה או קטן מ-2/ אשר מחלק את 2 בלל שארלת פירושו שאין גורם כזה ו-2 הוא מספר ראשונל. לפנל גוף הפונקציה כתוב בשורה (42): 1א158₪0ת א10ע6אטע, בלל פרמטרלם. הצהרה זו נקראת זלהול הפונקצלה (ם%511+168%10ת166 ת610ס6תטע) שהיא כעין כותרת. הלא מתאימה למצב שהתיאור המלא כבר נלתן פעם אחת בתכנית. כאשר ה-1807108ת הוא כא4חת0ע, יש לרשום ליד גוף התכנית רק את זלהול הפונקציה ללא הצהרה מלאה. הטיפול זהה גם בפרוצדורה ג1ת22, השווה שורות (4) ו-(59). הסבר לפרוצדורה גזַא8א: פרוצדורה זו עושה דימול לחלק מן הפעולות שנעשות ע"? הפרוצדורה המוגדרת אוטומטית, כגמת או את1פגמת2. קוראלם את תוול המספר כתוולם מסוג תג.6081, בשורה (66). אם התו הוא סלמן מלנוס, לוקחים זאת בחשבון (שורה 70). קוראים את הספרות משמאל ללמלן והופכים כל ספרה מליצוג 08118 לילצוג תתסתנזאן (שורה 78). כופלים כל ספרה ב-10 מספר פעמלם בהתאמה למספר הספרות בצד למלן שלה. למשל, ה-6 השמאלל של 6632 יוכפל 3 פעמים ב-10, ה-6 הימנל לוכפל פעמלים, ה-3 יוכפל פעם אחת וה-2 לא לוכפל אף פעם כל אין ספרות מלמין. אם במספר יש פסלק, תו פיסוק אחר, או אות, הפרוצדורה מתעלמת ממנו וממשיכה הלאה. מכאן שפרוצדורה זו אינה מתאלמה לטלפול במספרים ממשליים. 1 תכנלת עם פרוצדורות נפרדות (%) שת מלות הוראה, שאלנן חלק משפת פסקל הסטנדרטית מלועדות למקרה שגוף 1.06 הפרוצדורה לא נמצא בתכנית אלא בנפרד. הראשונה היא א(ת7ת70 ומשתמשלים בה כאטר השגרה כתובה בשפת א%א7א0ע. השנייה ה<א 4אחפעאם ומשתמשים בה כאשר הפרוצדורה כתובה בפסקל, אבל רוצלם להדר (0000116 0) אותה בנפרד. במצב זה צריכלם לכתוב כותרת מלאה ‏ גם בהצהרה שנמצאת בתכנית הראשית וגם בהצהרה סנמצאת בפרוצדורה. אם הפרוצדורה משתמשת במשתנים גלובליים, הצהרה של מטתנים אלה צרלכה להופלע בשגרה. הדוגמא הבאה מתאלמה למהדר מסוים של פסקל. עם זאת אפשר להנית שהעקרונות מתאלמלם גם למהדרלם אחרלם. (* התכנית הראשלת *) ; (07פץט00) 1חפגת 0 תג ; ת08מדאך :צ,א ; .ז4אתת זא ; (088מאד 1) 5081 מתססעססתק ;,41אתמ זא ;2 מתשסםססתע ; 41אתמזא ; 5083 60085סתק א1סטת (5=:א :ץצ ; (%)5081 :ו 3 (* סלום התכנית הראשלת *) . פאע התוכן של פרוצדורה 5081: ; ( ת68מאד :1) 5081 מתטפטססתק אזסטת (ם) אזתוזתט ; פא התוכן של הקובץ שמחזלק את הפרוצדורה 5082: תג (* הצהרת %48 אלנה שליכת לפרוצדורה ,תתסתזאן :א אבל הלא כן שללכת לקובץ *) ;2 | 0 א (א)א.זפד1תט ; פאת התוכן של הקובץ שמחזיק את הפרוצדורה 50283: תג תתסטעאד :ץצ ,א< ; 5083 088 00תע אזסטת (צ)א,זמידדתט ; פאת הרצה טלפוסילת נותנת את התוצאות האלו: רת תש 00 107 הסבר: השגרה 5081 מדפיסה את ערכו של הפרמטר א, אשר בדוגמא זו ערכו הוא ‏ 5. הטגרות ‏ 5082 ו-5083 משתמשות במשתנים גלובליים. השגרה 5082 משתמשת רק ב-א ומכיון שהוא הראשון ברטלמת המשתנלם, אפשר ‏ לכתוב 18605%א1:א לפנל השגרה. השגרה 50283 משתמשת ב-+ והלא תקבע לו כתובת להסית בזלכרון כדל שתוכל לפנות אליו. נוכל לדעת את הכתובת היחסית של המשתנה צ רק אם נרשום את כל המשתנים המוצהרים לפניו בתכנית הראטית ולכן ב-5083 רושמים גם את א וגם את צ, אף שלא משתמשלם ב-%. אפשר הלה להשתמש ב-5083 בשמות 0 ו-2 למשל, בהנחה שגם 0 ו-5 הם משתנים שלמלם, מכיון שלא השמות קובעים אלא הגדרת סוג המשתנלם ומקומם. במקרה זה 5 מקבלל ל-צ שבתכנית הראשלת. 6 תרג?ל?ל?ם 1 ששאלות (1) נניח שבתכנית הראשלת כתוב: :א ;0+ (צ,א) מזסתד (צ,א) אותדזאט מה לודפס בכל אחד מן המקרלם הבאלם: א. ; (תת0מ1א4,2:1) ם61תג1 מתטספססתק א ; 4:=3+8 2 (פ, 4 )א תח ; פא ב. (תת0סדא2:1 ;תתסתדא2:1 תגט) מדסתגד תפטכמססתק אנספת ;2:=4+6 2% (4,2) אזמזתט ; פא 5. ; (תע6ת7אד:4,8 תגט) מבסתגד תתטסתססתק אזסעת /4+=:2 2 (4,5) אתמדזתט ; פא 108 (2) מהו התחום וההיקף של כל השמות בתכנית הבאה: ; (צטעטס , דטפאד) צאפגת מתטפמססתק 5 5%א600 01 = מפצץ תתסמנאד :2 ,4 ,5 תגל ; 3150 מתטפטססגתק ;תמא :0 ,2 ,5 תג (*סוף א1580ת2*) ;פאם ; דא מתטסתסספעק ,5 ,8) =ס מקצך ,תתסתעאן :2 ,2 ,0 ,4 תגל ; 5.1581 תת ;תםסתדא1 :₪ ,4 תג (*501581*) ;פאת (* זאח5 *) | ;פאם (א ספת *) ; פא (3) מהו הפלט של התכנלת הבאה? *תכן שלהיו בה משתנים בלתי מוגדרלים. ; (01ק00) סט אתססתע תאצ | נתתסתעות :0 ,2 ,ג ; (תתססדא1 :ץצ נתמסעדאד :א תגט) אסמ15ת מתטסמססתק ;תס :כ ,0 ,2 תגט ; 1 אע 60088סתת ;תעדות :ץצ ,א תגט אזסחת ,א ,2 ,0 ,2 ,)6 אתמדזתט (082)8 =:4 ;פא (* פרוצדורה א1580ת *) אזסעפ " :'ג2' =כ ,א ,2 ,0 ,2 ,)6 אשתדדתט =:א 7 =:ץ+צ .(018)4 =:8 ( (א)010 =:6 ; אדא (צ,0א ,2 ,0 ,2 ,ג) אמתזזתט ; פא הרת ההם: 1.9 (* תכנית ראשלת *) אז6תת = 120 = (8, )150 ; (2,0)א1580ת (6,4)אס5דת . פא 2 תכנלות (1) שלעור המס הוא 20% על הכנסה של זוג נשול אשר מגיעה עד 1,000 שקל ו-40% מס על הכנסה גבוהה ?ותר. השלעור הוא 10% על הכנסה של אדם בודד עד 500 ו-60% למעלה מזה. כתוב פרוצדורה עבור כל אחד משנ? המקרלם האלה והשתמש בה בתכנית שקולטת שנל משתנים: = מצב משפחתי: א (נשול), 8 (בודד). * רמת הכנסה. עליך לחשב את המלסים על פי נתונלם אלה. (2) כתוב תכנית שמקבלת מספר ומדפלסה אותו. ללדו הליא משרטטת קו המורכב מן הסלמן מקף (-), שאורכו לחס?ל למספר הספרות במספר (זוהל היסטוגרמה). את שרטוט ההיסטוגרמה לש לעשות ע"י פרוצדורה עם משתנה ערכל אחד, אשר שווה למספר הספרות במספר. (3) כתוב פונקציה שמחשבת את הרווח ממכירת מוצרלם. 'נתונה כמות הפרלט שנמכרה (0), עלות קבועה לנלהול העסק (א) ועלות שלווק משתנה (8) המלוחסת לכל פרלט שנמכר. השתמש בפונקציה זו בתכנית שמדפיסה את מצב הרווח בימים שונלם, כאשר הקלט הוא מספר היחידות שנמכרו באותו לום. לש להדפיס כותרת לדוה. : 1 (4) כתוב את הפונקציה (א,אזאטזתא, 50100506 לחישוב סכום הריבועים של האיברים בשורה א או בעמודה א של המטריצה 14אשעפא. אם '506='5 מחשבים את סכום האלברים בשורה, אם '506='84 מחשבלם את סכום האיברים בעמודה. השתמש בפונקצלה 501884 בתכנית שקוראת מטרלצה של שלוש שורות ו-4 עמודות ומחשבת את סכום הרלבועים של כל שורה וכל עמודה. בפלט לש להצלג את המטריצה המקורית ובסוף כל שורה - את סכום הרלבועים באותה שורה. למטה מכל עמודה יש לרשום את סכום הרלבועים באותה עמודה. (5) כתוב פרוצדורה שקוראת מערך של שמות וסופרת את מספר השמות בקלט. כתוב פרוצדורה נוספת כד? למלין את השמות. השתמש בפרוצדורות אלו כדל להדפיס רשימה מסודרת של השמות המשמשים כקלט לתכנלת. (6) כתוב פרוצדורה שמקבלת כקלט מחרוזת תווים ושני מספרים וָא ו-כָא. היא מפיקה את התת-מחרוזת שמתחללה ממקום וָא במחרוזת המקורית ואורכה כא תווים. (7) כתוב פונקציה שמקבלת כקלט את א% ו-ץ ומחשבת א בחזקת צ. (8) כתוב תכנית שמקבלת כקלט שמות וצלונים של תלמידלם בכלתה לא גדולה 1000 מ-200, מסדרת אותם בסדר לורד בעזרת פרוצדורה למלון ומחשבת ‏ את - המוצע וטונות המדגם בעצזרת פונצלה. הנוסחא לחישוב הממוצע: א / (אָא +....+ 80 + בא + כָא + [א) = א הנוסחא עבור שונות המדגם הלא: 2 2 9 2.27 (אַ9ד...+ ב8+ כ%+ [א) - ( א%+...+ ,א+ בא+ כא+ [א) א ו כו ה ו כ (1-א)א הפלט לכלל את הנתונים הבאלם ולוצג כרטימה, שבה שורה לכל סטודנט: * שם הסטודנט. *‏ הציון. * מספר הנקודות מעל (+) או מתחת (-) הממוצע. בסוף הרשלמה לודפס ממוצע הצלונלם בכיתה וסטלית התקן שלהם (סטיית התקן הלא השורש הרלבועי של שונות המדגם). (9) א. ב. )10( א. בתרגיל זה ארבעה חלקים: כתוב את הפרוצדורה (א,014%1%)6 שמדפיסה א פעמים את התו 6. השתמש בפרוצדורה זו בתכנית שמדפיסה משולש שווה שוקילים. בתכנית ‏ יש שלושה משתנלם: ‏ * גובה המשולש. * התו שממנו *לורכב המשולש. * מספר הרווחים לפנ? הקודקוד העליון. אם שללשית המשתנים נראלת כך, (3,'*',10), נקבל את התדפיס הבא: א הקודקוד יהיה 10 רווחלם מן השפה השמאלית של ** | המסך כתוב פונקציה א208%80 צ72 שיש לה פרמטר משתנה אחד, 80 401ת.א, אשר מוגדר: | 08 ע0 [1..80]צגתתג כ8א46תק. הפונקציה מחזירה את המספר הסלדורי של התו האחרון במערך, שאלננו תו רוות. כתוב תכנלת שמשתמשת בפרוצדורות 1%א071% ו-א40000 7 כדל לקרוא מחרוזת, שמלועדת לכותרת. התכנלת מדפיסה את התווים עד התו האתרון במתחרוזת ששונה מרווח וממרכזת את מחרוזת הפלט בדף, או במסוף של 80 עמודות, כאשר יש 10 כוכביות משנל צידיה. בתרגיל זה מספר חלקלם: כתוב פונקצלה 02808 שמקבלת מספר שלם ומפיקה את מספר הספרות במספר. כתוב פונקציה 257% כ( 8 שקוראת שורת קלט עד הפסיק הראשון, כותבת את מחרוזת התווים (בלי הפסיק) למערך באורך ‏ 80 וסופרת את מספר התוים עד הפסיק. ‏ אם מקבלים א₪01 לפני שמגיעים לפסיק, מדפיסים הודעת טגיאה ומדלגים לסוף הפרוצדורה ע"י פקודת 6010 (שמותרת במקרה חריג זה). 11 : ג. שורות הקלט מכילות שני ערכלם מאגא ו-תתפעא, המופרדים זה מזה ע"ל פסיק. כתוב תכנילת שתדפיס רשימה של השמות והמספרים לפי המבנה הבא: מספר עמודה: 28 10 א--- 19 תוולם ----% תוכן השורות: 209 ...אצ 42 ...1 1 ...0 השם מתחיל בעמודה 10 והספרה הלמנית של המספר תהיה בעמודה 28. השתמש בפרוצדורה שכתבת בחלקילם א' ו-ב' ‏ וגם בפרוצדורה א1א014% מן התרגיל הקודם. (11) (*) כתוב תכנית שקוראת מחרוזת, מחפשת את כל המופעים של צלרוף מסוים (אתחז1גת) ומחליפה את הצלרוף הזה במחרוזת חליפית. המחרוזות הן מן הסוג [1..100]צהתת:030207א. כל מחרוזת מסתיימת ב-"/", כאשר ‏ ה-"/" אינו נחשב כחלק ממנה. אפשר להעזר בפרוצדורות ובפונקציות אלו: (088תעא1 :ה6עתס תגט ;7ע02הה0גא :א תגץ) עס סג ותא תת (8) פרוצדורה זו קוראת מן המסוף מחרוזת ₪ וקובעת את אורכה עד התו "/". ; א 001 .(088שעא1 :3א ,2א ,1א ;1010207 :2א ,1א) אטח אסזעסאטע (5) הפונקציה משווה 1א% תווילם החל מתו 2א במחרוזת %1, אל 3א התוולם הראשונים במחרוזת 2א. (תע0מזא1 :2א ,1א ;6אזת57 :א תג) האדחסאון מאטפתס6סתע (6) הפרוצדורה מוחקת 2א תווים במחרוזת %, החל ממקום 1א. (חע0תדאך :2א ,1א ;7מ2סתת6גא :42 ,וא תגט) 8ת054 מתטתתססתת (4) פרוצדורה זו מוסיפה את 2א התווילם הראשונלם של מחרוזת 82 לתוך מחרוזת 1, החל ממקום 1א ואילך. שאר התווים של 1א, מתו 1+1א עד סוף המחרוזת, להלו אחרל 2א התווים שנוספו ממחרוזת 2א. (12) בתרגיל מספר חלקלם: א. כתוב פרוצדורה בכדיל לקרוא מספר אוקטלי ולהפוך אותו למספר עשרונל. ב. כתוב פרוצדורה נוספת בכדי להפוך מספר עשרונל למספר אוקטלל. ג. השתמש בשתי הפרוצדורות בכדל לכתוב תכנית שמקבלת סדרה של מספרלם אוקטליים, הופכת כל אחד מהם למספר עשרונל?, מחברת אותם כמספרלם עשרונלים, הופכת תוצאה זור שוב פעם למספר אוקטלי ומדפלסה את התוצאה. (13) כתוב פרוצדורה שמקבלת שנל מספרים אוקטליים ומחברת אותם מבלי להפוך אותם למספרים עשרוניים. השתמש בפרוצדורה זו בתכנית שמחברת ‏ 3 מספרלם 12 אוקטליים. את התשובה ‏ יש להצלג כמספר אוקטל? וגם כמספר עשרוני ע"ל שימוש בפרוצדורה שנכתבה בשאלה הקודמת. (14) הנוסחא לטור טלילור עבור *6 הלא: / .3+( 2/21א)+א=(1/11א)ת=*6 כתוב פונקצלה שמחשבת את *6 עד לדלוק של 0.0001, ז"א שההפרש בין האומדן החדש והאומדן הקודם הוא< פחות מ-0.0001 כפול האומדן הלישן. השתמש בפונקצלה זו בתכנית שמחשבת את הערך של *6 עבור א שמשתנה בתחום שבין ‏ 0 ל-1 בדילוג של 0.01. (15) בתרגיל זה שנל חלקלם: א. כתוב פונקציה שמנתתחת תוצאות מבחנלם. נתונ? הקלט: = א - מספר השאלות במבחן. / > תשובות של כל סטודנט (מערך). התשובות הן מספרים מ-1 עד 4. * מפתח התשובות (מערך), שהוא אוסף התשובות הנכונות. הפלט של הפונקציה הלא הציון של הסטודנט בבחינה, אשר מחושב לפל מספר התטובות הנכונות מחולק במספר השאלות. ב. כתוב תכנלת שמקבלת את נתונל הקלט הבאלם: * | מספר השאלות ומפתח התשובות (מערך), = מספרי זלהול של סטודנטים ותשובות של כל סטודנט לכל השאלות. התכנית מדפיסה את מפתת המבחן בשורה העליונה של הפלט ומתחת לה - את מספרל הזלהול של הסטודנטים, התשובות של כל סטודנט והציון שלו. (16) כתוב תכנלת בכדי לחשב את ערכו של הבלטול שנותן את מספר הקבוצות בגודל % שאפשר להרכיב מ-א עצמלם שונים. !1ם 0 9 הגדר פוקנציה 7401 לחישוב עצרת של מספר כלשהו. בתכנית הראשלת דרושה רק פקודת הצבה אחת: !(א-ם)!א ((א-א)7401 * (א)2402) / (א)2401 =:07244ך (17) (%) נתונים מחירלם של מוצרים שונלם בדולרים, בערכלם אשר קטנלם מ-%1000. כתוב תכנית אטר מסבה מחירים אלו לייצוג במלים באנגלית. השתמש בפונקציה שתבצע את הפעולות הבאות: * תמיר מספר בן שלוש ספרות או פחות למללם. . בתוכה תהיה פונקציה שמתרגמת ספרה למלה מקבילה, כדל שתשמש להמרה של הספרות השונות של המספר. נשתמש בפונקציה זו גם בעבור ספרת המאות (למשל, פמפתעאסם מט1ע) וגם בעבור ספרת הלחידות (למשל, מטדַת). אם, לדוגמא, הקלט הוא %534.18, הפלט להלה: 5 א סע 5ת1סכ הטססע צדתדחאץ כמתפאתחת מטזע (18) כתוב פוקנציה שבודקת אם ספרה מסוימת כלולה במספר. השתמש בפונקציה זו בתכנית שמגלה אלזה מספרים 1 בלן 1 ל-100 הם כך שהספרה ‏ 2 (בין 0 ל-9) נכללת ב-1, ב-12 וגם ב-13. 13 פרק 9 יישומים של פרוצדורות ופונקציות 1 מספרים אקרא??ם שגרה הכתובה לעתלם קרובות כפרוצדורה, ‏ או פונקציה חלצונית היא השגרה ליצירת מספרלם אקראלים. מספרים אקראיים לוצרים באחת מתוך שלוש שיטות: שיטת "סיבוב" של גלגל רולטה. על לסוד שלטה זו מכנים את כל השלטות א. המשתמשות במספרים אקראלים בשם שלטות מונטה קרלו ( 11660085 08210 66ת0). ב. שלטת אמצע הרלבוע (6סת65/ 6ש8טף16-5(), אשר הוצעה ע"י. פון-נלומן, ממצלא שיטת התכנית המוחסנת בזיכרון. ג. השלטה הקונגרואבטית (6ס0ת6%/ 6181ת6ט:2ת00). נסקור בקצרה את שתי השלטות האחרונות, בעוד שלשיטות מונטה-קרלו נקדיש סעיף נפרד. 1 שלטת אמצע הרלבוע לחישוב מספר אקראי בשלטה זו נבחר במספר כלשהו בן א ספרות (מספר הספרות א הוא זוגי), אשר נקרא לו גרעין (5664) ונסמן אותו ב-הָא. נעלה את חא בריבוע ונקבל 2. נחלץ את הספרות האמצעיות שלו כדי לקבל את וְא. נחזור על פעולה זו עם וא כד? לקבל את כָא וכו', עד שנקבל כמה מספרים אקראיים שצרלכים. לדוגמא, נבחר מספר בן 4 ספרות ונחלץ תמלד 4 ספרות אמצעלות מתוצאת חלשוב הרלבוע: 6 = וא 6 = 02א 14 אם נמשיך בדרך זו, נקבל את סדרת המספרים הבאה: 6 7081-בְן8 | 2568=דָא | 9439=ןא 2-5 5/ןא 6 7 6 559740ן% - 3549=ףא | 4-8968א 5 6 6 0 12 9 קוא 1 ןווא 5 5 ,א וא 0 א 6 חסרון השלטה: אם לא נבחר את 4(< בצורה נכונה, נוכל לקבל לולאה קצרת טוות. לדוגמא: 2 = א %02 = 64 כאשר ממשלכים לחשב מקבלים: 0=פַא 6=0א 0 ןא 0 0 0=כא *56100ן%1 *%7=6100 4=6100%א - 0= ןא 0=פָא 0=א בדוגמא זו נוצרה לולאה קיצרת טוות שלש.בה מספרלם שחוזרלם על עצמם. המספר החוזר 6100 סומן בכוכבלת. 2 השלטה הקונגרואנטית 2 השלטה הקונגרואבטלתב אם מא הוא הגרעין של המספר, אזי אפשר לקבל סדרה של ערכים בעזרת הנוסחא: א פס (8+.א) = 1 כאשר: ‏ 8 הוא המכפיל, . הוא הקבוע לחלבור (המחובר), הוא המודולוס. שש = = אם 8 שווה ל-0, לפנלנו שלטה קונגרואנטלת כפללת. *‏ אם 4 שווה ל-1, לפנלנו שיטה קונדרואנטית חלבורלת. הערך של המודולוס % הוא בדרך כלל חזקה של בסיס המספרלם שמשתמשלם בו. אם | הוא בסיס המספרלם, החלשוב של "₪ פסא" פשוט למדל: הוא מורכב מהספרות הימניות של תוצאת הביטוי 5+;א4. לדוגמא נתון: 0=1א 1 6 10=א 0 פסא (6*1+1) 0 פסא (6*7+1) 0 פסא (6*3+1) 0 פס (6*9+1) א פס (0+8א4) =ן< א פסוז (8+ן4%) =22 א פסוז (8+א4) =4א יא פס (4+8א) =,% נחשב ונקבל: והההההם| וההוהה| ₪44 כ ת% גם בשיטה זו יש אפשרות להכנס ללולאה קצרת טוות. מתמטלקאים הקדלשו זמן רב לבחילרת ערכים מתאימים של הפרמטרלם בשלטות ב' ו-ג' כדי שהמחזור יהלה ארוך ככל הלותר. כאשר מחשבלם מספרים אקרא?ים בעזרת מחשב, הערך המתאלם ביותר עבור א טשווה לגודל מלת המחשב. נוכל להשתמש בנוסתא 2+,א4=[+1א, בל" לחלק ב-א. בזמן 15 ההכפלה *גלוש החלק של המכפלה אשר גדול מן המספר הגדול בלותר שהמחשב לכול להחזיק ונקבל שארלת. למשל, מחשב עם מלה בת 16 סלביות לכול להחזלק מספר חיובי שערכו עד 1, דהיינו 32,767 והערך של א לוכל להלות 32,768. בכל פעם שמקבלים מספר ‏ יותר גדול, כתוצאה מכפל למשל, הספרות המשמעותלות תגלושנה ובמלת המחשב נקבל את השארלת. אם התוצאה שלילית, המספר שנשאר באוגר ילתורגם כמשלים ל-2 של השארית. נוכל להפוך אותה למספר חיובי ע"י: כך שנחבר ‏ לו 32,767 ועוד ‏ 1, כלומר ע"? מחרוזת סיביות של 1 עם 15 אפסים מלמלן. ה-1 להפוך ל-0 את ה-1, שכבר נמצא בסיבית הסלמן ושגורם למספר להלראות כמספר שלללל והמספר לחשב שוב כמספר חלובל.' כל זה נאמר בהנחה שכתוצאה מגלישה הנובעת מכפל של מספרים שלמלם, המחשב לא מפסיק את פעללותו וגם לא מתריע. אם זה לא המצב, שלטה זו אלנה מתאלמה. שיטה קונגרואנטלת טובה דורשת אם כן, שנל דברלם: א. הקפדה בבחירת הפרמטרלם. ב. הכרה טובה של מערכת ההפעלה של המחשב. אם לא נרצה להתבסס על התכונות המלוחדות של המחשב שבו תופעל התכנלת, נוכל לבחור מודולוס עשרוני ולעשות את החילוק ממש, בלי להסתמך על שלטת הטלפול בגלישות. יש כמה דרישות כדל להבטיח מחזור באורך מקסלמלי, כאשר משתמשלם בנוסתהא הבאה א פסא (8+ 4%1) = 1 א. 5 ,2 .חא < 84, ב. אין ל-4 ו-5 אף גורם משותף, ג. כל גורם ראשוני של 4 הוא גם גורם ראשונל של (1-ג), ד. אם % הוא כפולה של 4, גם (2-1) הוא כפולה של 4. דוגמא של פונקציה לחלישוב של מספרים אקראללם: ;דא : ( תתסעדצאד :א ) אספאגת אסד1עסאטץ . 0 4 8 אְ את א פסא (8+א%*12) =:אספאגת + 2290 7 ; פא כאשר משתמשים בשיטה צו, צריכים לדאוג לכך שהפלט (אספאגת) יכנס בפעם הבאה כקלט למחשב. דוגמא ליישום של חישוב מספרילם אקראלים לפי הפונקציה אספאגת: לש ליצור ולהדפיס 50 מספרים אקראיים בין 0 ל-1. 0 0 0 1 ; (א)אספאגות =:א =:תת/5 (פתט518) אתתדדתט ;פא 16 מחלק לם במספר 65436 שהוא המספר האקרא? המקסימלל טנוכל ליצור כאשר 7. שלטה זו מתאלמה למחשב עם מלה של 32 סלביות, אשר ‏ *כול תמלד להחזיק את 3+%*4 ללא גלישה. לו כתבנו א 0458 בהצהרת הפונקצלה, *כולנו להחליף את שתל השורות אחר? המלה א61ע59, בפקודה אחת: דוגמא נוספת לחיטוב של מספרלם אקראללם: ; 65436/ (א)אספאת =: הסוס ;זומת .אספאגת א10צסאטע (1) 1פא00 | (2) )3( 2 => 0 )4( 85 =" 5 אנספת | (5) 8 + תתמויטא אספאגות * =: תתמותזא אספאגת (6) ; ( הממותזאן אספאת )סאטאד - מתמאטא אספאגת =:תתמאטא אספאות > (67 מממותזא אספאגת =:אספאת (8) ;אע (9) החלסור בשורה (7) הוא כמו חילוק ב-1000, כל הוא< גורם לכך שהמשתנה תממטא אספאות, שהלה מספר מ-0.203125 עד 309.203125, להלה עכשלו מספר בין 0 ל-1. כאשר משתמשים בשלטה צו, התמוטא אספאגת חייב להלות משתנה גלובלי, כדי שאפשר להלה להתללחס לערכו בתוך הפונקצלה. אם זוה? פונקציה חיצונלת, צריך לקלים את דרישות המהדר לטימוש במשתנה גלובל:? בתוך פרוצדורה חלצונלת. בתכנלת הראשלת צרלך לתת ל-חממוטא אספאגת ערד התחלתי. מכאן ואילד, בכל פעם טדרוש מספר אקראל, אפשר לרשום את שם הפונקציה אספאות בלבד בכדל לקבל מספר אקרא? בין 0 ל-1. חיטוב ַַת (ח) בעזרת מספרים אקראללם: התכנית תצייו כמה צעדי חלטוב נדרשו לקבלת הפתרון. ('אומדן ; (ששקעט0 , חטפאד) 27 אתססאע ו ; חאזא4א=ת115 : ג , חגש ;זומת בדת ,צ ,א ,תתמוזא אספאגת י תססמנאד :4 ,31008 ,1 ;ז4אחודא ;תת :אספאגת א10צסאטץ אזסטת ,1 = : תממוטא אספאגת 0 זא 20 1 =:1 תסע אזסעת ;אספאות =:א< ;את =:ץ אע 1.0 > צ*צ + א*א עד 1 =:001דא3 ₪ אא 1.0 = צ*צ + א*א עד 1 =:420 ; פא ;דוו / (2.0 / םג + הסַ0דַע5) * 4.0 =:1ע2 טל דע ב-' ,15248 ,('צעדים הוא"' ,21:13:10) אזתדדתט . סא 107 הסבר: היות והשטח. של עלגול ברדיוס של 1 הוא ח=2?תח, השטח של הרבע הראשון של אותו עיגול הוא 4/ח. אם נבחר נקודות מתוך הרלבוע %1א ,0%‏ 0%%1, נקבל אומדן של 4/ח. נבדוק כמה מן הנקודות תהלינה בתוך העלגול וכמה מהן - מחוץ לו. מכיון שאפשר שחלק מהנקודות תהללנה ממש על הגבול (לפחות במידת הדיוק של המחשב), מללחסים 1/2 מאלו לעיגול עצמו וחצל לשטחה שמחוץ לו (בגבולות הריבוע 1*1). כופלים ב-4 את היחס בין מספר הנקודות בתוך העלגול לבין מספר הנקודות שלוצרים כד? לעבור מאומדן של 4/ח לאומדן ח. 9.2 שיטות מונטה קרלו שילטות מונטה קרלו הן שלטות בסטטיסטיקה שמאפשרות לחקות, או לדמות תהליך הסתברותיל. החקללה, או הדמללה (מ018530ת+9) זו בעטית בארבעה צעדים: א. ג. ד. קביעת פונקצית ההסתברות [א=א]2=(א)+, כאשר 90 מצלינת את ההסתברות שמשתנה מקרי א יקבל ערך כלשהוא א. חישוב פונקצית ההתפלגות, ז"א פונקצלת ההסתברות המצטברת: א (7)66 ת = [א>א]ק = (א)ת = ץע 0 הפונקצלה הזו מחשבת את ההסתברות שהמשתנה האקרא? יהלה שווה ל-א, או לכל ערך שהוא קטן מ-א. בחירה של מספר אקראל 8/, אשר נצלב אותו כערך של ץ. חישוב הערך של א, המלוחס ל-ץ ע"י הפונקצלה: [א > א]ק = (א)ע = ץ. החקייה של זריקת קוביה אחת: פונקצית ההסתברות ופונקצית ההתפלגות רשומות בטבלה שלהלן: (א6ת (%*)1 א 16 16 1 206 1/6 2 2/6 1/6 3 6 1/6 4 6 16 5 6 16 6 הגרף של פונקצית ההסתברות (א)+ הוא: 108 הגרף של פונקצלת ההתפלגות (א)?=ץ הוא: הקפיצה בגרף של פונקצלת ההתפלגות, כאשר % שווה ל-1, שווה בדיוק להסתברות שהתוצאה של זרלקת הקובלה תהלה 1 (ז"א הקפלצה הלא מ-0 ל-1/6). כדומה לגבל הקפיצות כאשר ‏ <3 שווה ל-2, 3, 4, 5, ו-6. פירושו של הצעד הרביעל בשיטות מונטה קרלו הוא, שאם נבחר מספר אקראי 4 ונמשוך קו מ-8 בצלר ץ עד שנתקל בגרף, הערך של א בנקודת מפגש זו הוא הערך של המשתנה האקראי א. נובע מזה, שאם המספר האקראל? % הוא בין 0 ו-1/6, הערך המתאים של א הוא 1. אם הערך של א%] הוא< בין 1/6 לבלן 2/6, הערך המתאים של א הוא 2, וכו'. אפשר לתאר את היחס בין % ו-% באמצעות הביטול הבא: 1 (6*41) 6אטתך =:א הפונקצלה המתאלמה לבעלת הקובלה הלא: ; תמא : גצדפטא א110ס6אטע א 1 (אספאגת * 6) ס6אעסתדך =:4צזפטא ;פא הערכים של המשתנה האקראי א (המספר של הפאה העליונה של הקוביה) הם בין 1 לבין 6. פונקצית ההסתברות שווה ל: 6 [=א 6"(א)+ אם נרשום 8 במקום 1 ונרשום 5 במקום 6, נוכל לכתוב את הנוסחא בצורה יותר כללית: / 1 " 02 ,ב = א זו * = (א)+ עבור ערך טיפוסל של המשתנה % נקבל את הנוסחה הבאה: 8 + (א * (1+ב-5)) ס6אשתך =:א% במקום הנוסתא הקודמת: 1 + (6)6*4 6אטתך =:א נוסחא זו תקפה עבור כל משתנה שלש לו הסתברות זהה בכל אחת מן הנקודות בתחום מ-8 עד פ. בעית זרלקת הקובלה, כאשר 8 היה 1 ו-5 הלה 6, הלא מקרה מלוחד של הנוסחא הכללית. 1.9 מקרה א: כאשר משתנה אקרא? א נע בתחום שבין 8 לבין פ, דומה הדבר כאילו הוא נע ביו 2 לבין 1/2+פ (עיין בגרף של פונקצית ההסתברות שהוצג קודם). לכן, בזמן קביעת פונקצית ההסתברות (א)+ מחשבים את ההפרש הבא: 1 8-1/2)-(5+1/2). כל זה נכון אם הערכים שהמשתנה האקראל מקבל הם שלמלם כמו: ב, 8+1, 5..8+2. אם המשתנה האקראל א מוגדר על פנ? טווח רציף כמו למשל, %5א46, אז הגבולות 8 ו-5 הם מדוללקלם. הנוסחה הכללית ללצלרת מספרלם אקראלים מהתפלגות זו הופכת להלות: +5-4(%%1)=:א. כאשר % קרוב ל-0, א קרוב ל-8 וכאשר א קרוב ל-1, נקבל א% קרוב ל-5. מקרה ב: אפשר לדמות זרלקה של שתי קוביות בשת? צורות: א. נעשה דלמול של זרלקת קוביה אחת פעמללם, ונחבר את התוצאות של שנל הדלמוללים. 3 נתילחס לעובדה שפונקציות ההסתברות וההתפלגות עבור זריקת שתל קובלות נראות כך: : (א)6ת (א)+ / 2 1:56 1/36=.8 3 2006 3/36= 3 4 |:6 6/36= .7 5 >566 10/36=.7 6 |06 15/37 7 56 2/3633 8 |06 26/36= 2 9 2.16 30/36 .3 10 106 33/36= .6 11 206 35/36= .2 12 1%6 36/36= 0 נוכל ליצור משתנה אקראל 4 אחד לזריקה של שתי הקוביות ולחשב את % בדרך זר ;את =:א אמח 0.028 => א עך 2=:א 8 אעחך 0.083 >> א תך 3=:א ונ אפעץ 0.167 => א עך 4=:א ו אפחץ 0.277=> א עך 5=:א וו 2000 אמח 0.417=> אא אב 6=:א כו אפחך 0.583 => א עך 7=:א ₪ אמחץ 0.722 >> א עך 8:א ₪ אפחך 0.833 => א עך 9=:א 88 אעחץך 0.916 => א עך 0=:א ₪ אעחך 0.972 => א קך 1=:א ₪ :א מקרה ג: אם רוצים לדמות משחק קלפלם, צריכים לקתת בחשבון שבתירת קלף שונה מזריקת קובלה. בזריקת קוביה ההסתברות לקבל תוצאה כלשהלא היא תמלד 1/6, ללא תלות במספר הפעמים שזורקים את הקוביה קודם. אבל בבחירת קלפים, ההסתברות לקבל קלף מסולם תלולה במספר הקלפים שנמצאים בכל עת בחפלסה. למשל, ההסתברות לבחלרת קלף מסוים היא 1/52 כאשר החפיסה שלמה ובה 52 קלפים, אבל אם לשנם רק 10 קלפים והוא אחד מהם, ההסתברות עולה ל-1/10. השגרה הבאה מדמה טריפה של כל הקלפים בחפלסה. בשגרה זו בוחרילם קלף אחד באופן אקראל ושמלם אותו במקום האחרון. אז בוחרים קלף שנל מתוך 51 שנשארו ושמים אותו במקום השנל מן האחרון וכו'. אם רוצים למשל 5 קלפים אקראיים, אפשר להשתמש בשגרה דצו ולבצע את הלולאה 5 פעמים במקום 51 פעמים. 5 הקלפים האחרונלם בחפלסה יחשבו במקרה זה כ-5 קלפלם שנבחרו באופן אקראל. נגדיר את המערך 154ע0714 שיחזיק את מספר הקלף שנמצא ברגע מסוים במקום 1 בחפיסה: תג ;,תתסעעאך ע0 [1..52]צגתתה :ב5דעהחס במצב ההתחלתל, לפנל טריפת הקלפים, אפשר לשים קלף 1 במקום 1 בחפיסה: 0 52 0 1 =:1 תסץ ;54]1[:=1דעגתס הפרוצדורה השללמה הלא: , .|( 0 תג ; תמ6מאד :זא1,4,ד אזסעםת 201 0 2 סדאזוסם 2 =:1 08סע אזסטת (א בוחרלם קלף אקראלי ביו 1 לבין 7 *) : 1+( וסאיי )6אותיד =נך | (* טומרלם את המספר הסלדורי של הקלף הזה *) 1 =: זאו (א מכניסים למקום ך את הקלף שנמצא עתה במקום 1 בחפיסה *) : 1 =:[54]1דץס מכניסים את הקלף הנבחר לסוף החפלסה, ‏ < (* לחד עם הקלפים האחרלם שנבחרו באופן מקרל. :אאא =:[54]1ך1סחס ספא . פא 3 9 פרמטר?ם שהם פונקציות או פרוצדורות הפרמטרלם של פונקציה או פרוצדורה לכולים להלות משתנלם מכל הסוגים, כולל מערך והם לכוללם גם להילות פונקצילות או פרוצדורות. כותבים פונקציה או פרוצדורה כפרמטר של פונקציה, בעיקר כאשר כותבים פרוצדורה לחישוב כללי במתמטיקה, כמו למשל אינטגרציה, או ציור של גרף. כדי שפרוצדורה מסוג זה תהיה כללית, עליה לפעול על כל פונקצלה ולא רק .על פונקציה מסוימת. משיגים זאת כאשר כותבים פרמטר כלל: שבזמו הביצוע מחליפלם אותו בפונקציה שתבצע את הפעולה המתמטית המבוקשת. . ציור גרף של שתי פונקצלות. ' ( 00 ) טטצ סק (1) גת :(עהמת :א) פטאד5 א10עסאטץ | (2) א (3) (8)א51 =:08א91 (4) / | ;פא (5) גת :(תגתת :א) 05 אסדעסאטע | (6) אזסמפת (7) (005)%8 =:05א6081 (8) פא (69) (מאחת :אד ,אאא ומת :0 ,תע אס1עסאטל) אעאתס מתטפמססתת | (10) 007 (ג1) = (12) תאצ (13) :ץצ ,עד (18) תא :ך 5 ,0 ,א ,היאג ,אטותאזא (15) ; סמדא + ,ג) אגווא1ו מהטתחססתק (16) ; (78088אד :אא ,אטותאזא תל (17) אזסמם (18) אטח 262 עך (19) 202 אזסספת (20) 4=:אטא1אדו (21) = : אדא 7( (22) פא (23) )24( > אזסטת (25) ם=: תואדוו (26) = : ךא (27) פאע (28) ; פא (29) (* הפרוצדורה ז ות *) אנספת | (30) אזא - אגון =:1/408 (31) 00 50 10 1=:א אסע (32) אזססת (33) )34( +:=0.1*%. ; (,00981 * (7408 / (אזו - (צ)ץ))) פאטסת =:4 (35) ; ((₪8ת60 = (%408ד / (אזא - (צ)0))) פאטסת =:2 (36) (אאדאא ,ונאו ,ב ,4) אגאדון (37) 0 1-אטאנאדא 70 0 =:1 תסע (38) ב('7') מדדתט (39) ב('א') מקדתח (40) 0 (1-אחודא4א) 0 (1+אטאזאזא) =:1 תסע (41) ב('"') משדתח (42) אפאד | אחידאגא <> אטאזאדא ‏ 1% (43) ב('א') מעדאט (44) אזמדזת (45) פאע (46) (פאע | (47) (א תכנלת ראשית *) . א1סת (48) ע- ,1 08א6081 ,08א51) 68428 (49) : , .את (50) הסבר: (50)-(48) התכנלת הראשלת: פקודת הפרוצדורה 68428 נמצאת בשורה (49) ובה רושמלם כפרמטרים שתל פונקציות: 5שא51 ו-08א0051. לא השתמשנו בפונקציות א51, 005 אשר מוגדרות בשפת פסקל, כל לש מהדרלם אשר לא מתלרלם שפונקצלות מוגדרות תהינה פרמטרלם. לכן, בטורות (2) עד (9) הגדרנו מחדש פונקצלות אלו. (10) הפרוצדורה קת בטורה (10) מקבלת שתל פונקציות בעלות שטמות דמה: ע ו-6. בהצהרת הפרוצדורה אין צורך להתליחס לפרמטרים של פונקצלות אלה, אלא רק לסוג הנתונים שהם מללצגים. כאשר משתמשים בפונקצלות בתוך הפרוצדורה יש לכלול את הארגומנטלם המתאימלים. כאשר מדפלסים גרף צריך לדאוג לכך שהסקלה שלו תתאים לסקלה של הפונקציה שמציירים. כלומר, שהערכים לא לשתרעו למשל בין 1 לבלן 10,000, או בין 1 לבין 0.101. כדל להבטיח שהסקלה תהלה בטוות הרצוי, מחשבילם את הטוות 203 (אזא-א) של הפונקציה (כאן נקבל 1(=2-)-1) ומחלקים בו את א1א-(צ)ק. התוצאה חילבת להלות פחות מ-1. אם נכפול אותה בגודל הרצול של הגרף (60992) נקבל מספר בין 0 ל-60280. (38) משרטטים פונקציות (ע)ע ו-(ע)0 כאשר ץ נע בין 0.1 ל-5.0. (37) בודקים אלזה מבין המספרים לותר קטן. (39)-(38) מדפלסים רווחלם עד הערך של הפונקצלה הקטנה. (40) מדפיסים כוכבלת כד? לסמן את ערכה של הפונקציה היותר קטנה. (42)-(41) מדפיסים שוב פעם כוכבית, כדי? לסמן את הפונקצלה הלותר גדולה, אם שתל הפונקציות אינן שוות. פלט של תכנלת זו נראה כך: פונקציה לביצוע אינטגרציה: פרוצדורה אחרת שפרמטרים פונקצלונליים מתאלמים לה היא פונקציה לביצוע אלנטגרציה. ננליה שיש פונקצלה (א)+. נוכל לאמוד את שטחה בין הנקודות 4 ו-2, אם נחלק את השטח ל-א מלבנים, כאשר הפלנה הלמנית של כל מלבן נמצאת על העקומה. עיין בצלור למטה: מת+הּ בת8+3 ת8+2 מ+ה 8 208 נלתן לאמוד את השטח מתחת לעקומה ע": המשוואה הבאה: תּ (מ44ב)?"ע ג = ם * (מ1דב)? ל = ד 1 11 נכתוב פונקציה בטפת פסקל שמבצעת אינטגרציה לפי טיטה זו. ור :ג ,4 ;תומת :7 אסזינס6אטע) .86841דא1 אסזץסאע (1) ;ומת : (תפסמעא1 :א (2) תאט | (3) ות :8 ,508 (4) תמסמעאת :1 (5) אזססת | (6) כדי לאמוד את השטח של רבע הע הבאה: הפקודה הבאה תדפלס את האומדן ככל ש-א לותר גדול, האומדן ל נוכל לשפר את האומדן ע"ל לטרפזים לטם חישוב השטח. ש את העקומה ביתר דיוק ממלבן, ;א/(5-4) =:8 (7) ;0:0 (8) 0 א 10 1:51 א0ע (9) , (7)4+1%₪ + 50% =:508 (10) 50 =:4ת80דאד (11) ; פא (12) יגול ביו 0 ל-5 עבור 0<ע נטתמש בפונקציה מח: (מת:א) 01 א10צ6אטץ אזספ ( (505)8-(808)5) 507 =:00ע , עבור השטח של העיגול כולו: ((א ,5 ,0 001) זאד א 4) מדזתח היה יותר מדולק. שלמוש בשלטת הטרפז, כלומר ע"* חלוקת השטת לטה זו תיתן אומדן לותר מדולק, שהרל טרפץז תואם כמו שרואלם מן הצילור הבא: 25 השטח של כל טרפז הוא: כ א ' (41ן*)? + (1א)+ 2 8-ם כאשר | 17-=ת הוא הרוחב טל כל טרפז וגם 8=)א, 5=בא נוכל לכתוב: 11 - [(ןגָא)? + (1א)+] (2/ם) . 6% (א8(16 [(ם*16+(1-םא)+) +...+ ((2א)1)+( ןא)+) 1% ((ן*16+(חָא)+)] (2/ת) [(מא)+ *+ (1-.*)21 +...+ (ןא)21 + ()א)+] (2/ם) (מ8+1)+ ₪. + ((פ)5+(68)+) (2/מ) =1 כדל להפוך את שיטת החישוב של הפונקציה 1 משלטה מלבנית לשלטה טרפזית, נחוצים רק השלנולים האלה: א. בשורה (8) נחליף את 9011:=0 בפקודה הבאה: ((2)8 + (4)ע) * 0.5*8 ב. בשורה (9), במקום א 10 1:=1 208 נכתוב: 0: 11-א 20 1 :1 08ע כאשר פונקצלות או פרוצדורות הן ארגומנטים, הארגומנטים של אותן פונקצלות או פרוצדורות חליבים להלות פרמטרים ערכלים סקלרללים. שמוף הפרמטרלם הפורמליים וסוגיהם: לסיכום, נוכל לתת גלרסה מורחבת של תיאור "שמות הפרמטרים הפורמלללם וסוגיהם", שבהגדרת פונקציה ופרוצדורה ונשתמש למטרה זו בתרשים הבא: ₪- אס1עסאטע ש שפטספססגק שם פרמטר פורמל?ל 206 הסבר: בתרטים זה נוספו המללם אסדדסאעע ו-מ5אטפתססתק. אחר? המלה 45 יבוא שם של פרמטר פורמלי, שהוא שם של פרמטר משתנה. אחר* המלה אסזעסאחע יבוא שם טל פרמטר פורמל? שהוא שם פונקצלה. אפטר לכתוב שם של פרמטר פורמל? בלל אף אחת מן המלים 745 ו-א10עס6אטע ואז הכוונה לפרמטר ערכי. בכל אחד משלושת המקרים האלה, אחר? השם של הפרמטר הפורמלל צרלכים לכתוב את הסוג שלו. האופציה הרבלעלת הלא לכתוב את המלה 20022088 ואחריה שם של פרמטר פורמלי, שהוא שם פרוצדורה. במקרה הזה, לא צרילכים לצלין סוג, כי השם של הפרוצדורה לא מלוחס לסוג כלשהוא, כי רק הפרמטרים שלה לכולים להילות מלוחסים לסוג מסוים. פרמטרים אלה לא מופיעים כחלק מן ההצהרה כאשר הפרוצדורה היא בעצמה רק פרמטר, אלא במקום אחר בהצהרת אותה פרוצדורה. 9.8 פרוצדורות לשל?טה במסו בסעילף ‏ זה נדון בפרוצדורות, אשר תומכות בפעולות קלט ופלט במסוף ושאינן פעולות קרלאה וכתלבה. הן מנצלות את התכונות המלוחדות שָל המסופים לנוחות המשתמש במסוף. כאטר כותבלם פקודת 178א0 בתכנלת, המחשב מעביר למסוף רצף של סיביות אשר מילצגות את התווים אשר מלועדים להצגה. כל קבוצה של 8 סלבלות מתורגמת לתווים לפ: קוד 45611 או 280210, בהתאם לתכונות המסוף. רוב התווים מוצגים במסוף כמו למשל, האות עת או הסיפרה 4. יש מלעוט של תווים שלא מוצגים כלל על המסוף, מכלון שהם מלועדים לבקרה בלבד. לשם כך על המסוף להיות בעל כושר לפענח קודים מסוג זה ולבצע את הפעולות הנובעות מהם. כדל טאפשר יהיה לחבר מסופים של *צרנים שונלם למחשבים שונים היה צורך בתקן אתלד לתוולם שמוצגים ולתוול הבקרה. התקנים הנפוצלם הם תקן 485011 ותקן 6 המסךר של המסוף הנפוץ מכיל 24 שורות ו-80 עמודות ולכן הקיבולת שלוו *כולה להגיע ל-1920 תוולם. כדי למקם את הסמך (ע50ץט0) במקום כלשהו על פנ* המסך, לש לציין את הקואורדינטות צ,< כלומר, את השורה. (%24צ16) ואת העמודה (680א1%). למשל, אם רוצים למקם את הסמן בשורה 7 ובעמודה 27, נְיתן ערך 7 ל-צ וערך 7 ל-א% ונשלהח נתונים אלו למסוף בפקודת 118א/. על המסוף לדעת להבחין בין תווי בקרה, במקרה זה - לשם הצבת הסמן, לבין תוולם אחרים שמלועדים להצגה. ההבחנה נעשלת ע": כך ששולתים למסוף תוול קוד ( 06ת560116 8) לפנל תוול הבקרה. זוהל סדרת תווים מלוחדים שמורלם למחשב שהתווים שלבואו אחרלהם מלועדלם לתפקלד מסוים ולא להצגה רגילה. אחרל סדרת תוול הבקרה לירשם תו מלוחד כדי לצלין את סוף הסדרה, כפ? שנראה בהמטך. ההוראה נלתנת בפקודת מַ1תא. נציג עתה כמה פרוצדורות אשר מבצעות פונקציות שלמושלות במסופים ומשתמשות בתווי בקרה המומלצלם ע"< 4%51 (56ט5%515ת1 08%6ת568 1 בגב16ע6ת12). 207 המתכנת חללב לבדוק את ההתאמה והלישימות של הפרוצדורות והקודים המוצגים כאו לסביבת העבודה שלו, אשר כוללת מחשב, מסופים ומהדר פסקל. את פקודות 118תח השונות לט לכתוב כפל שמוצג בדוגמאות. 1 מחלקת מסך פרוצדורה זו מאפשרת מחיקה מלאה או חלקית של המסך, על פל תוול הבקרה שהלא מקבלת. ; (תתסמעא1 :א ,(צ) 5208 מחטספמסספק (1) את (2) אפחץ 0 > צ עך (3) : אזסחת (8) (* מחק את כל המסך *) .('27]' ,(155)א0₪) מצדאט (5) צ- =:צ (6) ; פא (07 (* הצב סמן *) ('ע' ,1:א ,';' ,1:צ ,']' ,(0000)155) מדדתחט (8) ; פא (9) הסבר: (1) הפרוצדורה מקבלת את הקורדלנאטות (א,צ) של מלקום הסמן. תחילה כותבים את צ (השורה) ואח"כ - את א (העמודה). (3) מפענחים את הסלמן השלילי של צ כבקשה למחוק את המסך בהתאם לקוד הפעולה. (5) הפרוצדורה שולחת למסך את תווי הקוד ע"? ההוראה:(']',(018)155)משדתח. לאחריה כותבים 21 שהוא הקוד למחיקה של כל המסך. לפעולות מחיקה שונות נדרשים קודים שונים, כפל שמפורט ברשלמה שלהלן: 1 - מחיקה מהמקום שבו נמצא הסמן עד לסוף המסך. 1 - מחיקה ממשבצות (1,1) עד המקום הנוכח? של הסמן. 1 - מחלקת כל המסך. 0% - מחיקה מן הסמן עד לסוף הטורה. א - מחלקה מהתחלת השורה עד לסמן. 2% - מחלקת כל השורה שבה נמצא הסמן. אם רוצלם למשל, למחוק את המסך רק מן הנקודה שבה נמצא הסמן, אפשר לכתוב בשורה (5) של התכנלת: | (('01]' ,(0000155) מצדחט (6) מקנים ל-ץ ערך חדש, היובי, לשם מיקום הסמן. (8) התווים (088)155 ו-']' מהווים את הקוד שמורה למחשב שהערכים של א ושל צּ שאחריהם מלועדים למלקום הסמן. התו '8' מציין את סוף הסדרה של תוו:ל הבקרה. + ל 208 2 הבהוב תווים במסופים רבים קיימת התכונה של הבהוב (%מ211). פרוצדורה זו גורמת להפעלת הבהוב תווים שלוצגו על המסך. להפסקת ההבהוב לש לתת הוראה אחרת. ; (608מ1א1 :280דטא) עחהוצז מאטסת6סתק (1) אזסטת (2) ('('ץ' ,1 :טתלדתא ,']' ,(088)155) מצדתט (3) ('תפ5' ,(0020)155) מצדתט (4) פא (5) הסבר: קצב ההבהוב. במסוף מסוים, הוא נע בתחום מ-0 הפרמטר /128ע8 קובע את ועד ל-255 (המהיר ביותר) כאשר אורכו של כל הבהוב הוא 0/30 שנלות (האיטי ביותר) כאשר אורכו של כל הבהוב הוא 255/30 שנלות. כלומר נותנלם ערך למשתנה /%₪728 מפעילים את לאחר שקובעים את הקצב, משתמשת בברלרת ההבהוב בשורה (4). אם לא קובעים את הקצב, הפרוצדורה המחדל שהלא לדוגמא, 32/30 שניות (צ"א 32=/ש2דעא). 3 הבלטה של תצוגת התוולם כאשר עובדים במסוף יש צורך לעתים להדגיש תצוגה של תוולם כדל למשוך את תטומת הלב של מפעיל המסוף כמו למטל, לטם הוראת פעולה או הודעת שגלאה, הצגת כותרת של טופס ועוד. בפרוצדורה זו מאפשרים למשתמש להבליט את הפלט ולהצלגו בצורות שונות. בנוסף להבהוב, אפשר לבצע ארבע פעולות נוספות. ; (ת מס :תטתד) עסאנחוסת מתנופפססתק אזסעם עס תעשת 0455 (* 01660 שפעסטסת *) :('מ7]' ,(018)155) מצדתח :'תִי (* 6ת6611מ0 *) :('מ]' ,(018)155) מצדתח :'טי (* קץ53%ת6שת1 181% *) (('מ2]' ,(002)155) מדדתט :'זז' (* 105ת2ק018 *) :'10]' ,(008)155) מד1תח :'סי ('טעית בפרמטר') א 1מד1או 88דותמזדס ספא ;פא הסבר: הפעולה המבוקשת ע"* המתכנת נמסרת לפרוצדורה ע"י הפרמטר המשתנה ‏ (תך. האפשרויות הן: ת - 716460 6 - התוולם יוצגו על המרקע בהיפוך של צבע. למשל, אם התצוגה הרגילה היא ירוק על מקרע שחור, נקבל עתה תצוגה של תווים בשחור על רקע ירוק של השורה. - 6ת66111ת0 - מתחת לכל תו שלופיע במסך ישורטט קו. -- 2 5 - התוולים שלופלעו מכאן ואילך יהיו בחצל הבהירות וי ל ו. 1 שנם 209 6 - 09822108 - במקום אותיות לטלנלות קטנות, יופיעו סמלים גרפלים שונים שמהם נלתן לבנות במסך צלורילם וצורות שונות. 408 חדזרה לתצוגה הבסיסית בפרוצדורה זו "מכבים" את התכונות שהופעלו וחוזרים למצב הסטנדרטל. ;(0802 :אועך) צסמעץ ממטתתססתק | (1) אזסתת | (2) עס השתץ 658 (3) (* הפסק את כל התכונות *) :'0]' ,(018)0155) מדדתט :'ץ' . (4) (* םללם רק 016860 6פעסטשק *) :('ת]' ,(01800)155) מלדתטח :'ת' (5) (* סללם אופצלת גרפלקה *) 11'(0]' ,(008)0155) מד1תח :'0' (6) ('טעות בפרמטר') אזמד1תח 58דטתמחס (07 פאע (8) ;עאע | (69 הסבר: (4) פרמטר 1 (עבור תכונות) מכבה את כל התכונות שהוצכרו בפרוצדורה הקודמת חוץ מן האופציה לגרפיקה. התכונות שהופעלו ע"? ת, 1 או ₪ ליופסקו אם הפרמטר בפרוצדורה זו הוא 7. (5) אם רוצים לסלים רק את התכונה של %1660 866256 ולהטאלר את התכונות האחרות פועלות, ניתן לעשות זאת בעזרת תו הבקרה א. (6) כדי להחליף סמלים גרפיים באותיות לטלניות קטנות, ‏ הייבלם לכתוב את הקוד מ11. הפעלת שורה (4) לא מפסלקה את האופציה של סמל?ם גרפילם. 5 תרג?ל?ם 1 ששאלות (1) עליך ליצור 0 קבוצות של 12 מספרים אקראיים, | לחבר אותם בכל קבוצה ולצייר בגרף את ערכ? 100 הסכומלם. התוצאה צר?כה להיראות כפעמון (עקומה נורמלית) ששיאו נמצא קרוב לערך .6 בציר ה-א. אם במהדר פסקל שברשותך אלן פונקציה סטנדרטלת ליצירת מספרלם אקראלים, תוכל להשתמש באחת מן הפרוצדורות טנלתנו בפרק זה. (2) בדוק אם הפרוצדורות לשליטה במסוף, אשר נלתנו בסעלף 9.4, מתאלמות לסביבת העבודה שלך. אם לא, מהן הפרוצדורות המתאימות לעבודה במחשב שברשותך. פרט את הקודים לביצוע הפעולות השונות. 2 פפכנלות (1) ערוך דימו של זריקת שתי קוביות 1000 פעמלם ושרטט הלסטוגרמה בכדל להראות את השכיחות של. כל תוצאה. השווה את השכלחויות | הלחסלות להסתברולות התאורטלות המוזכרות בפרק זה. 20 / 2) ערוך הדמללה של המשחק 5ק05*8, אשר משחקים אותו לפל נוהל זה: אחד מטלל שתל קוביות. אם הסכום שמתקבל הוא 7 או 11 הוא זוכה. אם הסכום הוא ‏ 2, 3 או 12 הוא מפסיד ומעביר את הקוביות לחברו. אם הסכום הוא כל מספר אחר, המשחק ממשלך להטלל את הקוביות עד שאחד משני דברלם קורה: * הוא מקבל שוב פעם את אותו סכום שקלבל בתחילת המשחק וזוכה. = הוא מקבל 7 ואצ מפסיד ומעביר את הקובלות. א. כתוב תכנלת שתאפשר לאדם להמר על כל משחק. אם הוא צוכה המחשב תייב לו, אחרת הוא הליב למחשב. התכנלת תחשב את מאזן הזכיות או ההפסדים לאחר סדרה של משחקלם. ב. ערוך הדמליה של 1000 משחקלם ובדוק מה? ההסתברות שהשחקן *זכה (הערך התיאורט?ל הוא 0.4929). (3) עטה אלנטגרציה של הפונקציה ?א=ץ בין 0 ל-1, ע"י בחירה של מספרים אקראללם בתחום שבין 0 ל-1. קבע את האחוז של הנקודות שתהיינה בין ציר א לבין העקומה, כאשר כל זוג של מספרים מללצג זוג (צ,א). (4) את המשחק "21", שנקרא "קוויטלך" (באלדלש) או "פתקים", נהוג הלה לשחק בחג החנוכה. נוהל המשחק: מחלקלם קלף לכל אדם. כאשר מגיע תורו, הוא בוחר קלף מן החפיסה. אם אחד המתחרלם מגלע לסכום של 21 הוא זוכה מלד, אם הסכום גבוה מ-21 הוא מפסיד מיד. אם הסכום שלו קטן מ-21, יש לן גם זכות לא לבחור קלף. אם בסלום הסלבוב אף לא אחד קלבל 21, מגלים את הקלפים ומל שבלדו הסכום הגבוה ביותר אשר קרוב ל-21 הוא הזוכה. דמה את המשחק הזה בעבור אדם שמשחק נגד המחשב ותוכל להנלח את הפרטים הנוספלם: א. אתה יכול להמר לפנל כל משיכת קלף ולהוסיף להימור הקודם. ב. המחשב לא מהמר. הוא רק משלם לך אם הלמרת וזכלת. ג. המחשב תמלד מושך עוד קלף, אם סכום הקלפים שלו פחות מ-17. ד. הקלפים 2-9 מללצגים את המספרלם 2-9. , ה. הקלף "אס" מללצג את המספר 1 או 11 לפי רצון השחקן. ו. הערך של כל אחד מהקלפים "ז'ק", מלכה ומלך הוא 10. (5) כתוב פונקציה' שמקבלת כקלט שתי פונקצלות שונות, אשר משתמשות באותו ערך ממשל א וקובעת איזו מבינלהן לותר גדולה בערכה המספר?ל. הפונקציה מחזילרה את הערך של הפונקציה היותר גדולה ומצללנת אלזו מהן הלא הגדולה. ה (6) כתוב פונקצלה בכדי לעשות אלנטגרציה נומרית של כל פונקצלה לפ שלטת הטרפז. השתמש ‏ בפונקציות הבאות: כדי ‏ לבדוק אם הפונקציה שכתבת פועלת כראול. 1 א. א6 (א)א51 200 | יּ ב. + 68 2+ 8 | . ג. > 6% א ה 21 פרק 10 רשומות " מבנה רשומות עד עכטיו עסקנו בנתונים מן הסוגים הבאים: * מספרים ממשללם, * מספרלם שלמים, * ערכים בוליאנללים, *‏ תווים לחלדלם, * סוגים שהוגדרו ע"ל מנללה (65ק17 666ה:סתטתת), * מלים שהוגדרו כמערך ארוז (צ4:28 80%66ת2). לעתים עוסקים בקבוצה של נתונים שלש קשר לוגיל ביניהם. אם כל נתון הוא מאותו סוג נוכל להחזיק את הקבוצה במערך ואם יש קבוצות רבות כאלו, אפשר להחזיק אותן במערך של מערכים. למשל, בתכנית 5%080713א. החזקנו כך רשלמה של שמות עובדים: ;םתס 07 [אסמת1..0] צגתתה כמאסגק = פמטסו51 מקצך ; 50 עס [א1פטסאגא. .1] צהתתחג : אדפטס תג נוכל להחזלק צלונלם של 20 תלמידים בכל אחד מ-5 מבחנים בצורה זו: ;תתסתדא1 ע0 [1..5] צגתתג = אדאשצ21ד מקצד ;עד עס [1..20] צגתתה : אדץאמפטך5 תגט כל קבוצת נתונים במקרה של העובדים, היתה מורכבת ממספר תווים לפי ערכו ‏ של הקבוע 02₪08. כל קבוצת נתונים במקרה של הסטודנטים הלתה מורכבת מ-5 מספרים שלמלם.בשנל המקרלם מרכיבל? הקבוצה זהים בסוגם. לעתים יש צורך לטפל בקבוצה של משתנים שמרכיבלה הם מסוגלם שונים. במקרה של העובדים, אלן זה נכון להניח שהרשימה כוללת שמות בלבד. יותר סביר להניח שיש ברשימה נתונים' שונים עבור כל עובד: מספר עובד, שם, תארלך לידה, כתובת, מצב משפחתי, שכר או מרכיבי שכר וכד', אשר כל אחד מהם מוצג כסוג שונה. קבוצת נתונים כזו נקראת רשומה (64ע86602) וכל איבר בה נקרא שדה (71618). הטשדות ברשומה אלנם חליבים להלות מאותו סוג נתונים. קבוצת רשומות העוסקות בנושא מסוים נקראת קובץ (7116), כמו למשל קובץ תלמידלם. 212 דוגמא של רשומה מוצגת בשרטוט הבא: בתכנית 458088713 שבפרק 7, טיפלנו בשדות מסוגים שונים ע"* כך שבנינו 3 מערכים שונים: א1כט0, ת.508, אשצזלז. המקום היחסי המקביל בכל אחד מ-3 המערכים התייחס לאותו עובד. נשכתב עתה תכנית זו למקרה שכל הנתונים של עובד מסוים נכללים ברשומה אחת ונשתמש במערך אחד של רשומות. ; (1טפץט0 , עטעא1) 08₪116א45 אגת6סאק (1) 07 | (2) ; 1100 סאוו (3) ; 030025 (4) פפצד | (5) פתססמת =פמטס דהאטזופטפת (6) ;תס תס [א6מתס..1] צגתתה סתאסגת :סמטסאמ5 (7) :5048 (8) האס :אטצ1?ד (9) ; פא (10) תאצ (11) ;א סטסאון. .0 : אדפטס ת4ת5דוו (12) ;א9001 : פתקמס (13) פטס ץותפתת עס [אדפטסאגא. .1] צגתתג : אדפטס מסגתגון (14) ; פתטס דגונוופעת : במפהכגחס הותחזפטת (15) ;אדפטסאא. .1 : 8 קוו ,1539 ,אסאגא ' - (16) : .2 אזסמם (17) =:א1פטס אגת5זא (18) 0 (אנפטסאגא > אדצפטס בלש פאה עסם צסא מ,נדוט (19) אזסתם (20) ;(' הקש שם עובד, שכר וצלון') אמזמעדקט (21) 0 אספתס 70 1 =:אסאגא תסע + (22) ( [ 0 ]50 . זפ זוס האתחופמת) כגטת (23) ; אד ו | אטאפתת) אזפהתת (24) .1 =:15048ון > (25) מטתץ =:8קק61ו (26) ו 0 (אזפטס , ו => ו סאג פפקהחסו הדוו (27) | > ספטסומז5. זו5 הפ זוס גותחזפמת עד (28) אחתך פשטסאממף. [5038דוע]אדפטס אסתון (29) | : 8 =: 0285 (30) | - > 58 (31) | ; (5000)115908 =:5948ד (32) ן ו =: 51העגח6 תגת5דון (33) 0 תפגפחס 15245 סדאווסע אדפטס תהעפדוא =: תהתפזוו פסק (34) ; [45ת5דו]אדפטס אסגתגא =: [ (15945א)5006]אדפטס 404תא (35) | זז הותחופתת =: [מפגכגחס תגקפדוו]אדפטס אסגתגא (36) 213 ; (א1סט0 5000015245 =: אדעטס תגספדע (37) ; עאם (38) 0 אנפטס תגע5נא 10 1=:תגת52נא תסד (39) אזספת (40) , 0 5. [ 115032 ] אדפטס סגתגא) מדדט (41) ; (5028:10:2. [ת4ק5דא]אדפטס אס6גתגו (42) עס אוד2ץ. [אפ15א]אדפטס מסגתגו 058 (43) (10: 'א4צט2דפא') אנתצדתה :'ג' (48) ((100':05') אתמעדתח :'םִ' (45) (08: '124טומ' ) א-מצ1ת :'0' (46) פאע (47) פא (48) .פא | (49) הסבר: (10)-(5) בשורות אלו מצהירים על הרשומה פמט0 זגאשהפמת כסוג המוגדר ע"ל המשתמש. ההצהרה חליבת להתחלל במלה 280082 ולהסתילים במלה פאתע, כאשר בין מלים אלו מופלעים שמות הטשדות המרכיבים את הרשומה. הצורה הכללית של ההצהרה הלא: אפשר לכתוב שדות אחדלם מאותו סוג ולהפרלד ביניהם בפסיק. בסוף כל קבוצה של שדות מאותו סוג יבואו נקודתיים, שם הסוג ונקודה-פסיק. אח"כ אפשר להוסיף שדות מסוגים אחרים. בדוגמא זו הגדרנו את הרשומה בהצהרת 8קצ1, אך אפשר גם להגדיר אותה כמשתנה בהצהרת תגט. (15)-(14) אחרל ההצהרה אל עפטס 1גותותפעת אפשר להשתמש בה בהצהרת משתנים: בתיאור איברי מערך (שורה 14) ובתיאור של משתנה בודד (שורה 15) שיקרא הותחזסתת. (28)-(23), (43)-(41). מתייחסים לשדה בתוך הרשומה ע" ציון שם הרשומה, נקודה ואחריה שם השדה כמו למשל, 8ג01424584.5081 גאטחפעת (טורה (24)). אם השדה הוא מערך שמעוניינים באחד מאברילו, כותבלם את האינדקס בתוך סוגריים מרובעים אחרי שם השדה, למשל (שורה 3): [ סו סו .011014 | ות אם הרשומה עצמה שייכת למערך, כותבים את שם המערך, מספר הרטומה במערך - בתוך סוגרילים " מרובעים, נקודה ואח"כ - שם השדה כמו למשל: סו 53 [548דו] פטס ו (שורה 41). עיין גם בטורות (42)-(43). בשורות (22)-(24) חוזרלם על שם הרשומה (ג610458 האטחפפת) 3 פעמלם. אפשר לפשט את הקלדוד ע"י החלפת שורות אלו בפקודות הבאות: - 0 00451 ותותפתת אצנט אס 214 00 מסמתס 10 1 =:אסאגא תסע ; ( [ אסא א] פמט %₪ה5) פגמת (אטצז2ד ,ת5083) אזפאמת פא כאשר כותבים שם רשומה ב:ן 118ח ו-0כ2, כל שם שדה שמופיע בפקודה הפשוטה או המורכבת שאחרל אחז מלוחס לאותה רשומה. לכן, כתיבת שם הרשומה, תס גאסתפפת, בין אצדט לביו 0 אלפשרה לנו להשמלט את שם הרשומה שלפב? סמטס אשח5, 8ג5608 ו-אעצ121 בפקודות העוקבות. (36)-(35) המניע העלקרל להגדרת המושג של רשומה הוא העובדה שאפשר להעתיק מרשומה אחת לחברתה בעזרת פקודת הצבה, אם שת? הרשומות זהות במבנה שלהן. בתכנית 2713ת45%0 הל*לנו מוכרתלם לבצע העברה זו בנפרד לכל שדה ולכן פעולה זו נכתבה שם ב-3 שורות ((38)-(36)). שורה (36) בתכנלת זו גם משלבת 3 שורות שהלו נפרדות בתכנית 8113ת45%0א (שם, שורות (42)-(40)). (48)-(39) גם שורות אלו נלתן לפשט כדלהלן: סע אנפטס תגפ5דא 0 1 =:15248א א0ע סע [15248]אדפטס מסגתגא אקד (* אדד *) 000 אצסשתת (5048:10:2 , 65008 מדדתט עס אטצ21ץ 6458 ; (10:'אגצט2?דפא') אתסעזתט : 'ג' -' ,(5:'ש10') אתמדצנתח : 'פִ' 0 (9:'ג2טאמא) אתסדדתא : '0' (* 6485 *) ו פאח (> אַ17א *) פא 2 הפקודה סע..אצדט (*) התבנית אשר מתארת את הפקודה ₪118..20 מוצגת להלן: פקודה המשתנה בהגדרות %848 חייב להילות שסישל רשומה. נשתמש בדוגמאות כדי להציג רשומות לותר מורכבות מאלו שראלנו עד כה ונשתמטש גם בפקודות 0כ2..א178א. א " לת | 205 נלהול ביקורים במרפאה: במרפאה מחזלקים רשומה אחת עבור כל אחד מן החולים ("פצלינטים"), אשר כוללת פרטים אישיללם. ‏ יש בה התילחסות לרשומות אחרות שמחזיקות את המועד (תאריך וסעה) של הביקור ("תור") הבא. הרשומות והגדרות סוגל הנתונים נלתנלם להלן: מקצץך (* 10 מקומות *) ;תגאס עס [1..10]צגתתב גת = 10 2₪7סת0 גו עתססעת = 722108 506 2 >< אסצ אס [1..6]צגתת :51מכסם6 5 : גאגתפ ;פא עתססות = 708 506 :101תך 0 : גפ ; פא פתססמת = צאמזוע (* 10 מקומות *) ;10 440880207 : דוו א א : תת 58% : 4 תסד תס [1..52]צהתתג : תגטתת אזתסך ; ( 04מאתא, תג201) : אזון (* רק מבוגרים *) 15% ו : (642058, אהו1 , דטפא, אהטגת) :ו הקד ; 3001 1 אמצדגץ | 00 : הס 0 סא עס [1..10]צגתתה : ד ; ספא לאחר שמגדלרים סוג עבור 2411887 אפשר להצהיר על משתנים מאותו סוג: תג זאד :51גסת0 זאחזדות ;צאתדדת עס [1..10]צגתתגה ו | אזאח ות בתכנית יכולים לתת ערכים למשתנים. למשל, בזמו קבלת חולה חדש, נוכל לרשום פרטלם בסיסיים, כמו, דא דצ =: 1524014 51 . 5₪גפת0 צאפדדותק 7 777ות' =: דדגתחק ₪וטו ב .05 צאמדדץ אא =: אדא חפגכגת6 זאמדדגת 1 =: 0451.01ת0 דאמדדגת בזמן קבלעת התור הראשון נוכל לכתוב: המלו =: 4סצ.101תגד. גםז] סד 58פח0 צאמדדגק 7 =: 108.0100058תד. פזן תס א5גסגח0 צאמדדוץ 1% =: א1ז5. ה10תד. גפז]! תסד. 58פגמס צאמדדוק תיניופי =: ה%ח5. 1125 תסך. 62458 צאתדדוץ במציאות מזינים נתונים חדשים מן המסוף ולא כותבים אותם כחלק אינטגרל של 216 התכנית. במקום פקודות ההצבה המופיעות למעלה, צריך לכתוב פקודות פא או אזפגתת, כולל שמות המשתנלם והתלאור שלהם. ההתללחסויות לשדות בפקודות ההצבה היו מסורבלות למד ולכן נשתמש בפקודה אחז כדי לפשט את התכנות, כפי שנראה בהמשך ב-6 מבנים שונלים: מבנה 1: 0 451פגחס שאתדלגת העדט (1) 0ע 1484 אסד מצד (2) 0ע 168תגד אדנט (3) אזסטת (4) ;17 =:0%צ 2 (6)5 ; ' 7 =:08₪02051 (6) =:4א51 (7) : "ואצי =: 1512401 50% (8) . 4777777ת54' =:לגתק אמח5 (9) ; אתא =:אזא (610 6 =:010 (11) ; פא (12) הסבר: בדוגמא שלפנינו לש שלוש הוראות ₪178 מקוננות. סדר הסריקה שלהן הוא מן ההוראה הפנלמלת ביותר, בשורה (3), אל ההוראה החיצונית ביותר בשורה (1). המהדר בוחן תחילה את הפקודה ₪111 הפנימית בשורה (3) וקובע איזה מבין המטתנים המוזכרים שליכים לרשומה בשם 148108. משתנים בשורות (5), (6) ו-(7) שללכים לרשומה זו ולכן הוא מצרף לפנליהם את שם הרשומה. המשתנלם בשורות (8)-(11) אלנם שלליכים לרשומה 101ת742 ולכן הם לא מושפעים כלל מן העובדה שהם נמצאים בתוך פקודת 0178 הפנימלת. עכטיו המהדר עובר לבחון את פקודת ₪111 האמצעלת בשורה (2). אסץ.אַסדַתגד, .תאז ו-4א.108.58ת14, שנבעו מהפעלת ה-א178ח הפנלמלת, שללכים לרטומה 1424 108 ולכן הוא מוסיף להם את שם הרשומה הנכון: אסצ. 0דתד. הפו 0ך .תד גפ תסד גא . 10תגד. הפא תסד גם במקרה זה, כמו בקודם, המשתנים האחרים בטווח של ה-₪111 האמצעית אלנם שייכים לרשומה זו ולכן הם לא מושפעלם. לבסוף,: המהדר מגיע לפקודה 1171 החיצונילת בשורה (1). כל המשתנלם המוזכרים בטשורות (5) עד (11) שייכים לרשומה בשם זה ולכן הן מתורגמות כפקודות הצבה לתוך הרשומה 0842458 צאאדדגת. לש להקפיד על סדר הפקודות של משפטי 171ח. למשל ננלח שמשנים את סדר הקילנון של פקודות (1), (2), (3) וכותבים אותן בסדר שונה: 0 אפגא תס זדזח 0 ח60תתגד [1עזח 0ע 00458 צאמנדגע דדח במקרה זה, שורות (8)-(11) היו מתבצעות כראוי, אבל שורות (5)-(7) לא 27 היו פועלות כראוי, מכלון שהשדות 0%צ, 0802858 ו-א58 אינם שייכים לרשומה 0140258 1א24118. אלה הם שדות של הרשומה 108ת14, אשר מוגדרת כשדה של הרשומה 824 ת10, שהיא עצמה שדה של הרשומה 0842458 דאמדדגע. כאשר המהדר מגיע לרשומה ‏ ₪422 708 הוא | דללג | כבר ‏ על הרשומה 08 צאמז1ת ואלנו לכול להתליחס אליה פעם נוספת. נמצא, שפיתחנו את השדות בשורות (5)-(7) ל: : אסצ. הסזתהד. פאז תס התד גפגו תסך אפ ה10תגד. הפג. תסיד אבל לא הוספנו לפניהם את השם: 08054 צאתדץגת? ₪ ניתן לקצר את התכנית יובמקום לכתוב את השורות (1)-(3), אפשר לכתוב רק: 0 0₪דת0ד ,גתגח ת0סך ,הפהסגת6 צאמדדאת אצקזט קיצור ‏ זה מסביר למה במבנה הכללי של 0כ..%₪113 היתה אפשרות לכתוב *לותר ממשתנה (ז"א שם רשומה) אחד. המשמעות של המבנה המקוצר היא בדלוק כמשמעותו של המבנה הארוך יותר. לכן אסור לשנות גם פה את סדר המשתנים כמו שקודם הלה אסור לשנות את סדר קינון הפקודות 0כ1784..2. במקום מבנה 1 שהוזכר לעיל, אפשר לכתוב מבנלם נוספים של סדרות פקודות אשר מכילות את הפקודה ₪118..20 בצורות אחרות ואשר מבצעות את אותן הפעולות. מבנה 2: 0 0051 2אמדקגע הקזח א 1 =:אסצ. 108ת4ד. הפוח 708 ;0 =:108.08₪00058תג . 1180 108 =:.א5. ה10תד. הפוח 708 / "20 דדצ' =:.08קה5דון אה ' 7 =:דעגתק חפ ; אמא =:אזון 6 =:01 ; פא מבנה 3: . 00 צאמנצגתק זט א 4/עאפא =:אזא ; 6 =:010 ' דאם20דדצ' =:.ח10תה5דון 511 - להרוריגת54' =:ךלגתק אמחפ 0 08דתגל , תג > דט .| א61 .7 =:04ע ; 0 =:08102051 6 =:ג.אגתס פא ; פא 28 מבנה 4: , מבנה זה דומה למבנה 3, אבל במקום כותבלם: מסזתד, הפ תסד מדדא 16₪תד. הפא ת0ד קזח ההבדל בין מבנה 3 לבין מבנה 8 הוא בכר שמבנה 3 מטפל בשדה שנמצא ברשומה 4 תס" אפללו אם הוא לא נמצא ברשומה אסזתג.ימבנה 4 דורש שהשדות טיטופלו להלו גם ב-108ת74 וגם ב-₪454 108. בדוגמא ‏ זו המשתנים 01צ, אפתפסתס ו-4א514 שליכלם לשת: הרשומות ולכן גם מבנה 3 וגם מבנה 4 נכונים. מבנה 5: 0 640458 צאפדדגת ה-א : אזססת ; גשתאסא =:אזון ,26 =:010 ; !20 דדצ' =:.ה40ת51דון 51 / 544777777' =:1ךגתק 4מתפ סע גפ תסץ ‏ אעדא אזסמת ;7 =:א04צ.108ת14 ' 97 000' =:108.68₪00858תד 6 =:.אגז5. 8108 ; כעא מבנה 6: 0 04245 צאע1דגתק הדז א ; 4/מאפא =:אזא :26 =:010 'יךאת0דצ' =:בתסקת5דא אמח ו 4 =:דעגתק 581 ;פא סע 1454 2458.708זז6 לאמדדוע הדנא א ;7 =:016צ.742108 ; 07 =:02058ת6.ה6זתגך 6 =:.א51. 2108 ; פא הנחללה: מכל המבנלם שהוצגו, הטובלם בלותר הם מבנה ‏ 3 או מבנה ‏ 4. במבנה 1 ה-₪118..20 הכלל שלושה משתנים אשר שניים מתוכם (748108, 1454 108) לא התאימו לחלק מן השדות בתתחום ה-118..20ח. לעומת זאת, במבנה ‏ 3 משתנה ה-0. .₪118 החלצונ (084025% [ַא24118) ש?יך לכל השדות בתחומו ומשתנל ה-20. .₪118 הפנימל (108ת12, ₪424 108) שייכים גם כן לכל השדות בתחומם. מבנה ‏ 3 גם הרבה *ותר ברור לקורא, שילכול לזהות בלתר קלות את הרשומות הטשונות והשדות השליכים לכל רשומה. 209 התחום של שם שדה הוא הרשומה שבה הוא מוגדר. נובע מזה שאותו שם שדה *כול להופלע ברשומות שונות מבלי ששם אחד לשפ?ע על חברו. רשומה לכולה להלות שדהת בתוך רשומה אחרת ולכן גם שם רשומה יכול להופיע *ותר מפעם אחת. התנאל לכך הוא שרשומות עם שמות זהים תהללנה שדות ברשומות שונות ובתנאל שהרשומה אלנה שדה ברשומה אחרת בעלת שם זהה. בפקודת 118 עבור רשומה מסולמת, אסור לפנות למשתנה שלש לו שם זהה לאחד מן השדות ברשומה. המהדר מצרף את שם הרשומה לכל אלזכור של שדה שלה, אשר כלול בתחום ה-118..20ח. אם יהלה משתנה אחר בעל אותו שם, גם אליו יצורף שם הרשומה, דבר שאינו רצוי כמובן. 25 אל?תור מלות מפתח בתמל?ל (*) לישום נפוץ במחשב הוא עלבוד תמללל (8ת22006581 6א16%). אחד מן העיבודים האפשריים הוא סרלקת תמליל כדי לאתר את כל המופעים של מלה, ‏ או מללם, המוגדרות כמלות מפתח. סרלקה כזאת מאפשרת להצביע על קטע תמליל אשר דן בנושא מסוים. התכנית לעיבוד תמליל שבדוגמא זו מאתרת את כל השורות בתמליל (71א78) שבהן מופלעה מלת מפתח (6;סא צְ6א).. היא מקבלת כקלט שלושה נתונלם: א. מספר מלות המפתח שרוצים לאתר, ב. רשלמת מלות המפתח, ג. התמליל שרוצים לנתת. התכנלת מפלקה כפלט את התמליל המקורל ומצלינת בשמאל של כל שורה את מספרה הסידורל. בסוף הקטע תרשמנה מלות המפתת ולצד כל אחת מהן לרשמו מספרל הטורות שבהן הלא הופיעה. נכתוב את התכנ*ת בעבור תמליל באנגללת. הלא תפעל גם בעברית לאחר שלנויים קלים, אשר לקחו בחשבון גם את תכונות המסוף. הרצה טילפוסית תיראה כך: מספר מלות המפתח לתכנלת צו לכול להלות ביןו 1 ל-10" 3 עכשיו הקש את המלים: ו גדא ₪ הכנס את הקטע 5 גד מאנתסאא 4 15 תמקטפאסס דע 16אסתצ סק 6דדהאסדט מזיד אתסע 0 א א פפפפמתקאע געגכ מץזטק דא 10 61015 16אסתדסקזק אזקאת 15 . צגא סטאדותמדעעעתת 4 אד 6טת 52001716 0 6אדת 000 ..1עת אד 5דך תת א04 77 פאגמא 5זחד. טאדהסגא 4 15 תתדטק00 מחך ,םתג תס צפתדק אתתת פטאח 5 245160 פזוד 10₪זו תסע 5מדט יס 55סא צזאס 220 .0 פחד סעא1 כמא6דפטע צ1611ע1 0 ,סעזת51 מסאס צגחך פאגחא 5דד . 60דדגאסצטג 15 תמדטק 60 מ , 5001 . אשת עתתדא1 5125דטס צטסמצנט אטת 20 פמטאדץאסס ידד דע ע0 תעש מפעגא 18 17 ,18 לגחד ;0דאסתצס ות 15 עד , עןסתדמיד . צסתפאם 01104 אס פאטת כאג 5דטס6תדס ,73 5מד.זטקזאו 1 .108תטק1אג תסבוצפ ג 15 תמדטקא00 מחחד, צחזינתטסד . 11195ד1את 51642צאתק דסא ,א41110 0 005505תת מ צ[אס אתסעתחק אג6 תתדטקא0ס מחד ,(מדעדע אס א ,00241508 פאג ,אס51נטדע , אסדך6עדדזטו ,אסד סאפ . 600201085 אמטאנעת תמעפאגתץ בדגכ 70 עס 05 עדדאדע ג מתהקעתת צפטא (תת)ה]תססתע מחד) מא50א50 ,מדאד5 70 60 מו תסע (אגתססתע 4) פא110התתקס מגטפנטדפאד מתפהאס. זג מחזיד : . 011.0 צתסצמא אאס פיד אזזו אתססתק מחד 5ת510 אג6 תענטע0ס מא , צזהאדד ד 1 א0ס1צסטתדע אחס 115 תמפאט הס6טספמד 17 אסםתסע אממד פאג .8 הפלט נראה כך: 15 דד מאדצא6א 3 16 תמעטקון0ס 3ד6דכ 16אסתדסט/נת 16 אסדטה מז 1 אפסע 6 ה א כמפפתתקאע בעגכ מד.טע1אהא 20 0100115 0דא0שנסס 2 אז את 7'5 . צג פמאדוותתדךמסעתת ג א1 פתטת 10ע01מת5 0ע 6א01ת1600 3 .1 אע 5ז18 4 אתסעתעת אג0 ד פאגמא פדחך. תאדא6גא ג 5ך תתדטקאסס מחך ,ה עס צפתדע 5 אפעם מעג 5 54870 פד הסדנה תסע 1₪5צצטד 0 תפסאב צמאס 6 . מאד6א פד 0דא1 כפא0דפעס צ10410ע 50 7 51 פסאס ץותזד פאמא 5דד .4710סדטה 15 תמדט 60 מא ,צפא500 8 . אתמ תתא מפ1פצטס צטסמנט אטת 10 פשטא1ץאסס 7ד 9 0 עס עט פפגא 15 17 ,15 עגזו ;10אסתדסתגת 15 17 , צתסתדאד 10 . צסתמאם 1042ת01ע אס פאטת פאג 5ע1טסת01 11 .37 5מ1.זטעקזאגא דד . 4108 01ק1און 511805 3 15 תמדטק 00 מתד, צזוודיתטסע 12 . 11185דאת 104פצאת עסא 13 ,2217108 0% 0085585קק מ צעאס אתסעתעק אג6 תמצטקא60 מ (הדעדע 14 א10ץ1ע) א1 ,א48150קסס פאג ,א1/1510כ , א164710,עדטו , אסזי 0 . 600207185 אממטנתת תמעפאהתן גדגת 10 16 5005 מלדאדע ג מתהקחתק צפטא (תאות6סקס שחד) מא0א50 ,מדאדפ 0 תצטק00 חנד תסע (אגתסספק ) 3 מםגטפצטנפאד ₪פהאס1ה חנד 18 .אע 19 6 מאד, צעעאאזץע 20 1 האמעאט 64טסתחד דד אסםעעסע אפמעד פאג 21 22 0. צתסוו אאס 75ד אעז ד [תססתק מז 51095 אב6 תמדטקאס ודוע לטסא א10צסעתנת אחס 5 אמסא 0 ,18 ,14 ,12 ,8 ,5 ,1 ,(תמצטק 60 6 ,12 ,2 ,גדגת 7 ,1 ,מאדחסגא 221 תרשילם זרימה של המודולים הבסיסיים של בעלה זו נלתן להלן: מלורת-מפתח | קלט של מָלות המפתת קריאה, החסנה רבדלקה של הטקסט, שררה בשררה במבנה (4) מדפלסים את שורות התמליל. במבנה (5) מדפיסים רשימה של מלות המפתח כאשר ליד כל אחת מהן מופלעה רשימת השורות בהן הלא מופיעה. על פל תרשים הזרימה אפשר לכתוב את התכנית הבאה: : (צטעדטס , צטפאד) אסהתדעגון דסדנא | |ועתססתע (1) )2( 007 =1אדאגו ,זזא אסמה0 -- (3) =ך.ודאהון התט5 אספתס ‏ - (4) 1 =411א1און 011 אמדעגא דד תאפפא | (5) =1גא1אהון תפ 15288 - (6) שפצ (7) 50 תהקפדא..1 = התטח5 תגקפדא 506 :| (8) ו סד 15 . בס ה מדע גו זיס דא הדו 506 (9) תס .1 =הנזה אספתס 500 | (10) 5 08ת1..0 =גתקופ מסתתס 506 | (11) = הדו (12) פפססמת (13) ודו מסמתס 506 :מססתס (14) עס [ ד זוסמתס 506] צגתתה :תטצק (15) א 300 0 [תטח5 153 506] צאתתה :דסהחסו (16) ; פא (17) עס [גת5 6₪מחס 506]צגתתג כעאסגת :בתחזפ (18) תגט (19) 07 [4תחז5 תה5דון 506 ] צאתת :7 (20) לס [6₪ דעו דסדון תק5דון 506 ] צאוחפג :ד דד (21) :טג (22) 222 | 5 008ת0 506 :1 ;דוו 008 506 :תמלסצטם | אגא אסתתס ; הדע דס.דדון : קדו | 506 :68מדעגא 107 דוו א , גח | ₪1 . :54 הסטאס ; ד,ז4אדאן דסותחזפ | 5דון. .0 :51307 פאס ; 04 : (0118 :) 000 ' דסציס א10צסאטע א אתחך ('?' => 01) פאג (08 => 'ב') עד (32-(08)כת0) 5 =:02007 01צ071 בוטו 1 =:62007 07צ01ס ' ; פא ד דסא התא מתטפעססתע ג המידק 107 תדו 506 :7 ; דד | ו | ₪ :1 אזסטת 17 | ,זדון 008₪ת0 =:תםד0צ2₪ | שק 0 20 דהא " סו זא 10 1 = אס 0 [1 ]סדק ' 6% א אזסע 1:0 2 =: [1 ]נטצעת 0ע אתעסם עסא ממזחח אנסעם ; (צ14) כגמת אמח ז]אדאגא זא הספתס > עב אזסטת =:1 (ש1) 620101 01צ071ס =: [1]דטצע פא ; פא ;7 =:008ת0 אתחץ תמץעסצעם אגדאזן הסשתס > 0808 -עך ;תס =:תתדסצאם אגדאזן הסמתס אזפגמת פאע ; פא 5100 158 6 :גתטזז5 תה50דו )זו מדיל גא דסדון 4<וא מתטפעססתע תו ; זה אדאון התטזו5 0..08808 :א אדא הדור אספתס..0 :1 ;אמ3001 :המאח2 ,אפאסת אזסתפ 0 60חדץא דס1דא תגקפזא ‏ 70 1 =:1 פסע 0 [1]מ6גמדק הו ץ דא זותיד אזספת )23( )24( )25( )26( )27( )28( )29( )30( )31( )32( )33( )34( )35( )36( )37( )38( )39( )40( )41( )42( )43( )484( )45( )46( )47( )48( )49( )50( )51( )52( )53( )58( )55( )56( )57( )58( )59( )60( )61( )62( )63( )64( )65( )66( )67( )68( )69( 23 ;1 =:1 /=:א זמקעת ץמקטת ;1+ =:צ [1-א%+] [ 5 1]15248סתטח5 = [נ]1טצע =:אמאסכ = ת0 ומאסע עסא מזצאט > [א+נ] [5104 45ק5דא]01א5)) סאג המאסם =:מעחם? ((('2' < [א+נ][גתש580 תגע5נא]עסתטת5) תס ('ג' =:א 1:0 (54 001 < 008-1ת0+א) תס אמחם2 מדצאס זז =:[4תח51 152 דסגעסו פאע ; פא ; ((גתטזו5 15245)] 506 :5תאדת סא) םוקע ךהפפכגזו מתטספססתע תג תע 45ת5זא 806 :7 אס ; (צטקדט0) 68גע 0 פפאתת סא 70 1 =:1 תסע את ;(7':2' ,1:3) מחדתט ([510801]1) אזחדדתט פא ; עאם ; גתטזו5 15238 506 :פמאד סא)0גמדעא דסדון 7ג5בקכגז מתטפמססת? ; (08מדץן ד0דון 15238 506 :5פתסאצטא סא תג ;דעו סד א3ת19א 506 :1 ;דוו 01מת0 500 :1 ; חן ת1504ו] 506 :א - אזססת ; א,זחדדת ; ('אאפאד') אזמדזתט ; זז 00 5פת0חץצתא סא 1-70 =:1 אסק 0 [1]א0מדצגו 1דא זדדט אשת 00 0₪עת0 70 2 =:ק תסע ; []דצטצם מצדתט 0 פפאזע סא 70 1 =:א תסל אעחד [א]עסגתסא חד ,'7,') מעדתט אזפינדתט פא ; פא 2048 )70( )71( )72( )73( )74( )75( )76( )77( )78( )79( )80( )81( )82( )83( )84( )85( )86( )87( )88( )89( )90( )91( )92( )93( )94( )95( )96( )97( )98( )99( )100( )101( )102( )103( )104( )105( )106( )107( )108( )109( )110( )111( )112( )113( )118( )115( )116( ; 0₪סהדעא דסדוען מפח5 דט זט פתטספססתע (117) א (118) דהמססת (119) ;('מספר מלות המפתח לתכנלת זו יכול להלות') אעדזתט (120) (('בין 1 ל-',1:2/אדאגון מסהמדץא צסמדון תגת5דא, '7') אזמדדתט (121) ( 68 תדע א דסמדו | 1508 א,זפוחת (122) : פאג ‏ 1 =< אס6גמדץגא ‏ דסדון 1595 מצצאט (123) ; 4141דאון הסמדעגון דסנדא ת3ק5דא => אסמדעגון דסנזדא ת3ק5דא (128) ;('עכטיו הקש את המלים:') אממד1תטי (125) סמדא דסדון אתא (126) ; פא (127) ;ןודת תטעזץ מתטעפססתת (128) (* קרלאה, אחסון ובדיקה של התמליל, טורה בשורה *) (129) : אזססת (130) ;('הכנס את הקטע') א(מד1תח (131) 0=: 007 תאס (132) 0 (1גואגון דסתט51 ת5103017>1504 מאסא) פאג תסם צסא ממדחט (133) אזססת (134) 0 =:50084 אספתס (135) ; +510001 מאסא =:סתטמ5 פאס / (136) 0ע אתסט יסא א דוח (137) את (138) ; (ט1) פגפת (139) ;1+ 5 0₪מת0 =:גתע51 הסמתס (140) (620101)70 07צ071= 4 | 008 [ 580507 מאסא] סט : (141) ; פא (142) 0 זאאדאגא התט5 יק 0 1+ת0ח5 008ת0 =:1 תסק (143) 7 =:[1][עסתת5 מאסא] דסתטה5 (144) ;זומת '/ (145) אתחד 1-תתדסצמם אגדאגח מסתתס =< בתס5 אספתס עד (146) (01ת5₪0 מאסא) אסמדקגון דסזזא ?דא (147) סו (148) סע 401מךעא צסתדא 5גע5נא ‏ 10 1 =:1 תסק (149) =:[.ת510 תאסא]דסגתסא. [ד]מ6אמדתגון דג זדוו , (150) פאק (151) ; עאע (152) (* התכנלת הראשלת *) אזסתת (153) ;ד ד10דון 55 דמ מא (154) ונ המטפזיי (155) ( 5 | מאסא) ךם,זטק סז (156) (₪סגמדעגון ץסדון ת1523א , דסאנז5 מאסא) הס6גמדעגא צסדון רדס (157) .פא (158) הסבר: רטימת מלות המפתה מוחזקת במערך של רשומות. המערך מוגדר בשורה (21) והרשומות מתוארות בשורות (12)-(17). 255 התכנלת הראשלת בשורות (153) עד (158) מחולקת ל-4 פרוצדורות בסיסלות אשר נסביר אותן להלן: שורה (154): קרלאה לפרוצדורה 608אךא 1107 משח5 דמתתא, שורות (117) עד (127). (128)-(122) המשתנה [61מ7ע 1107 15248 צריך לקבל ערך קביל. (126) בשורה זו לש קרלאה לפרוצדורה 4478408 11007 גתא, אשר קוראת מלות מפתח. נסבילר עתה פרוצדורה זו, אשר בשורות (35)-(60). (35) כאשר בודקלם שורה כדל לראות אם הלא מכילה מלות מפתת, אין צורך לבדוק אם אורכה קטן ממלת המפתח הקטנה בלותר. את אורכה של מלת המפתח הקטנה ביותר מוצאים בזמן הקרלאה של מלות המפתח ומחזיקים אותו במשתנה תמדסצסת אגדךאגן מסתת0, המוצהר בשורה (24). (40) נותנלם ערך התחלת? מקסימלל למשתנה אשר מחזיק את אורך מלת המפתח. כאשר נקרא מלת מפתח שאורכה קטן מאותו ערך מקסלמלי, התוכן של המנסצעת אגדאן 03008 ישתנה בהתאם. (45) מציבים את התו רוות ("7) בתו הראשון המיועד לכל מלת מפתת. אם לא הילנו עושים זאת, הלה אפשר להגיע למסקנה שמוצאלם מלת מפתח גם כאשר היא רק חלק ממלה לותר גדולה. למשל, אם מלת המפתח הלא 6א7871 אפשר לחשוב שהמלה 6א5088181 מתאלמה גם כן, מכיון שהלא מכללה את התווים שמחפשים. אבל, כאשר מגדלרים את הרווח כחלק ממלת המפתח 6א1111", המלה 506 אינה מכללה אותה. (54)-(46) קוראילם את אותיות המלה אחת אחרי חברתה. מנלחים שמלד אחהרל האות האתרונה של המלה הקישו אתטזשת 1408ת2ת022 ולכן את0ע מופעל. בשורה (52) מעבירים כל אות שמוזנת למחשב דרך הפונקציה 620707 07צ011. תפקידה להפוך אותיות קטנות לגדולות ע"? חיסור של 32 מקוד 25011 שלהן. ‏ לולא עשינור טרנספורמציה דו, לא נלתן היה לגלות זהות של שתל מלים אם אחת כתובה באותלות קטנות והאחרת באותלות גדולות. (55) מעבירים את אורכה של המלה לשדה א6שת1[.0]א6גמדקג 1גזזון. (57)-(56) מעדכנים את המשתנה תעךסצעם אגדךהאגם זס6עתס. שורה (155): קרלאה לפרוצדורה 370.70 00ע11, שורות (128) עד (152). בטשלב זה עוברים לפרוצדורה לקריאה, אחסון ובדיקה של התמללל. מטפלים בכל שורה בנפרד בכד? לראות אללו מלות מפתה נמצאות בה. נסביר זאת. (132) משווים את 580801 8088 ל-0 וקוראים את השורות אחת אחרי חברתה, כאשר 5101001 מאסא גדל באחד לפנל קריאת כל שורה. (141) מסיבים את כל האותיות לאותיות גדולות לפנל שמעבירלם אותן למקומן המתאלם במערך הדו-ממדל דסתנס, בשורה 1 מאסא ובעמודה 54 מסתהס. 206 (144)-(143) ממלאלם את שאר העמודות בשורה 07א580 5א%0 ברווחים כדי למחוק את התווים שאול? הלו שם קודם. (146) מחפשים מלת מפתה בשורה שעכשיו נקראה, בתנאי שאורכה שווה לפתות לאורכה של מלת המפתח הקטנה ביותר פחות 1. מתסרים 1, כי התו הראשון בכל מלה במערך 80% הלה רווח וזה הגדלל את אורכה ב-1. אם מלת המפתת הקטנה ביותר היא המלה | הלחלדה | בשורה, אורכה " של | שורה זו להלה 1-תתדסצמת אגדהא מסעתס ולכן בודקים כל שורה שאורכה שווה או גדול מאורך זה. שורה 147: קריאה לפרוצדורה 408חךע1 11007/ן 124א, שורות (61) עד (88). (75) בפעם הראשונה משווים את [2]ךשצע אל [01[]1תט580 ת4ת15א]לסתטה5. מתחילים במקום הטני ב-%סצא כל המקום הראשון הוא רוות, כדל שהמלה לא תהלה צמודה למלה שלפנלה. בתחילת השורה המלה אלנה יכולה להלות צמודה למלה שלפניה ולכן דרלשה זו אלננה מתאימה למקרה זה. מלה בטורה תהלה זהה למלת מפתח אם לש זהות בין האותלות שלה לבין אותיות של מלת המפתת. אבל עדיין לש אפשרות שאין זהות מלאה בלן שתל מללם, אם המלה בשורת הקלט ?ותר ארוכה ממלת המפתח. למשל, אם מלת המפתח היא 50848 ובתוך השורה כתוב 60א50%8181, המשתנה 0%88ע יקבל ערך בוליאני 08א71 על אף שאין זהות. לכן בודקים תנאי שנל בשורה (77). (78)-(77) יש לקבוע אם יש זהות מלאה בין שתי המלים או לא. יש זהות רק אם מגיעים למסקנה שיש דמלון (שורה (75)) וגם התו הבא אחר? האות האחרונה אלננו אות אלא תו אחר. יש לדאוג לכך שאורך השורות בפועל לא יעלה על 1-זזגאזאגא 584 098508, כי עלולים לנסות להשתמש בשורות (77) ןו-(78) במצביע שערכו 411+1א1א4א 514 088₪081, דבר שיביא להפסקת הביצוע. הגבלה זו אלננה מורידה מכלליותה של התכנית אם לוקחים זאת בחטבון בזמן קביעת 4701א1א 514 זסעתס. (79) ממשלכים לחפש מן המקום הבא בשורה. (80) משווים את 1 ל-0, כדל להתחיל במחזור הבא של הלולאה עם [1]טשצת (ולא עם [2]+טצע כמו בפעם הראשונה). אחר? ההשוואה הראשונה, חילב להלות רווח משמאל למלה הדומה למלת המפתח, לפנל שהיא תחשב כזהה לה לחלוטין. (81) לוצאים מן הלולאה אם מוצאים בשורה מלת מפתח אחת לפחות כלומר, שהתנאי ליציאה הוא כאשר התחת? טשווה מעת1. התנאל הנוסף הוא כשאין עוד אפשרות למצוא מלת מפתח בטשורה, כל מספר המקומות שנשארו קטן מהאורך של מלת המפתח. (82) הערך הבוללאני של [4א580 401]815248ע0א סווה לערכו של 1מ2088. ערך זה *הלה שווה ל-1808 אם מוצאים מלת מפתה, אחרת ערכו להיה שווה ל-141.58. שורה (156): קריאה לפרוצדורה ץשזחק 14224541 להדפסת התמליל, שורות (85) עד (95). 227 שורה | (157): קרלאה לפרוצדורה 4601מ7קא 11017 4687עס. להדפסת מלות המפתח, שורות (96) עד (116). המקום הראשון בכל מלת מפתה, ([1]צשצע.[1]אסגמדעגא דג1ד), הוא תו רוות ולכן אין מדפיסים אותו שורות (109)-(110). ליד כל מלת מפתח מדפלסים את מספרי השורות בהן הלא הופיעה לפחות פעם אחת (שורה 113). כדל לעשות זאת נעזרים במערך [א]1סגעסא.[468]1תדק4א צגזא שמציין אם מלת מפתח 1 מופיעה בשורה א, ראה שורה (112). 4 מחרוזות (*) בעיה שכליחה בשטח של עיבוד תמלללים הלא למצוא את כל המופעים של מלה מסולמת כדל להחלילף אותה במלה אחרת. לפתרון בעיה זו, נסתכל על מלים ולפעמלם על שורות כמחרוזות בעלות אורך משתנה ונבנה פונקציות המבצעות פעולות מוגדרות על מחרוזות אלו. בעזרת רשומות נוכל להגדלר מחרוזת (8ת5671) כרשומה המורכבת משנל אלברים, אשר מוצגת בדרך זו: 0% 1 = אגא מקצ ;אאא .0 = טגד תגקפדא כת0סעת = 60287 ;גד 154 :אסמאס תגזזס עס [אגא. .1][צהחתה פמאסגת :טג ;פא מחרוזת ריקה (אַת56:1 ע6קחת) היא מהרוזת, אשר בה 08801 יהיה שווה ל-0. התוכן האמית של האלברים במערך 14 אלנו חטוב. על סמך הצהרות אלו נוכפ לכתוב את הפונקציות והפרוצדורות המוצגות בהמשך. בפרוצדורות ובפונקציות המוצגות בהמשך כתבנו את המחרוזות השונות כפרמטרלם משתנים ‏ רק כאשר היינו צריכים לקבל אותן חזרה עם שינויים. אפשר כמובן לכתוב אותן תמלד כפרמטרלם משתנים, כדל למנוע העתקה מחדש בכל פעם שמשתמשלם בפונקציה או בפרוצדורה. 1 לרלאה של מחרוזת בפרוצדורה זו נציג קרלאה של מחרוזת תווים אשר מוזנים כקלט מן המסוף. 208 ; (002091א:א תגטצ) הנתא מתטסקתססתק אזסאת סע א צחדט את =:08001 0 (אתסע צסא) סאג (אגא > אסמתס) מדזחו אזספת ; 00+1 =:₪01ת0 ([140]08508) פגחת 2 הדפסת מחרוזת בפרוצדורה ‏ זו מתבססלם על התכונה של מערך ארוז (ְ8ש:( 86א286%), שמאפשרת לכתוב את המערך 8.12 כולו בפקודת א/1187א₪ אחת. המחרוזת תודפס בלחידת הפלט הסטנדרטית של המערכת. ; (028₪7תת0ג :א) לדא מותמססתע אזסטת (טגד.א) אזמדזאט ; פא 3 חיללוץ של תת-מהרוזת נבצע חילוץ (6ס4ע5א2) של תת-מהרוזת ‏ 1% מתוך מחרוזת 4, ללא שינוי של המחרוזת המקורלת, תת-המחרוזת מתחילה מתו מספר 1.1081 . ואורכה הוא 7 0 , 0027 :א) 02071 0ון דד מתטסמססתת (1) סא :1 תגט (2) :00 ו הסטתס ,ג 1זגחסדז (3) (טד דוו : (4) אס (5) אפו 08תת0.א < 1 - 00287א הסתתס + גתהתסעגה עד (6) ;1 + הס - הסמת4.0 =:00207ן מסמתס (7) 0 02₪7 אא הספת 70 1:=1 תסע (8) - 1 + המהחס1ה]טגד.א =:[1]טגץ. א (9) 0027 01מתס =:מסמתס.אך (10) ; פא (11) הסבר: (7)-(6) בוחנים אם אורך תת-מהרוזת שמבקשים גדול ממספר התוולם שבין מקום ההתחלה לבין סוף המחרוזת. אם זה קורה, מקטלנים את האורך של תת-המחרוזת המבוקטשת למספר המקומות שבין יהמקום ההתחלת: (841084:2) לבין סוף המחרוזת: ‏ 1 + 1084/04 - 1.02208. 209 (9)-(8) העתקה מן המחרוצת המקורית למחרוזת 1% שתחזיק את תת-המהרוזת. 108 הוספה של מחרוזת למחרוזת קיימת בפרוצדורה זו מוסיפלם מחרוזת 11! למהרוזת % החל במקום מוגדר, א0אגא. ;7 :א תגל) העהפסט תתופתססתק (1) ; (40ד 15248 :סאג ;00287 :נחו (2) תג (3) (טגז תגתפדא :1,ד (8) את (5) אמח 1+הסתת0.א => אסאגא קד (6) אזסעת (7) אתחד אגא => אסעת0.ע + מססתס.א עד (8) ס.א + הסמתס.א =:מסקתס.א (9) לבור (10) ;אא =:801ת0.א (11) 0 זסמתס. זא+אסאגאת 0צאוסע מס6סת0.א =:1 פסץ (12). [08ת0. מא-1]טג.א =:[1]ץגד.א (13) אמח ה0מת0.₪ + אסאגא =< מסתתס.א קד (14) 1 01שת1.0 + אסאגא =:נ (15) לונ (16) =:1 (17) 0 1 70 אסאאא =:1 05ק (18) [1+אסאאא-1 ]צגד. א =:[1]טגד.א (19) פא (20) ; פא (21) הסבר: (6) תחילה ח?יבים לבדוק אם התוצאה של הוספת המחרוזת ]8! למחרוזת הקלימת א תפיק מחרוזת חוקית, ז"א מחרוזת רציפה. אם מקום ההוספה (04א44) הוא בתוך המתרוזת א, או מליד אחרלה, אין כל בעלה. אבל אם מקום ההוספה הלנו מעבר לאורכה של מחרוזת 8 ועוד 1, יווצר רווח בין סופה של המחרוזת א ומקום ההוספה והפרוצדורה לא תטפל במקרה כזה. אם כוונת המתכנת להוסיף רווחים בין שת?ל המחרוזות ולהרכלב מהן מחרוזת אחת, אפשר לעשות זאת בשני שלבים: תחילה מוסיפלם מחרוזת של רווחים שאורכה הסמתס.א-אסאא ואת"כ מוסלפים את המחרוזת 81. (11)-(8) צריכים לדאוג לכך שהאורך החדש של % לא להלה גדול מן האורך המקסימלי (א4א) שהוגדר עבור המחרוזת. אם זהו המצב, מבצעים את ההוספה, אבל התווים שהלו צרלכים להופיע אחרל 44% לא לוכנסו למחרוזת המשטולבת, שורות (12)-(19). את ההוספה מבצעים בשני שלבים: שלב א, (13)-(12): העברת התווים ימלנה כדי לפנות מקום למחתרוזת הנוספת. צריך להעביר כל תו בטיעור של 808ת1.0/ מקומות למלנה. לכן, תו שהלה במקום 11.08808/-1 יעבור למקום 1, שורה (13). צריך להתחיל את ההעברה הזו מן התור שנמצא במקום 0%א4א ולהעביר כל תו בשיעור של 61תת0.א 20 מקומות, עד לתו טנמצא במקום 08801.אא-08801.א, בטורות (9) ו-(11) קבענו את ערכו של המשתנה 4.08801 כאורך של המחרוזת המשולבת. המצב מתואר בשרטוט הבא: אסמתס . הא-61פתס. א מספתס . אא זוסמתס.א מקומות אם קלים: 60םשת0.אא + אסאגא > אסתת0.א | הלולאה לא תתבצע. כלומר, אם האורך של המחרוזת החדשה קטן מן הסכום של מקום ההוספה ואורכה של המחרוזת הנוספת, אזי אלן תווים להזיז למינה. שלב ב, (19)-(14): מילול של מחרוזת % החל מ-א0א4א ועד 1-א6מתס.ז+0א11ן בתווים של מחרוזת 8א. לכן בשורה (18) מאפשרים ל-1 להשתנות מ-אסאגא עד 1 ז+א0אא ולקבל את התווים ממקום 1 עד 1.088₪01א מן המחרוזת הנוספת. הבעלה הלחידה שלכולה להתעורר היא, שאלן מקום בשביל המחרוזת הנוספת ₪81! כולה, כל: 4.0801 < א6תת1.0+אסאגא (טורה (17)-(14)). אם זהו המצב, ממלאים את [4.72%]1 עד שקיים 1=%1.08808, על אף שלא מכניסים את כל התוולם של המחרוזת הנוספת. פרוצדורה זו מבצעת גם חיבור של שתל מחרוזות, ז"א הוספת מחרוזת מלד אחרל המחרוזת המקורלת, כאשר הערך של אסאגא הוא 1+₪08₪ת1.0. . 25 מחלקה של חלק ממחרוצת קללמת ;0 :4 תהט) גדג51זן מתטפמססתק (1) ג (טגד תבת15א :מספהס ,ג-זהחסדגת (2) תג (3) ד 1545 :תטטס ,1 (4) את (5) + =:מטע6 (6) אפחץ 1+08008₪.א < מטט6 עד (7) 1.001 =:ט/6 (8) 0 מטט60-א0ת0.א 70 1:=0 08ק (9) ; [1+נטט6] ד.א =: [1+1 הסג ]טג א (10) (ג.ז10-600) - מסתת0.א =:אסמתס.א (11) ; כא (12) הסבר: (6) המשתנה 60/0 מציין את גבול המחלקה, ז"א את התו הראשון לאחר התוולם שעומדים להמחק. תו זה וכל הבאלם אחרלו, יצטרכו לזוז שמאלה לכיוון ראש המחרוזת ולמלא את הרווח שנוצר ע"ל מחלקת התוולם. בדרך כלל, התו הראשון 21 שאליננו למחיקה להיה התו שנמצא במקום ₪4108214+08801, כאשר בגת6דאת הוא המקום הראשון למתיקה ו-08808 הוא מספר התוולם למחיקה. (7) ילתכן שמספר התווים למחלקה (02801) להלה גדול ממספר התווים שבמחרוזת המקורלת החל ממקום .11011 ואילך. במקרה זה נצלב את 1+00₪ק4.0 במשתנה , שמללצג את סוף קבוצת התווים שעומדים למחיקה. התוצאה הלא, שנמחק תוולם רק עד סוף המחרוזת. (10)-(9) כאשר מוחקים קטע של מחרוזת, כל תו, החל מ-עתטל6 ועד מסמתס.א, חייב לזוז 08801 מקומות שמאלה. ההזזה היא שמאלה, ממקום 6001+1 למקום 1+.זזוסידת, עד שמגיעים לתו שמקומו הוא 808ת08.א8. כאשר מוחקים עד לסוף המחרוזת, האינדקס בפקודה חס לשתנה מ-0 עד (4.0880+1) -0₪ה0. א=:, 1 - אספתס. ), אשר שווה 1- והגבול העליון *היה קטן מן הגבול התחתון. במצב זה הלולאה לא תתבצע. (11) האורך החדש של המחרוזת יהלה שווה לאורך הקודם פחות מספר התוולם שנמחקו. במחיקה רגל?לה מספר זה שווה ל-08801. כאשר מוחקים עד סוף המחרוזת, מספר זה שווה ל: 4.08008-841084:3+1. בשנל המקרים, מספר התווים למחלקה הוא 4מ6דגם-טש6 והאורך החדש של המחרוזת הוא: (1 01-10 ) -מסתס. א. 106 חיפוש מחרוזת מסוימת בתוך מחרוזת אחרת :(טד 1524 :..0ד ; דמ2?סותוס א :כ ,68 05ע1ח0 אסדצסאטע | (1) ; סאד (2) תג (3) ;ו תגפפנא :7 ,1 (4) ;3001 :המטח5 10 (5) אזסעת (6) ( 09011=0. האסטס ) תס (₪0+1ת4.0 < מסמתס. גאסטפ+,זגחסדגזן) עד (7) 081205:0 אממך (8) י כו (9) אזסעת (10) =:ך (11) דמקתת (12) =:7 (13) =:1 (18) ץמקתת (15) =:1 (16) [24/]1+1-1.א <> []אאסטפ =:ממטגח5 10 (17) (50₪ת0. אסטפ=1) 05 גסטגמ5 10 מצצאט (18) ; ( 6141 ת0. האסטכ-אספתס. א =1) 08 (אמטגח5 20 עסא) מנצאט (19) אפחץ התטגח5 10 עך (20) 0 =:011905 (21) כו (22) 1 =:פטפזאס (23) פא (28) ; פא (25) 22 הסבר: (1) הפונקציה מחפשת את המופע הראשון של המחרוזת המבוקשת 200% במחרוזת א, החל ממקום (.11/1014. (7) בודקים אם מספר התווים מהמקום ההתחלת? לחלפוש עד לסוף המחרוזת קטן ממספר התוולם במחרוזת הדוגמא. אם כך המצב, אין כל סלכול למצוא אותה במחרוזת המקורלת. בודקים גם אם מחרוזת הדוגמא הלא מחרוזת רלקה. במקרים אלה וגם במקרה שהדוגמא לא נמצאת במחרוזת א, שורה (21), הערך שהפונקצלה מחזירה הוא 0. (19)-(11) נוהל החלפוש: משווים את שתי המחרוזות זו לזו ע"* השוואה של תו לתו, החל ממקום .8410841 במחרוזת המקורית. (18) לוצאים מן הלולאה הפנלמלת באחד משלושה מקרלם: א. מגלים אל-שיולון. ב. מוצאים שלולון, אבל מגיעים לתו האחרון בדוגמא. ג. מוצאלם שיויון בין שתל המחרוזות עד לתו האחרון בדוגמא. התו האחרון בדוגמא אינו שווה לתו המקב?ל במחרוזת. זהו מצב של אמץ580 20 וגם מצב של 61מאס0. 1=200%. (19) לוצאים מן הלולאה החיצונלת בשנ* מקרלם: א. כאשר *וצאים מן הלולאה הפנימלת במצב של שיויון. ב. כאשר מגיעים למצב של אל-שלולון במצב שנטשארלם פחות תווים במחרוזת 1 מאטר ‏ יש תווים בדוגמא. המשתנה 1 (שעולה בלחידות של 1) כבר שווה לערכו של הביטוי ‏ ₪08+1ת0. א6טכ-₪08א1.0 שהוא המקרה האחרון שמאפשר שיולון. ו אם נמצאלם במצב של אל שלולון כאשר מגיעים לשורה (19) ומצב ב' לא קילם, חוזרים על הלולאה החיצונלת עד שמגיעים למצב א' או ב'. 27 קקבלפעת אורך של מחרוזת ; ת68מאך : ( 0027 תס אסא , אזס ס.א =:08ת0 ;פא 5 דוגמאות לפעולג רוז נציג שתי תכניות כדל להדגים את הפעולות השונות שאפשר לבצע במחרוזת. א. הדפסת שם בראשי תיבות: א 2-20 נתון שס של. אדּם (באבגלית)+ 3 א דא ונתת 23 יש להפיק פלט שיכלול שם משפחה וראשי תיבות של השמות הפרטללם, שלוצגו בצורה זו: א 4 ,00% השלבים העלקרלים של התהליך מתוארים בתרשלם זרלמה שבהמשך: || קרא את השם | מצא את האות הראשונה בטס הראשון מצא את הרווח הראשון אחר השס הראשון מצא את האות הראשונה בשם ‏ השנר מצא את הרווח הראשטשון אחר?" השם ‏ הטנל מצא את שס המשפחה סדר את התבנית הדרושה כתוב ‏ את מחרוזת הפלט 20 התכנלת: ; (טקיטס, דטפאד) א תטכ51 אגתססאע . 007 1 = א אהוא. .0 =740 15945 60 =00207 ו טג ת3ק15 :0 תס עס [אגא..1]צותתב ספאסגע :טל ; עאוז ' . תג ,אדפק , דט2גת אס , 11510011 אמ וו :ה0הטסת ,588% ,8 5 א 0 ,ת 5 א ס 8 5 0 מתללחס לאות ראטונה, שם ראשון, )*‏ 7 7 5 5 0 מתייחס לאות ראשונה, שם שכל. דא :1,1 תּ (* 5 תוכל להנליח שכאן מפורטות הפונקצלות והפרוצדורות *) (* שבסעיפים 10.3.1 עד 10.3.7 תא מתספמס6סתע הדיא מתטכמססתע 07 ו 7 מהטעמ6סתע 0 מתטקעססתת וז מתטקמ0סתע 5 אסבע6אטץ ₪ א610אטץ אס (* הגדרת מחרוזת שמכ?לה רווח אחד *) ' =:טגך.08טעת : 12 ית ,' =:/74.א51ק (* הגדרת מחרוזת שמכילה פסיק אחד *) 7 ;1 =:09008.א251 (% קריאה של השם המלא *) ; (50₪4) גזתא ; (5888) 03808 =:1 הוספה טל רווח לאחר השם *) (1+1 שחת ,%מ51) 5474סת (* כדי להבטיח ששם המשפחה להיה מוקף רווחים משנל צדדלו. 1 2 5 ת 0 ) סו דד הוצאת התו הראשון במחרוזת 588% והכנסתו למחרוזת 8( 5 5 0, *) (א כדי לבודד את האות הראשונה בשם הראשון. (* מציאת הרווח הראשון *) (1 ,46חת ,5188) 001205 =:1 : .(1 ,141 ,8 5 5 0 ,₪6א5) 027 7 הוצאת התו הראשון אחרי הרווח הראשון, שהוא למעשה האות ‏ *) (* הראשונה בשם השנל. בזה בודדנו את האות הראשונה בשם השנל. ;(1+1 ,08/טת , 5) 005 (א מציאת הרווח השני שמפריד בין השם השני לבין שם המשפחה *) 7 ,סשת ,055 (* מציאת הרווח השליש? שמסמן סוף שם המשפחה *) ;(1-1 ,1+1 , 511240118 111 א ,אחה5) ?ןוו דג (* בידוד שט המשפחה *) - 1: :ד 205 ב. %( 5( *( - ( %( קביעת האורך של שם-משפחה *) ; ( 115824019 א51) 01עת0 =:1 ;(1+ד ,0518 , ם0קח5דון אמה5) 4ע54סא הוספת פסיק בסוף המחרוזת .1512408) 51181 *) ((1+2 ,608הטסת ,גח6גקה5זא 588%) געה5סת הוספת רווח אחרל הפסלק *) ,ת 5 > 0 ,ג0תה5דון א5) געג5סא הוספת האות הראשונה של השם הראשון *) ;(1+4 ,ה0טמת , 1151211 א5) 0 1 ,5 5 5 0 ,גח0גקה5דא אמ580) גתג5ס₪ הוספת האות הראשונה של השם השנל *) ;דוו 5 =:דט2גת 51 הצגת השם במבנה הרצול *) (1ט2גת 588) גטדדא ; פא קרלאת תמליל והדפסת מללם: נציג דוגמא נוספת לטיפול במחרוזות בעזרת הפונקצלות והפרוצדורות שתוארו קודם. המרכלבות אותה. יש לקרוא שורת תמליל (אנגלית) ולהדפיס רשימה של המלים הבודדות ; (עטעטס, צטעא1) צאחד דהדתא אגתססתת (1) )2( 7 1 = אגא (3) שעצץ (4) %. .0 =טגך תק5דון (5) כתס0ת =0207 0 (6) ;גד 15248 :01סמתס (07) תס עס [אגא..1]צגתת4 פמאסגק :טג (8) < נפאע (9) = אאט (10) :61גטעת , גד , האס (11) ;ד תגפ5זא :1 (12) (* תוכל להנלח שכאן מפורטות הפונקצלות *) אתא מטשתטססתע (13) (* והפרוצדורות מסעלפלם *) בא מתטפפססתע (18) (* 10.3.1 עד 10.3.7 *) ו דד מתטפתססתתע (15) 26 ע0א מתטפתססתע (16) זז תתססתססתתק (17) 5 אס1צעסאטץע (18) . 09008 אס1עסאטע (19) אזססת (20) ;7 =:[1]טגך.6שסת (21) =:061.00001חת (22) 0 ₪0 סא אדא (23) אזסעת (28) ; אזקדדתט (25) ;('הדפס שורה בבקשה') א(מצדתח (26) ; ( והז )דחא (27) )28( 1:= 0001) 51( ; ;(1+1 ,ה08בטתת ,בתטח5) התהפסע (29) 1 הת ,5084) 031205 =:1 (30) 0 0 < 1 מוחא (31) אזססת (32) (1-1 ,1 ,גדא ,זו5) 00207 גו ד (33) אפמד ‏ 0 < (114א)שספת 0‏ עד (34) אזסתת (35) ; ( 4)114/דדא (36) א זפדזתט (37) ; פא (38) (ד ,1 ,51084) בדותו5 ו (39) (1 ,הס6גטתת ,גתט5) 01205 =:1 פוט" (40) פאם (41) סא (42) ..סאע (43) הסבר: קוראים את טורת התמליל בשורה (27) ומוסלפים רווח (29) כדי שהשורה תמלד תסתילם ברוות. מחפטלם את הרווח הראשון בשורת התמללל (30). חליב להיות לפחות רווח אחד כ? הוספנו תו רוות אחד בסוף השורה. נכנסים ללולאה שמבצעת את הפעולות הבאות: א. מבודדת את המלה הראשונה, כלומר את התווים עד הרווח הראשון, (שורה (33)). ב. כותבת מלה זו (טורה (36)). ג. מוחקת מלה זו מן המחרוזת (שורה (39)). אם להלו כמה רוותלם *חד, הערך של 1 בשורה (40) להלה 1, מכיון שמצאנו רוות במקום הראשון. האורך של 1 בטורה (33) ליהלה אז 0 ולא נבצע את השורות (35) עד (38). בשורה (39) נשמלט רווח זה. תהליך זה *ימשך עד שנגיע לתו שטונה מרווח. הערה: בפרק 6 פתרנו תרגלל דומה בלל להלעזר בפרוצדורות, כפי שעשלנו כאן. 6 תרג?ללים 1 שאלות (1) הצהר על א1א0?פא כרטומה עם השדות הבאלם: - = שם (מורכב משם משפחה ושם פרטל), = מספר זהות, = תאריך ללדה (מורכב מחודש, יום ושנה), * מספר הללדלם, = מצב משפחתי (רווק/ה, נשוי/אה, אלמן/ה, גרוש/ה, נישואלם שנלים), = מקום מגורים (כתובת, עלר, מילקוד. הכתובת מורכבת ממספר ושם רחוב), = מין (זכר, נקבה). : 207 (2) הצהר על משתנה בשם 28114 מן הסוג א1אט1פא המתואר למעלה. הראה איך לקרוא ערכים כדי למלא רשומה זו. עשה זאת עם ובל? שימוש בפקודת ₪118 וגם על-ידי שימוש בפקודת ₪118 כפולה כאשר יש צורך. (3) אילו פקודות והצהרות צרלך להוסלף לתכנית א60גתדעא 1201 כד: שתבצע פעולות נוספות: א. תספור כמה פעמים מופיעה כל מלה בכל שורה. ב. תדפיס בסיום את מספר הפעמלם שהמלה הופיעה בכל התמליל. (84) עלין בפרוצדורה להוספת מחרוזת למחרוזת קילמת. שנה אותה לפל ההנחיות הבאות: א. אם המקום המליועד להוספת המחרוזת 11! אלנו בתוך המחרוזת המקורלת, יש לבצע את ההוספה המבוקשת ולמלא ברווחים את המקומות בין סוף המחרוזת המקורית א והתחלת המחרוזת הנוספת 181!. ב. הפרוצדורה תחזיר את הקוד הבא בסיום: 0 - הוספה רגילה. - הוספת רווחלם. חלק מן המחרוזת הסופית קוצץ. המקרים (1) ו-(2) ארעו. 1 2 3 (5) בשאלה זו שני חלקים: א. כתוב פרוצדורה לחיבור של שתי מחרוזות ע"* הוספה של מחרוזת שנליה בסופה של מחרוזת ראשונה. הגדר מחרוזת כרשומה וקרא לפרוצדורה אפס ב. השתמש בפרוצדורה אותזאס, במקום הפרוצדורה ₪80527, בדוגמאות 5% טפ51 ו-צאחץ גדא המופיעות בסוף הפרק. (6) כתוב פרוצדורה אשר מתוארת בעזרת ההצהרה הבאה: (טגד תגתפזא :אסתתס ,ג]החסד ;7ע07הסגא :שא ,4 תגט) 02 מתטפמססתק פרוצדורה זו פועלת כמו 1.58%1471, אלא שהלא גם שומרת את המחרוזת שמוחקים במחרוזת חדשה ,11. (7) בשאלה דו שבל ו א. כתוב פרוצדורה המתוארת בעזרת ההצהרה הבאה: גתגזהסהח ,זַת7סתהמסגא :א תגט) געג.זחסגת ספת ; 01027 : האסטכ ( 68עדא1 :1021 , ג זהה סד פרוצדורה ‏ זו דומה לפונקציה 081205, בכך שהלא מוצאת את הדוגמא ומעבירה את המקום שבו היא נמצאה למשתנה 8212. אם הדוגמא לא נמצאה במחרוזת, 4071 מקבל ערך 0. בנוסף, פרוצדורה זו מחליפה את המחרוזת 64 במחרוזת 2ע10114. ההחלפה לא תתבצע אם אלן מספיק מקום במתרוזת % ויוחזר ערך 1- ב-48₪218. 208 ב. הוסף משתנה בוללאנל, שלתן למשתמש אופצלה להמשיך בהחלפות עד לסוף המחרוזת, אם הוא רוצה בכך. 2 תכנלות (1) בכלתת סטודנטים לש בין 10 ל-40/ תלמלדים. נתונים הפרטלם האלשללם הבאים לכל סטודנט: * שם פרטל עד 10 תוולם, * שם משפחה עד 15 תווילם, | * מספר ילדלם במשפחה מ-0 עד 10, | *< שנות ללמוד של האב מ-0 עד 20, | * שנות ללמוד של האם מ-0 עד 20, *‏ ציון ממוצע מ-0 עד 100. יש לקבוע אם. קללם קשר בין גודל המשפחה לבין סכום שנות הלימוד של ההורלם: א. כתוב תכנלת שתוציא כפלט: את השמות של 5 סטודנטלם מהמשפחות הגדולות ביותר, השמות של 5 סטודנטים מהמשפחות הקטנות בלותר ואת סכום שנות הלימוד של ההורלם של כל סטודנט שנבחר באחת מהקבוצות. ב. הוצא כפלט את הציון הממוצע בשתי הקבוצות שהוגדרו בשאלה א'. ג. לכמה סטודנטים לש ממוצע מעל ל-90 ולפחות הורה אחד שלמד פחות מ-10 שנים ? ד. לכמה סטודנטלם יש ממוצע מעל ל-90 ולפחות הורה אחד שלמד יותר מ-10 שנלם ? , יֶּ נתונים מספר ילדים סנות לימוד 1 מס פצ = = | = )-( = - ו 4 ם 5 / - 5 ב = *] ת- 8 / 55 ₪ | ₪ 5 ס | ₪ וו 9 5 | פ| ₪5 5 |5 5 | < 4 - 2 : סי ₪ ו : 3 ב-' 5 סס ה ו כצ כ -| = 2 | ₪ 4 7 .81 זאאת אזפטת | 2ד1טתתן סצ כ - - 4 | ש | ₪ - = סס כ 209 (2) נתונים שני מערכים של רשומות: א. מערך של רשומות סטונדטלם. ב. מערך של רשומות קורסים, כאשר בכל רשומה נמצאלם שמות הסטודנטים שלמדו באותו קורס והציון שכל אחד קיבל. כתוב תכנית שתקלוט מרשומות הקורסים את הציון שכל סטודנט קיבל בקורס שלמד בו ותרשום זאת ברטומה של אותו סטודנט. בסלום הרצת התכנלת תודפסנה כל הרשומות של הסטודנטים. תיאור רשומת סטודנט: שם: 0 תווים, מספר סטודנט: מספר שלם בן 6 ספרות, כתובת: שם רחוב ומס' בלת, עיר, מליקוד, דו"ח ציונלם: מספר הקורסים שהתלמלד השתתף בהם, שם של כל קורס והציון שהתלמיד קיבל באותו קורס. תיאור רשומת קורס: שם הקורס: 0 תוולם. מספר סטודנטים בקורס: מספר שלם קטן מ-50, שמות הסטודנטים והציון של כל אחד מהם. תיאור הפלט: דוגמא של הדוח שהתכנלת תפיק: שם: לעקב מאלר מספר סטודנט: 545 כתובת: הרקפת 17 ירושלים 51246 שם הקורס ציון בילולוגיה 5 מתמטלקה 46 כימיה 11 אנגלית 2 (3) במערכת הנהלת חשבונות מנהלים שתל קבוּצות של נתונים לכל חשבוך: א. נתונים מזהים של כל חשבון: *- שם הלקוח (עד 15 תווים). " מספר החשבון של אותו לקוה. .0 . * גובה האשראי שמוכבים לאפשר לו. * המצב הנוכחיל של החשבון, אשר לכול להיות בצכות או בחובה. ברשומה האחרונה שם הלקות הוא 15 תווים 'א'. ב. תנועות, שהןו פעולות כספיות שהתבצעו במשך החודש האחרון. תנועה מורכבת משנל נתונים: : / * מספר חשבון. * סכום, עם סימן + או עם סלמן -. ברשומה האחרונה מספר החשבון הוא 1-. התכנילת צרלכה לעדכן את החשבון של כל בעל חשבון על פל הפעולות שהתבצעו במשך החודש ולהדפיס דוח כפ? שמוצג בדוגמא. קלט לדוגמא: 1 30000 14 דו וזו 1 16000 16 דאס דצ : חשבונות 0 0 0 0% 0 16 1000 14 תנועות = פלט לדוגמא: לתרה אשראל מספר החשבון לקוח 11 10000 14 דוז וג 2221 10 16 דצ (4) בספריה מנהלים את מלא?ל הספרים. רשומת ספר כוללת את הפרטים הבאלם: * כותרת כמחרוזת של תוולם. * מחברים (מספר המחברלם ושמותלהם). * שם המו"ל. * שנת הוצאה לאור. * מספר סידורל. כתוב תכנית שקוראת עד 20 רשומות ספרים, ממלינת אותם בסדר עולה לפי שנת ההוצאה לאור ומדפלסה את כל הפרטלם של כל ספר בספריה. (5) כתוב תכנית כדי לקרוא תמליל ולהפריד בין המשפטים השונלם. משפט לכול להסתיים בנקודה, בסימן קרּיאת, או בסימן שאלה שאחריהם יבוא תו רווח: תוכל להּיעזר בפרוצדורות לטלפול במחרוזת. ירי : פרק 11 קבציםס 1 שללוב קבצלם בתכנ?לת קובץ (7116) הוא סדרה של איברים מאותו סוג. הקובץ מוחסן בלחידות החסנה היקפיות (185ת0 5602886 6281תק26%1), כמו למשל סרט מגנטל (1806), דיסק (2158), או תקליטון (6656א215). אמצעי הרלטום של הנתונים נקרא גם מצע החסנה (86618). איברים של מערך, שלא כאיברל הקובץ, מוחסנלם בזיכרון המחשב. הטוניל שבין צורת ההחסנה של מערך ושל קובץ גורם להבדלים אלה בתכניות: א. מערך מוחסן בזיכרון ולכן ההצהרה על מערך כוללת את גודל כדל שהמהדר לקצה ‏ לו את המקום הדרוש. קובץ לא מוחסן בזיכרון אלא על סרט או על דיסק שקיבולתם אלנה מוגבלת. הזיכרון משמש לו רק "תחנת מעבר" בזמן קריאה לשם עיבוד, ‏ או בזמן כתיבה לאחר עלבוד ולפנ? כתיבה על אמצעל ההחסנה. גודל השטח בזיכרון שמשמש למעבר הנתונים מהקובץ הוא כאורכו של אלבר אחד בקובץ. השטח בזיכרון שמחזיק את האלבר נקרא חלון (600%ם1ח), או מאגר (6%++ט2) ותוכנו נקרא משתנה המאגר (78218216 ע16+ט2). ב. כל אלבר? המערך נמצאלם תמלד בתוך הזיכרון ולכן אפשר לשלוף כל אחד מהם באופן מללדל ע"? פנלילה למקומו הלחסי בתוך המערך. אם כותבלם למשל [37 ]014 הכוונה היא לקבל את התוכן של אלבר מספר ‏ 37 במערך 071% שהוזכר בתכנית 5%020713א. לעומת זאת, אפשר לגשת באופן מללדל רק לאלבר של הקובץ אשר נמצא עכשיו במאגר ולא לכל הנתונלם של הקובץ. אם מחפשים אלב מסוים, צריך לקרוא את הקובץ מתחילתו ולבדוק כל אלבר בנפרד בזמן שהוא נמצא במאגר, או אחר?ל שמעבירים אותו לתוך משתנה חדש המוגדר לצורך זה. בפסקל סטנדרט צריך להצהיר על כל קובץ הלצונל (2116 81ת:66א5) בהצהרת התכנלת - ...%ת00סתק2. קובץ מוגדר "חיצונ?" אם הוא היה קללם לפנ:י בלצוע התכנלת או אם לוצרילם אותו במהלכה ורוצים שלאחר הביצוע הוא יישמר במערכת. קובץ פנימל (7116 [8םע%6ת1) לוצרים במהלך התכנית לשם שמלרת נתונים באופן זמני וכאשר לא רוצלם לשמור אותם בגמר הביצוע. קובץ כזה לא חייב להופיע ברשימת הקבצים שבהצהרת התכנית. יש מהדרים שלא מתייחסילם לשמות הקבצלם 22 שבהצהרת התכנית ולכן הקבצים שמוזכרים בה משמשים לתיעוד בלבד. קובץ נמצא במצע. החסנה חיצונלי, מחוץ לזיכרון המחשב..כדי שהתכנית תוכל לפעול עם קובץ, יש להגדיר אותו וליצור קשר בינה לבין הקובץ ובסלום העיבוד לש לנתק קשר זה. את לצירת הקשר וניתוקו מבצעים בפקודות פתיחה וסגירה. בזמן פתיחה של קובץ (ת006 2116) מבצעים את הפעולות הבאות: א. כתיבת תולת (185861) בקובץ פלט כדי שאפשר להלה לזהות אותו בעת קרלאה. ב. קרלאת התוית טל קובץ קלט כד? להבטיח שקוראים את הקובץ הנכון. ג. קרלאת הרשומה הראשונה של קובץ קלט לתוך המאגר. חייבים לתת הוראה כדל לפתוה כל קובץ קלט וכל קובץ פלט. קובץ הקלט הסטנדרטי, שהוא המקלדת או קורא הכרטלסים וקובץ הפלט הסטנדרטל, מסוף או מדפסת מוגדרלם: בדרך כלל למהדר. הוא פותח אותם באופן אוטומט? ללא צורך בכתיבת הוראות מפורשות של המתכנת. בתכניות קודמות קראנו וכתבנו בלחידות קלט ופלט סטנדרטיות בלבד ולכן לא עסקנו בפתיחת קבצים. סגירה של קובץ (01056 7116) כוללת כתיבה של תולת-סוף-קובץ בעת כתיבה ובדיקה של תוית-סוף-קובץ בעת קרלאה. לאחר סגירת הקובץ מנותק הקשר הלשיר בינו לבלן התכנית ומבוטלים שדות עזר המשמשים להעברת נתונים. סגירה של קבצי קלט ושל קבצי פלט סטנדרטלים נעשלת באופן אוטומטל. לשנם מהדרלם שבהם גם סגירת קבצלם אחרלם הלא אוטומטלת ולכן אלן צורך בהוראות מפורשות של המתכנת. הפעולות הטונות לפתיחה ולסגירה של קבצים אלנן באחריות המתכנת. עליור רק לרטום את ההוראה המתאימה, אשר תבוצע ע":י פרוצדורה סטנדרטית של המהדר, אשר אלנה זהה בכל המהדרלם ובכל המחשבים. על הקורא לעיין בספרות הרלוונטלת. הפרוצדורה לפתיחת קבצים מוצגת כאן לשם הסבר בלבד, וכוללת שלב? הפעולה אחדים, לפ הגדרת הקובץ ומצע ההחסנה שלו. שים לב לכך שלכולים להלות הבדלים בין מחשב למחשב. סרט מגנטל: קלט: קוראים את הסרט עד אשר נקראת התוילת של הקובץ המבוקש. מכאן ואללך מתחילים בקרלאה ובעיבוד של הרשומות. פלט: קוראים את הסרט עד לאחר קרלאת תולת הסיום של הקובץ האחרון. כותבים את התוית של הקובץ החדש וממשלכים בכתיבה של רשומות הקובץ. דיסק מגנטל או תקליטון: : הדילסק והתקליטון הם מצעל החסנה לגישה *שירה ולכן הנוהל לפתלחה ולסגירה של קבצים שונה מאשר בסרט המלועד לגישה סדרתלת. קלט: קוראלם את אינדקס הקבצים, אשר מכלל את התולות, מאתרים את שם הקובץ הדרוש ופונלם אללו לפל כתובתו לשם קרלאה. פלט: מוסיפים לאלנדקס תולת של הקובץ החדש ואת המקום הפנול שבו אפשר לכתוב אותו במצע ההחסנה. פונים לאותו מקום בדיסק כדי לכתוב את רשומות הפלט. הפרוצדורה לסגירת קבצים גורמת לקרלאה או לכתילבה, בהתאמה, של "תוית סוף קובץ" ולאחרלה:- 23 סרט מגנטל: גלגול הסרט לתתילתו. דיסק או תקליטון: הפרוצדורה חוזרת לאלנדקס הקבצילם שבמצע ההחסנה וכותבת בו את גודלו של הקובץ החדש. היא תשתמש בנתון זה בעת קריאה של הקובץ הזה וגם כדל לנהל את שטחל ההחסנה הפנולים. . 11 הצהרות ופקודות עיבוד של קבצלם נציג דוגמת תכנות כדל להסביר את ההצהרות ואת פקודות העלבוד השונות: התכנלת הבאה מקבלת רשומות עובדים כקלט ומנלחה שהן ממוללנות. אחר כך הלא כותבת אותן לקובץ שמוחסן בדיסק ומדפיסה אותן. אם מספר סידור של רשומה כלשהי חורג מן הסדר הנכון, היא לא נכתבת בקובץ ומודפסת הודעת שגיאה. נתבונן בתרשים זרימה של הבעיה, שבו מוצגות פתלחה וסגלרה של קבצים: תווי רווה -> אסתטש6ת פתח קובץ לסמסאפתא לכתיבה סוף הרטשומות ? כן סגור קובץ צסתסא5גא פתה קובץ | צספסאפגא לקריאה סוף הרשומות קרא רסומה מן הקובץ כתוב רשומה במדפסת סגור קובץ צסתסאפתת 24 כתיבה . קרא רשומה ממסוף ספמטסאמס אספנוסג כ הדפס הודעת שגיאה סמש סאמ -> אסתחסת על פ? התרשלם אפשר לכתוב את התכנית שלהלן: ; (01ת0א45 ,תטקנטס ,צשפאד) 17דמתסא5א אהתסספע ‏ (1) /0: ;5 =08008 87א 00‏ (2) ,תה ת0 [א6מתס..1]צהתתג כתאסגת =%מ58 מקצץך (3) פתסס6עת =פמטס ץותחזפעת (4) :500 (5) ,םאת :50848 (6) תגאס :אשצדקך (7) ;פא (8) אגט (9) ; פפטס ץונחזפפת :45קזנס ותחופתת (10) ; פתטס 47אהפעת תס מתדע :0801א5ו (11) :את (12) ; תמ6תנא :סאגו (13) 00 אשת (14) / הדרררררריייייי! =אסאת0 (15) ; (1/5%0007) מודוומת (16) סכ עסש סא מדזחו (17) אזסעת (18) ;('הקש שם, שכר, ציון') אזמדזתח (19) 0ם גפהכגס גותחזפמת מדדט (20) אנסעת (21) 0 תס 70 1 =: אסאגא תסץ (22) 205 ; ( [ אסאגא ] פמטסאמ5) כגאת (23) ; (אטצ1?ץ ,50848) אזפגחת (28) אאא אסאתעסה =< פפש40מח5 עד (25) אזסטת (26) ; ( זופת , 0907א5) מדדתט (27) קפטס =: אסק0ב (28) פא (39) ('לא במקום הנכון' ,0תש5180) אותדדתא מפמק (30) פאת (31) ; פאת (32) )33( 01058 )45%0807( ; ; (1145%0907) [מפתת (34) 0ע (001א45א) עסע סא םדנט (35) אספת (36) ; 0254 אנופעת , דסתסא5גו) סגחת (37) 0כ גזז45כזז6 תחופחת מדדט (39) (3:א0צ121 ,50848:8:2 , פמטסאם540) אהחידקט (40) ; פא (41) )42( 6055 )15%0807( .פאע (43) הסבר: 1 בתחילת כל תכנית כותבים את שמות הקבצים שנשתמט בהם במהלכה. באמצעות לוח המקשים, קוראת כרטלסים, מדפסת או מסך מזינים ומפיקים קבצים ולכן מזכירים את שמם בהצהרת התכנ*ת: צטשקא1 ו-001201 בהתאמה. בנוסף לקבצים אלה, שהם הקבצי?ם הסטנדרטיים, בונים קובץ על דיסק שיקרא 7. בקובץ זה נכתוב רשומות ונקרא אותן בעת הצורך, לשם עיבוד ולשם הצגה במסך או הדפסה. קובץ זה מוגדר כקובץ חלצונל. (11) מצהירים על משתנה כקובץ בצורה הבאה: 3 התו א מסמן כל סוג של נתוןו, למשל מספר שלם או ממשל, תו, או מערך, אבל במקרה השכיח הוא מליצג רשומה. במקרה זה איברי הקובץ הם רשומות, שסוגן מוצהר בשורות (4)-(8). (16) הפרוצדורה הסטנדרטית לפתיחת קובץ לכתיבה הלא: ל ל 578/[=-612<- 18 26 במחשבים מסולמלם כותבלם את שורה (16) בצורה שחורגת מהנוהל הסטנדרטל. למשל, במחשב עע2 כותבים ('445.227' , 2118%0807) מד1תחעת, כאשר דסת0א45א הוא השם הפנלמ? של הקובץ בתוך התכנית ו-%845.241 ממלא את דרישות המערכת לכתיבת שם-קובץ המוחזק בדיסק. הקשר הזה חייב להעשות בכל, מחשב, אבל לפעמים הוא נעשה מחוץ לתכנלת באמצעות הוראות בקרה של מערכת ההפעלה. הפרוצדורה 2808118 מבצעת את התפקידים הבאים: א. מוחקת את הקובץ. ב. מכניסה לתוך המאגר איבר רלק. ג. מכוונת את המצביע אל המקום בדלסק שבו לכתב האיבר הבא. ההצבעה הלא על סוף הקובץ ולכן הפונקציה הבוליאנית "(קובץ)07ע2" תהלה 1808 תמיד בזמן כתיבה. (27) פרוצדורה סטנדרטית זו (שקללימת רק במהדרילם חדשלם) מעבירה את התוכן של הרשומה 0820258 גאמזפעת לקובץ שנקרא 0801א445. שם הרשומה צרלך להלות מן הסוג של אלברל הקובץ. הצורה הכללית של פקודת הפרוצדורה הלא: 5 מפוי [+- כ‎ | במקום פרוצדורה זו, אפשר לכתוב את הפקודות הבאות שלוסברו בהמשך: אתחזפסת :=‏ 07ת0א5ון (5%0801) דט הצירוף של שם הקובץ וסימן החץ (7), כאן ‏ 0801א445, מתייחס למאגר שממנו מעבירים את איברל הקובץ אל הדיסק. הפקודה הראשונה מכנלסה למאגר את התוכן של גה5גתגח0 אמפעת. | הפרוצדורה הסטנדרטית "(קובץ)201" כותבת את המאגר כאיבר חדש בקובץ, מזלזה את המצביע לסוף האיבר החדש, מוחקת את תוכן המאגר ומשאירה את משתנה המאגר בלת? מוגדר. אם ננסה לבצע (0801א45א)דטע2 מיד, בלל למלא את המאגר מחדש, תיגרם שגלאת בלצוע כל ניסלנו לכתוב מאגר רלק. (33) סגירת הקובץ. הוראה זו אלנה דרושה במהדרים מסוימלם, אם הם מבצעים אותה באופן אוטומטי בסלום התכנית. ו (38) פתיחת קובץ לקריאה נעשלת על לדי הפרוצדורה שהמבנה שלה הוא: =[ שו וחוג, |---6-[ | במחשבלם מסולמלם מוסלפים את השם החיצונל של הקובץ, למשל, במחשב קסק פקודה זו נראלת כך: ('דם. 5גא' , 0807א5)דמפות 207 הפרוצדורה 228901 מבצעת 3 פעולות: א. מכניסה למאגר ‏ 0801א5 את האיבר הראשון של הקובץ. ב. מכוונת את המצביע למקום הבא בקובץ. ג. אם הקובץ לא הלה ריק, הפונקציה הבוללאנלת "(קובץ)ץ80" מקבלת ערך 88. אם הקובץ היה רלק, התוכן של המאגר בלתי? מוגדר וערכה של הפונקציה הבוללאנלת הופך ל-אשקך. (37) פרוצדורה סטנדרטית זו מעבירה את התוכן של האלבר הבא לתוך 6045 הותחופעת וממלאת את המאגר עם האיבר הבא בקובץ. במקום פרוצצורה זו נלתן לכתוב: "50 =:ח5כזוס גותחופסת (01ת0א45%א) זחס הפקודה הראשונה מעבירה את האלבר הבא בקובץ למשתנה 030358 ג4שפסת. הפקודה "(קובץ)זמ6" מעבירה איבר חדש לתוך המאגר ומקדמת את המצביע לאיבר הבא של הקובץ. אם אין איברים נוספים בקובץ, הפרוצדורה הופכת את הפונקצלה הבוליאנית "(קובץ)תסש" מ-4158ע ל-7805 וגורמת למשתנה המאגר להלות בלתל מוגדר. אם מנסים לבצע שוב פקודת "(קובץ)1ע60" תגרם שגיאת בלצוע, כל "(קובץ)ע20" שווה ל-שטפץ. במהדרלם מסוימלם של פסקל, הפונקציה "(קובץ)ז0ע" אלנה מופעלת מלד לאהר קריאת סוף הקובץ. במקרה כזה רצוי להגדיר קבוע בשם 8פשכת, שערכו '77.72.7.7.7/2.2.7,7/2,7 ' ולכתוב אותו בסוף הקובץ כדי שישמש כדגל. המתכנת לבדוק כל איבר אם הוא שווה ל"דגל" כד? לדעת אם הגיע לסוף הקובץ. שורה (35) תכתב כך: ספ (צופיטס <> פתטסוש5 . גפהפוס הותחזפמת) םדה נסכם עתה את התהליך של כתלבה וקריאה של קבצים כדלהלן: (נקרא לשם הקובץ 800872 ולשם הרשומה גתחזפמת). א. כתיבה (יצירה) של קבצלם: ; (00₪72א) מצנתוסת | (1) 0 (תנאי להמשך יצירת רשומות) 1118 | (2) אזספת | (3) לצלרת רשומה (4) בדוק את הרשומה החדשה כדי לראות אם הלא קבילה (5) ; (44תופת ,12ת07א) מענתח (6) עדכן את המשתנים לצורך בדיקת התנאלם בשורות (2) ו-(5) (07 ו ;את (8) ב. קריאה של קבצלם: | שה (72ט0א) צתפחת (1) 0 (12שט0א) עסם עסא אתזאח (2) אז1ספת (3) ; ( גותחופקת 2דמטסא) פגמת (4) עבד את הרשומה כנדרש (5) ; פא (6) כדי .לעבד רטשומה צריכים להכנלס אותה לזיכרון. כזכור, ההוראה (2₪511%44 ,00812א) פגמת מורכבת משתי פקודות: . . 2 2 =: גתתזפעת | (8) : (0/₪72א). 6₪7. | (5) ..8 רק הפקודה הראשונה נחוצה לפנ? העיבוד. לכן, כאשר לא משתמשלם ב-מַגאת אלא בפקודות (8) ו-(פ), כותבים לפעמים את הפקודה (5פ) אחרל שורה בקטע הקודם (ב). 2 קרל?אה וע?בוד של נתונים נצלג בהמשך דוגמאות של שתי פעולות שבהן משתמשים בהוראת קרלאה: )5( א. בחירה (מ56166510): כאטר רוצים לבחור מתוך הקובץ אחת או לותר רשומות טיש להן תכונה מסולמת. התכונה לכולה להיות תכונה עצמלת, כמו ערך מסוילם בשדה כלשהו, ‏ או ערך בהשוואה לרשומות אחרות בקובץ, כמו למשל מצלאת הרשומה שמכללה שדה עם ערך מלנימל? או מקסימלל. ב.| סיכום (ץְלהתתט5): כאשר רוצים לסכם את הערכים אשר בשדה כלשהו בכל רטומות הקובץ לשם בנלית טבלה, או לשם חלטוב סטטלסט?, כמו למשל חישוב הממוצע. במקרה הראשון, אם מחפשים רשומה מסוימת מבין כל הרשומות, אפשר להפסיק את החלפוש כאשר מוצאים אותה. במקרה השנל, בודקלם או מסכמים מאפיין של כל הרשומות בקובץ ולכן חייבים תמיד לסרוק את כולו. 1 בבתלרת רשומות מתוך קובץ 1-2 הקובץ 8101 מורכב מרשומות שמכילות נתונים שנאספוּו במשך תקופה מסוימת. שדות הרשומה הם: מלדת החום בירושלים, זמן המדידה ותאריך המדידה. מבנה של רטומה טלפוסית ניתו להלן: ב ₪ ]0 תאריך שעה מידת החום התכנלית מחשבת את מלדת החום המלנלמללת והמקסימלית על 5י הרשומות ולוצרת קובץ חדש שמחזיק רק את מלדות החום בלל תארלכלם וזמנלם. ; (צטעדטס ,8107א) אסא6 דגפצא 4תססאת מקצך עתססמת = גזתא ; פתסתדאד : אגא ,אסחסות דגכדא תס עס [1...8] צגתתג כמאסגתק : מסזתגך ; פא תג ;תא ע0 מעדע : 107תא תא ע0 שעצע : צסכ1א ;זחא :גפסט4 ,אזא ,אא אזסעת ; (101א) [מפעת בקובץ )1( )2( )3( )4( )5( )6( )7( )8( )9( )10( )11( )12( 209 ; (דססדא) מדזאועת (13) ; (400048 ,28107) סגטת (18) 404 =:אא (15) 40 =:אזא (16) ; (1680% דגכ1וא. גתסטג , ד0כ11ו) מדזתח (17) 0פ (עסדַתא) עסם עסא ממזחט (18) אזססת (19) ; (40009 ,107תא) פגחת (20) אמח אס6זן דגתדון. אגא < אססגנ דגתדו. ופסטג עד (21) 4 =:אגא (22) כו (23) אתח' אסוסגזן דגסזו. אדא > אסצסגנ דגפדוא. גפסטג עד (24) ;סג =:אזא (25) (אסצ0ז דגסזון. גתסט2 , דסכדא) מנדתט (26) ; פאת (27) 0 אגא אדזט (28) אזספת (29) ; ('מידת החום המקסימלית הלתה77' ,080% צגכדא) אזמדדתט (30) ('בזמן "' ,5:2:א0.01*2%2 ,'בתאריך"77' ,61דת2ך) אמתצדתט (31) פאק (32) 0ע אדא אדזט (33) אזספת (34) ; ('מידת החום המלנלמלית היתה77' ,א0מ6גז עגפזא) אממדדתט (35) ('בזמן""' ,5:2:א4א0.01"*2% ,'בתאריך"77' ,108ת2ך) א[עדזתט (36) פא (37) )38( 000858 )28107( ; (01כ41) 60058 (39) .פאע | (40) הסבר: (9) הקובץ 1201א מורכב מאיברים אשר מכילים מספרים שלמלם בלבד. (16)-(14) את הקרלאה הראשונה בסריקה זו עושים מחוץ ללולאה. כך קובעים את הקריטריון ההתחלת? שעליו מבססים את האומדן עבור מלדת החום המלנימללת והמקסלמללת. י / (17) כותבים את מידת החום בקרלאה הראשונה בקובץ 0%כ1א. (25)-(21) את הרשומות אא ו-א81 מחליפים בכל פעם שנתקלים במלדת חום אשר גדולה או קטנה, בהתאמה, ממה שהלה בעבר. (26) את מידת החום כותבים בקובץ 120% בכל מקרה. 2 קררלאה, סלכום והדפסה של נתונים נשתמש בדוגמא לפעולות אלו: נתון קובץ של תנועות בפרלטים שונים שנמצאים במלאי. לש להדפיס דוח אשר יכלול את השינוי של הכמות במלאל עבור כל פרלט. 200 קובץ התנועות, או הפעולות, ממולין לפ? מספר פרלט. מבנה הרשומות בקובץ ניתן להלן: מספר הפרלט סורג הפעולה כמות סוג הפעולה הוא אחד משלושה ערכלם: * מכירה - המלא? ?ורד לפ? הכמות שנמכרה, * קבלת משלוח - המלאל עולה לפי הכמות שהתקבלה, * החזרת סהורה - המלאי? עולה לפ? הכמות שהותחזרה. תכנילת זו נכתבת במתכונת של הצורה הכללית של תכנלות לקריאת קבצים. ; ( דטקידז0 , דסתסטק) דגמא אתססתק מקציץך ,תס 0 [1..6] צגתתה כתאסגק = 0025 פתססעת = גמשמץ : פצתגק לטח2 ; ((14082474 , ב.זהתא , 4ת011) : 04 506 הסדא : 007 ; פא תגצ ;1עמת ת0 מתדע : ךסתסמק 688מעאך : בטא1ח5 : 1אסתססא צזתגת אזסטת ; (01מטסחק) חתפתת שינוי במשך החודש') אש17תח ; אזמזא סע (צסטמק) עסם עסא מזאח משתנה במאגר *) 0 צסוחק אעדט אזסטם דדתת דטזות2 =: נמסמססא צדתגת 7 =: צטאזחפ סאג (1א60₪08סא דזתגת = דדתגת דטת2) ₪ 0 (2₪007) עסם צסא ;('מספר פרלט ' %(‏ אאאאיי את ,| ת0 במטטת 506 64858 - בטא1ח5 =:1טאדע5 : גתדמספא דצט6+דטאדע5 =:1שאדא5 : גתג?טסגם ,ג.זהפא ; פא (80107תק) 087 ; פא (9:עזתגת דשחת2 ,12:' ' ,בטאד50) אתמדזתט פאע . פא בהרצה טלפוסית נקבל את הפלט הבא: מספר פריט שינוי במשך חודש 1117 100 6 8 3 25 28 3- הסבר: (23)-(22) משתמטים בשדה שבמאגר עדא1? 28807. 0עשאת2, כדי לבדוק אם הרשומה החדשה מתייחסת לפרלט חדש. אם כך הדבר, מדפיסים שורת פלט (שורה 1) וחוזרים לשורה (20), שם רושמלם את המספר של הפרלט החדש במשתנה :סא צזתג? ונכנסים שוב פעם ללולאה. אם הרשומה הבאה שללכת לאותו פריט, מחברים או מחסרים כפ? הצורך. בתכנית זו פועלים על הרשומה אשר נמצאת במאגר. בדוגמא הקודמת, בתכנלת חישוב מלדות חום, פעלנו על הרשומה 407024 שמוגדרת בתכנלת. אפשר גם לקרוא את הרשומה לשטח עבודה בתכנית, אך לשם כך ?ידרשו לותר משתנלם ופעולות, כמו שנראה להלן: ; (דטקד00 , ץסתטמע) 2דתחא אתססתק (נ1) 1 | (2) ; '222222' = צותוע (3) מעצע | (2) ;תס עס [1..6] צגתתג כסאסגת = 0008 (5) פתססמת = .זטטק (6) ;00 : שדתגת צשאס2 (7) ; (4ת7ה1 , .זהתא ‏ גתדהספא) : תטתק 506 (8) התא : 007 (9) ; פא (10) תגט (11) תת ע0 מתדע : דצסתטטק (12) ;תמא : דטאזחפ (13) : צאסתססא דדתגתע (18) ; תטסתע : 47022 (15) אנסתת | (16) ; (101טמק) דמפסת (17) ;('מספר פרלט 77777 שלנול במשך התודש') אממצדתט (18) את (19) ; (47024 , דסתטמת) פגמת (20) 0 אפסטג מצזט (21) 0 (צוטת <> צדתגק 20₪01) ם. דוט (22) אזסת (23) דדתות עעזות? =: דמסטססא דדתג? (28) 0 =: [טשאדם (25) סאג (1אסאססא דדתגת = דדתגק ששום2) ם,דוחו (26) 0 (צעטת <> צדתגת יוק?) (27) 202 אזט (28) עס תטפק 506 0458 (39) ;אס - דטא1א5 =:דטא501 : גתזתסמן (30) ד + נטעאזא5 =:דטאדא5 : תג?תסגה ,זג2 (31) ; פא (32) (8פסע4 ,1סמטמק) כגחת (33) (* 011108..20 פנלמל *) ; פא (34) (17:9ה4ק 200% ,7':12' ,נטאדא5) אמפדזתה (35) (* ₪8118..20 חלצונל *) פאת (36) .םש (37) הסבר: (20), (33) מבצעים פעמיים את הפרוצדורה פ8ת. בפעם הראשונה קוראלם את הרטשומה הראשונה בקובץ לתוך הרשומה 4 כד? לעבד את השדות שלה בלולאה (22)-(36). לאחר סלום הלולאה קוראלם רשומה נוספת כד? שרשומה חדשה תהלה מוכנה לעיבוד כאשר נכנס?ם שוב פעם ללולאה. בדוגמא זו מנלחלם שהרטומה האחרונה מכילה ערך צאאטע בשדה עדאגק עעמ2 כדל לצלין שמגיעים לסוף הקובץ. בשלטה זו נוהגים בגירסאות של פסקל שבהן תס אלננו פועל בקבצים רגילים. אם הרשומה שקוראים בשורה (33) הלא רטומת הדמה, לא נכנס שוב ללולאה ונס?ים את התכנלת. 11.5 פרוצדורות מינהלה של קבצלם (*) חוקל שפת פסקל דורטלם שכאשר קובץ מועבר לפרוצדורה כפרמטר, הוא להיה פרמטר משתנה. הסיבה לכך היא שאם הקובץ הלה מועבר כמשתנה ערכי, הללנו צרלכים להעתיק את כל הקובץ לטטח העבודה של הפרוצדורה ולבזבז זמן רב וגם שטת החסנה. בנוסף, פקודת השמה אלנה מוגדרת כלל עבור קבצים ולכן אסור לכתוב 5 אם 4 ו-5 הם קבצים ולצפות שהתוכן של קובץ 5 *ועבר לקובץ 2. העברת נתונים לפרמטר ערכל כרוכה בהשמה של הנתונים לפרמטר הערכי וכאמור פקודת השמה אסורה בקבצלם. 1 העתקת קבצים הצהרות גלובליות שפצד ‏ (1) דדתות ע0 תדע = א1עדאת 2עעטסא (2) הפרוצדורה אממפ גצ <שמטסא תגט) 2דמטסא אמךהגח פתטפמססת? | (1) 0 (2) ; (אדידדתע 0772 (3) אזסעת | (4) ; (א451צ 12ַט0א) צמפפת (5) 203 ; (010458 12מטסא) מדדוסת (6) 0 (אג הפצ 2צתטסא) עסם עסא אמדזו (7) . . אנספם (8) ; אצ 12מטסא =: 24547ה6 2?דפטסא - (9) ; (0142458 2עמטסא) דט (10) (אגפצ 2עטס0א) 7שס (11) פאע (12) ; פא (13) הסבר: א. אם אהפגצ 800012 הוא ריק, הפקודה (א58גצ 2שט0א)1מפתת בשורה (5) תגרום שהתשובה ל-207 תהלה 08ת1. זה ימנע מן התכנית להכנס בזמן הבלצוע אל הלולאה בשורה (7). ב. המשתנה 24217 יכול להיות מכל סוג, למשל תת60ת1א1, מגתת או רשומה. ג. אם משתמשלם בפרוצדורות כגמת2 ו-₪8118 אפשר להחליף את השורות (9)-(11) בשתי השורות הבאות: : ; (40024 ,אצ 72מט0סא) עגתת ; (40028 ,058 72מט0א) מצדחט הפקודה סגחת מעבירה נתונים מן הקובץ אא5גצ 800872 אל הרשומה ג2702, שלש להצהיר עליה כסוג איבר של הקובץ, מסוג 24811. הפקודה 118אח מעבירה נתונלם משטח 47024 ל-010458 2?דמטסא. 2 השוואה של שנל קבצים הצהרה גלובלית: פפעע (1) ;תת ע0 מעדע = אנצזתק 2צאטסא (2) (אנא580 ,אגדהא דאמ50 ,אהדגא אסחפנת ,אנטג51) = גג2צסד (3) הפונקציה: :02 :(118דתק 2שמ/0א :22מטסא, [2צמטסא תהט) הגטטפגה אסנצסאטץ (1) תג (2) ;001% : פמקגחס (3) אזסתת (4) ;(000721א) דמפתת (5) ; (8008122) דתפעת (6) =: פמק .סו (7) 0 פמקגאסא דט (8) אתחדך (121ַע00א) עסם קד (9) את (10) =: פמק חס (11) אשד (0/8122א) עסם קד (12) אצטע5 =: גב/מפגת (13) עפזס (18) אדא אס5פדת =: גגטחפ (15) 28 פא (16) כו (17) אפזץ (22ַמ00א) ₪09 עך (18) אזססת (19) =: פמת .01 (20) אדא 1אפט5 =: \0ח5זן (21) פא (22) )23( 8 אפ 227מט0א <> 217עמטסא עך (24) אס (25) =: פמקגתחס (26) אאסעפ =: גבחופהת (27) פאא (28) )29( 85 את (30) (121תע0א) 687 (31) (0/8122א) 67 (32) פאק (33) ,פא (34) הסבר: פרוצדורה זו נותנת תוצאה "א584/1" רק אם שנל הקבצים זהים לגמר?. ‏ "זהות" פרושה מספר שווה של רטומות ותוכן זהה בכל זוג רשומות, אחת מן הקובץ הראטון ואחת מן הקובץ השנל. במהּלדר ההטוואה של הקבצים אפשר לקבל תוצאות שונות: א. שני הקבצלם טוולם. תטובה זו מקבלים כאשר מגיעים לסוף הקובץ הראשון ולסוף הקובץ השנל באותו זמן, בשורה (13). ב. אורכו של הקובץ הראשון קטן מאורכו של השני, אבל עד סופו של הקובץ הראטון, כל הרשומות היו זהות בשני הקבצים, בשורה (15). ג. אורכו של הקובץ הראשון גדול מאורכו של השנל?, אבל עד סוף הקובץ השנל כל הרשומות הלו זהות, בשורה (21). ד. הקבצלם אינם שווים, בשורה (27). המשתנה 24817 בשורה (2) של ההצהרות יכול להיות מוגדר כסוג פשוט של נתונלם ( 688מז1א1, זותת, אגתמססת, תגה0), או סוג מבני (כמו צגתתג, 250082 וכו'). משתנה זה אלנו יכול להלות קובץ. 3( הוספה לסוף הקובץ כאשר ‏ דרוש להוסיף רשומות לקובץ קלים לט צורך לפתור בעיה לוג*ת שנובעת ממבנה השפה. בעת שפותתים קובץ לכתיבה (ע"? פקודת מצדתחאת), המצביע פונה למקום הראשון שאפשר לכתוב בו. מכאן, שאי אפשר להוסיף רשומות מבלי למחוק את כל הרשומות אשר קללמות כבר. הפתרון היחיד הוא להעתיק את כל הקובץ הקיים לקובץ חדש, להעתיק מן הקובץ החדש חזרה אל הקובץ המקור? ולהוסלף 25 בסופו את הרשומות החדשות. פרוצדורה אשר מבצעת פעולה זו מוצגת להלן: הצהרה גלובלית: פע (1) ;דדתגת עס תמצע = אנצדתק <עעטסא (2) הפרוצדורה: (א1ע1תע 2מט0א : 2צמטסא תגט) גחגפסהם1 האגזוסגזו מתטספססתת (1) תג (2) ; אדדדתת 2שמטסא : דאסאפא אסמדקגון אאסה5. "אסמפדת 2עמטסא 19 (10) אחצ ‏ הדל הא זומס54. "דאפא5 2זמטס% (ג1) 7 אנססם (12) )13( א15₪0ת 2דמטסא =: 02467 2 דסא‎ ; )14( 687 (א215₪0 2דמט0א)‎ פאם (15) ו (16) אזסעת (17) | דאמ <שקטסא =: | "246טאמו מס (18) ( צאמזן5 12ַ07₪א) 087 (19) ; פאע (20) ( 230נחומון 2דמט0א) דצטע (21) ; פא (22) 0 (אסאפדת <שמטסא) ע0ם דסא דומל (23) את (24) "150% <עפטסא =: 02467 02 (25) ; (₪0240 2עמטסא) צטע (26) (א0ז151ת 07872א) 087 (27) ; פא (28) 0 (1א58₪ 2שמטסא)עסם עסא שדוח (29) אזספת (30) דא5 0072א =: 02467 02 (31) ; (1₪0240) 2עמטסא) עטק (32) (דאמ58 12מטסא) 087 (33) פאע (34) ; פאת (35) הסבר: התכנית בנולה מ-3 לולאות: א. הלולאה הראשונה בשורות (8)-(22) פועלת כל עוד לא מגיעים לסוף של אחד הקבצים. בטורות (10)-(11) בודקים אם הערך של שדה המפתח בקובץ הראשון קטן מהערך של השדה המקביל בקובץ השנ?. אם התטובה חלובלת, כותבים את הרשומה הזאת בקובץ הממוזג, בטורות (13) ו-(21). אם שדה המפתח בקובץ הראשון ‏ גדול או שווה לשדה המקב?ל בקובץ השני, מבצעלם את השורות (17) עד (20) ולאחרלהו את שורה (21). אם במקום שורה (13) בכתוב: ; ( א0א5דת 2דשטסא ,246שאחון 2דמטסא) מדדת ואם במקום שורה (18) בכתוב: ;( דאש5% 2שת07א ,240שאו 00₪72א) מדדתא נוכל להשמלט את שורה (21). הלולאה השנליה מופעלת אם הקובץ הראשון לותר ארוך מן הקובץ השנ:. במצב זה צרלכים להעתיק את הרשומות הנוספות כמו שהן לקובץ הממוצג. גם כאן אפשר להחליף שורות (25)-(26) בפקודה: ( 150 2צתטסא ,246שושון 2צמטסא) מדדתה הלולאה השלישית מופעלת אם הקובץ השנל לותר ארוך מן הראשון. במצב זה צריך להעתיק את הרשומות הנוספות לקובץ הממוזג. גם כאן אפשר להחללף את הטורות (31)-(32) בפקודה: | ( 1א5%8 12שט0א ,246טאעון 2דמטסא) מדתא. 207 גם כאשר משתמשים בפרוצדורה תצַזַתא₪, לא יוצרים רשומה מלוחדת כד? להחזלק את הקלט בזמן הקריאה. במקום זה קוראים בעזרת פקודת 681 ומשאירים את הרשומה הנקראת בתוך המאגר. רק אחת מן הלולאות ב' ו-ג' מתבצעת בכל ריצה של הפרוצדורה, שהרל מגלעים לסופו של אחד מן הקבצים קודם ואז אין משמעות להפעלת הלולאה השנילה. 25 מילון קבצ?לם (*) נניה שרוצים למיין את הקובץ 2 00812א שמכיל רשומות עם המפתחות הבאלם: כדי לבצע את המלון נוקטים את הצעדים הבאים: א. מחלקלם את רשומות הקובץ ( 00812 לשני קבצים: 5 2עמט0א ו-6 <שמטסא. מתחללים את התהליך מן הרשומה הראשונה, אשר המפתח שלה הוא 52. ממשיכלם עד שמגיעלם לרשומה הראשונה שאינה בסדר עולה, אשר המפתח שלה הוא 42. שתי הרשומות המסודרות 52 ו-58 הן סדרה (תטת) ומעבלירים אותן לקובץ 8 2ומטסא. את הסדרה השנללה (הרשומה ‏ 42 לבד) מעבירים ל-6 0/872א8. את הסדרה הטללשית (רשומות 6 ו-62) מעבירים שוב ל-2 00872א/. את הסדרה הרבליעית, רטומה 39, מעבירלים לקובץ 6 500872 ואת הסדרה החמלשלת הכוללת את הרשומות 37 ו-59 מעבירים ל-5 2צמט0א. לאחר החלוקה הראשונה של רשומות הקובץ מקבלים את שני הקבצלם שתכולתם מתוארת בתרשלם: . ב. ממזגים את שנל הקבצים שנוצרו אל קובץ 3 00812א. כל צדוג של סדרות ממזגים לסדרה אחת. מלזוג זה מקטלן את מספר הסדרות בגורם של שנללם. בדוגמא זו, כאשר ממזגים שנל קבצים לקובץ 4 0/72א מקבלים: 208 מכאן ואללך חוזרים על צעדים א' ו-ב'. כלומר, מפצלים את 4 807812 לשנללם ומקבלים (צעד א'): ממזגלם את שנל הקבצים (צעד ב') ומקבלים קובץ אחד *ותר מסודר: ו מפצלים שוב את הקובץ (צעד א') ומקבלים: ממזגים (צעד ב') ומקבלים קובץ שבו כל הרשומות בסדר עולה. כאן מסלימים את המיון, כאשר מספר הסדרות אחרל המלזוג שווה ל-1. כמה פעמים צריך לבצע את התהללך של פלצול ומלזוג? המספר המקסימלל של סדרות הוא א, כאשר יש בקובץ ₪ רשומות בלתל מסודרות לחלוטין. "אי סדר" זה הוא המקרה שבו הרשומות נמצאות בסדר מלון הפוך לסדר הרצוי. בכל פעם שמבצעים צעדים א' ו-ב' מחלקים מספר זה לשניים וכך אפשר להגיע לסדרה אחת אחרל א פלצולים של הקובץ המקורי, כאשר 2*=1/א ומכאן נובע ש: א1082=א. לפיכך, המספר המקסימלי של מעברלם כולל אַלכ8ַ10 פלצולים ואותו מספר של מלזוגלם. המיון שהוצג מבוסס על תהליך חוזר של פיצול ומלזוג רשומות עד שמקבלים סדרת רטומות אחת ממוללנת. מעבר (2855) כולל פלצול אחד ומלזוג אחד. הפרוצדורה המבוססת על שלטת מלון זו נלתנת להלן: מפצך פתססעת = ץלאזחע ;זאזאגאא. .0 :401מדץ : אזאטנצפא ; פא ,עדתגת 07 מתדע :א1דדתק 2צמטסא תג ;תק 2עעטסא : ג 2שטסא הפרוצדורה: ; (אדידדתתק <עמטסא :2 2שמטסא תגט)אעשדון מתטסמססתע תאצ ; אדדתת 2עמטסא :0 <למטסא ,5 <2שמטסא ; ת6₪מעא1 :51207 תגת5זא ,001% :51208 50% ,אד לדפטסא תגט) גותחזפמת תדטגד מתטסמססתק |אדדדתת 2עשטסא :טס 2צמטסא ; סע ; (א8001 :509 תג ; 111.08 מהטפמססתע חלוקה של הרשומות של 4 2ע008א *) לשני קבצים: 5 2תַעטסא ו-6 5צַ₪/0א. סדרה אחת נכתבת (* ב: 2 0/8712 וסדרה אחרת נכתבת ב: 6 800812 לסלרוגין. אנספת ; (4 2מט0א) צחפמת ; (8 0/₪72א) מודתמת ; (0 2עמטסא) מצדתאמת דקפת (* העתק סדרה מ-4 00872 ל-8 2שַמט0א *) דקפת (51894 509 ,3 <עמטסא ,ג 2שמטסא) אתחופפת אצטגד ;5188 509 דדאט אמזוך (4 2דמטסא)עסע צסא עך (* העתק סדרה מ-4 0/812א ל-6 2זַ₪ש0א *) דמפמת (4את51 ע50 ,0 <צמטסא ,4 2צמטסא) גחזפתת תדטגד 4תת51 507 מדצאט (4 12ש0א)ע₪0 צאט ; פא 0( 0 אזסאת ; (8 00₪12א) מדדתחעת ; (8 00872א) צשפמת ; (0 0072א) צמפחת 51207:=0 11548 0 ((6 ₪12ט0א)ת₪0 05 (5 2דמטס0א)ת0ם) עסא מ דזחו 200 אדספג דהחקחת או 07 2דמטסא > 87 2צמטסא קד אזספת (99ע51 50% 002 ,5 72ל0א) וותפסת הנטגך אפחז (תכ51 ע50 עך דמפמת (ג8ע51 509 טא ,0 2קמט0א) גותחופתת תדעגיד 4אפ51 507 מצצאט פאם 88 אזסטפת ; (5154 502 072 ,0 2עמטסא) האתחזפעת תדטגד אמא גתכ51 ע80 עך דקפת (94פ51 509 02 ,2 2דמטסא) ג|תחופטת תדטגד אתפ51 50% עצעאט פא ;אתת51 507 מתצאט 101 קפא =:512801 15248 עאם סכ (8 12ַשט0א) עסם דסא מדזו העתק את הסדרות האחרונות מ-2 2ַאט0א% *) (* אל 4 2דמטסא. א דמקפת (94כפ51 509 ,א 0/72א ,2 2דמטסא) ונוופעת תדטגד 50 מ1עאט 1 ₪ְ גד =:512%01 15248 ; פאם העתק את הסדרות *) 0 (6 00₪12א)₪07 עסא ₪,זדמט (* האחרונות מ-6 12מט0א ל-4 2שמטסא. את ץמקטת (51284 509 72 סא ,60 12מט0א) וזפמת הדטגי :514 507 דצאט 1 5די =:512301 15248 פא ; סא ; 4תהופתת תדטגד מתטסתסספק תג ; תת :40004 אזסעת : (8ת400 ,א1 2מטסא) פגמת : (2002 ,007 2דמטסא) מדדקו אד (הסס/ג > 7אך 2עמטסא) 08 (אד 2דמטסא)קסם קך מטתץך =:509 8 8 =:500 )38( )35( )36( )37( )38( )39( )40( )41( )42( )43( )48( )45( )46( )47( )48( )49( )50( )51( )52( )53( )58( )55( )56( )57( )58( )59( )60( )61( )62( )63( )64( )65( )66( )67( )68( )69( )70( )71( )72( )73( )78( )75( )76( )77( )78( )79( )80( )81( )82( 21 ; פא (83) הס 8( (* התכנית הראשית - מלון *) אזסת (88) דמקת (85) 1 (86) 6 (87) 1 = 512801 ת4פדון תתצאט (88) ; פאע (89) בר: 8-(85) הלולאה העיקרלת של התכנלת הראשית מורכבת משנ? צעדים: א. חלוקת הרשומות של קובץ אחד ‏ 4 <2עתטסא לפי סדרות לשני קבצלם: 8 2דמטסא ו-0 2דעט0א. ב. מילזוג הסדרות לפ? זוגות, כאשר סדרה אחת בכל זוג הלא מ-8 2שש/ס וחברתה מ-0 2שַשט0א. 7 ממשיכים לבצע את הלולאה עד אשר מבצעים את המלזוג האחרון, שבו מספר הסדרות שווה ל-1 והתהליך פוסק. (26)-(9) בפרוצדורה 684188 מעבירים רשומות מו הקובץ המקורל לאחד מקבצל העזר עד שנוצר מצב שבו 5104 509 שווה ל-מטתך, שורה (20). הדבר קורה כאשר פוגשים ברטומה אשר שדה המיון שלה קטן משדה המלון שברשומה הקודמת, שורות (79)-(80). במצב צה מעבלרלם רטשומות מן הקובץ המקורי לקובץ העזר האחר, שורה (23), עד טפוגשים ברשומה עם שדה מיון קטן לותר. עתה עוברים שוב אל הקובץ הראשון וממשיכים את התהליך לסירוגין עד שלא נשארת אף רשומה בקובץ המקורל. (72)-(27) בפרוצדורה 1206 מעבירילם סדרות של רשומות משני הקבצים אל 22 הקובץ הקרוי ( 0/812א, שורות (38) ו-(46). בתחילה משווים את המפתח שברשומה הראשונה בסדרה הראשונה שב-5 12ַמט0א עם המפתח שברשומה הראשונה בסדרה הראשונה ב-6 0/812א8. את הרשומה עם המפתה הקטן מביניהם מעבירים ל-4 עעַמט0א (שורות 8, 86). חוזרים על התהליך הזה עד שמגיעים לסוף סדרה ב-8 2ז₪/0א או ב-0 2עמט10 (39, 487). אם מגיעים לסוף סדרה, למשל ב-5 00812א (לאחר שהרשומה ב-8 12ַ008א הלתה קטנה מהרשומה שמשווים אליה מ-6 00/872א), פירושו שכל הרשומות שנשארו בסדרה המקבילה ב-6 2צמט0א גדולות מזו שעכשיו קראנו מ-8 00/812א. נוכל להעתיק את הרשומות האלו ל-4 800812 והן תצטרפנה לסדרה החדשה (39-42). תוצאה דומה תתקבל אם מגיעים לסוף קובץ לאחר קריאת רשומה מ-6 00/812א (47-50). אם מגיעים לסוף אחד מן הקבצלם ולש עוד סדרות בקובץ השני, מעתיקים אותן ל-4 00812א, שורות (55)-(63) ו-(64)-(71). התהליך עומד לפנל סיום כאשר גם 2 2זַעט0א וגם 6 800812 מורכבים כל אחד מסדרה אחת. במקרה כזה, אחד משני דברלם קורה: א. מגיעים לסוף 8 0872א בטורה (38) ואז מעבירים ל-2 00812א את השארלת של הסדרה שב-6 80/8872 (שורה 1. מוסיפים 1 ל-512801 152%8, שעד עכשלו היה 0 (שורה 3 ויוצאים מן הלולאה. ב. מגיעים לסוף 60 12ַש0א בשורה (46), מעבלרלם ל-4 00812א את השארלת של הסדרה שב-8 800812 (49), מוסיפים 1 ל-510807 15248 (53) ויוצאים מן הלולאה. בטני המקרלם הפרוצדורה 1206 מסתילמת וגם הלולאה של שורות (85)-(88) מסתיימת כי 512201=1 19248. בזה סיימנו את המלון. 5 תרג?ל?ם 1 ששחאלות (1) בתכנית ‏ 81411 תנית שבנוסף לשדה לדתגק 20107 לש שדה שנקרא צט0א084. הקובץ ממוי:ן לפ: 2שא081 בתוך דדתגע 20107. בכל ערך של צדתגק ששחת2 הפעולות מסודרות בסדר עולה של השדה %שא08. יש לשנות את התכנלת כדל שתדפיס שינוי במלאי בכל פרלט בכל חנות ובסוף הטלפול בכל פרלט תדפלס את השלנוי שחל בכמות שלו בכל החנויות.לחד. מוצע להגדיר משתנה שלחזיק את מספר החנות ומשתנה שלחזיק את מספר הפרלט ולבדוק לשינויים בכל אחד מהם. (2) כתוב תכנית, או פרוצדורה, שתתבסס על הפרוצדורה 4121%טא 1206. תכנית זו תקבל שמות של %5א2% קבצלם ממוללנלם, שנזין כקלט ותמזג את כולם לקובץ פלט אחד. (3) שנה את הפרוצדורה אוצזא כד? שתקרא קבוצות של 100 רשומות מקובץ 4, תמלין אותן במלון פנימ?ל בזיכרון המחשב בשיטת החלפה ותכתוב אותן לקבצלם 8 ו-6 לפי סדרות כפל שנעשה בפרוצדורה .א601100. לאחר מכן *תחלל המיון בשילטה המתוארת בפרק זה. המיון המוקדם יאיץ את המלון העלקרי, כל הוא מבטלח סדרות התחלתלות של לפחות מאה רשומות. 2 תכנלות (1) בנה קובץ סטודנטלם, שמכיל את הרשומות לדוגמא שרשומות בטבלה. מספר זהות שם מלא מיך מספר שעות ממוצע 110 אגאתעתד וצו א 100 7 220000 1 5.00 2 20 1-9 22000 ץז אצ 2 6 8 0 2 אצ 2 1000 6) 00 צטמזגת מצטת א 133 6 000 212 ג א 120 0.9 00000 אע 0 אצטת א 68 5.2 500020 אותסאזעץ זפטת 2 2 2.9 900000 זאטס 2 44 1.3 (2) כתוב תכנלת שתסרוק את הקובץ טבנית בשאלה הקודמת. הדפס את השמות של הבנלם שלש להם ממוצע למטה מ-75 ואת השמות של הבנות שלש להן ממוצע מעל ל-75. 23 (3) הרשומות בקובץ העובדים במפעל מכילות את הנתונים הבאלם: משכורת חודשילת מצב משפחתל תואר מקצוע מספר עליך לכתוב את התכנלות והפרוצדורות הבאות: א. תכנלת לבנילת הקובץ. ב. פרוצדורה לשליפת השמות של כל העובדים הזכרים. ג. פרוצדורה לשליפת השמות של כל העובדים שמשכורתם למעלה מ-900 שקל. ד. פרוצדורה לשליפת השמות של כל הפועלים שמשכורתם גבוהה מן המשכורת הממוצעת במפעל. הּ. פרוצדורה לשליפת השמות של כל העובדים שהם: * מתכנתים בעל? תואר ראשון, או * עובדלם שמספר הזיהול שלהם גדול מ-1500 והם רווקלם. (4) כתוב תכנית שמעבדת קובץ של רטשומות עבור קבוצות בללגה הארצלת לכדורגל. כל רטומה מורכבת מהשדות הבאים: * שם הקבוצה, * מספר המשחקים ששלחקה עד עכשיו, * מספר המשחקים בהם נלצחה ( 3 נקודות עבור נלצחון), * מספר המשחקים בהם הפסלדה (0 נקודות). * מספר המשחקים שהסתיימו בתיקו (נקודה אחת לכל קבוצה). * סכום הנקודות המצטבר. התכנלת קוראת את קובץ הקלט אל מערך ומקבלת כקלט נוסף את התוצאות של משחקל השבוע. הלא מעדכנת את הנתונים שבמערך וממלינת אותו בסדר ל?ורד, כאשר שדה המלון הוא סכום הנקודות המצטבר. בסילום, התכנית כותבת את המערך המעודכן לקובץ ומדפי?סה אותו. (5) חזור על התכנית בתרגיל מספר (3) בפרק הקודם. תניה עכשיו שהנתונלם של )6( 2008 הלקוחות ושל הפעולות מוחזקים בקבצים. כתוב תכנית כדל לעדכן את קובץ הלקוחות ולהדפיס את הדו"ח הדרוש. חברה מוכרת 4 סוגים של מלץ. נפתונל המחלרים מוחזקים בקובץ בן 4 רשומות, כאשר לש רשומה אחת עבור כל סוג של מיץ. הנתונים רשומים בטבלה: תפוזים תפוחלם לימון ענבים דוגמא לחישוב המחלר: אדם שקנה 9 ארגזים של מיץ תפוזים ישלם 44 שהם 9. הזמנה של לקוח כוללת את הנתונים הבאלם: מספר ההזמנה. שם לקות. כתובת. עיר ומלקוד. סוג המלץ וכמות הארגזים (אפשר להזמין מספר סוגי מלץ). סא 0 (לצלון סוף ההזמנה של הלקוח). כתוב תכנית כדל להכין חשבונות עבור הלקוחות. (7) מכלנלם אלנדקס לספר. הרשומות הן במבנה אשר מתואר בהמשך ומוחזקות בקובץ נפרד לכל פרק. ו כדל להפיק את האלינדקס יש לעשות את הפעולות הבאות: א. ב. ג. ד. למיין את הרשומות עבור כל פרק. למזג את הקבצלם עבור כל הפרקים לקובץ אחד. למזג לחד את כל הרשומות של אותה מלה, כדל שבקובץ הסופ? תהלה שורה מסכמת אחת לכל מלה. אפשר להנלח מקסימום של 20 אילזכורים למלה. להדפלס את האלנדקס במבנה הבא: 1,17,84 500% וכו'. לדוגמא, אם רשומות אינדקס של המלה 800% נראות כך: 1 4 7 [ע | :ו | 46 ו הרשומה המסכמת למלה א800% הלא: 25 פרק 12 עדכון קבצים 1 עלבוד קבצ?ם בפרק הקודם הצגנו מספר פעולות בסיסלות בקבצים כגון הדפסה, מלון, השוואה והוספת רשומות. בפרק צה נציג את פעולות העיבוד העלקרלות שמבצעים בקבצים - את פעולות העדכון (6866ק0) השונות: * הוספת רשומה. *" ביטול רשומה. * שינוי ערך של שדה ברשומה. בדרך כלל רוצים לבצע כמה פעולות באותה רשומה, או ברשומות שונות. לכן נהוג לבנות קובץ תנועות (7118 5מ580510ת128), אשר מכיל את כל הפעולות שרוצלם לבצע בקובץ. הקובץ המקורי שאותו מעדכנים נקרא קובץ אב (7116 -14566), קובץ הפלט המעודכן נקרא קובץ בן, או קובץ אב חדש (7116 ש566ב% שפא). זהו נוהל עיבוד באצווה (ם2866), לעומת נוהל עיבוד מקוון (8מ13-ת0) שבו מעבדלם כל תנועה בנפרד, כאשר הלא מגלעה למחשב. נניח שנתונים שנל קבצים: א. קובץ אב 0801א45%, אשר מכלל את הנתונים אודות עובדים במפעל, ב. קובץ תנועות עדכון, שבו יש רשומות לביצוע פעולות שונות. פעולות העדכון בקובץ התנועות הן: א. הוספה של רשומה חדשה לקובץ. התו 1 מצלין שזו תנועה להוספת רשומה. התו ₪8 לא לופיע ברשומה החדשה שתכתב בקובץ 0201א145. 206 ב. בלטול רשומה מהקובץ. ברטומה זו דרוש שם העובד בלבד כדל לזהות את הרשומה שמבקשים למחוק מן הקובץ. התו 8 מצלין את סוג התנועה. ג. תנועה לעדכון שדה ברשומה. תנועה ‏ זו מטפלת בשנ* עדכונים שונים: כד? לעדכן את תוכן השדה א8ג501, לט לכתוב 5 כסוג הפעולה וכדי לעדכן את השדה א0צ121 יט לכתוב ‏ 7 כסוג פעולה. שכר חדש ) שם העובד צלון חדש שם העובד 2.2 רשומות באורר משתנה עד עכשלו טפלנו בקבצים עם רשומות במבנה ובאורך קבוע. אפשר גם לבנות קובץ עם רשומות באורך משתנה (2600%685 %מ08218), כדוגמת הרשומות בקובץ שתואר קודם. מספר וסוג השדות לכולים להלות שונים בכל סוג רשומה. התנועות בתכנית הבאה קולטלם נתונים מהמסוף ובונים קובץ תנועות אשר מכלל רשומות מן הסוגים שהוצגו קודם. ; (₪.זדעאתץ , דסעצטס , לטספאד) 718מתסא5גוע אהתססתק 51 =02001 00857 מפצץ ,5 ת0 [מסמתס..1]צגתתה סתאסגק = חפ תת =א540110אגתדך ;5 :סםע0 ;תס :4סעתק עס 048 60455 ;תת :75088) :'זַ' ; (0842 :אשצך2דיד :'א' ; ((תאמת :0842458 8ג508) :'8' (ת0₪3 :0830258 אטצד2ך) :'ץ' ; פא תג ;,א546110אתד :458ת0 אגתך ;א540710א4ת תס מתדע :םדעאהתדך )1( )2( )3( )4( )5( )6( )7( )8( )9( )10( )11( )12( )13( )14( )15( )16( )17( 207 )7( 208 :אס (18) ; תמ0תזאד :אסאגא (19) אזססת (20) (* 25 תוול רוות *) . %%-- ו ור (21) ; (מוזדעאתך) מדדותוסת (22) 0 עסע עסא מוצזא (23) אזסעת (28) :('הקש שם וסוג פעולה') אזחדזאט (25) סע אפגפגמס אגתץ מדדא (26) אזספת (27) 0 אסמתס 10 1 =:אסאגא תסץ (28) ; ( [0אא ] פפטסומ5) סגחת (29) (20014) אזפאאת (30) עס .זטעת 658 (31) :'ז' (32) אזספת (33) :('הקש שכר, ציון ') אתדדתט (34) (אעצד?ך ,150808) אזסגחת (35) ; פא (36) )37( '': אזססת (38) :;('הקש שכר') אומדדתט (39) (אטצ21דץ ,150848) אזפגחת (40) פא (41) - ו (42) אזסות (43) (('הקט ציון') אשמצדתח (44) (012458 אטצ21ץ') אזסגפת (45) פאא (46) (* 0345 *) ; פא (47) אמח א40000 =< כם/40ש50 חך (48) אזסטת (49) אגתץ =: ממדקאהתך (50) ; (מז1עאהתך) דטק (51) סו =: אסתתסה (52) פאם (53) (;'לא במקום הנכון' , 58₪00/80) אתתצדתא מפמם (54) (* אדא *) פאא (55) (* 20. .דט *) ;פא (56) (118פאתי) 6058 (57) .עאת (58) מגדירים את השדה א28. אילו הרטומה) את סוגי הפעולות בדרך זו: לכתוב 500220101:,זטאע ובהמשך לכתוב: (* בעבור ...ך הגדרנו בהצהרת 8עצ1 (לפנ?ל הצהרת (1 ,5 ,8 ,5000007=08, אפשר היה 07 655 -...:א ...בנז *) ; פא (13)-(8) מצהלרים על החלק המשתנה של הרטשומה. ברשומה משתנה תמלד קיים שדה מטותף לכל רשומה אפשרית, שתוכנו קובע איך יראה המשך הרשומה שאחר? סדה זה, סדוגמא דו שמו: גמטחק. רטומה משתנית כוללת חלק קבוע וחלק משתנה. בהצהרה הבאה ניתו תאור של השדות שאפשר לכלול ברשומה, אחרל השדת המשותף: הקבוע שווה לאחד מו הערכים של השדה המשותף גטמק. חוזרים עַליו מספר פעמים כדי לטפל בכל הערכים האפשריים של השדה. רשלמת השדות נראית כך: החץ העליון ברשימת השדות מראה שהיא לכולה להלות ריקה, בדיוק כמו שדה 'אי בשורה (11). לא כל מהדר מתיר רשלמה רלקה ועל כו האלטרנטיבה הלא להשמיט כל התליחסות למקרה 'א'. 2 אסור לכתוב "ע0 גתטפק 0.88" במקום "עס 8א0 6888" (כל 18 אלנו שם סוג), אך מותר לשלב לחד טורות (7) ו-(8) ולכתוב "עס תגחס: טפס מפגס". הצהרה צו מקבי?לה להצהרה הקודמת: הטשדה 28004 יופיע בכל רטומה, כאשר השדה או שדות שבאים אחריו ישתנו כפונקציה של הערך שנמצא בשדה (ג0חק. (47)-(31) בזמן מללול השדות מבקשים נתונלם אשר מתאימלם לכל מקרה בנפרד. (58)-(48) בודקים אם התנועות ממולינות. אם יש תנועה שמשבטת את הסדר, לא כותבים אותה בקובץ. אפטר לייעל את התכנית ולכתוב קטע זה מיד לאחר קרלאת השם, בשורה (29). אם הקלט לא להלה בסדר המלון הנכון, אפשר להיה לדלג על הקליטה של שאך הנתונים לפי(שורות (30)-(47)), לש לצפות לכךר שהזנת הקלט תהיה לפל סדר המיון של התנועות ולכן הפכנית נכתבה כפי טהיא מוצגת כאן. 111 שדות באורך משתנה (*) רשימת השדות שהוצגה בציור שפ רטומה משתנית, יכולה גם כן להכיל רטומה 209 משתנית. הדבר מסביר את האופציה של חלק משתנה (12) בתוך התרשים של רשלמת הטשדות. רטשומה משתנית יכולה להופיע כשדה אחרון בלבד מתוך השדות הקשורלם לערך קבוע מסוים שלפ הצהרת 6258. ה-6498 החיצוני נסגר על ידי המלה פאם, שהלא בת הזוג של המלת 000. ה-6258 הפנלמי נסגר על ידל הסוגר הימנל שתוחם את רשימת השדות הקשורה לאותו ערך קבוע שסשייך ל-6455 החלצוני. לדוגמא נתאר רטומות של פציינטים אשר מקבלים טלפול במרפאת בית-החולים. הרשומה עבור פצילינט ביתי, אשר בא לטיפול בלבד, שונה מזו של פציינט מאוטפז. יש גם שוני בין רשומות של פציינטים מאושפזים: לשנם שמשלמלם באופן פרטי וישנם שמשלמלם באמצעות קופת-חולים. פפצץ (1) פתסספת = 108תגד | (2) )3( 400: 4 :0800051 (4) 0. .1985 :גאג1פ (5) פאק (6) : (8עטא ,1דתק) = א09880 506 (7) עס [1..20]צגתסה ו = 41 | (8) פתססעת = 1אמד1גת )תופקת (9) :צאתדדגתק אפ (10) )11( 61: עס א800% :42קהפטפא 695 (12) : מטתך (13) :תתסמאס תא50דון) (18) :1 :המתסת ומופ (15) וס 50090 01 מו דעת) :הדסדת (16) ₪ או 506 :א0פמפוס 6498 (17) :דא ,פה ) :פגוגג 6 : דדגחק (18) תמדא :1 תגקפדון) :הקט (19) (56 :הפטאזן א (20) דא אל תך תא19ו) :וק (21) (749108 הפ סד (22) פאק (23) רטימת השדות הקשורה לכל קבוע מוקפת בסוגריים. לכן לש סוגר שמאלי פותח מיד אחרי מטפץ, כאשר הסוגר הימנל שלו מופלע מיך לפני ולפנלן משמאל יט סוגר ימני נוסף שטייך ל-6458 הפנלמל. בתוך הקבוע 1808, בתחום ה-0458 הפנלמי, יש סוגרלים הקשורים עם הקבוע 1ץגעק וסוגריים הקשורלם עם הקבוע גפטא. - דכון קובץ סדרת?ל הקבצים שמטפלים בהם הלנם קבצים סדרתיים (4165ע 11 ). כדי לעדכן או להוסיף רשומה ביןו הרשומות של קובץ סדרתי, או בסופו, צריך להעתיק אותו לקובץ שני. במהלך ההעתקה מעדכנים רטשומות קיימות, מוסיפים רשומות, או מבטללם רטומות כנדרש. רשומות העדכוןו בקובץ התנועות חייבות להלות ממולינות לפי סדר המיון של הקובץ. 220 בתכנית 7 למדנו להקים קובץ אב וב-11.5%00718 - קובץ תנועות. עתה אפשר לכתוב תכנית שמטרתה לעדכן את קובץ האב על פיי הנתונים שבקובץ התנועות. ראה תרשים זרימה. בתרשלם הזרלמה, 50807 הוא השם של קובץ-אב-*ש(. אא הוא השם של קובץ-אב-חדש, המבוסס על קובץ-אב-ישן, אשר מעדכנים על פי התנועות שבקובץ התנועות 5 אד קרא רשומה מ-15דפאתתץ קרא רשטומה מ-146%0901 האם הגענו לסוף שני הקבצלס? סגור את הקבצים 271 22 | ?1053 אהד | (צוטאטם < >ספטסאפטפ "מע1עאתתד) צועוטס ל >5115%080 , *י'סתסאפתוא) סאה פטס = סמטסאם 5 , ל פע דעוותת האס ספטספ , ידסתסאפת צאאטם > ספטסואםו5.* פד שפאותתיד צוושטם <> > סמטסוןפ5₪ ,4 צסתסאפתו ספט0א5צ5 . * ם צפאתתך סמטסום 5 , יי י'סהס>פתו ספטסאפו5 . = פזנעאתת = הזטסת,* פז1עפאתתד יא' ב 540750 * מוזדעפאותתד --= סמטסאמחפ , * ייספסאפ5תאא תהאספץל . * מדעאתת? --->>- תהתס5 . * 5%080'7האא אצת . * פזצעאתת -->*- אטצ21ע , * 2'סתסא5גאא כתוב ז'יסת0אפגאא כתוב עסתסאפתאא מ- סהסאפ5תון הת50, * סה0סא5גו הג!ו150, * מ.זצפאתה?-> אטצז2ד, * ייסתסא5גו אטצ21ד, 5 11פאגתד > תוב לסת0סא5תאא מ-0₪0א5ו 228 תכנית העדכון על פי תרשלם הזרלמה: (118 לא ,5007 50 ז'טקייטס, קאד ) 9 || הסח 07 ; '/.272777.777.777.7777.7.7.7.7/7/277.7 ' =צתות 1 =082001 מקציך קס [מסעתס..1]צגתתה כמאסגת -אמחם פתססעת =פמטסיהותהזפטת : קמס :0 :אעצך2?ך ;פא תת =א546110א תד :0 :גסמ עס 0 0455 :15078) :'צ' 0138( :‏ :אתצד2?דך ; ((1אמת :58גקחס ת808%) :'פ' (תהאס :0842458 אעצנ2ד) :'' תג ;סופת ע0 מתדע :ל0תסע5אא , דסתסאפגוו :10% את ע0 פתדע :₪ודעאהחד 0 6455 מתטכמסססק אזססת עס תטפק. מ1עאגתד 058 ; :'' אנסחת :'8' 1 מדעא החד =:8ג .508‏ 01ת5%0גא 007 =: וא (0801א45אא) צטק ; פא אנסתת:'ץ' ;אע דד. מ דעאהתד =:אעשצד2ד. סו 7 = :וא (09801א45%אא) דטק ; פאת ) 'מנסים להוסיף רשומה קיימת') א[מדדאח :'ט' פא ; (118ואת) 0 (0007א5א) 687 ;פא |( 0 אזסחת אעחד 'ע' = גתטתק. םודעאתד פד אפ )1( )10( )11( )12( )15( )16( 510 . 7 ם,דדעאתך =: מתטסמף .5‏ דסתסא5וא (48) ת50ד, ‏ ם,1דעאתד =: ה.501. " דַ0ת0א45א (49) ; אתוצדדד. א1דעאתך =: אשצ21ד., "דסתסא5אא (50) (07ת0א5אא) לטק (51) פאם (52) אפ (53) ;('פעולה בלת? אפשרלת') אממצדתח (54) (8,זדעאתד) 67 (55) ;עאת | (56) ; האג מפטתתססתק | (57) אזסעת | (58) 00 א = "07ת0א5א (59) ; (09801א45א) צטק (660 (0801א45א) 007 (61) ; פא (62) 05494 אהע מתטסתססתת | (63) אזסעת | (6)64 אניד כ ש30פ. "ם,ודעאהתד > פמטס53. דסתסא5גא עד (65) גאדות (66) )67( 8 אד פטס ף. ‏ ם.דעאת = כסשטסאמ .5‏ 07ת0א5גא עד (68) אאוינסטתיד5 0455 (669 (* סטסו .5‏ מ,דדעאתד < כפטסאמ .53‏ 0807א45א4 *) פ5זע (70) 0 (71) ;את (72) ,אסאת1 מתטקתססתק | (73) אנת | (74) פאה (צושנע <> כמטס4תפ. ‏ מ 1דעאת) םזדט (75) 00 (צואנם <> פמטסמף. 077ת5%0) (76) אדו (677 אמחד אע = כמטסאש58. םונעאגת עד (78) סע צונזת <> ₪ט .5₪40‏ סת0סא5גו םתד (79) אד (80) ( *צונזת = פמטסומפ. 7 07ת0א15*) מפע (81) 0 הזע <> פמטסומ5. מתדעאהתץ מזדחח (82) 0 (83) ;עאעת (84) (* תכנלת ראשלת *) אזסעת | (85) ; (445%0801א) מדדתחמת (86) ; (8זדעאגתדך) דתפסת (87) ; (45%0801א) ספת (88) ;אטאתד (89) ; (11₪עאתץ) 00055 (690 )91( 01055 )45%0901( ; (5%0801א) 01055 (92) .פאע | (93) 205 הסבר: (93)-(85) התכנלת הראשלת. (84)-(73) הפרוצדורה אטא%ע1: בפרוצדורה זו מבצעים את הלולאה העיקרלת כל עוד שלא מגיעים לסוף של אחד מן הקבצים. מעבדים את הרשומה כאשר הלא נמצאת במאגר ולא מעבירים אותה לרשומה שהוצהרה ע": %8. למשל, בשורה (75) פונים לשדה כ58840/8 ברשומת 8תזפאגת1 אשר נמצאת במאגר, על לדל הציון של המאגר ושם השדה: כמטסאטא5. מתדעאגתך. כאשר מגיעלם לסוף אחד מן הקבצלם אפשר לצהות אחד משני מצבים ולפעול בהתאם: א. סוף של קובץ התנועות: מעתלקילם את הרשומות שנשארו בקובץ-אב-ישן אל קובץ-אב-חדש. ב. סוף של קובץ-אב-ישן: מוסיפלם את כל הרשומות שנשארו בקובץ התנועות כרשומות חדשות אל קובץ-אב-חדש, בתנאל שהן רשומות מסוג "ת". 08 קבצלם לג?שה ?ש?רה (*) קבצים סדרתיים מאפשרים גישה סדרתית לרשומות. קובץ התנועות לעדכון של קובץ סדרתי הלילב להלות ממוללן לפל אותו סדר מלון. בעת העדכון מעתיקים את קובץ האב הלשן וכותבים אותו מחדש עם העדכונים. כאשר התנועות כבר ממוללנות ומספרן גדול, אלן לפעולת ההעתקה השפעה משמעותית על זמן העיבוד. הדבר שונה כאשר לש מספר קטן של עדכונים, או כאשר התפנועות מגיעות באקראל. במקרה הראשון צרלכלם להעתיק קובץ שלם בעבור מספר קטן של שלנויים ובמקרה השנל צריכלם לבצע עיבוד נוסף לפנל העדכון: מלון של קובץ התנועות. כאשר קובץ האב גדול ומספר תנועות העדכון קטן,. כדאי יותר לעדכן ‏ רק את הרטומות הרלוונטלות ולא לקרוא ולכתוב את שאר הרשומות. דרישה זו קללמת במלוחד בעיבוד מקוון (א8ַת2006551? 6ת11 ם0), שבו לש מופע אקראל של תנועות בודדות לעדכון הקובץ או לקריאה של רשומות. בעלבוד זה צריך לתת שרות לתנועת העדכון באופן מללדל. הגישה לרשומה בודדת אפשרית באמצעות שלטת הגישה הלשלרה (2400685 212606 46). שלטת גלשה לצו אלנה מוגדרת בשפת פסקל הסטנדרטית, אבל הלא נוספה לה ע"ל לצרנ? מחשבלם ובתל תוכנה העוסקים בכתלבת מהדרים. הרחבה זו של השפה מאפשרת ‏ גישה ישירה לכל רשומה בקובץ לפי מספרה הסידורי, בלי שלהיה צורך לטפל ברשומות שקדמו לה בקובץ. שיטת הגלשה הלשירה אפשרית רק באמצעל החסנה לגישה ישירה ‏ - פפגכ2 (1760% 8 5503₪₪ 6200655 כמו תקליטון או דיסק מגנטל, בעוד ששיטת הגישה הסדרתילת אפשרלת בכל אמצעל ההחסנה. 206 גלשה לרטשומה מסולמת מתאפשרת בעצרת פקודת החלפוש 588%, אשר גורמת להזזה של ראש הקריאה/כתיבה של הדילסק אל הרשומה הדרושה: (מספר רשומה, שם קובץ) 588% דוגמא לפתרון בעיה בשלטת הגישה הלשלרה: ננלח שאנשלם רוצים לדעת את לתרת חשבונם בבנק, להפקיד או למשוך כסף מך החשבון. לשם כך צריך לטפל ברשומה של חשבון מסוים בלבד, מבלי לטפל בכל שאר רטומות החשבון. ננלח שמבצעלם עדכון של הסכום בלבד. : (צשפצטס ,(לטעאד ,01סא₪80פע0) אספתפטתס |תססתע (1) פגט (2) ;ומת 07 מתדע :6580801 (3) ; תמסמדא1 :אסמחפעא0 תגס5דון (4) ;תת :57א00 (5) אזססת | (6) ; (01א0189180) [מפת (07 0 עסטש עסא אמזאח (8) אזסתת (9) ; ('כתוב מספר חשבון') א0מצזתט (10) ; (א57180ת0₪ 15248א) אזפגמת (11) ;('כתוב את הסכום עם סלמן') אמטצזתח (12) ;('להפקדה כתוב סימן + ולמשיכה כתוב סימן -') א]מדדאתח (13) ; (50804) אזפגפת - - : (18) : ; (א0195180 595דו , 07א0105180) 55% (15) ; (801א0185880) 097 (16) ;0 + 07א0₪580 :=‏ 07א6105120 (17) ; (א01:51180 15245 , 610580807) אפת5 (18) (01א601058₪80) צטק (19) פאע (20) . פא (21) הסבר: (17)-(15) פקודת 588% גורמת להזזה של ראש הקרלאה של הדיסק לרשומה שמספרה שווה לערך של א0₪85880 אג152/. כאשר מבצעים את הפרוצדורה 681 בשורה (16), קוראים לתוך המאגר את הרשומה הזו. בטורה (17) מעדכנים את הסכום. (18) לאחר הביצוע של ה-087, ראש הקרלאה עובר לרשומה ‏ 1+א0805820 א1522. כאשר רוצלם לכתוב את החשבון המעודכן במקום הנכון, צרלך לעשות את ה-588% בפקודה (18). פקודה צו מחזלרה את ראש הדלסק למקום שבו יש לכתוב את הרשומה שמספרה 088058808 8ג152א. התכנית הזו כתובה עבור מהדר פסקל של כ0052. בכמה ניבים של שפת פסקל יש לפקודה 558% פונקצלות נוספות. בנוסף למלקום ראש הקרלאה של הדלסק, הלא קוראת את הרשומה הדרושה אל המאגר בלל לקדם את ראש הקרלאה של הדלסק. במקרה זה יש למחוק מן התכנית את הפקודות ‏ 681 ו-א598 בטורות (16) ו-(18). מכיון שלא מבצעים את הפקודה 051% בשורה (16) ולא מקדמים את ראש הקריאה כתוצאה מפקודה זו, אלן גם צורך להחזיר אותו למקומו בעזרת פקודת א בשורה (18). 27 בזמן כתיבת קובץ לגישה לשלרה פותהים אותו בפקודת מל1אאעת, כנהוג בכל קובץ חדש. בזמן קריאה ועדכון של קובץ קיים, פותחים אותו בפקודת צעפאת ואז אפשר להשתמש בפקודת החיפוש אחספ כדי לאתר רשומות וכד? לקרוא ולכתוב בכל מקום בקובץ. פקודת צַעפעת בדרך כלל מאפשרת רק קרלאה (ולא כתיבה) וגם זה, רק באופן סדרתי החל מראש הקובץ. אפשר לחפש רשומה (ת0ע5682) לפי שדה המפתת (עֶ9א) שלה, אשר במקרה הנוח בלותר מתפאלם לכתובתה בדיסק, או למקומה היחסל בקובץ, החל מהכתובת של הרטומה הראשונה באותו קובץ. בהתאם לכך, חיפוש של רשומה יהיה פנללה אל כתובת בדיסק אשר שווה לשדה המפתח שלה. שדה המפתח אינו חייב להופיע ברשומה כל הוא ידוע על פי המלקום היחסל של כל איבר בקובץ, כמו בדוגמא הקודמת. 9 קובץ א?נדקס סדרת? ‏ (*) תחתחום המספרים של שדה המפתח אלנו נמצא תמלד בתחום הכתובות שהוקצו לקובץ. תחום זה אלנו מתחיל תמלד ב-1, אלא לדוגמא נמצא בתחום שבין 6000 לבין 80 0. לתכן גם שהמפתח אלנו מספר אלא מחרוזת ואז הוא אלנו יכול לציין את המיקום של הרשומה בקובץ. פותרים בעיה זו בעזרת טבלה של מספרים סידורלים מ- 1‏ עד המספר של הרשומה האחרונה, כשליד כל אחד מהם רושמלם את הערך של המפתח. הטבלה מורכבת מרשומות במבנה הבא: 600 =אתסאד 1 חופת ; ת6מ אד : הותחזפעת תגקפדא ₪1 דע 506 :461מדקגא ;פא מן הרשומות בונים מערך (או טבלה), שסוגו מוגדר כך: אתסא1 1אאטאפפת עס [א..1-] צגתתה =אתפאד ץאשגך מבנה הטבלה: מפתח | מס' רשומה מקום בטבלה -------7-7-7--.------------ ב נפתונים כללילם / / |17 8 14 17 5 20 רשומה שבוטלה [ 222 = שש ת ₪ זר ו א 1 ₪2 כ בדוגמא זו מלספור הרשומות מתחיל ב-1. בפסקל של ₪052 המלספור מתחיל ב-0. את המשתנה אמכא1 מגדירים כך: תג אפסאך צאטגד :אמפאך 208 ממו בטבלה שבדוגמא לש 2+א איברים. משתמשלם בשניים הראשונים כדי להחזלק נתונלם כללילם וב-א המקומות החל מן המקום השללש? כותבים מפתחות עם מספר? רשומה. באיבר ג)תחופעת 15238א. [0]אמפא1 שבטבלה מחזלקים את מספר הרטשומות הפעללות בקובץ. יתכן שיש לותר רשומות בקובץ אך הן מסומנות כמבוטלות ואלן פונים אליהן לותר בתהליכ? העלבוד. כאשר מבטללם רטומות לא מוחקים אותן מהקובץ, אלא מוסלפים להן סלמון של ביטול, כדל לציין שהן אינן פעילות יותר. באיבר האחופמת תג50וא. [1-]אמפאד רושמלם את מספר הרשומות האלו, אשר עומדות לשלמוש חוזר אם להיה צורך בכד. מחיקה בפועל של רשומות אלו מתוך הקובץ תיעשה רק בזמן ארגון מחדש של טבלת האלנדקס והעתקה של הקובץ למקום אחר באותו דלסק, או בדיסק אחר. בטבלה שבדוגמא מספר הרשומות בקובץ הוא 7, אבל רק 6 מהן פעללות ולכן 1=6ח1פת 8גק5דא. [0 ]אמפאד. הרשומה השביעית, שמספרה הסידורי בקובץ הוא 3, נמצאת בסוף הטבלה עם מפתח 222 ולכן המקום של רשומה מספר ‏ 3 פנול לשלמוש חוזר. כאשר מוסיפים רשומות לקובץ אפשר להלה לכתוב במקום זה רשומה חדשה ולעדכון את טבלת האלנדקס בהתאם ולכן 1=תותפטת תגקפדא. [1-]אמפא1. הקובץ שתואר בדוגמא הוא קובץ אינדקס סדרת? (7116 5181ת00 56 66א68ת1), אשר מאפשר עיבוד סדרתל וגם עלבוד בגישה לשירה. הפעולות שאפשר לעשות בקובץ זה הן: * בנלית הקובץ. * עדכון רשומות. * ביטול רשומות. *‏ הוספת רשומות. א. בנלית הקובץ. כותבים את הקובץ בדלסק ורושמלים בטבלה את המספרים הסלדורלים של הרשומות והמפתחות שלהן. כאשר גומרילם את הבנליה, ממללנים את הטבלה לפל המפתחות. ב. עדכון רשומות. משתמשים באלנדקס כדל למצוא את המספר הסלדורי של הרשומה שרוצלם לעדכו. בעזרת הפקודה א8%ע5 מאתרים אותה בקובץ ומוסיפלם פקודה 681 כדל לקרוא את הרטשומה (אם כותבים בפסקל של 0052). מעדכנים וכותבים אותה למקומה בקובץ. במקרה כזה גם מספר הרשומה וגם ערך המפתח לא משתנלם. אם השלנול הוא של המפתח, צריך לעדכן גם את טבלת האלנדקס ולמללן אותה מחדש. ג. בלטול רשומות. כדי לבטל רשומה יש לעשות את הצעדלם הבאלם: 1 לחפש את המפתה באלנדקס. 2) לשנות את המפתה של הרשומה ל-'222'. לא משנים את מספר הרשומה כל הוא מצלין את המקום הסידור?ל בקובץ אשר מלועד לשלמוש חוזר. 3) למיין את טבלת האלנדקס מחדש. גם הרשומה המבוטלת (שאינה פעילה) משתתפת במלון, מכיון שעוד לא שלנינו את ג|)תהופתת תגק8דוא. [0]אחפאד. הרטשומות שכבר מבוטלות נמצאות בסוף הטבלה, מכלון שטהמפתח שלהן הוא '/ל2', ולכן הן אלנן משתתפות במלון הנוכחל. 209 64 להקטלן ב-1 את ()תחזפמת תגק15א.[0]אתפא1 מכיון שרשומה אחת הועברה ממצב פעילות למצב של אי-פעילות. 5) להוסיף 1 אל גתחופטת תקפדא.[1-]אמפא1 כי יש מקום פנוי נוסף של רשומה בקובץ שאפשר להשתמש בו לכתיבת רשומה חדשה. בכל שלב, מספר הרשומות אשר בקובץ שווה לסכום: פע הגע5דוע. [0 ]אמפאד + תחזפטת תגק5דא. [1- ] אמפאד זהו המספר הכולל של הרשומות הפעילות והרשומות שהלו פעילות ובוטלו. אין לכך קשר לגודל טבלת האינדקס שהלא בת 2+א אלברים, ‏ כ הלא מלועדת לכל הרשומות שניתן לכתוב בקובץ. בדוגמא זו, אם א הוגדר כקבוע ששווה ל-100, גודל הטבלה הוא 102. גודל הקובץ בפועל טשווה למספר הכנלסות בטבלה שהשתמשנו בהן, חוץ משניל המקומות הראשונים שמלועדים ל"נתונים כלל?ל?ם". ד. הוספת רשומות. כדיל להוסיף רשומות לש לעשות את הצעדים הבאלם: 1) לבדוק את (|תתופעת תגק5דא.[1-]אמפא1 כד? לדעת אם לש מקומות רלקלם בקובץ. 2) אם לש מקומות רלקים, יש לחפש את הכנלסה הראשונה שלש בה מפתח '277'. הכתובת של כנלסה זו בתוך האלנדקס הלא: 1 + אתפת 45ת5דא. [0 ]אפפאד בדוגמא ‏ זו נקבל ‏ 6+1=7 ולכן הכניסה המתאימה בטבלה היא [7]אחפא1. כותבים את הרשומה החדשה במספר הרשומה שמופיע ב-[7]אמפא1 ובדוגמא ‏ - במקום הסילדורל 3. מאתרילם את המקום בדיסק בעזרת הפקודה 528% וכותבלם בעזרת הפקודה ע2₪. מעדכנים את המונים בשנל המקומות הראשונלם בטבלה ע"י הפקודות הבאות. 1 - אטחפעת תגת5דא. [1- ]אמפאד =: הפ א523דא. [1- ]אמפאד 1 + הותחזפטת תגק15א. [0 ]אאפאד =: 305804 115248. [0 ]אמפאד 3) אם אין מקומות שהתפנוּו בקובץ כתוצאה של ביטול רשומות, כותבים את הרשומה החדשה בסוף הקובץ. בפסקל של 0052 מוצאים תחילה את הרשומה האחרונה בקובץ ואת"כ ממשלכים. יש לזכור, שבעת תכנות בפסקל כ65ש, מלספור הרשומות בקובץ מתחלל ב-0. הפקודה לחיפוש הרשומה הלא: | ((1- גאתתפתת תגע5דא. [0]אמפא1) אע58 אח"כ מבצעלם 081 כדל לקרוא את הרשומה הזו וממשילכים בפקודה 20% כדל לכתוב את הרשומה החדשה. בניבים אחרלם של פסקל מבצעים א588 לשר לסוף הקובץ (כאשר מלספור הרשומות מתחלל ב-1): ((1+ ה)תחזפתת ת4ק5דונ. [0]אמפאד) אמספ אח"כ מבצעים עשת, עם הנתונים שנרשמו במאגר. בשנל המקרים מוסיפים 1 לאלנדקס באמתפטת תג152א. [0]אמכא1 וממלינלם את האלברים בטבלה אמעסא1, חוץ משנל האיברים הראשונים. מספר האלברלם שממלינים שווה ל: אתחזפתת תגק5דו. [ 0 ]אמפאך במקרה זה: 0 = גאומפמת 15248א. [1- ]אאפאד המלונלם שהוזכרו מלועדים להכניס רק איבר אחד למקומו הנכון בתוד רשלמה 200 ממוילנת, ולכן נקטנו בשיטה של הזזת איברים במקום למלין את כל הרשומות. מן הדיון הקודם אפשר להסיק שהאלנדקס נושא נתונלם ת?וניים עבור השלמוש בקובץ. לכן מאחסנים גם אותו בקובץ סדרתי בצורה לו: תגצ אמסא טא עס מזדע :אאפאד 2דמטסא בשפות עלללות המתמחות בטיפול בקבצים (למשל, ) ובנלבלם מפותתים של פסקל, המהדר מטפל בעצמו בבנלית טבלאות האלנדקס הדרושות. המתכנת מציין רק את סוג הקובץ 7120א58008-אמעא1 מבלי לטפל בטבלאות עצמן. בזמן קלט ופלט המתכנת מעבלר את ערך המפתח לשדה מוגדר ברשומה ונותן את הוראת הקרלאה, ‏ או הכתיבה בלבד. ָּ 6 תרג?ללל?ם 1 ששלות (1) הצהר על רשומה שמכללה את הנתונלם הבאלם: * שם משפחה ושם פרטל. *‏ גיל. = מצב משפחת? (רווק, נשול, גרוש/אלמן). * שם בן הזוג וגילו, אם מצב משפחתל הוא "נשול". * מספר הללדלם, אם הלה נשול אל פעם. * שמות וגיל הילדלם, אם לש לו ללדלם. (2) קרא את השאלה (1) בפרק 10. הרחב את הצהרת הרשומה כדל לכלול נתונלם נוספים. כלומר, הוסף שדות אם מתקללמלם תנאים מסולמים של מצב משפחתל. > אם רווק/ה - הוסף שדה בוליאנל כדל לצלין אם לש לו דלרה. * אם נשול/אה - הוסף שדה לתאריך נלשואלן ושדה לשם בן הזוג. * אם גרוש/ה - הוסף שדה לתארלך גירושלן. = אם אלמן/נה - הוסף שדה לתאריך הפטלרה של בן הזוג. * אם נישואין שנללם - הוסף שדה לתארלך נלשואין ראשונים. * אם נלשואין שנלים - הוסף שדה לתאריך סלום נלשואלן ראשונלם. * אם נלשואין שנלים - הוסף שדה לתארלך נלשואין שנלים. * אם נלשואלן שנלים - הוסף שדה לשם בן הזוג הראשון. 2 תכניות (1) השתמש בקובץ שבנלת בתרגיל התכנות הראשון של פרק 11. עליך לעדכן אותו בהתאם לשעות הלימוד והציונים שקבלו הסטודנטים בשנה זו. בכל תנועת עדכון *ופיעו הנתונלם הבאים: / * | מספר זהול, * שם סטודנט, = מספר שעות של קורס שלמד, = ציון שקבל בקורס. הטדות של מספר השעות בקורס והציון חוזרים כמספר הקורסים שהסטודנט למד במטשך השנה. סדרת הזוגות "שעות" ו"ציון" מסת:ימת כאשר ?לש 0 (אפס) בשדה מספר שעות. 211 כתוב תכנית שתעשה את הפעולות הבאות: א. בדיקה אם לש טעות בנתונים: מספר זהות שאינו נמצא בקובץ או שם שאינו תואם את מספר הזהות שניתן. ב. חישוב של מספר השעות החדש לכל סטודנט וממוצע הצלונים החדש. למשל, אם לפנל העדכון הלו לסטודנט 75 שעות עם ממוצע של 80 ועכשלו למד 10 שעות וקיבל ציון של 100, הממוצע יהיה: 75*80+10*100(/85=82.3). הקלט לתכנית: מספר זהות שם שעות ציון שעות ציון שעות ציון 1000 אגא בצוס 3 1 5 08| 2 5 200000 צטמתגת אלטת 2 1 2 1 3 33| 1200000 אס הסטתגת 5 933 2 1000 3 08 000 א2 2 הלהס 2 1 84 2 2 93 000 2 צְ+אט 4 75 2 5 3 0 (2) עליך לעדכןו את הקובץ שבתרגיל 1. פעולות העדכון כוללות: )3( * הוספה של סטודנט חדש (1), * מחיקה של סטודנט קיים (א), * עדכון של מספר השעות ושל הממוצע (7). ברשומות התנועות נמצאים השדות הבאלם: *" מספר זהול * קוד (8,%,7) * שאר הנתונים, אם דרוש. כתוב תכנית שתבצע את העדכון הדרוש. השתמש בנתונים הבאלם של קובץ התנועות. שדה 1 שדה 2 שדה 3 שדה 4 שדה 5 שדה 6 00000 א אדטת א 25 0.5 200020 א 220000 ה 61 5.00 2 8 068 5 קש הז 3 1 120 7 2000000 קובץ אב בבנק מורכב מרשומות המכילות מספרל חשבון של לקוחות ולתרות. - קובץ התנועות מורכב מרשומות מספר? חשבון וסכום הפקדה (מספר חיובל) או סכום משיכה (מספר שלילל). יתכנו כמה פעולות עבור אותו מספר חשבון. עדכן את קובץ האב והדפס דוח שגויים עבור תנועות עם מספר? חשבון שאלנם בקובץ האב. (4) הרשומות בקובץ מלאל מכילות את השדות הבאלם: 22 מספר פרלט. * מלאל קלים. * נקודת הזמנה. *‏ רמת מלאל רצולה. * כמות בהזמנה. מזמינים השלמת מלאי של פרלט כאשר הסכום של המלאל הקיים ושל הכמות בהזמנה קטן מנקודת ההזמנה. הכמות המוזמנת היא ההפרש שבין הסכום של המלא?ל ושל ההזמנה הקללמת לבין רמת המלאל הרצולה. מבנה רטומה בקובץ התנועות: * מספר פרלט. = סוג פעולה (הוספה למלאי, הוצאה ממלאל). * כמות. בהנחה שטנ? הקבצים ממוללנים לפל מספר הפרלט, כתוב תכנית כד?" לבצע עדכון שלתייחס לאפשרולות הבאות: א. אלן פעולות עבור פריט מסוים. ב. לש פעולות אחדות עבור פריט מסולים. ג. יש פעולות עבור פרלט שאינו קילם (ז"א לש טעות במספר פרלט או בקובץ האב). (5) עלין בתכנית מספר ‏ 2 בתרגילים של פרק 10. תוכל להניח שרשומות הסטודנטלם מוחזקות בקובץ (ולא במערך) ובעבור כל קורס יש קובץ נפרד שמכיל את שמות הסטודנטים והצלונים שלהם. קובץ הסטודנטים בכל קורס ממוללן לפ שמות הסטודנטים. עדכן את קובץ הסטודנטים על 5? הנתונים שבקבצ? הקורסים. (6) עילן בתכנית מספר 6 בתרגילים של פרק 11. בנוסף על קובץ המחלרלם לש קובץ לקוחות המכיל רשומות עם השדות האלה: * שם הלקות. * מספר הלקוח. *‏ כתובת. = עיר. * סכום החוב. התנועות מוחזקות בקובץ שללשי במבנה הבא: * מספר הזמנה. * מספר לקוה. = סכום החלוב אם זו חשבונלת, או סכום התשלום. * קוד תנועה: חשבונית - 0, תשלום - 7. = סוגים וכמויות של כל פרלט שהזמין, אם צו חשבונית כתוב תכנית כדי לעדכן את קובץ הלקוחות ולהדפיס חשבונלת או קבלה. (7) השתמש בקובץ המחירים שמתואר בתכנלת מספר 6 בתרגילים של פרק 11, כדל לכתוב תכנית לעדכון. התכנית תטפל בשלושה סוגל עדכון: א. עליה כללית של %א במחירים. ב. קטגורלה חדשה של מחלר מוזל. המחלר החדש *כול להנתן בערכים מוחלטים, או ביחס מתמטי. לש למשל אפשרות לקנות 48 ארגזים ב-1.9 כפול המחלר של 24 ארגזים. ג. הוספה, השמטה או שלנוי ברשומה מסוימת של הקובץ. (8) (*) בקובץ שמחזיק נתונים על הלקוחות של בנק מסוים, מבנה הרשומות הוא: 203 )9( 204 מספר חשבון (10 מקומות). שם הלקוח (10 מקומות). לתרה. משלכת לתר מקסלמלית מותרת (אפשר גם 0). הלקוחות מבצעלם הפקדות ומשיכות בעזרת מכשלר הבנקומט. א. ב. כתוב תכנלת המשתמשת בגישה לשלרה לקובץ הלקוחות כד*? לעדכן את הרשומה של לקוח המבצע פעולות ולהדפי?ס אחת מן ההודעות הבאות: * ההפקדה של (סכום) ע"? לקוח מספר (מספר) התקבלה. * המשלכה של (סכום) ע": לקותח מספר (מספר) מאושרת. * המשלכה של (סכום) ע"*? לקוח מספר (מספר) לא מאושרת, ‏ כ? עבר על משלכת הלתר המותרת לו. כתוב תכנלת שמשתמשת בשלטת הגלשה הלשלרה כדל לעדכן את קובץ הלקוחות. פעולות העדכון האפשרלות הן: = הוספה של לקוח חדש. = בלטול רשומה של לקוח מהקובץ. * עדכון שם או כתובת. *) לש להרחיב את תכנלת (4) לטיפול במלאל. רוצים לבנות מערכת מלדע נלהולי שתאפשר להנהלה לדעת בכל זמן את מצב המלאל. כדל לעשות זאת לש לאפשר את הפעולות הבאות בגישה לשלרה: א. בא ג. עדכון מלידי של הקובץ כאשר מתקבלת הזמנה של פריט מסוים או כאשר מנפקים פרלט זה מהמלאל. הצגת מצב המלאי של פרלט מסוים בתשובה לשאילתה. הצעה להנהלה להפסיק להחזיק בפרלטלם מסולמים אם הביקוש נמוך מ-10 בשלושה חודשילם רצופלם (כד? להגיע להחלטה כזו, צריך להוסלף תאריך בקובץ התנועות ולהעביר אותו לקובץ האב בעת עדכון המלאל). פרק 13 קבצי תמליל 1 עלבוד של קובץ תמל?ל קובץ תמליל (6א16) הוא קובץ שאלברלו הם תווים ז"א, שכל רשומה בו הלא בת תו אחד בלבד. לקובץ מסוג זה לש התכונות המקובלות של קבצים, אך יש לו תכונה נוספת חשובה: הרשומות, או התוולם, מוחזקים בקבוצות, אשר המפריד בלניהן הוא תו מלוחד שנקרא גבול שורה (ע82860ק56 או עְלה6מתטסת 6מ1/). גבול שורה מאפשר חלוקה של קובץ תמליל לא רק לרשומות, כנהוג בכל קובץ, אלא גם לגושים של רשומות, אשר כל אחד מהם מקבלל לשורה. השורות אינן חליבות להילות שוות באורכן. אורך השורה נקבע ע"? מלקומו של תו גבול השורה, אשר נמצא בשליטת המתכנת בעת כתיבה של התמליל, ע"? הפעלה של הפרוצדורה: (שם קובץ)אזתדזתח התכנית להלן מדגלמה עיבוד של קובץ תמליל. היא סופרת את מספר הרווחים והתוולם בקובץ תמליל נתון. ; (עטפדטס , מדעאתי) דאט0ס אגתססתע ‏ (1) )2( 07 (* תו רווחה *) .7 = אאגתת (3) תג (4) ; דאחן |:ם,דקאמך (5) ;תס :01 (6) (* מונים למספר הרווחלם *) ; תמ6מץאד :415724 , /מתפדא (7) (* ולמספר התוולם, בהתאמה *) אזסתת (8) =:/0ת115 (69 =:5740זא (10) ; (₪,1דעץאתץ) [מפסת (11) סס (םדעץאתץך) סע צסא מתדזח (12) אזסעת (13) 0 ( (מ.דדעאמד)עסת 02סא) פאג ( (ם1דעדאמד)א1סע דסא) שדוח (14) אזסתת (15) ((0₪ ,זדקץןאחד) פגתת (16) אמח אאגתת = 08 עך (17) 1ת דא =:/8ת15 (18) 2055 1 =:15140א מפמת (19) ; פא (20) אמח (ם,דעצאתך) עסע עסא עד (21) (מ,זדעדאתד) א.זסאפת (22) (* דלג על סימן סוף שורה והעבר את א₪01 למצב 74088 *) (23) ; פא (24) ;('מספר הרווחים שווה"-7' ,/8א15א) אממלדתט (25) ;.('מספר התווים שווה 7-7' ,/1572(א) אמדזתט (26) (ם,11עדאתיך) 0055 (27) .פאע (28) הסבר: (5) סוג המשתנה מם1עצאםת1 הוא עאמץ. צאעך הוא סוג סטנדרטי שמוצהר באופן אוטומטי כאילו המתכנת כתב: תגוס ע0 מתדקת = דאמדך. (11) כמו בקבצים אחרלם, יש לפתוח ולסגור גם קובץ זאמ .7‏ יש מהדרים אשר סוגרים את הקובץ בסוף התכנלת, באחרלם - צריך המתכנת לעשות זאת (ראה שורה (27)). ' (12) כדל לבדוק את התוכן של הקובץ, דרוש שהקטע הבא ימשיך להתבצע עד שמזהים סימן של סוף קובץ. כאשר סלמן זה מועבר למאגר של הקובץ בזיכרון, הפונקצלה הבול?אנלת (108ת7א₪07)78 תקבל ערך פטת1 (ראה גם שורה (21)). (20)-(14) קטע צה ימשיך להתבצע בלולאה עד אשר מגיעים לסוף שורה, ‏ אוה עד לסוף הקובץ, לפל האלרוע המוקדם *ותר. כדל לגלות אם מגלעים לסוף שורה, משתמשלם בפונקציה הבוללאנית: (שם קובץ)א01ע2. הערך של פונקצלה זו הוא בדרך כלל 21058 החוץ מהמקרה שהמאגר מכיל סלמן גבול שורה ואז הערך שלה הופך להלות מטת1. (16) פרוצדורה ‏ זור קוראת אלבר אחד (שגודלו תו אחד) מתוך 8מ7ת7אק1 אל המשתנה 01. כאשר קוראלם את התו שלפנל גבול השורה, ‏ גבול השורה לגיע לחלון ויגרום לכך שהביטו (1"58ת1א7₪)א₪01 לחזיר פסת1. כאשר הפלקוה חוזר לשורה (14) הלולאה תפסיק להתבצע, ‏ כל הפונקציה (מדעצאמך)אזסם החזלרה ערך מטתן. (22) כאשר קוראלם לתוך משתנה את הסימן של גבול שורה הוא נחשב כמו תו רווח. אם המשתנה הוא מסוג 088 הוא יקבל ערך של רוות ואם הוא מסוג מספר? כלשהו, המחשב *למשלך לחפש עד שלמצא מספר. בתכנלת זו לא רוצלם לקרוא את הסלמן הזה כדי שלא לתוסף אחד למונה של מספר הרווחילם ולכן מבצעים את הפרוצדורה (8דתדאמך)אזקהתת, אשר גורמת לכך שהמצביע *לדלג עד אחרי גבול השורה. כאשר גבול השורה אינו עוד במאגר, הפונקצלה הבוללאנית (11₪תץאתד)אוסת שוב תחזור להלות 72858 ונוכל שוב פעם להכנס ללולאה שמתחלילה בשורה (14). אם נפסיק את הלולאה בשורות (14)-(20) במצב של סוף קובץ ולא במצב של סו שורה, נמצא במאגר את הסלמן של סוף קובץ. אם ננסה להמשלך בקריאת הקובץ אחרי ההופעה של סימן זה נגרום לשגיאת ביצוע. במקרה כזה, אלין להמשיך בפרוצדורה א1כעגמת. הפקודה בשורה (21) דואגת לכך שאם סימן סוף הקובץ נמצא במאגר, ד"א (18חדאתך₪02)7 הוא 1808, לא נבצע את הפרוצדורה (ם,זדץידאתי )את 206 (27) פקודת סגירה של קובץ תמליל אלנה סטנדרטית ואינה נחוצה בכל מחשב. 2 פרוצדורות לקרלאה ולכת?בה נסקור שנית את הפרוצדורות הקשורות לקרלאה וכתיבה. נתחיל ב-עגתת ו-8צדַתח. ;"קובץ כלשהוא" :א תגט) עגמת מתטתתססתע | (8) ;("אלבר מתוך הקובץ" :א תג את וא =:ת (א) 687 ; פאע ;"קובץ כלשהוא" :א תגט) 178עח מתטקמססתת (5) ;("איבר מתוך הקובץ" :8 תגט אזססת ;5 =:א (א) עטק ; פא מפעילים פרוצדורות אלו ע"? כתיבה של: ( גותחמפעת ,2עמטסא) סגמת או ( הותחנפעת ,2ומטסא) מצדתט כאשר 0872א ו-גוזפעת מוגדרים בתכנלת. הקובץ % שבפרוצדורה :כול להלות כל קובץ. אם הוא קובץ 1אח1, אז ת חייב להלות מסוג 01.8, שהרל איברל הקובץ זאתץ" הם תמלד מסוג זה. אם קובץ ה-%אמ7 הוא דטפאד או עטקעע0 (ז"א לה' קלט/פלט הסטנדרטיות לקרלאה או כתיבה), אפשר להשמלט את שם הקובץ ולכתוב (68) עגמת או (68) 8צ17תח בהתאמה, כאשר 08 הוא מסוג 0748. אפשר גם לקרוא או לכתוב מספר רשומות: תת,...,2ת,21 ולא רק רשומה אחת. לטם כך לש לכתוב את הפרוצדורות בצורה זו: (חת,..,2ת,1ת2,א) סגתת או (תת,..,2ת,1ת,א) מצ[תח בהתאמה. הקרלאה או הכתיבה הינה לפי הסדר של הרשומות. תחילה הרשומה הראשונה, אח"כ הרשומה השנליה, עד הרשומה מספר ת. נובע מכל שנאמר לעיל, שבקבצי תמליל (1אע1), כולל קבצ: עשעא1 ו-עטקעטס, הפרוצדורות עגתת ו-8178 משמשות לקרלאה וכתיבה של תווים בלבד. עד עתה הטתמשנו בפרוצדורות אלו כד?ל לקרוא ולכתוב נתונים מן הסוגים אתס6שצאך, מגאתת ו-א300184 ומן הסוג תח0 ע0 צגתת בשדות ולא בתווים. לכאורה אל אפשר לקרוא ולכתוב מספרים שלמילם וממשלים אם הקבצים לטעא1 ו-01ע001 הם קבצל תמליל, אך התטובה הלא שהרחלבו את הפרוצדורות כדל שתבצענה פונקצלות נוספות, כמו שלפורט בהמשך. 207 ננית ש-7 הוא קובץ צאמ7. אם צ0קא1=1 אין צורך לכתוב זאת במפורש. נגדיר משתנים 41, 42 וכו' מסוג כלשהו. נכתוב את הפרוצדורה הבאה: (.....43 ,42 ,1א ,7) פגאת הלא תפורש ע"י המהדר בדרך זו: א1ססם ;(1א ,7) פגמת ;(2א ,7) פגחת ;(3א ,7) פגתת פא אם הסוג של המשתנה ם% הוא א084, הקרלאה הלא של תווילם בודדלם. אם המשתנה הוא שלם או ממשל, המחשב אלנו קורא תו אחר בלבד, אלא ממשיך לקרוא תוולם ע"י ביצוע חוזר של (1)1ע6 עד שהוא נתקל בספרה, או בסימן (+ או -) של מספר. הוא ממשיך לקרוא עד שהוא מזהה סוף של מספר כשבמאגר 17 מופיע תו שלא לכול להיות חלק ממספר (למשל אות, רווח, פסלק, גבול שורה, או תו מלוחד). כל שנאמר לגבי עגתת תקף גם לגב:? אזתגתת, אלא שבתום קריאת המשתנה האחרון, המצביע מתקדם עד אחרי גבול השורה של אותה שורה שבה נמצא המשתנה האחרון. 2 ככתיבה כתיבה בקבצי תמל?ל מסוג %א78 נעשלת בכמה דרכלם. נניה ש-%1 ו-82 הם בלטולי כתיבה, אשר אפשר להצלגם באחת משלוש תבניות: 8ּ 8 א (5) פ:ת:ת (6) 8 מציין בילטול ארלתמטי, ביטוי בוליאנ?, תו, או מערך של תוולם. מספר המקומות המוקצים להדפסת הערך של ביטול (הרוחב-5) הוא סטנדרטי לכל סוג של ביטוי. אך אם רוצים לשנות אותו, ניתן לעשות זאת ע"י הוספת המספר 5 (תבנלת ם"). כדל להדפיס מספרים ממשלים בצורה מקובלת ולא במבנה של מעריך ומנטיסה יש לציין את מספר המקומות 2 אחרי הנקודה העשרונלת (תבנלת ם). הפרוצדורה ‏ (...2א ,1א ,7) מ17תח תפורש כך ע"? המהדר: א .1 ,1) מקדתח ; (2א ,7) מקדא ספא כשכותבים קובץ 00120% אין צורך לרשום את 7. פרוצדורה זו גורמת לכך שהפקודה 8118 תתבצע כמה פעמים שצריך כדי למלא את הדריטות המתחייבות מכל ביטויי הכתיבה, כולל הוספת רוותים בעת הצורך. כל שנאמר לגבי 178תח תקף גם לגב: א%ש1זתח. לאחר הכתיבה של המשתנה האחרון מדפיסים תו גבול שורה, אשר גורם למדפסת או למסוף לעבור לשורה הבאה ולחזור להמטך הכתלבה. אם כותבים קובץ תמליל בדיסק, נרשמים בו תוו? הבקרה האלה. 208 שב שב =שבב לבל ש---- כב וה 3 שלפור התכנלת למצלאת מלות מפתת אפשר לשפר את התכנלת ת6מדעגא צסתדע שבפרק ‏ 10 ע"* שימוש בשלטת קבצל תמליל. תכנלת זו מצאה את מספרל השורות שבהן מופיעות מלות מפתח שהוזנו כקלט והחסלנה את התמליל במערך שהוגדר כך: ;4 07 [4ז . תו | 506] צגתתב :ו החסרונות בשימוש במערך הם שנללם: א. בזבוז מקום: המערך 580801 תופס 80,000 בתים (1000 שורות של 80 בתים כל אחת) בזיכרון. במחשבים קטנים יש הגבלה של גודל הזיכרון הפנול. ב. כמות הנתונים מוגבלת בגודל המערך: בתכנית הכתובה בפרק 10 הוגדר מערך בגודל של 1,000 שורות. לפיכך, התכנלת אינה לכולה לטפל בתמליל יותר גדול. אפשר לעקוף שני חסרונות אלו אם מגדירים קובץ תמליל ומערך של שורה אחת, באופן הבא: / ; שאמ :לאח <ותטסא וס ע0 [ד הדאג תאז 0 . 1] צתת : הט המערך 580801 כבר אלננו נחוץ. אמנם, מספר השורות בתמליל עדילן קובע את הגודל של המערך 807401, אך זהו מערך בוליאני ולכן אפשר להגדלל אותו בלל לבזבז הרבה מקום בזיכרון. רוב השלנויים בתכנלת שבפרק 10 מתיחסים לשתל הפרוצדורות הבאות: תקד (טורות (152)-(129)) (501 מאסא) ְמזתק 547גפפגא | (שורות (95)-(85)) אפשר לכתוב שתל פרוצדורות אלו בצורה שונה: א. קטע זה מחללף את הפרוצדורה בטשורות (129) עד (152): ;דד.דוידת הטעדד מתטפמססתע אזסתת (('הכנס את הקטע') אמצ1תח =:5107 מאסא 0 ₪0 דסא ₪ דט אזסתת 0 =:5084 08001 2 + 51801 פאס =:51801 האס 0כ אס צסא מתדאח אדסות ; (טא1) סגמת ; (ג , אד 2עמטסא) מצדתט + בת 0904 =:4ח50 הסמתס (ט') 0010 סצדצס =: [גת5 מסמתס] גנופ ; פא ; אוז ומת ; (דאמך 0/₪72א) אזפצדתט 0 ד זדאגון החפ הסמתס 0ך 1 0% =:1 תסע : =:[1] התחזס אמחץ 1-תמוסצאת אגדהאות 00 =< 5184 038081 ע1 דעו דד וו 209 איןו צורך בפרמטר בעבור הפרוצדורה 478401 11.07 11124 כמו ‏ *) שנדרט בנוסח הקודם של התכנלת. בנוסח הקודם הפרמטר הת?לחס למספר של הטורה במערך 580801 ועכשיו רק מחזיקים את השורה הנוכחית במערך של שורה אחת, שנקרא (5108. יש לערוד (% בפרוצדורה 78401ע.1 11007[ 2עו/ מספר תיקונים נוספים. 8 סם דעו סדוו תהעפדא 10 1:=1 תסק ₪ =: [5₪0801 פאסא] דסעסט. [ד ]הדע גא דס דוו פא ; פא ב. קטע זה מחליף את הפרוצדורות בשורות (85) עד (95): (* גם פה אין צורך בפרמטר *) ; ךמת 547הפכה מתטפמססתק (* שהיה דרוש בגירסה הראשונה. *) תג ; תתסדא :7 ;9 :טגך אזנספת ?% =:1 0 ע0ש עסא 5דזט אז6ת 7% =:1 ,1:3) מקדתט 0 אס עסא פדצחט אזספת ; (40 , דאמ 072א) פגמת (טגל) מדפח ; פא (* כדי לעבור לשורה חדשה *) ;(צאתץ 2ַמט0א) אזפגמחת (% כדי לעבור לשורה חדשה בהדפסת הפלט *) אטאט פא ;סא 2 עורר תמל?ל (*) עורך תמללל (₪61602 6א16), או בקיצור עורך (24150%), הוא תכנית שמאפשרת תיקונים בקבצ? תמללל. התמליל שנעסוק בו הוא תמללל באנגלית, כמו למטל תכנית מחשב או כל תמללל אחר. כדי להדגלם את הפונקצלות של העורך נצלג תכנית אשר מקבלת חמש פקודות ערילכה. הכינוי "השורה הנוכחלת" בתיאור הפקודות מתייחס לשורה המוצגת במסך. א. תך - העבר את ת השורות הבאות (כולל השורה הנוכחית) לקובץ החדש. ב. תא - מחק את ם השורות הבאות (כולל השורה הנוכחלת) מן הקובץ החדש. ג. 8 - הוסף שורות לפני (12) או אחרל (14) השורה הנוכחית, שהסמן מצביע עליה. 200 ד. 8 - סיים את הערלכה. העבר את שאר השורות לקובץ החדש. ה. ? - עזרה. הצג הסבר על הפקודות האחרות. אם רוצים לבנות קובץ חדטש, העורך מאפשר למתכנת להזין את תוכן הקובץ. אם הקובץ כבר קיים, העורך פועל כך: הוא סורק את הקובץ לפ? סדר השורות ומציג את השורה הנוכחלת, שהסמן מצביע עליה, בראש המסך ואת הפקודות וההודעות הוא מציג בתחתית המסך. המשתמש יכול למחוק את השורה הנוכחלת ושורות נוספות כרצונו, הוא יכול להוסיף שורות לפני שורה זו או אחרלה והוא לכול לשנות את התוכן של השורה הנוכתלת. בעורך הפשוט המודגם כאן, אפשר לעטות שלנוי בשורה הנוכחלת רק ע"* מחלקה של הטורה והוספה של שורה חדשה במקומה עם התיקונים הרצוללם. אם מטפלים בקובץ קללם, העורך מציג אותו במלואו לפנל התחלת הערלכה והוא מציג אותו תמיד בסיום הערלכה. מו הראול לצילן שתכנלת עבור עורך אינטראקטלבל חליבת להלות משולבת במערכת ההפעלה של אותו מחשב ולהתחשב בתכונות המסופים. למשל, בדוגמא זו רשמנו, שאפשר לצאת מן העריכה בכל שלב ע"? הקשת 01-0ע62מ60, אך קלימות מערכות שבהן מפסיקים את העיבוד בדרך שונה. כאן השתמשנו בקוד 2851 (81ת08610 ת406:168 6 68:6055ב558) בפרוצדורה להזזת הסמן במסוף, בהתאם למסוף שאנו משתמשים בו. אם משתמשלם במסוף מסוג שונה לש להשתמש בקוד מתאלם. תכנית העורך: ; (דטקפנטס (צטפאד ,03458 2שמטסא ,אגצגא 2דתטסא)חסמתס את | (1) תגט (2) דאתד :0104581 2עמטסא ,אגצגא 2דמטסא (3) 2דתטסא 5 ,)הצא 2דמטסא אפפ (4) ,תס עס [1..10]צגתתג כסאסגתק (5) ;0 :04 (6) פמ6מעאד :אדטהדום הקדוו (67 ;תס ע0 [1..80] צהתתג סתאסגתק :עדהסתססא גתשו5 (8) 00 :1100700 10 (9) ,1האתתדאת :(תתסמעאד :א ,צ) 5408 מתטפמססתע (10) ; (1אתד :א תבט) 078 מתטעמססתת (11) תג (12) )13( 7: זאזאא. .0 :58 (14) אזססת (15) ;(א) שמפתת (16) )17( 504:= 1; סע (א)ע0סע דסא ₪ דוח (18) אזסחת (19) (('777' ,504:4) מעדתח (20) ; 510+1 =:08ה5 (21) סע (א)אתסט דסא ₪ דזחז (22) אזסטת (23) ;(טגד ,א) סגחת (טגץ) מדדתט ; פא ;(8) אנפגחת אזטדזתט פאא ; פא ; תע מתטפמסססק אזססת () ספא ;('העורך מקבל את הפקודות הבאות: או > אטאט ; א זטידתח :('? ') אזוזזת ;'('ת 71 העברה של ת שורות לקובץ החדש"') אזמדזתח (('ת 8 מחלקה של ם שורות 0-7 אנת ;('ם א :5 התהתהרהרהרהרהרר- הדפסה של הודעה זו הכתריתהררהרהרהררה הוספה של ת שורות שי לי אזא זו סלום העריכה" 0 אזטדנתט (24,1) 5401א ; פא ; תש 24637ץיזן מתטספססתק אזסעת 01 ') אזטדדתט ; (000₪17א תחז5) מנדתו (24,1) 15408 ; פא היכיכררררררר ררה רהה ריר ;('השורה הנוכחלת (* כתיבה *) ; 51 /0עא מהטסמססתק תג ; ת6מעא :1 א סע אזטאד זא 70 1 =:1 תסע ([1]ד1סוססא התנופ ,5הס א 2 לטסא )מדדידאחו ; (042458 2דמש0א) אזמזתח אמח (אצא 12מ/0א)עסת תד שטתץ =:108707 10 ;פא (* קרלאה *) ;א התא מהטסעססתק תג ;את :1 ,ך אזסטת =:1 סע (1ו3צ/א 2עמטסא)א1סם עסא םדוא אזסטת ; ([1 ]דדאסהססא גתנ1ם ,הצא 2דמטסא)פגמת 1 =:1 ;פא 22 )28( )25( )26( )27( )28( )29( )30( )31( )32( )33( )38( )35( )36( )37( )38( )39( )40( )41( )42( )43( )48( )45( )46( )47( )48( )49( )50( )51( )52( )53( )54( )55( )56( )57( )58( )59( 660( )61( )62( )63( )64( )65( )66( )67( )68( )69( 2 =:א1טד 48ק6דון . 0 80 10 =:1 פסק :7 =:[1]1דאסאססא 508 ; (מצגא 2צמטסא) אזפהחת גת 2647דת ; עאם ;(1אתך :א תגט) בת5 אתדגע מתטפעססתק תג ;,תגתס :טג אנסעת 0 (א)א0ם עסא פמזצח אזסתת ;(טגץ ,א) סגחת (טגץ ,5התצ0 2דמטסא) מדתט ;פאע ; (8)א,זפאחת (458כ03 00872א) אתמדדתט - ; פא ; 'ססטאקמם מטסעדד מתטפמססתע תג ;סא :1 ,510807 תהקפדא ;תג :בוד ,תסדהתתקס ;00 :101 50% אזסתת ; אז דח (('תוכן של הקובץ הקללם ***') אמתדדתח ; (אהצא 72ש0א) אפס ; אזטדזתח ; א זטדזתח ('הקטש אתטסעעת כדל להמשלך ‏ ***') אשמעדתח ; אזתחת =:428101 50% ; (4צ< 0/₪72א) צמפטת (* הצבת הסמן ומחיקת מסך *) ,19-) 5401 ;('העורך מוכן אאא') א[תדזתח ;('הטורה הנוכחית מוצגת למעלה | ***') אשמעזתח (('כדי להפסיק בלי לסילם, לחץ על 01-6עשת00') אמדצדתט עס התא ץמקתת ;(1 ,24) 5401 ;('בחר באפשרות אתחת:') 178תח , (0ת1)1058 , (תדטגך)ע') מודתט ; ('(0294)? , (04צ5051 , (באזז0קו)ו ; (4708ת020) אזפגמת 0 108 סקס 6458 ;תלת :'?! (* העברה *) אזסתת :'7' ;('כמה שורות להעביר?') 8ד1אח ; (0801ז5 15248א) אתזסגות )70( )75( )76( =:ך טסדא סאג (צא 2צתטסא) עסם צסא מודאט סע (510801 ת4ת5זא > 1) אזסעת ; הצא 2דקט0א) גתט5 אמדגא 1 =:ך ; פא אפחך (אאצגא 2צטסא) עסם צסא חך גושז5 התא כו אזססת 1) פא :('סוף הקובץ הקיים') אממדדתט מטאץ =:/110810 10 פא (* העברה *) ; פאק (* מחלקה *) את :'א' :('כמה שורות למחוק?') מעדתט ; (51001 תגק5ד1וע) אזפגטת 0 =:17 (מאצגא 2ומטסא) עסע צסא אנט 0 (50001 תגפפזא > 1) פאג אזסטת ; (4צ3א 2?ומטסא) אעפאתת 1 =:ך ;פא אע (4אצהא 2<צמטסא) עסם עסא תד אתזו5 התא כו אזסאת ,20-) 5401 :('סוף הקובץ הקיים') א[מחדחט שת =:/1210810 10 פא (* מחלקה *) ; פא (* הוספה *) אזספת :'7' :('הוסף שורות כרצונך ‏ ') אממדזקט :('לסיום הקש 01-2ע8ת00') א[תדדתט דהמקותת ;)('הוסף לפני (1) או אחרי (2)') אממדזתט ;(' השורה הנוכחית ו ') אזתצנתט אוד ע0ד110 10 צסא פאג (''=הטטטפך) קד :הח שסצע 0 סע עסא דא (1טעא1) התחפ אחדגת אצפאך 11040 10 סא פאג ( '04='1שאפד) עד 208 )119( )120( )121( )122( )123( )128( )125( )126( )127( )128( )129( )130( )131( )132( )133( )1368( )135( )136( )137( )138( )139( )140( )141( )142( )143( )146( )185( )146( )147( )148( )149( )150( )151( )152( )153( )154( )155( )156( )157( )158( )159( )160( )161( )162( )163( )164( )165( )166( )167( )168( ; 4ותחז5 טסעא (169) אמחזצד (אצא 2צשטסא) עסם דסא עד (170) תחפ התא (171) (1טפא1) צמפעת (172) (* הוספה *) ; פא (173) (* סיום הערלכה *) אזסתפת :'פ' (174) ;('הקובץ החדש: ',082351 קשמטסא 5% )מדדתו (175) אמח /10₪10 20 צסא עד (176) ; 509 טסצא (177) 0 (אגצגא 2צמטסא) ססט דסא מזדאט (178) ; (א4צא 2עפטסא) תט5 אחדגתע (179) מטתץ =:ה6זת 50 (180) (* סלום ערלכה *) פא (181) (* סלום 64858 *) פא (182) (* ץגמקחת *) 101 50 מדצאט (183) (* טלפול בפקודות *) פאם (188) ;4צאם מטקדץ| מאטסמססתק (185) : תג (186) זאד :ד (187) את (188) ;('מהו השם של הקובץ הקלים? יידיייי!) אמדדתח (6189 ; (א4צא 2דמטסא 5881) אמסגתת (190) ,הצא 2דטסא 5 ,הצא <עמטסא) צספסת (191) אאחד 160 עד (192) ('אין קובץ בשם זה. נסה שוב') אמתדדתחט (193) 8 (194) דססטאקטם טפדיך (195) פא (196) (* התכנלת הראשלת *) אזסמת (197) ,19-) 601ג5גא (198) (('מהו שם קובץ הפלט?') | אמד1תח (199) (014358 2[מטסא אמחפ) | אתפגחת (200) ; (0058 2דמטסא 1מה5 ,הפהסגחס <שמטסא) מצדומת (201) דמפתת (202) ;('האם קלים קובץ? ענה כן (א) או לא (ם)') אסמצנתט (203) (58008ד) אעסופת (204) ; (''1'= )05 ('א'=ג/ )1500‏ תדדאט (205) אפ 'ע'=ג/תפד עך (206) אזספת (207) (;('הוסף שורות כרצונך') אשמעזתטחט (208) (('לסיום הקש 01-2ע6מ60') אשמצדעח (209) 00 עסם דסא ₪דוחו (210) (צטפא1) התחזם אמדגת (211) פא (212) כ (213) אאצהאת מטקד (218) ; א זחיך ו (215) ; זי (216) 25 ;('תוכן של הקובץ החדש ***') | אזמדדתט (217) (040458 2דמטסא) 4 (218) .אע (219) הסבר: (219)-(197) התכנית הראשלת. (198) משתמשלם בפרוצדורה למלקום הסמן, כפל שהוסבר בפרק 9, בסעלף על פרוצדורות לשליטה במסוף. תפקידה של הפרוצדורה למקם את הסמן בעמודה הראשונה של שורה 19 במסך. הסימן השלללי מציין שרוצים למחוק את המסך לפני מיקום הסמן. (201)-(200) שתל שורות אלו מתאלמות רק למערכת שבה אפשר לקרוא את השם החיצוני של הקובץ החדש בזמן הביצוע (שורה 200) ולהשתמש בו כמטשתנה בפקודת מ17תחמת (שורה 201). (205)-(202) בקטע זה מבקשים תשובה לשאלה. אפשר להשלב באות אחת, א או ם, אך מותר גם לכתוב מלה שלימה: אמא או 10. מכיון שהמשתנה 19180 מוגדר כסוג ת080, אין קולטים כל מה שנכתב אחרל א או . (212)-(206) אם אלן קובץ קלים, התכנית מאפשרת רק פעולת הוספה, אשר מבוצעת בצורה איטרטיבית בשורות (210)-(211). | עוברים לפרוצדורה ותחזס אמדגת (76-87), שקוראת תווים מקובץ תמליל א כלשהו, כאן - קובץ צטעאך. הקריאה של כל תו בנפרד נעשית לתוך משתנה בשם /14 (שורה 82), ומיד כותבלם אותוּו בקובץ החדש. כאשר מגיעים לסימן של סוף שורה בקובץ הקלט %, מסלימים את ההעתקה מ-א% (80), מקדמלם את המצביע עד אחרל תו זה (85) וכותבים סלמן סוף שורה בקובץ החדש (86). (214)-(213) אם המשתמש | מבקש לטפל בקובץ קלים קוראלם לפרוצדורה אאצא3 מטע11 (185-196). בפרוצדורה זו מבצעים פקודה מלוחדת למערכת שבה מריצים את התכנלת. / בטורה (191) כוללים בפקודה 205%% את השם של הקובץ הקלים שקוראלם בשורה (190) וגם את הפרמטר 1 אחרל שנל פסלקים. אם מנסים לעטות זַמפעת לקובץ שאלננו קללם, מקבלים בזמן הביצוע הודעת שגיאה. המשתנה 1 מורה למערכת ההפעלה לא לשלוח הודעת שגלאה, אלא לתת ל-1 ערך שלילל ולהפסיק בכך את הביצוע של התכנית. ע"י כך אפשר בשורה (193) להודיע שאלן קובץ קללם ובכך לסלים את התכנלת. אם הקובץ קיים עוברים לפרוצדורה צסעטאקחם מטקדך (88-184), כדי לתרגם את פקודות העורד. : (1848)-(88) הפרוצדורה עסשטאקטת משקדץ: פרוצדורה זו בנולה מחלקים אחדים, בתוכם גם פרוצדורות אחרות. מתח?לים בביצוע הפרוצדורה 018% (11-30). היא דומה מאוד לפרוצדורה 5808 אתדגע שתיארנו קודם, עם השינויים האלה: א. היא מעבירה מקובץ תמליל א למסוף ולא ל-0132258 2דמטסא. ב. בזמן הכתיבה הלא מוסיפה מספרי שורה. ג. הלא מעתיקה את כל הקובץ ולא רק שורה אחת. 206 הנתונים מהקובץ הקללם מוצגים על המסך לעיון המשתמש. להמשלך, הוא הליב להקיש | אתטצתת (זוהל תוצאת הפקודה אםסגתת בשורה (100)). אח"כ פותחלם את הקובץ הקיים (102), שנסגר לאחר שנקרא עד סופו בפרוצדורה 078%. בטלב זה קוראלם את השורה הראשונה בקובץ הקיים ומצלגים אופה במסך (107). הפרוצדורה שעושה פעולה זו (60-75) קוראת מן הקובץ עד סוף השורה וטומרת במשתנה 71/11 150.8 (70) את מספר התוולם בשורה. משתנה זה הוא משתנה גלובלי, כ? נצטרך אותו בזמן כתיבת השורה לתוך הקובץ החדט. הטשורה המוצגת על המסך (7ד00808א 58084) היא בת 80 מקומות. כותבים במקומות הרלקלם תוול רווח (71-72) כדי שלא ישארו בהם תווים מן הטשורה הקודמת. הפרוצדורה הזו קוראת לפרוצדורה אחז5 111124647, | שמצלגה את הטורה במסך (טורה 74). 7 (108-183) לולאה זו מטפלת בכל פקודה בנפרד. מצלגים את האות הראסונה בכל פקודה (לפל הפירוט שבשורות 112-111) ולפי תשובת המשתמש נקבע מסלול ביצוע התכנית. (115) אם התשובה היא ? (סלמן שאלה) מסתעפים לפרוצדורה 25 (31-42) שם מתוארות הפקודות השונות. (116) אם התשובה היא 1 (העברה) שואלים את המשתמש כמה שורות הוא רוצה להעביר (117) ומעבירלם בהתאם. תחילה מעבלרים את השורה שנמצאת עכשלו ב-0080817סא (א570. העברה זו נעטשית ע"? הפרוצדורה 580 ע10א (50-59). הלא מנצלת את המשתנה הגלובלל אנטגד תפדוי שמכיל את מספר התוולם בשורה 0080811א גא580, כדי לדעת כמה תווים לכתוב בקובץ החדט. אם השורה שמעבירים מ-0080817א 51084 אל 02 היא השורה האחרונה בקובץ, לש למנוע את הפעולות הבאות, אשר לוצרות מצבל שגלאה: א. קרלאה של שורה נוספת מן הקובץ הקיים לתוך 06080817א 81084. | כדל למנוע זאת בודקלם בטורה (127) אם נמצאים במצב של (44+א <עַמט0א)תסע לפני טמבצעים את הפרוצדורה חן 4תא. ב. כתיבה של השורה שנמצאת ב-0080817א 88084 כאשר נמצאים בסלום התכנלת לתוך הקובץ החדש על אף שכבר כתבנו אותה. קשה להגן מפנל שגיאה זו כל גם אם (א34צ4א 872ע0א)₪0 הוא 1808, יתכן שהעברנו את השורה האחרונה מן הקובץ הקיים ל-0080811א גא580, אבל עוד לא כתבנו אותה בקובץ החדש ואז צרלך לכתוב אותה בסיום התכנלת. הפתרון הוא לתת ערך 08אך למשתנה הבוליאנ: 110810 10 אחרל שמעבירים את השורה האחרונה בקובץ הקללם מ-060817סא 5104 אל 0842458 2ַשט%0 (שורה (58)-(57)), או אחרי שמעתיקים את הסורה האחרונה מן הקובץ הקיים אל הקובץ החדש (טורה 133). לא נותנים ערך 08א1 למשתנה 1108100 10 מיד עם קרלאת השורה האחרונה (בפרוצדורה גתח5% 84א). (126)-(119) המשתמט מבקש להעביר ם טורות. מעבירים תחילה את הטורה הנוכחלת (120) ואח"כ את 1-םת השורות הנוספות מן הקובץ הקללם ישר אל הקובץ החדש (126)-(121). 207 (128)-(127) לאחר שמעבלרים לקובץ החדש את השורה שהופיעה במסך עם 1-ת שורות נוספות, צריך להציג בו את השורה הבאה לאחר שורות אלו, כל עוד יש שורות בקובץ. (133)-(132) אם לא נשארו טורות בקובץ הקלים מודיעים זאת למשתמטש (132). כזכור, הופכים את 1108104 10 ל-מטסץ כדי שלא ננסה להעתיק פעם נוספת את התוכן של ₪60817ססא 5084 לקובץ החדש (133). (154)-(136) כדל למחוק ם טורות צריך לבצע שתי פעולות: א. לא להעביר אל הקובץ החדש את השורה שמוצגת במסך. ב. לקרוא 1-ת שורות מהקובץ הקילם ולא לכתוב אותן (140-145) בקובץ החדש. (147)-(146) במקרה טיפוסי צריך להצלג במסך את השורה הבאה מהקובץ הקללם. (153)-(148) אם מוחקים שורות עד לסוף הקובץ הקיים, צריך להודיע זאת למשתמטש (151). כדי שהתכנית תדע עובדה זו ולא תנסה לכתוב אח"כ מתוך האטתס, משוולם את המשתנה הבול:אנל 10 ל-מטתך (טורה (152)). (173)-(155) בפעולת הוספה לא צריך לדעת כמה שורות המשתמש רוצה להוסיף, אך חליבים לדעת אם הוא רוצה להוסלף אותן לפנל או אחרי השורה הנוכחלת (158-162). אם הוא רוצה להוסלף את השורות החדשות אתרל השורה הנוכחלת, כותכים את השורה הנוכחית לתוך הקובץ החדש מיד (164-165). בכל מקרה, חייבים להעתיק שורות מן המסך לתוך הקובץ החדש (166-167). אם מכניסלם את השורות החדטות לפנל השורה שהיתה שם קודם, צריך לכתוב את הטורה הנוכחית לתוך הקובץ החדש (168-169). אם לפני הוספת השורות לא נמצאים במצב של ח₪0, מציגים שורה חדשה במסך (170-171). בכל מקרה, מצב חדטש של שסק בקובץ הקיים לא יכול לקרות כתוצאה מהוספת שורות. אבל, כתוצאה מההוספה נוצר מצב ע20 בקובץ צטקאך (מלות המקשים), כל מסיימים את הכנסת השורות ע"י הקשה של 5201-2ם60 שמפעיל את (1שקא209)1. לטם כך מכבים מתג זה בפקודה [עפאת (172). (181)-(174) בצזמן סלום הטיפול | בקובץ כותבים | את השורה שנמצאת ב-0000011א תעח5 אל הקובץ החדט אם לא כתבנו אותו כבר (176-177) ומעבירים את שאר השורות מהקובץ הקיים (178-179). לאחר מכן מדללקים את המתג שמצלין את סיום העריכה (180). (183) סיום רגיל של התכנית (לעומת סלום כפוי ע"כ 06 נעשה רק כאשר המתג 43108 807 נדלק. בסיום התכנית מציגים במסך את הקובץ החדש (217-218) כדי שהמשתמש לוכל לעלין בו ולבדוק את השלנויים שערך. 208 4 תרג?ללם 21 שאלות (1) (*) איך תשנה את העורך שהודגם כדל שהוא יאפטר פקודה חדשה לבלצוע החלפה של מחרוזות תוולם. מבנה הפקודה: 2 11021 /5 הפעולה היא החלפה של התווים אשר במחרוזת 1 טשבטשורה הנוכחית, בתוולם אשר במחרוזת 11.071802272. (2) (*) עליך לטנות את התכנית עבור עורך כדל שיהיה אפשר לנוע בלן שורות התמלליל לפנלם ולאחור. אפשר להכניס את הקובץ הקיים לתוך מערך ולהצלג בכל פעם רק 15 שורות תמליל כשבראש כל אחת ניתן מספר השורה. את פקודות העורך אפשר להציג בתחתית המסך. השתמש בפקודות העורך הבאות: ם ?| התקדם ם שורות. ם | נוע לאחור ם שורות. 12 כ מחק משורה 1ם עד שורה 2ם (כולל). ם (3+ 4 הוסף ם טורות לפנ? (""), או ם (4+ אחר:< ("4") השורה הנוכחית. 1:2 0180272 11/ 0103028771 6/4 החלף 140702271 ב-002872 ו משורה 1ם עד שורה 2ם. םּ סללם. הפקודה 7 כבר אלנה נחוצה, כי כל הקובץ מוחזק במערך בעת העיבוד ומועבר כולו לקובץ החדש בסלום העריכה. 2 תכנלות (1) כתוב תכנית שתטעלן את המשפטלם הבאילם לתוך קובץ. שים רווח אחד בסוף כל משפט ושנל רווחים לפני כל פלסקה חדשה. פפפט דגא מאדח6א 4 15 תמלטק60 גאדת 16אסתדסט,זע 16ד4אסצט מזד 6 ג אד כמפפמתקאם דא חיז זטק1אא 10 01800115 0780816 5 .צגט סמאד1אתתדתסעתע 4 אד 8ם,ת 16ע52001 10 6א21ת4600 %אסע .תנחת א1 5דאד אד פא אתסעתמתק א63 12 פאגתא 5דחץ .מאז0 ו 4 18 תמץטק00 פחד 412 עס צפתדע אמתת פטגה 5מדדד 62211 84516 מ אסנ תסע 4071717185 7058 צתאס שאדז 1 חח 10א1 פתא6דפע 5200121040 , פ78תד5 65א0 לצד 5אגוון פד .40016 15 תמדטע 60 שח , צפא5000 . פסאמתמעאמעאך מסדפינטס עטסמינוו אטת 20 5מטא1צא00 177 זע ע0 עט מעגא 18 12 ,18 דהחד :10אסתדסתתע 158 עד , צזסתזתך צאט .1010104ע אס פאטת פא4 61860175 פמ טפדאא 11 . אס1גזטתקזאג 1 ( 15 תתעטקא00 מחד , צודתטסע . צסתחאט םג6דפצת דסא , גדה , א10ידסעג ע0 558₪5פ6סתע מ צתאס אתסעתסתק אג6 תמדטקא00 מא ,הדענע א0סזספג א ,001508 פאג א1510ט1כ ,א164210.זפדי/זן , 5078461108 00 אממוואת תמעפאגתל גדגע 10 209 עס 5000 מצזאנע ג מתהקמתפק 71 ( תמוןת6סתק מזך) אס ,הדאזפ ו פחדך תסע (6844סתקע ג) 5 בהבגטפ1טדפא1 מתתהאס.1ה שח .סע סי צתסואמ אחס 115 אנמצצא אגתססתתק מנד מתסדפ א6% תפצטק0ס6 מצד , צןזאאד תמצוע פטס א10צסטתנע אס 5 המפאט הסטסתד עד אסמעסע אפחץ פאג .8 (2) כתוב תכנית שתקרא כקלט את הקובץ שבנית בשאלה (1) ותדפיס אותו בשורות שאורכן א מקומות. את אורך השורה לש לקבל כקלט. המשפט הראשון בכל פיסקה צריך להתחיל במקום החמלשל בכל שורה. אסור לחלק מלה בין שתי שורות. (3) כתוב תכנית שתחפש מללם בקובץ ותדווח עליהם. התכנלת תקבל מלה אחת, למשל 00%90788 ותדפיס: א. את מספר הפעמים שמלה זו מופיעה בקטע. ב. את 20 התווים שקודמים למלה זו ואת 20 התווים שאחריה. השתמש כקלט בפיסקה שבשאלה (1). (4) (*) כתוב תכנית לשאלה (7) שבפרק 11 והשתמש בקבצי תמליל. בדרך זו תימנע מהגדרת מערך באורך של 20 לכל מלה שתופיע באינדקס. (5) כתוב תכנית שמוצאת בקובץ תמליל כלשהו, את:- מספר השורות. אורך מלנימלי של שורה. אורך מקסלמלי של שורה. אורך ממוצע של שורה. (6) (*) כתוב תכנית שמקבלת כקלט: * שם קובץ המורכב מרשומות. " משתנים שלמים ג ו-8. התכנית צריכה לבדוק אם הקובץ ממויין לפל השדה שמתתיל בעמודה 4 ומסתללם בעמודה 2. אפשר להניח שנתון: 8-620. (7) (*) כתוב תכנית להכנת פלט הדפסה (70208%662) של קובץ תמליל באנגללת. התכנית מאפשרת להקים קובץ תמללפ ולהוסיף בו הוראות שתתורגמנה בזמן ההדפסה ע"י מערכת ההפעלה להוראות למדפסת. ההוראות תכתבנה תמלד בראש שורה נפרדת, לפני השורה שהן תפעלנה עללה. * דלג על ח שורות בזמן ההדפסה מפ* * התחל פיסקה חדשה והשאר ם רווחלם חץ* * מרכץ את השורה הבאה שהלא כעין כותרת 0 בתחילת קובץ התמליל לכתבו שני משתנים 2 ו-5, שמשמעותם הלא: 4: הרוחב של כל שורה הוא עד 4 מקומות. אסור לקצץ מלה ולכן לפעמים הרוחב להיה פחות מ-. 8 דלג 85 שורות בין שורה אחת לחברתה. דלג 8 שורות בלן פיסקה לפיסקה. 100 פרק 14 קבוצות 4 הגדרה קבוצה קבוצה (566) מוגדרת במתמטלקה כאוסף של עצמלם (0516058). באות | למשל, נסמל קבוצת תלמידים בכיתה ובאות 8 נסמל קבוצת חפצים שנמצאים בחדר. העצמים שמרכליב?ם את הקבוצה נקראים גם אלמנטים (65ת0ח216), או איברי הקבוצה. הגדרה של קבוצה בפסקל מוגבלת לותר מהגדרתה במתמטלקה, כפי שנראה להלן: א. איברי הקבוצה חללבים להלות מאותו סוג. למשל, הם *כולים להיות תוולם מסוג 0845 או מספרלם שלמלם, אבל הם לא *כול?ם להלות משנל הסוגים. סוג האלברים נקרא סוג הבסלס (6קץ1 2858). אלברי קבוצה בפסקל צריכים להיות סודרלם (81ת0:81) וניתנים למלון בסדר עולה. דרילטה זו מוציאה מן הכלל מערכלם ורטשומות, שהריל אל אפשר לקבוע בלחס למערך או רשומה אם הוא קטן, טווה או גדול מחברו. נתייחס למשל, למערכלם דו-מימדיים . ו-2. ננית: [4]1,1[>8]1,1 וגם [4]1,2[<5]1,2. במקרה כזה אי אפשר לומר מהו היחס בין מערך 4 למערך 5: האם 2 קטן מ-8, גדול מ-8 או טשווה לו. מצב ‏ דומה *כול לקרות ביחס לשדות מקבילים ברשומות 4 ו-5. אפשר לסכם דרלשות (א) ו-(ב) ולומר שאיבר? קבוצת פסקל חליבים להלות סודרים ומאותו סוג. שתל דרישות אלו יחד מבטלות את האפשרות שקבוצה בפסקל תכלול את אותו האיבר פעמלם אחדות, שהר? בסדר מלון מסוים, אלבר כלטהוא לא לכול להופלע *ותר מפעם אחת. איברל קבוצת פסקל לא יכולים להיות מן הסוג מגמת. הסיבה לדרלשה זו הלא שבזיכרון המחשב מוקדשת סלבית (31%) אחת לכל אלבר פוטנציאלי בקבוצה, בטעה שגודלה של קבוצת המספרים הממשיים שלכולים להיות מלוצגים במחשב הוא אלנסופל. אל אפשר להקדיש מספר סופי של סלבלות בכדל לייצג קבוצה זו ולכן גם אל אפשר להגדיר אותה בפסקל. 201 .0 הצהרה ליה של קבוצות כדי ליצור קבוצה לש להצהיר תחילה על סוג האלברלם, אשר כלולים בה: סוג אלברים פשוט הוא סוג הבסיס. הוא מזהה את כלל איברי הקבוצה באחת מ-3 דרכים: א. התייחסות לסוג המוגדר מראש: למשל, 0808 או סוג שהוגדר בהצהרת מקצץ. ב. מנייה: פלרוט של כל איברי הקבוצה. ג. קביעת תת-תחום של סוג אשר כבר מוגדר. הצהרת הסוג לכולה להופיע בהצהרת 128 או בהצהרת 08 מללד לאחר הנקודתללם שרשומים אחרל שם הקבוצה. נציג דוגמאות תכנות אחדות כדיל להסביר את הגדרת הקבוצה. דוגמא ראטשונה (צבעלם): מקצדך ; ((%001 ,20 ,אסכ ) =זאסח5דת ץם?ך 15 2/4 חס 501 =א1טמקד דג?דטטא תג 'ג2עסטא :אך1טך בדוגמא הזו, המשתנה הקבוצת:י 128%41% הוגדר בשלושה שלבלם: תחילה מצהירים על הסוג שנקרא 1א1580ת (/ק2ך, אח"כ -- על 20/18ץ [2?צטטא כקבוצה המורכבת מן האיברים אשר מרכלבים את [א21580 ג/128. לבסוף מצהלרלם על המשתנה 41%/מ2 כמשתנה קבוצתי, שלכול לקבל בכל עת אחד מן הערכלם האפשריים של 72804186 [ג2צטא. מה הם הערכלם האפשריים של 7120/14 צג2?דטטא? נתאר קבוצה ע"י פלרוט אלברלה בתוך סוגריים מרובעים. רשימת הקבוצות האפשרלות המורכבות מן האלברלם של 1501 2004 רשומה למטה. אם וכאשר יש ערך למשתנה הקבוצתי 128/214, ערכו חילב להיות שווה לאחת מן הקבוצות האלו. קבוצות בנות שלושה אלברים קבוצות בנות טנל אלברים [6₪01א ,230 ,אספג] [טס24' ,אספג ] [001א , אסכ ] [001 א , סיד ] קבוצופ בנות אלבר אחד קבוצות בנות 0 איברים [ 0 ] 2 [ 200 ד] [0₪01א] 1402 קבוצה בת 0 אלברלם נקראת קבוצה ריקה (56%5 ע6קחת). קבוצה זו מהווה אחד מן הערכים האפשריים של כל משתנה קבוצתל. הסדר לפלו רשומלם אלברל הקבוצה אלנו חשוב, כל הקבוצה הינה אוסף בלתל מסודר של אלברים אטר ניתנים לסלדור. לכן נוכל לרשום את השלויונות הבאים: = [400, 121100 61101 ] = [,1601א, 2400יד, אספג ] = [/24110, אסכ , .6101] [/10 ,110 א, ספא ] = [,0801א, 220 , 24₪0%ד] = [2004, .001 א, 20 ] רסימת כל הקבוצות שאפטר להרכלב מסוג הבסלס היא קבוצת העוצמה (56%6 :20%6) של סוג הבסלס. אם לט א אלברלם בסוג הבסיס, גודלה של קבוצת העוצמה שווה תמיגד 5-2%. בדוגמא זו א שווה ל-3 ולכן גודלה של קבוצת העוצמה הוא 27=8. הצהרת משתנה בקבוצת אז יכולה להיעשות בשני שלבים, או אף בשלב אחד, במקום בשלושה שלבים הרשומלם למעלה. ההצהרה בטנללם או בשלושה שלבים מאפשרת להגדיר כמה משתנים על סמך מה שהוגדר ב-מקצץ7. הצהרה בשנל שלבלים: מקצך ; (40801 , 1241100 ,420%) =1א500זת /ט2ד תג דאסאפדת 7280 עס 57 :אד/מ2ך הצהרה בשלב אחד: תג ; (,40801א , 7241107 ,20% עס 5 :אד דוגמא שנילה (אותלות): שקצך ;'2'..'ג' =071%07 00 0 581 =01צד0 דע תג ; 0צד0 ד2ענתוא :א 5 בדוגמא זו, הקבוצה 07101 הוגדרה כתת-תחום של התווים מסוג 8ג68. גם כאן אפשר הלה לקצר את הגדרת המשתנלם הקבוצתלים % ו-תםט10א לשנל שלבים או אפילו לשלב אחד. המשתנלם ו-%10/87 מליצגים את קבוצת האותלות שמשתתפות בשם מסולם ובכתובת מסוימת בהתאמה. בנייה של קבוצות בנלית קבוצה הלנה הצבת ערך למשתנה קבוצת?. את איברל הקבוצה רושמלם בתוך סוגרלים מרובעים בצד ימלן של פקודת ההשמה. אם חלק מאלברל הקבוצה שליכלם לתת-תחום של סוג הבסיס, מ-א עד צ למשל, אפשר להשתמש בסלמון צ..א. דוגמא: מפצ (דמגצופ, דפ דה5, דופ דונצוס, צמדעדת, דו51 ד דז5 , 5 , אס דת) =אסץצ אסצ 09 587 =ותווגצ ד24דטטסא 33 תג 17 2דטטטא :תאזו דגושצ ,גטגח5 ע50 ,(תסמס דאאמצ פקודות הצבה של ערכים התחלתיים למשתנים הקבוצתלים: ; [ 11151 , צמדטדת, ד5ד.51, דאו51, אספדת] =:תסמ0 צגאחצ (1) ; |[ ,501587] =:גסטגח5 ע50 (11) ;[(1א5000)580 ,1א58] =:פגתפדא צגאעצ (דדד) ניתו לקצר את פקודת ההצבה (1) ולכתוב: [6115₪1. . .אס₪פדת] =:מסא6 דגומצ גם את פקודה (11) ניתן לכתוב כתת-תחום, אבל אין הלסכון במקרה הזה. פקודה (דדך) מדגילמה את העובדה שאלבר? הקבוצה לכולים להופיע כבלטויים ארלתמטיים או כפונקצלות, כל עוד ערכם הסופי שייך לסוג הבסיס. דוגמא נוספת לכך נראה בהמשך: תג ...ג עס 587 :ע0צדק0 :1תא2 תגע5זון אזסעם ; (דגתאג תת5דון) סגמת :תא תד + ('ג' )00 0] =:עסצדינס ; פאע אם עובדים על מחשב שפועל בקוד 45011, סכום הקוד של '2' (כלומר ('ג')5אק0) ומספר אקראל בין 0 ל-25 יתן את הקוד של אות כלשהלא בין 'ג' לבין '2'. כאטר מפעילים את פונקצית ‏ 088 על אותו קוד, הקוד הדצימל? לוחלף באות המוצגת על לדו והקבוצה 01101 תכלל את אותה אות. דוגמא: תגט 5% ק0 58 :א א [ 1*1 ,12 ,1+1..1] =:א א מכיל את הערך 12 אם 164 ,1=3. % מכיל את הערכלם 12, 15 אם 5 ,1=3. א* מכיל את הערכים 4, 5, 12, 15 אם 3 ,1=5 2 השוואה של קבוצות 1 אמאופרטורים לחסלים וקבוצות חלקיות בעזרת אופרטורים (850%8ת6ק0) מתאלמלם ניתן לבצע את הפעולות הבאות: 204 א. השוואה בלן שתי קבוצות בכד? לבדוק אם הן זהות. ב. בדיקה אם קבוצה אחת מוכלת בתוך קבוצה אחרת. ג. בדיקה אם אלמנט כלשהוא שליך לקבוצה מסולימת. טבלת האופרטורים נלתנת להלן: אופרטור הכלת הקבוצה משמאל לסימן בתוך הקבוצה מימיו לו הכלת הקבוצה מלמלן לסימן בתוך הקבוצה משמאל לו א. התוצאה של הפעלת האופרטורים שמופיעים בטבלה הלא ערך בוליאנל. ב. הבלטוי 4>=2 מתייחס להכלה של 4 בתוך 5, וערכו של הביטוי הבוליאנל הוא אשת אך ורק אם כל אלבר ב-4 שייך גם ל-5. כאשר תנא? זה מתקלילם, 4 נקרא (במלנותח מתמטל) קבוצה הלקלת (5566ט5) של 2. בתורת הקבוצות, ‏ לחס זה מסומן כך: 455. ג. הבלטוי 2<=8 מתייחס להכלה של 8 בתוך , וערכו של הביטול הבוליאנל הוא מטתץ אך ורק אם כל איבר ב-8 שליך גם ל-4. כאשר תנאל זה מתקיים 8 נקרא קבוצה חלקית של (4. ד. שיויון, או זהות, בין הקבוצות ( ו-8 קללם כאטר 4>=8 וגם 2<=8. כלומר, כל אלבר של 4 נמצא גם ב-5 ולהיפך. ה. כאשר משתמשים באופרטור א1, האופרנד השמאל? תילב להיות ערך סודר (אורדינלי) השייך לסוג הבסיס, שנקרא לו 1. האופרנד הלמנל תללב להלות קבוצה שהסוג שלה הוא: 1 07 581. הערך הבוליאני של התנאל הוא 08ת7 אם הערך הסודר בצד שמאל שייך לקבוצה שבצד ימלן, אחרת הערך הבוליאנל של התנאל הוא 24068. לדוגמא, הערך של התנא? שמופיע למטה הוא משתך: 4 [3..5,7 ,1] את 4 אפשר גם לכתוב [4[>=]1,3..5,7], אבל הללצוג הקודם של התנאל הוא יותר ברור ופשוט. ‏ אם רוצלם לבדוק בו בזמן את השייכות של 4 וגם של 8 לקבוצה, כאשר 24><8, יש לנסת את התנאל באחת מתוך שתל הצורות הבאות: 105 עאג [1,3..5,7] א1 2 | (פ5) [1,3..5,7] => [9 ,4] | () [1,3..5,7] א1 2 במקרה הזה, הייצוג הראשון לותר פשוט וברור. הקבוצה [1,3..5,7] יכולה להופיע בתכנית בלי הצהרה מראש ואז הלא נחשבת כקבוע קבוצת? (5ת568ת00 5685). ההצהרה נחוצה רק עבור משתנה שבמשך התכנית לוכל לייצג קבוצה בעזרת פקודת השמה, כמו למשל [42:=]1,3..5,7. נניח שקילמת הצהרת 748 הבאה: תג 5% ת0 עפ :6א,5א,4א,3א,2א,1א בתפוך התפכנלת בונים בעזרת פקודות הצבה את הקבוצות האלו: שם תוכן הקבוצה תיאור הקבוצה הקבוצה 41 [6,12,18] כפולות של 6, עד 20 2 ידִיחסים בין קבוצות ננתח יהסים שונים בין הקבוצות שהוגדרו ונשתמש בטבלת היחסים שהוצגה בסעליף 1[). מספר?ל הסעיפים מותאמלים למלספור האופרטורים בטבלת היחסים. אופרטור 1 - זהות בין קבוצות: א. הערך של התנאי [1=]1..10,19,12,7..20א הוא 08ת71. בצד למין של בלטול התנאל אפשר לרשום ערכים ללא סדר כלשהו, או לרשום ערך כלשהו לותר מפעם אחת. אין לכך הטפעה על התוצאה, מכלון שהדבר החשוב הוא, שכל ערך ביו 1 ל-20 נמצא לפחות פעם אחת בין הסוגרלים המרובעים ולא מופלע אף ערך אחד מחוץ לגבולות אלה. לכן, הקבוצה בצד ימין באמת זהה ל-1א. ב. הערך של התנאי [1=]20..1א הוא 58ת. תת-הטווח 20..1 נחשב רלק, מפנלי שהגבול התחתון (20) גדול מן הגבול העללון. 1506 אופרטור 2 - אל-שלויון בין קבוצות: א. התנאל [%6><]0,6,12,18 הוא חסת1, כל המספר 0 לא נכלל בסוג הבסיס ולכן הוא אינו לכוּל להלות ב-6א. ב. הערך של הבלטול [1><]9..20,11,3..11,1,2א הוא חפזגת. הקבוצה %1 תהלה זהה לקבוצה בצד *מלן, לאחר שנוריד את הכפילולות ולא נתייחס לסדר בקבוצה שבצד ימיו לסלמן הלתחס. אופרטורים 3, 4 - הכלה של קבוצה אחת בקבוצה אחרת: א. הערך טל התנאל 1א=>%5 הוא 7808. הכפולות של 5 (מ-5 עד 20) מהוות קבוצה חלקלת לקבוצת הטלמלם (מ-1 עד 20). ב. התנאל 2א%=>1א הוא 74058. הקבוצה 1 מכילה את כל הטלמלם מ-1 עד 20 כאשר הקבוצה %2 מכללה רק את המספרלם הזוגללם בקבוצה זו. התנאל ההופכל 1<=2א הוא מטת1, כלומר אמת. ג. התנא: 1א=<[7] הוא מ5זגת. יש בקבוצה 1א איברלם שאינם נמצאים בקבוצה הרלקה. אם ‏ לש ב-1א אפילו איבר אחד בלבד, קבוצה זו אינה רלקה והתנאל אלנו מתקלים. מאידך, התנאל א=>[7] הוא מטאץ עבור כל קבוצה ‏ %, מכיון שכל ‏ אלבר שקללם בקבוצה הריקה (למעשה אין בה אף אלבר אחד), נמצא גם ב-%. אופרטור 5 - שילכות לקבוצה: אופרטור כ --0-------- -- אם המשתנה הטלם 4 טשווה 1, הערך של הבלטול הבוליאנל "נא אז ג" הוא פטתך והערד של הביטול הבוליאנל '"י2ץ אז ג" הוא 74188. אם 1, 1, א, א הם משתנים מאותו סוג סודר ורוצים לכתוב את הביטול הזה: (א = א) פא (א = נ) פאא (א = 1) אפטר לכתוב אותו בצורה מקוצרת: [א] = [א.1.1] את התנאל הזה (א>= א) 08 (א = 1) 05 (א =1) אפשר לכתוב כך: [1%] אד א 113 פעולות בקבוצות (א ‏ מ בתכנית הבאה נדגלם ללשום המבוסס על השוואה בלן קבוצות. התכנלת מציגה אלגוריתם כדיל למצוא את המלים בנות 3 אותיות טאפשר להרכיב מן האותילות של המלה 41.08פ. ; (שטפדטס) זדא אטתנע אותססתת | (1) 002 | (2) ; '4' = גאסחפזת 07 (3) '5' = 40780084 07 (4) ן' ' = קסגטקת (5) .5 = גתחזפטם [וד1דוו (6) פפצץ | (7) 000 07. . 4א150ת 02 = 011401 (8) פוט (9) 010 :073 ,072 ,071 (10) תס 587 :אטתדקת הדו ,1.4דו (11) 253 אד זדא. .1 :אדוו תגעפדא (12) )13(' תססנא‎ 1','ס','ע','ג','','פ'] =:אטתנקתן המדא (14) ; 1=:א1,זדו העדו (15) סע 4080084 07 70 גאסחפנת 02 =:071 אסע (16) 0 גאסתת30 07 10 באסחפדת 01 =:012 פסע (17) אמח 072 <> 071 עך (18) 0 גא0תא0ג 02 10 באסאפדת 073:=01 תסעק (19) אעאז ([011,072] אד %013 עסא עד (20) אזספת (21) ,072 ,071] =:גמדו (22) אטע (אטתדקפ1 גתצא => גמזזא) עד (23) אזספת (24) (מסגטפת ,073 ,072 ,071) מצדאט (25) אפ גתטחפפת אד דוע =א1,נדא תהפפ1א עד (26) אזססת (27) ; אזטיז תה (28) 1=: גהשמפפת ונדו : (29) פאת (30) כו (31) 1 ג5דא =:א1דון 15948 (32) פאע (33) פא (34) ו .פא | (35) הסבר: בתכנית זו עוברים באופן שלטתי על כל השלישיות שאפשר להרכלב מאותיות האלפבלת הלטלנל מ-'' עד '5' וקובעים אם כל אחת מהן מוכלת בתוך המלה 0% אם התשובה חלובית לגבל שלישיה מסוימת, התכנלת מדפלסה אותה. בדרך זו מוצאים את כל התמורות בנות ‏ 3 אותיות מתוך 6 האותלות אשר מרכיבות את המלה הנבדקת: 5,8,2,1,0,4. מספר התמורות האפשר? הוא 120 (6*5*4=120), כמו שנוכל לראות מן הפלט של התכנלת: אס 402 208 פא סאג גאה חוג 25 סמג אזג חנה 25 סמג אזה זזה תות הוח 5זת סו אנח גיצת 5גא סג אגת מגע 250 454 452 251 405 זז 15 סג ג זזג.1 150 אפ פה ב₪5 05 אס תס בס 5 סו 0 58 151 184 105 108 108 0 15 סא זא גא1 85 סמ 1 תס אס גסא פא סגא ממ גנא פמ סופ חחו גוץ 5גא סגו תא הגו 0 מס אס שתס החס 025 אס מגס זגס ₪50 תפא פא ₪54 5סא אפ 540 541 542 51 05% 052 0581 054 05 חס זוס האס 015 ]אס % 50 501 50 560 5 זא5 54 520 א51 518 514 580 54 מחפ (1) השם של התכנית 11( 21808 מורה על כך שבתכנית זו נפרק מלה בצורות שונות. (4)-(3) נותנים שמות לאות הראשונה ולאות האחרונה מתוך האלפבית הלטיני, אשר נמצאות במלה אטר בודקים, המלה 58410%. לפיכך (א20700 01 שווה ל-'5' כי הלא האות האחרונה (מבחינת מיקומה באלפבית הלטלנל) שכלולה במלה 51.0%. ההצבה של האות 5 כ-4א20080 01 חוסכת מן התכנלת את הבדיקה 108 של כל השלישיות שאחת או לותר מאותיות:הן ממוקמת באלפבית הלטלנל אתרל האות 5. לו הלינו בוחרלם לפרק מלה שהאות הראשונה שלה מבחינת מלקומה באלפבית הלטלנל היתה 5 למשל והאחרונה היתה ץ, היינו צריכים לשנות את הערכים של הקבועים 4א1580ת3 07 ו-0א46700 01 בהתאם. (6) בזמן הדפסה, רוצים שתופענה 15 מלים בכל שורה. כל מלה מנצלת ארבעה מקומות: שלושה לאותיות השלישלה עצמה ואחד לרוות המפריד. המשתנה תוזפתת [1זא קובע את הגבול העליון למספר המלים טתודפסנה בכל שורה. (22)-(16) בשורות אלו יוצרים את כל הטלישלות באלפבית הלטלנל שמקללימות את טנל התנאלם האלה: א. האותיות טונות אחת מן השנללה. ב. המלקום של | אותלות האלפבלת המרכלבות את השלישילות הוא בין 1504 07 לבין 4א40100 01. כבר הזכרנו טהערך של א31580 07 ו-4א40100 07 משתנה בהתאם לאותיות המרכיבות את המלה הנבדקת. אם מלה זו מכללה אות מסולמת לותר מפעם אחת, התכנלת בכל זאת תרכיב שלישלות שמכילות אותה רק פעם אחת. (23) בודקים אם אותיות השללשלה מהוות קבוצה חלקלת של המלה המקורלת שמפרקים. (32)-(26) בדלקה של מספר המלים בשורה. אם המספר שווה למספר המלים שנקבע מראש, לט להדפיס את השורה. . 4 מאלגברה של קבוצות אפשר לבצע טלוש פעולות אלגבריות שונות על זוגות של קבוצות: א. אלחוד של קבוצות (תס1תט 586) א. אלחוד של קבוצות (מסגם- -שר אופרטור האיחוד מסומן 5 ץש 4 בתורת הקבוצות. בשפת פסקל סלמנו הוא +. תוצאת האלחוד טל שתל קבוצות 4 ו-5 הלא הקבוצה שמכללה את כל האלברלם אשר נמצאים ב-2, ב-8 או בשתיהן. נציג זאת בתיאור סכלמטי, שנקרא דלאגרמת ון . ד (מ218878 תת76): מסת || אפשר לראות מן השטרטוט שקיים: 4 50 = 5 טש (. הבלטול א=ת 0 2 הוא נכון אם 5 הלא קבוצה חלקלת של (. 209 התנאל ‏ "(4+8) א1 א" בודק אם האיבר א שליך לאלחוד של הקבוצות 34 ו-8, כלומר אם הוא נמצא ב-42, ב-5, או בשתלהן. של?כות זו נבדקת גם ע"? הבלטול הבוללאני: (5 אך א) 08 (4 א1 א). ב. חיתוך של קבוצות (ם602560510ם1 565) אופרטור החלתוך מסומן ע"? 8 ה בתורת הקבוצות. בשפת פסקל סימנו הוא *. תוצאת החלתוך של שתל קבוצות ג ו-5 הלא קבוצה שמכילה רק את האלמנטים המשותפים ב- וב-5. כלומר, אלמנט שליך לחיתוך 475 אם הוא שליך גם ל-2 וגם ל-5. תיאור סכלמטי של חלתוך מוצג בשרטוט הבא. 8 תּ 8ת אפשר ללמוד מכך שקיים השיויון 872 = 2708. כך גם קיים: 5 = 75, אם 5 הלא קבוצה חלקית ‏ ל-2. אם ‏ 6 מסמן קבוצה ריקה, נקבל שָ=405 רק אם 4 ו-8 הן קבוצות זרות. קבוצות זרות (5665 86 ק811ט06) הן קבוצות, אשר אין להן אף לא איבר משותף אחד. התלאור של קבוצות זרות מוצג בשרטוט הבא: התנאי ‏ "(4*8) א1 א" בודק אם האיבר א נמצא גם בקבוצה 8 וגם ב-8. בדלקה שקולה נעשית ע"י התנאי: (8 א1 א ) סאג (4 א1 א). ג. הפרש בלן קבוצות (06ת626++21 566) ג. הפרש בלן קבוצות (086ת111656ע 65כ אופרטור ההפרט בתורת הקבוצות ובפסקל הוא הסימן - (מלנוס). ההפרשט (או המשלים הלחסל) בין קבוצות 4 ו-5 הוא קבוצה שמכילה כל איבר ב-1 שאיננו אלבר ב-5. התלאור הסכמט של ההפרש של קבוצות 4 ו-8 מוצג בשרטוט. 8 ,/ 1220 אפשר ללמוד מן השרטוט את הדברלם הבאלם: 5-ג אלנו טווה ל: -5, אלא אם ק?לם 2=8 ואז מקבלים: ש6ַ=4-2=2-4. 4-2=4 אם 6ש=2, או אם שָ=5ה. בנלסותח אחר: 2-8 שווה ל-4 אם ‏ 4 קבוצות זרות. ס=3-5 אם 255. הביטויפ ג כולל גם את המקרה ש: 8=. הבלטוי הבוליאני: (ם-4) א1 8 שקול לבלטוי:(8 אד א) סא פאג ( א1 א) ו-5 הן 1 ללשומל אלגברה של קבוצות כדי הקבוצות 1* עד %6 שניתנה בסעיף קודם. אלו הן קבוצות המספרים מ-1 להסבלר את נושא האלגברה של קבוצות נשתמש בדוגמא על פי ההגדרה של עד 20 אשר מתחלקלם ב-1, 2, 3, 4, 5 ו-6 בהתאמה. א. 3 הלא קבוצת כל השלמלם מ-1 עד 20 המתהלקלם ב-2, ב-3 או בשניהם לחד. לכן: [2,3,4,6,8,9,10,12,14,15,16,18,20] = 3א+2א %6=2+%2, מכלון שקללם 6>=%2א8. לכן: [2,4,6,8,10,12,14,16,18,20] = %6+2א אפשר לבנות קבוצה %2 בעזרת פעולת אלחוד: (* קבוצה רלקה *) [] >= 2א 0 20 10 1=1 אסק אמחץ (1)פפס 1סא קד =:2א 3 הלא קבוצת כל המספרלם השלמלם בין 1 ל-20 המתחלקים גם ב-2 וגם ב-3. קבוצה זו שקולה לקבוצת 6א%, כל כל מספר שמתחלק גם ב-2 וגם ב-3 מתחלק גם ב-6. כלומר, 6א%=3א%*%2. לכן נלתן לבנות קבוצת 6א% בעצרת פקודת ההשמה ‏ 6:=%2*%3א. 6 הלא הקבוצה של מספרים שלמים בין 1 ל-20 שמתחלקים גם ב-3 וגם ב-6. קבוצה זו שקולה ל-6א, ז"א: 6א%=6א%*83, מכלון ש: 83 6א. 6 הלא הקבוצה של השלמים בין 1 ל-20 שמתחלקים ‏ גם ב-4 וגם ב-6. ומכאן: [6=]12א*4א. 6 הלא הקבוצה של השלמלים שבלן 1 ל-20 שמתחהלקלם גם ב-5 וגם ב-6. זוהי קבוצה ריקה, כלומר ש=86א50%א, כל השלם הקטן בלותר שמתחלק ‏ גם ב-5 וגם ב-6 הוא 30. נרשום זאת כך: [ ]=6א*5א. 2 הילא הקבוצה של השלמים בלן 1 ל-20 שלא מתחלקים ב-2, ז"א המספרלם האל-זוגיים. לכן, [1,3,5,7,9,11,13,15,17,19] =2א-1א ניתו לבנות קבוצה זו כך: 2:12 0 20 70 1:=1 תסקע אעח (1)פפס עסא קד [1]-2א%=:2א 211 ט. ‏ []=1א-2א, מכיון שנתון 26%1א. ל. הקבוצה 5א-%6 מכילה את קבוצת השלמלם בין 1 ל-20 שמתחהלקת ב-6 אבל לא ב-5. מכיון שקיים שַ=5א0%ה6א, נקבל 6א%=5א-6א. נניה שבתכנית 180 אטתנק, אשר עסקנו בה בסע?לף הקודם, רוצים ליצור שלישיות שמכילות לפחות תנועה (1ששסץ) אחת. לשם כך צריך להצהלר על משתנה קבוצתי: ;'4'..'2' תע0 5₪7 :בסטאל בתכנית נכתוב פקודת השמה זו: ['ע' ,'0' ,'ד' ,'ע' ,'ג'] =:עסטאד לפני שמדפיסים שללשלה, נרחיב כך את התנאי הבוליאני בשורה (23): ( [] <> עסטאץד * גתזא) פאג ( אטת1ת בדו => 1ז1) דורשים בתנא? המורחב הזה ש-114 תהיה קבוצה חלקית של אטתדקת תא וגם שתכיל לפחות תנועה אחת. 5 סדר הקד?מו?לות של ולות סדר הקדלמויות של הפעולות המתאלימות לקבוצות זהה לסדר הקדימויות של הפעולות האריתמטיות המקבילות, כפל שמפורט להלן. לשם הדגשה משכנו קוו מתחת לכל פעולה המתאלמה גם לקבוצות: סא פא פסא טענם / * +ן [ =< > 4 5 א > < נציג שתי דוגמאות על פי טבלת הקבוצות %1 עד %6 שהוצגה בסעיף 14.3.1. א. קבוצת כל המספרלם האל-זוגלים בין 1 ל-20 המתחלקלם ב-3 תכתב בדרך זו: 2(*3א-%1) ולא כך: 3א*2א-1א. רמת הקדימות של חלתוך גבוהה מזו של הפרש ולכן הביטול השני מוביל לקבוצה המכילה את ההפרש שבין:- * קבוצת המספרים השלמלם בתתחום 1 עד 20, * קבוצת החלתוך של המספרים השלמים שבין 1 ל-20 המתחלקים גם ב-2 וגם ב-3. שני הביטויים שהוזכרו נותנלם תוצאות שונות, כפי שמפורט להלן: [3,9,15] = 3א"(2א-1א) [1,2,3,4,5,7,8,9,10,11,13,14,15,16,17,19,20] = 3א"2א-1א ב. קבוצת השלמלם בין 1 לבלן 20 שלא מתחלקים ב-3 וגם לא מתחלקים ב-5 מסומנת ע"* הבלטול (5א+83)-1א% או ע"י הבלטול 178% הערה: הקבוצה ‏ %1 נקראת קבוצה חלקלת ממש (580565 ש6קסע2) ל-2א% אם 82 1א כאשר 1><2א. בפסקל אי אפשר לצלין מצב זה בצורה *לשלרה, למשל ע"* כתיבה של 2. הסלבה להגבלה זו הלא בכך, שבדיקה כזאת הליתה מעמיסה על המהדר בלל שטשום פרופורציה לרמת השלמוש שלה. כאשר רוצים לצילין או לבדוק מצב זה, צריךר להשתמש בתנאל הבוללאנל: (2א<>1א)*(2א=>1א). 12 4 קלט/פל קַ ות בשפת פסקל אלן אפשרות לבצע קלט/פלט לשיר של קבוצה, אלא צריך לקרוא או לכתוב את איברל הקבוצה בנפרד, זה אחר זה. כדל לקבל למשל, תדפיס של כל איבר בקבוצה אל אפשר לכתוב (78115)4 כאשר 2 מוגדר כקבוצה. בזמן הקלט מכנלסים לקבוצה את הערכים שרוצים שלשתתפו בה. בזמן הפלט בודקים את כל האלברים בסוג הבסלס ומדפיסים רק את אלה ששליכים לקבוצה. סוג הבסלס לכול להיות תת-טווח של השלמים או של סדרת התווים המוגדרלם באותו מחשב. במהדרים מסוימים יש הגבלה חמורה לגודל של הקבוצה. אם אלן הגבלה כזאת, סוג הבסיס לכול להכלל את כל סדרת התווים (כלומר, אפשר להגדיר אותו כ-0848). אם סוג הבסיס של הקבוצה מתואר ע"י מנליה, אל אפשר לעטות קלט/פלט של אלברל הקבוצה, אפיללו כאשר מטפלים בכל אחד מהם לחוד (ישנם מהדרים משוכללים שמאפטרלם זאת). הפתרון הלחיד הוא לקרוא כקלט תוולם או ספרות, לתרגם אותם לסוג החדש בתוך התכנית ולתרגם את הסוג החדש חזרה לתוולם אוה ספרות בזמן הפלט. נלתן לעשות זאת ע"י השלמוש בפונקציה 2ת09 או באמצעות פקודת 0458. עתה נציג שתל שלדות של תכניות המאפיילנות סרלקה וחיפוש בקבוצות. נתללחס למקרה הטלפוסל, כאשר סוג הבסלס הוא תת-טווה של אע6עעא1 או תגאס. בקטע ההצהרות של התכנלת נכתוב: 0% . = א720770 6/0 . = ₪08 60/00 מקצך אסצזע מטט6. .א20₪10 תטט6 = אסגטד צגך + -ע0 עשפ = 12471נחוטא 506 תפגץ ; 2471דטטעא 506 :24ענשמא סריקה: סריקה נעשית כאשר רוצים להפעיל שגרה חוזרת על כל אלבר בקבוצה. לשם כך נשתמש בפרוצדורה כצו: ; (2411דטטא 506 :א) ב2שטטמא מטקדע מתטסמססתע תג ;1 דג :7 אזסעת 0פ אסצעק תטט6 10 אסצאסגד תטט0 =:1 תסץ אחדך א א 1 שד (1) 0855סתק ; פא הפרוצדורה 722ט/מא 1120 סורקת את כל אלברל הקבוצה וקובעת לגבי כל אלמנט 1 בקבוצה אם להפעיל עליו את (00855)1תק2 או לא. (00855)1ק2 יכול להיות כל תהללך שרוצים להפעיל על האלמנטים של קבוצה א: *‏ אם התהליך הוא הדפסה של אלברל הקבוצה נוכל להחללף את (008550)1תת בפקודה (1:2)מדַדַתא. 23 = כדיל לקבוע את מספר האיברים של הקבוצה, יש להחליף את (2800858)1 בפקודה: 00080:=00001+1, כאשר הוא להיה פרמטר משתנה של הפרוצדורה לדטטחא מטפדץ. אפטרות אחרת הלא להפוך את הפרוצדורה לפונקציה שלמה שמקבלת את המשתנה הקבוצת? % ומחזלרה את גודל הקבוצה. אם רוצים לעבד (או לספור) את כל האלברים בקבוצה שמקילמים תנאל מסוים, אזל (2800099)1 יבדוק אם התנא? קללם. אם התשובה חלובית, הוא לקדם מונה או לדפיס את אותו אלמנט, בהתאם להוראת המתכנת. חיפוש: בפונקצילה זו משתמשים לשם חיפוש של אלמנט מסולם אחד. מפסלקים את הבלצוע כאשר מאתרים אותו ולא ממשלכים לסרוק את שאר איברי הקבוצה. 0 47 :(11ג2דטטא 806 :א) פטפדאס אסזעסאטע (1) פא (2) יאד :1 (3) ; 300 :ת-א , 24ווזא (4) אזסעת (5) =:124א (6) =:ת108א (7) 00 תטט0 =:1 (8) 0ם 24?יאדא צסא פאג תא0זא דסא ₪ דט (9) אאאץ (1)1גא פאא (א א 1) עד (10) אזסעת (11) ;1 =:081205 (12) מטת =:24?דאזא (13) פא (18) מפזת (15) אפ אסצתת תסט0 > 1 עד (16) (8000)1 =:1 (17) ו (18) מטת =:48א0זא (19) אפחץ 2עאנא עסא עד (20) ('אין איבר כזה ') אשעזתח (21) (* סוף הפונקצלה ‏ *) ;פאת (22) הסבר: (9) כאשר סרקנו את כל הקבוצה השתמשנו בביטול: אסצעם 6/0 20 א10מ0ד טס =:1 תסץ כאן משתמשלם בפקודת 1108..20ש אשר מאפשרת יצלאה מוקדמת כאשר 1724א מקבל את הערך מפטתץ. (10) הבלטוי (41)1א1 יוחלף ע"י הדרישה הקובעת איזה איבר רוצים לאתר. אם מחפשלם את הערך המספרי הקטן בלותר בקבוצה, (1)1א7 אינו נחוץ ומספיק לכתוב (% אז 1) ע1. הלולאה תסתיים כאשר נמצא בתת-הטווה את האיבר הראשון ששליך ל-8. אם מחפשים את הערך המספר? הגדול בלותר, מתתילים את הלולאה כשמציבים א0צ/ע 1:=6/0 בשורה (8) ובמקום שורה (17) כותבים (1)סמתק=:1. 218 בשנל המקרים, של סריקת קבוצה וחלפוש של אלמנט בתוך קבוצה, רצול להוסלף את הפקודה שמופיעה למטה כד? להמבע מעיבוד מיותר. אם % הלא קבוצה רלקה, לא נבצע את הלולאה ונדפלס הודעה על כך: אפעד []=ת% ע1 (' הקבוצה ריקה ') א%ַ178תח ו (* שאר פקודות הפונקצלה *) 1-7 .ישומַים של קבוצות 1 הכברה של אלרטוסתינס (*) המטרה טל התכנית הבאה הלא ללצור מספרים ראשונלים לפ? השיטה שנקראת "הכברה של אלרטוסתינס" (65ת8505%(6:ע +0 6ט516 6ת7): א מוגדר כמספר ראשונל אם אל אפשר לכתוב אותו כמכפלה של זוג מספרים שלמים כלשהו, חוץ מן הזוג (א ,1). כדי למצוא מספרלם ראשונלים לפ? שיטה זו משתמשלם בשתל קבוצות. הקבוצה אנת מכילה את כל המספרלם השלמים מ-2 עד 64 (תת טוות של כל המספרים השלמלם) שמתוכם נבחר את המספרלם הראשונלים. במצב ההתחלתל כל המספרים בתת-טוות שהוזכר שללכלם לקבוצה זו. הקבוצה 1%א1580ת תכיל את כל המספרים הראטוניים טללבחרו. במצב ההתחלת?, לפנל שלש תוצאות כלשהן, קבוצה צו תליבת להלות רלקה. במהלך התכנית סורקים את המספרים בתוך א71כ2ג04%א ומעבירים את המספרלם הראשונלים לקבוצת אזאסחפזת. את האחרלם, שאלנם מספרלם ראשוניים, מוחקלם מקבוצת אזפ4אגטא. בסוף התכנלת, קבוצת אנאסעפזת תכיל את כל המספרלם הראשונילם שבין ‏ 2 לביןו 4. קבוצת א04221/ תהיה קבוצה ריקה, שהרל את המספרים הראשוניים העברנו ל-א1א1580ת ומחקנו את אלה שאלנם ראשונללם. התכנלת, אשר פועלת בשלטה זו, כתובה להלן: ; (תטתינטס) אדאס5דת 1%ת111524 אהתססתע (1) 7 | (2) = א0010 (3) 1 = אסצת (4) שעצד | (5) ; אסצזת. . א0תז0ד עס 587 =אדום.5₪ דגדטטטא (6) תגט ‏ (7) ; אדו זו דה2דטטטא :אצאסמ5בת ,אדפוואטו (8) תת0תאז :1 ,7 (9) (אדאם,זוז5 21דטטספא :א) ב2עטטטא טסצא מהטפעססתקע | (10) תג (11) ;א 00 :א1580ת (12) אסצזע. .אסז6גד :1 (13) (* 24דטטמא עסצא *) את (14) ;(']') מדדתט (15) =:15808ת (16) 115 0 אסצעם - 70 א20עע0ד =:1 תסע (17) אחד א א 1 תד (18) (* כאשר המספר אלנו *) אזססת (19) (* הראשון, כותבים פסיק *) אעח א0א15ת עסא עד (20) (* לפני שמדפיסים אותו. *) (',') מדדתט (21) סוכו (22) (* במספר הראשון לא כותבים *) ;24858 =:א580זת (23) (* פסיק והופכלם את הערך *) (1:2) מצדאט (28) (* של א1500ת ל-58מגק *) ; פאק (25) ('[')אתדדט (26) (* 012/סא ש10א *) ; פאע (27) (* מכנלת ראשלת ‏ *) אזסתת | (28). ; [אסצתם. . א14010] =:אדפגאהו (29) ;| ] =:א1אסטפנת (30) אס =:1 (31) (* מצא את המספר הראשוני הבא *) 0כ2 [ ] <> אדפגאגטא מודאח (32) אזסתת (33) ספ (אזפגאגטא אד 1) עסא מתדאח (38) (* מצא את הערך הקטן ב-אדכגאגטא *) 61 (35) ] + אזא0סח15ת =:אזאסטפזת (36) )37( 1:= 0 (* מחק אותו ואת הכפולות שלו *) 20 אסצם => 1 ממדאח (38) אזספת (39) [] - אדפגאגט =:אדפגאגטע (40) )41( 1:= 1 סאם (42) ;פא (43) ((' = א1אסטפדת') מצדתט (44) (10א31580) ג2עטטפא טסצא (45) .פא | (46) הפלט של התכנלת: [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61] = א1אסחפדת הסבר: (32) במהלך התכנלת מוצלאים בזה אחר זה את כל המספרים מקבוצת המועמדים. אם הם מספרלם ראשונליים הם מועברלם לקבוצה 1%א21580, אחרת הם נמחקים. התהליך נפסק כאשר אין יותר מספרים לבדיקה, דהיינו כאשר 041018 תהלה קבוצה רלקה. (35)-(34) השלטה למציאת המספרים הראשוניים מבוססת על העובדה שהמספר הראשון שנמצא ב-א104401!/ הוא תמלד מספר ראשוני. במשך התהליך מוחקים את כל הכפולות של אותו מספר ראשונ? וכתוצאה מכך נוצרים מקומות ריקים ברשימת המספרים בקבוצה א1כ2ג04%/. המספרים שמלאו מקומות אלה לפנל שנמחקו מקבוצת המועמדלם, היו מספרים שאינם ראשוניים ולכן אין כל ענין לטפל בהם. בפקודות (34)-(35) בלולאה זו מוסיפים 1 למשתנה 1 עד שערכו שווה למספר הקטן ביותר שנשאר עדלין בקבוצת המועמדלם. אותו מספר חייב להלות מספר 216 ראשוני. בפעם הראשונה, כאשר 1=2, פקודות אלו לא תתבצענה ‏ כל התנאל (אנפגאוטא א1 01)1א אינו אמת. ‏ גם לאחר שמגדללים את 1 ל-3 התנאל לא לתקלים ולא נבצע פקודות אלו, אבל כאשר 1 מגיע ל-4 המצב שונה. כעת 1 כבר נמחק מקבוצת המועמדלם כל הוא כפולה של 2 (פקודות (38)-(42)) ולכן התנא? (א1כגאגטא א1 01)1סא כן יתקלים. נבצע פקודה (35) ונגדלל את 1 ל-5. עכטיו התנאי שוב אינו מתקלים ונמשיך בפקודה (36) כמו קודם. (36) העברה של המספר הקטן בקבוצת המועמדי?ם לקבוצת המספרי?ם הראשונללם. (42)-(37) המשתנה 1 מסמל את המספר שנמחק מקבוצת המועמדים. מוחקים מספרים מקבוצה זו בגלל שתל סלבות: א. המספר הנבדק הוא ראשונל. המספר כבר הועבר לקבוצה א1א580זת. ב. המספר הוא כפולה של מספר ראשונל ועל כן אלנו ראשונל. השוואה של 1 ל-1 בשורה (37) מדגימה את הסיבה הראשונה, שהרל ‏ 1 הוא ראשונ: והשוואתו ל-1 מאפשרת הורדתו מקבוצת המועמדים. קידום 1 ל-1+1 בשורה (41) מדגלם את הסלבה השנללה, שהר?ל בהתחלה ‏ 1 שווה ל-1. אם 1 ראשונל, ‏ 1+1 אלנו ראשונל. ה-1 החדש שווה ל-2*1 וכאשר מחשבים שוב 1+1, הערך החדש של 1 להיה 3*1, שגם הוא אלנה ראשוני. התהליך ממשלך עד שמוחקלם את כל הכפולות של 1 שאינן גדולות מ-א0סצעע (שורה (38)), שהוא גבול התחום הנבדק. פעולת המתיקה של 1 נעשילת בשורה (40) ע"ל השוואת הקבוצה ‏ 44218 להפרט של קבוצה זו והקבוצה שמכילה את האלמנט 1 לבדו. (45) מדפיסים את הקבוצה א1א19540ת. הפרוצדורה כתובה בשורות (10)-(27). המבנה שלה דומה למבנה של רוטלנה שהוצגה קודם לעיבוד של כל איבר בקבוצה, כאשר (00895)1ת22 מוחלף ע"? שורות (19)-(25). 2 ננלתוח סקר לש לכתוב תכנית כדי לרכז תוצאות סקר שנערך ולבדוק את הלחס בין ההשתליכות המפלגתית של המשתתפים בסקר לבין מלנם. סימולל המפלגות הם: מערך-4, ליכוד-1, אחר-3. לכל משתתף נקבע מספר זיהוי בין 1 ל-64. התכנית רשומה להלן: ; (1עעעטס ‏ צטעא1) תתאע5 |גתססתע (1) 001 | (2) ;1 = א1010 (3) = אסצזע (4) מעצע | (5) ;אסצ1ע. .א0ד140₪ עס 587 =שטום2 237דטטמא (6) תג (7) , סטאד1 0804914 , אסתגא אזת/ס0 (8) , סטאד1 אדאפגא ,אסתגון אפגא (9) ות ד24דשתא :אדאס5 אזמפגא ,אנאסח5 אזתגטפס (10) אסצת . . א0ז6גת : דטזס? (11) ,9 :ב146עדא ,אדא (12) 2517 ; תת6מצא1 :(22807 7ג2דטטטא :א) ג2צטטמא 6050 אס1עסאטע תג ;,אסצ1ע. .א1010 :508 ,1 אזססת =: 5 0 אסצעם 70 אסצאסג1 =:1 תסע אמחך % את 1 עך ; [+5080% =:50% א =:0008 ; פא ; (807ת2 1ג24?דטטא 1) א צ0עא פתטסתס6סתת תג 200 :א80פזת ;,א0צ1ם. . א71408710 :1 א ;(']') מקדתט ,5 =:א31580 0 אסצעם 70 אסדצאסגאד =:1 תסע אתח % את 1 תך אזסאת אפחע אסמפעת עסא ע1 (',') מדדתח וו =:8א31980 (1:2) 8עזתח ;פא ('[') מצדתטח (* ג2נטטמא טסצא *) ; פא אזספ ;[ ]=:08תא אנת4טם0 ;| ]=:פטא1 אדתגע08 ;| ]=:א1אסמ5 אזתטפ0 ;| ]=:08תא אזח5א ;| ]=:סטאז א1צ5גא ;[ ]=:א1אסמ5 אזאפא ;('הקש את הנתונים ללא רווח בלניהם. הורוייי') אתמצזתטח ;('הקש תחללה מספר זהות של המשתתף. -ורריייי') אתמצדתח ; ('אח"כ "מין":2-זכר, א-נקבה. -ררררררריייייו) אותצדתח ; ( 'הקש מפלגה מועדפת:א-מערך,1-ליכוד,ג-אהרת') א]מדדתט ץדהמקסת ; (171.4048 , אדא , ד?) אעפגמת (* הוסף כל אחד לקבוצה הנכונה *) עס אדא 0458 עס ג46עד 2':0458' ; [ חעזות? ]+03 תג את =:608תא אדתטע0 :'א' ; [ 2007 ]+פטאד.1 0318 =:סטאד א1תג/ע0 :'ע' [ד20 ]+א1א0ח5 אזתס =:א1א50 00/4218 :'ג' ; פא |18 )13( )14( )15( )16( )17( )18( )19( )20( )21( )22( )23( )28( )25( )26( )27( )28( )29( )30( )31( )32( )33( )38( )35( )36( )37( )38( )39( )40( )41( )42( )43( )44( )45( )46( )47( )48( )49( )50( )51( )52( )53( )54( )55( )56( )57( )58( )59( עס ס6גתדא 60258:'א' (60) ; [ חתות ]+זן0 גת ון 4א1ה5הא =:טסתהא אנאפגא :'אי (61) ; [ 29107 ]+מואד.1 א1פאא =:פטאדת אנאפגא :'ז' (62) [תחזת2 ]+אדא5₪0 ד.א =:ותאסמ5 אזאפגא :'ג' (63) פא (68) פא (65) ; עסט זדדאט (66) (* הצג פלט *) (67) ; (1408זן 0/1 ) הפא טסצא (68) (('גברים בעד מערך:7') אמתצדתט (69) ; (זס0ת ו אדתפא) ?דטטטא טסדא (70) (('נסים בעד מערך:7') אממדדתט (71) ; (סטאד.1 08/41 )לשא טסדא (72) (('גברים בעד ליכוד:"') אומצזתח (73) ; (סטאד,ז אדמפא) לונתא טסדא (76) (('נטים בעד ליכוד:"') אזמצדתח (75) ; (18א50 05/4 )דסא טסדא (76) ;('גברים למפלגה אחרת:7') אןמדדתח (77) ; (4תאס5₪ אז5א) הדחוא טסדא (78) )('נטים למפלגה אחרת:"') אמחצדתח (79) ג 08 אפגא + זסתא אדתטט0) ג2דטטטא 609) מדדתה (80) ;('מספר המשתתפים שהצביעו בעד המערך =777777') אומצדתט (81) ( טא פא + פטאד א1תהטט0) ה2צטטטא חקס6) מצדתה (82) (('מספר המשתתפים שהצבלעו בעד הללכוד = 67 אמתדדתט (83) ; ( (אאס5 אפגא + אדאס50 14תעש0) ?תומא .6008%1) מדתח (84) ((מספר המשתתפים שהצביעו בעד מפלגה אחרת =7') אמדדתט (85) .אע (86) הסבר: (47)-(42) בתהילה, כל הקבוצות רליקות. במהלך התכנית מוסיפלם כל משתתף לקבוצה המתאלמה להשתליכות המפלגתלת שלו. (65)-(54) מנתחים את הקלט של כל משתתף ומצרפילם את מספר הזלהול שלו לקבוצה המתאלמה, המסווגת לפל מלן ושייכות מפלגתלת. (85)-(68) הפונקצלה 28/0%2 60280 והפרוצדורה 2עַשטמא /10א הן מן הסוג המא מטפזי' (שהוסבר בסעיף 14.6). הן סורקות את כל הקבוצה ומבצעות תהליך כלשהוא על כל אלבר בקבוצה. הקלט עבור תכנית דצו יכול להיראות כך: הקט את הנתונים ללא רווח בינלהם. הקש תחללה מספר זהות של המשתתף. הקש "מין":2-זכר, א-נקבה. הקש מפלגה מועדפת:4-מערך,-ליכוד,4-אחרת גא3 64 3 1% 14 אא7ן 2224 21 עא29 3% 4 224 371 2434 4% 5 תא53 אא55 אא58 60% 2 הפלט של תכנית זו נראה כך: גברים בעד מערך: [48, 32, 12] נטים בעד מערך: [58, 55, 17, 18] גברים בעד ליכוד: [62 ,51 ,37 ,24 ,7] נשים בעד ליכוד: [60 ,53 ,29] גברים למפלגה אחרת: [36 ,35 ,22] נטים למפלגה אחרת: [43 ,6 ,3] מספר המשתתפים שהצביעו בעד המערך = יק מספר המשתתפים שהצביעו בעד הללכוד = הררררם מספר המשתתפלם שהצבלעו בעד מפלגה אחרת = 6 שורות ההודעה של התכנית נבנו ע"? פקודות 178תחא ו-א%ע11תח עוקבות. הפקודה אזזתח הדפיסה את הנתונלם המספרללם ולא קידמה את השורה ולכן התמללל הודפס ע"י הפקודה א081280 בהמשך השורה. למשל, הפרוצדורה 8/0124 /10א (שורה 68) משתמשת בפקודה 178 ואהרלה בטורה (69) לשנה הפקודה אםע17תח, אשר הדפיסה באותה שורה. בשורות (80) ו-(81) לש גם כן פקודות כתיבה עוקבות, אשר מכוונות להדפלס באותה שורה. 8 תרג?ל?ם 1 ששאלות (1) כתוב את הביטוילם האלו במלנוח של קבוצות: א. (08=<'ע') פא (5'>=01') כאשר 08 מוגדר כמשתנה מן הסוג 018. ב. 8, 2, 6 הם משתנים שלמלם שמללצגים מספר בין 10 ל-15. ג. א הוא מספר בין 20 ל-30 שאלנו ראשונל. (2) מוגדרות הקבוצות הבאות: [1,3,5,7,9] =1א% [2,4,6,8,10] =2א %3= 1,2,3,4,5[ [4] =4א% 20 [] =5א מהן התוצאות של הפעולות הבאות: ‏ 3 - (2א%+1א) (8) 64 = 2א*1?% (5) (%4+2א) * (5א%+ )1‏ (0) (%4 -3א% -(2א-1א)) א1 9 (4) (2א+1א) => %3 (1) (3) עליך להוכלתה בעזרת דלאגרמוּת ון את החוקל דל-מורגן, אשר לפיהם אם 4 ו-2 הן קבוצות, קיימת זהות בין הבלטויים הבאלם: א. ((ע אז א) פאג (4 א1 א))עסא ו- (5 אד א) עסא פס (ג אז א)עסא ב. ((ע א1 א) 08 (4 א1 א))1סא ו- (5 אד א) עסא פאג (4 אז א)עסא 2 תכנלות (1) עללך לשנות את התכנית זא אטת1ע כדי שתוכל: = לקבל כקלט כל מלה. = למצוא את כל השלישלות שניתן להרכלב מאותה מלה. התנא?ל הוא שהשללשיות מכילות אותלות שונות. (2) עליך לשנות את התכנית 114 אט18? כדי שתוכל: * לקבל כקלט כל מלה. * למצוא את כל השלישיות שניתן להרכיב מאותה מלה. השלישיות לכולות לכלול אות מסולמת פעמלים, אם היא הופלעה פעמ?ללם במלה לפירוק. אפשר להנלח שאות אחת לא מופלעה לותר מפעמיים במלה לפלרוק. (3) נתונות ההצהרות הבאות: מקצץך 58 506 = 1 = 12תא 506 5060 0 507 ג ;ג2נעטטא 806 :83 ,2א ,1א כתוב תכנית שתדפלס את התוכן של הקבוצות האלו: א. קבוצת האלברלם ששייכים לקבוצה %1 או לקבוצה 2א, אבל לא לשתלהן. ב. קבוצת האלברים שמופיעים רק פעם אחת ב-1א, 2א ו-3א. ג. קבוצת האלברים ששליכים לשת? קבוצות בדלוק מתוך %1, 2א, 3א. ד. המשלים של 81, כלומר קבוצת האיברים בסוג הבסיס שאלנם ב-1א. ה. קבוצת האלברים בסוג הבסיס שאלנם שליכים לאף אחת מן הקבוצות %1, 2, או 3א. ו. קבוצת האלברים בסוג הבסיס שלא נמצאלם בשתיים מתוך שלוש הקבוצות. (4) כתוב תכנית שקוראת תמליל באנגלית ומפיקה כפלט את מספר האותיות שהן תנועות (2,2,1,0,0) ואת מספר האותיות האחרות. (5) כתוב תכנית שקוראת תמללל באנגלית וסופרת כמה סדרות של שת? תנועות (למטל 34, 22 וכו'), או לותר, מופיעות בקטע. בפלט צריך להציג כל סדרה של שתל תנועות או יותר ואת מספר הסדרות שהודפסו. 21 (6) כתוב תכנלת שקוראת תמליל באנגלית ומוציאה כפלט את המלה שבה לשנו המספר הגדול בלותר של אותיות שונות. קבע את מספר האותיות הטונות ע"5 הגדרה של כל מלה כקבוצה ובדיקה של גודל הקבוצה. (7) בטירות שידוכים מנהללם במחשב שנ? קבצים. אחד מחהזיק שמות של בנים ואחד מחזיק שמות של בנות. מבנה הרשומה שווה בשנל הקבצים, כפ? שמפורט בטבלה. העמודות ‏ 63 עד 70 מגדירות נושאים שונים, שעבורם האות א מציינת תשובה חלובית והאות 1 מצילנת תשובה שלילית. שם כתובת טלפון גיל דתי (דַ47כ) תואר ראשון (7048) בעד שחרור האישה (858108808) אוהב פוליטיקה (ג001716ק) אוהב מוסיקה (ג₪0516) רוצה ילדים (1401%עצ) עוסק בספורט (52081) אוהב תאטרון (אמ7תחץ) כתוב תכנית כדל למצוא עבור בן מסוים (או בת מסוימת) את שלוש הבנות (או שלושת הבנלם) עם מספר התכונות המשותפות הרב ביותר. רמז: ‏ יש למצוא את החיתוך בין קבוצת התכונות של הבן המסולים (או הבת) לבין קבוצת התכונות של כל הבנות (או הבנים). : 22 פרק 15 רקורסיה 1 דוגמאות בס?סלות פונקצילה 2 נקראת פונקציה רקורסלבית (מס61סתט? 25108ש260), אם הלא קוראת לעצמה. כלומר, אם אחת מן הפקודות המרכיבות את הפונקצלה גורמת לקרלאה הוזרת טלה. 1 פונקצלה רקורסיבית לדוגמא, נבחן את הפונקציה (א,א)088284 שמחזירה את הערך של %< בחזקת א פונקציה זו לכולה לכלול בתוכה לולאה (ז"א פתרון אלטרטיבי) ואז הלא תיראה כך: תומת :(פתסתזא1 :א ;תחת :א) 0284 א10צסאטע על תג -%(2) ;תתספעאד :1 (3) ;ומת :ץ (4) אָנספת | (5) :1 (6) 0 א 10 1:51 208% (67 צאא =וץ (8) ץצ =:074 (9) ;פע (10) הסבר: הפונקצלה מבצעת א פעמים את הלולאה בשגרות (7)-(8). בתחללה, 1=צ והמכפלה הראשונה צ"א היא למעשה ‏ 1*%. בכל שלב הפונקציה מחשבת את המכפלה של שני המשתנלם א ו-צ שערכם לדוע לה. תוצאת המכפלה מהווה את הערך החדש עבור צ, לביצוע המכפלה הבאה. לאחר המכפלה הפשוטה 1א, הפונקצלה עוברת למכפלה אאא שהיא 2א%, ממשלכה עם המכפלה %2*% שהלא 3 וכן הלאה. המכפלה האחרונה ה:א 1-%א*א שתוצאתה %% ואז הלא מפסיקה. 3 אפשר לגשת לבעיה זו בגישה שונה. במקום להתחיל במקרה הפשוט בלותר 1*א, דהלינו < בחזקת אחד, נוכל להתתילל מלד במקרה הליעד % בחזקת א ולהתבסס על שתל המשוואות הבאות: א. 1 ב (1-א,א) אלע * א (0,א) א2חס (א,א) 08| עבור 0 < א. נוכל עתה לכתוב את הפונקציה הרקורסיבית הבאה: נת :(תת6מדא1 :א ;תגתת :א) א2תא0 אסזעסאטע (1) אזססת (2) אעץ 0-=א סד (3) )4( 028 :=1 )5( 8 (1-א ,א)א2עה0 * א =:א2מת0 (6) ;עאת (7) הסבר: בפונקציה זו אין לולאה מפורשת, אלא רק פקודת ע1 כדי לבדוק אם הערך של א הוא 0 או חיובי. מתחילים לטפל מלד במקרה היעד וכותבים אותו כמכפלה של 9% ושל (1-א,א)א0882. אבל כאן קיים מצב חדש, אשר אלנו מוכר: הערך של הפונקציה (1-א,א)4א0882 לא לדוע. עד עכשיו הדגשנו שבצד למין של ביטול אסור להשתמש במשתנה שערכו לא לדוע. החידוש של רקורסיה הוא, שעל אף האלסור לרשום בצד למין של בלטול משתנה בלל ערך, מותר לרשום בו פונקציה בלי ערך. מכלון שרקורסיה מותרת, תמיד אפשר לקרוא לפונקצלה (1-א,א)4א0882 ולקבל כתוצאה מקריאה זו את הערך שלה. בדרך זו מתקללמת הדרלשה שבצד למלן של הביטול להיה משתנה שערכו לדוע. הקושל אשר נובע מהטלפול בבלטוי שהמשתנה בצידו הלמנל אלנו ידוע, גרם לכך שהרקורסיה אלנה מותרת בכמה שפות תכנות. נציג בדוגמא את חישוב הערכים ע"י פונקצלה רקורסיבלת: נתונה תכנית שבה נמצאת הפקודה (4)2,3א0882:=צ. נבהן את הערך שמתקבל לאהר ביצוע הפקודה הזו בתכנלת הראשלת. (2,0) תא2ממס (2,1) בתאלסטס (2,2) תאלמחס (2,3)תא2סח0 =(2,1) תא2מטס =(2,2)תא*02 =(3, 2)גא0152% (2,0)גא2*0802 (2,1)א2*0₪52 (2,2)גא2*0852 1=2א2 = 24א2%= 8 324 הסבר: הקריאה ‏ ע"ל התכנלת הראשלת מעבירה את הפרמטרים 2=א, 3=א לפונקצלה (אלעחס. הפונקציה .א0882 אלננה לכולה להעביר ערך כלשהוא בשלב הזה. היא מחזיקה את הפרמטרים בשמות נוא ו-ןוא, מחשבת את כָא ו-כָא וקוראת שוב לפונקצלה %4, עד שהלא מגלעה לשורה (6) של הפונקצלה, שם מבצעלם: (כא, כא )א * כא =:.611028 הפונקציה (0882%4)2,2 מוצגת במשבצת (3) בשרטוט. דבר דומה קורה גם במשבצת (4) ורק במשבצת (5) המצב משתנה. עלינו לחשב את הערך של הפונקצלה (0882%4)2,0 והנה מגלים שהוא כתוב במפורש בשורה (4) של תכנית הפונקציה וטווה ל-1. העובדה שמגיעים למצב שהערך של הפונקצלה *דוע מיד ואלן צורך להמשיך ולחשב, אינה מקרה בלבד, אלא דרישת קדם כאשר כותבלם תכנלת רקורסיבלת. כבכל חישוב, גם כאן צריך להגלע לערך סופ?ל של הפונקציה. תוצאה זו מקבלים במשבצת (5) וצרלכים לחזור איתה לנקודת המוצא, אל משבצת (8), כפיל שרשום בחלק התחתון של המשבצת למטה מן הקו. בשלב זה לדועים כבר כל הערכים שמופיעים בצד למלן של המשוואה ולכן נוכל לומר שקלים: 2 = (4)2,0א07882 * 2 = (4)2,1א07082 תוצאה זו מעבירלם למשבצת ‏ (3) והלא מאפשרת לחשב את ערכו של הבלטול באותה משבצת. מציבים תוצאה זו במשבצת (2) ובעזרתה מגיעים לתוצאה הסופית - 8. ערך זה מחזירים לתכנית הראשלת במשבצת (1). 2 פרוצדורה רקורסיבית פרוצדורה יכולה גם כן להלות רקורסיבית כפל שנראה בתכנלת להחלפה של סדר הספרות במספר נתון. נתאר את השלטה בעזרת תרשלם זרלמה. החלפת סדר ספרות במספר א מצא את הספרה האחרונה ב-א (10 ססא א ) החלפת סדר ספרות במספר א קצץ את הספרה האחרונה ב-א 0 טנס א ->א 155 התכנית בשפת פסקל: (1/אוודאס תהעפדא :א) א צגתעג תס מתטפתססתת (1) אזססת (2) ;10 פסא א) מעדתחט (3) אתחד 0 <> 10 טנעת א שד (4) (10 ענת א) א גת זחסות (5) ; פא (6) הןו בתרשים הזרלמה והן בתכנלת אלן הוראת לולאה, אלא רק פקודת ‏ א1. הלולאה נוצרת כתוצאה מקרלאות נשנות של הפרוצדורה. מובטח שקרלאות אלו תסתלימנה, שהרל חללוק חוזר של א ל-10 לביא בסופו של התהל:ך לתוצאה של 0 ולהפסקת הביצוע. אל נעקוב אחרל בלצוע התכנלת ע"? המקרה הפרטי שבו א שווה 327, כלומר רוצים לבצע: (327)א 04947. להלן רשומות הפקודות לפ? סדר הביצוע בפועל: (1) (7) מדדתט (2)/ בצע (32) א דגק זז (3) (2) מצדתט (4) בצע (3) א 747ז סו (5) (3) מדנתח (6) הפרוצדורה | (3) א 10814721 הסתילמה, כל הגענו לשורה (6). (7) הפרוצדורה (32) א 840814241 הסתיימה, כל קראה ל-(3)א 17ת.11, אשר זה עתה הסתלימה. (8) הפרוצדורה (327) א 140813721 הסתללמה, כל קראה ל-(32)א דגעוחסגת שזה עתה הסתלימה. הפרוצדורה הרקורסלבית הסתילמה מכיון שהתנאל בפקודת ת1 הופך להיות 88תַ2ע בסופו של התהליך. הדבר גורם לסיום של הקרלאה האחרונה ל- א [גץ4והס0גת ומאפטשר לפרוצדורה הקוראת להסתיים. העובדה שהפרוצדורה הקוראת הסתיימה מאפשרת לקריאה הקודמת להסתלים וכך הלאה. 2 ה8משתנלם לוקל??ם בכל פעם שפונקציה או פרוצדורה קוראת לעצמה, הלא ?וצרת קבוצת משתנלם לוקליים חדשים. קבוצות אלו משתחררות רק כאשר הפרוצדורה או הפונקציה שלצרה אותן מגלעה לסיומה. קבוצות המשתנים הלוקלללם בדוגמאות הקודמות וסדר שחרורן מתואר בטבלאות הבאות: משתנים לוקליים עבור סדר השחרור דוגמת החצקות ) =(2א, א) ( =( (2,1) =(בא,4א) =(,א, /א) 1206 סדר השחרור 3 2 1 מטשתפנים לוקליים עבור דוגמת ההחלפה של סדר הספרות בתכנית להחלפה של סדר הספרות נלתן גם כן לעשות לולאה פנימלת במקום סדרה רקורסיבית, כמו שנראה להלן: ; (1טטצדס תפדוע :א) א 07 מתטסמססתע (1) אזסטת (2) דהחקות (3) 10(0 עסא א) מצדאט (4) 0 שצעפ א =:א (5) 0א דעאט (6) פא (7) נציג דוגמא לפרוצדורה, בה המשתנה הלוקלל הוא מסוג 08.4%: תכנית להחלפת סדר התווים במחרוזת בשפה האנגלית, שמסתליימת בנקודה. ; ךז דע ותסגת מתטקתססתת (1) תג (2) תס :טג (63 אזסטת (4) ; (צ4ד) פגחת (5) אחחד '.' <> עטגדך תד (6) ; זא גד (7) (טבד) מודתט (8) ; פא (9) הסבר: בכל פעם שקוראים תו שונה מנקודה, נוצרת קרלאה רקורסיבית לפרוצדורה וטא דהתהוסגת. כל קרלאה כזו לוצרת גירסה נוספת של המשתנה הלוקלל טגע, ז"א וְטג1, 74 וכו'. כאשר מגלעים לסוף המחרוזת שגודלה א וקוראלם נקודה (ז"א: '.'=14%8,1), מבצעים את שורה (8) בפעם הראשונה ומדפיסים את הנקודה. הביצוע של שורה (8) מסללם את הקרלאה לפרוצדורה ְזעא 814018.4727 ומאפשר לפרוצדורה הקודמת, שהופסקה בשורה (7), לעבור לשורה (8) ולהסתילם. תהליך זה נמשך עד לקרלאה הראשונה של הפרוצדורה, שבה מדפיסלם את התו הראשון של הקלט ומסיימים. בזה מסתיים הביצוע של כל סדרת הקרלאות. ננית שהקלט הוא ".4202". סדר הפעולות לפל הפרוצדורה יהלה: א. קריאה לפרוצדורה ז₪]אא 84081727 בפעם הראשונה. הילא קוראת כקלט את האות 3, שתהיה [12%. ב. מבלל לסילם את הפרוצדורה הנוכחית, הפרוצדורה שעתסא 47ע0₪4הת נקראת 27 בפעם השנייה ועכשלו הלא קוראת כקלט את האות 5 שתהיה כ ג. מבל? לסלים את הקרלאה הנוכתלת, ‏ "אחא ד2עומסו נקראת פעם שללשית ואז הלא קוראת כקלט את האות 6 שתהלה בָ/ג7. ד. מבל? לסיים את הקרלאה הנוכחית, ץ+םתעא 14747ת140 נקראת בפעם הרבלעלת ואז הלא קוראת כקלט את האות 2 שתהלה ;/7. ה. מבלי לסיים את הקרלאה הנוכחית, ץתזתא 7ע]₪8408 נקראת בפעם החמישלת וא היא קוראת כקלט את התו '.' שלהלה 1205. קרלאת הנקודה מאפשרת לסיים את השורות (7)-(6), לעבור לשורה (8), להדפיס 705 (הנקודה) ובזה לסללם את הקרלאה החמלשלת. ו. עם סילום הקרלאה החמלשלת אפשר להמשלך בקרלאה הרבלעית במקום שהפסקנו לפני הפקודה להדפסת ,18% בשורה (8). לכן מדפיסים עכשיו את האות 2 ומסלימים בכך את הקרלאה הרבלעלת. ז. עכשלו אפשר להמשיך בקרלאה השלישית מן המקום שהפסקנו לפנל הפקודה להדפסת בגך, שערכו 6. נדפיס אותו ונסיים בזה את הקרלאה השללשלת. ח. עכשלו אפשר לחזור לקרלאה השנילה, להדפיס 7/(=5 ולסלים את הקרלאה השנלילה. ט. עכשלו אפשר לחזור לקרלאה הראשונה, להדפיס ג=ן/72 ולסלים את הקרלאה הראשונה ואת סדר הקרלאות כולו. אפטר להחללף את סדר הקלט גם בלל קרלאה רקורסיבית של פונקציה: קולטלם את התוולם למערך ומצלגים את תוכנו מסופו עד תחללתו. למעשה, ‏ זה מה שהקריאה הרקורסלבית עושה, אך במקום לשים את התווים במערך שמוגדר ע"* המתכנת, היא בונה מערך פנלמי כתוצאה מן הקריאות הנשנות לפרוצדורה. 3 מגדל? הנו? - הדגמת רקורס?ה (*) טקס של כוהני הדת במגדל העתלק של ברהמה בטליבט מתואר כך: נתונים שלושה מוטות (השמאל? לקרא , האמצעל - 2, והלמנל - 0) ונתונות א טבעות בקטרים שונים. במצב ההתחלתי כל הטבעות נמצאות על מוט 2. הטבעת א, שקוטרה הוא הגדול בלותר מונחת למטה. הטבעת שקוטרה קטן לותר ומספרה 1-א מונחת עליה וכו', עד הטבעת שקוטרה הוא הקטן ביותר שמספרה 1, שנמצאת בראש ערימת הטבעות. המצב מתואר בציור הבא: 4 | | התפקיד שהוטל על כוהנל הדת הלה להעביר את כל הטבעות ממוט 4 אל מוט 6, כאשר 2 *כול לשמש כמוט בלנללם, או מוט עזר, לפל התנאים האלה: 8 א מותר להעביר רק את הטבעת העליונה בכל מוט. ב. אסור שבשלב כלשהו של התהליך טבעת גדולה תהיה מונחת על טבעת קטנה ממנה. ג. מוטות 4 ו-0 לכוללם לשמש כמוטות בלנלים, אם התנאים שהוזכרו מתקללמלם. אפשר לפתור בעליה זו בשלטה רקורסיבלת. נלתן לתאר את שלבי הפתרון בעזרת 24 צעדים אלה, כאשר א הוא מספר הטבעות: א. אם 1=א, מעבירים את הטבעת הלחידה מ- ל-6 ועוצרלם. ב. אם 1<א, מעבירים את 1-א הטבעות העליונות ממוט ‏ אל מוט 5, כאשר 6 משמש כמוט בינללים. ג. לאחר שמעבלרים 1-א טבעות ל-5, מעבירים ממוט 4 למוט 6 את הטבעת האחרונה, שקוטרה גדול לותר. ד. הטבעת שקוטרה הוא הגדול ביותר נמצאת במוט היעד 6. עתה אפשר להמשיך ולהעבלר למוט 6 את 1-א הטבעות שנמצאות במוט 2, כאשר מוט ‏ משמש כמוט ביניים. בצעדים ‏ ב ו-ד מנלחים שעל אף שלא ידוע אלך להעביר א טבעות ממוט למוט, כן לודעים אלך להעביר 1-א טבעות ממוט למוט. השאלה המתעוררת פה הלא האם אומנם לודעים זאת? והתשובה הלא, לא! אבל יודעים אלך להצלג העברה של 1-א טבעות בשני שלבים: בתתילה מעבירים טבעת אתחת ואח"כ מעבלרים 1-(1-א) טבעות. אם ממשלכים מגיעלם למקרה של העברת טבעת אחת (ז"א; נפהית 1-א פעמלם את המספר 1) והפתרון למקרה זה ידוע מצעד א למעלה. התכנית הבאה מבוססת על 4 הצעדים שפורטו קודם: ; ( דטקטס, דטעא1) 31ס0זא אגתססתתק | (1) פתצ (2) דאזאוא. .1 = א 511 ת4פ5זא (3) תאט- (4) תתא :א (5) ;1 548 :א) סא 11 יס (6) (ת04 :תחלת דסא ,עגגצ דסא ,תסאגא דסו (7) | אנספת | (8) אם יש רק טבעת אחת, העבר אותה למוט *) (9) (* היעד וסיים את הפרוצדורה. (10) אפח 1=א עך (11) ('העבר טבעת 1 ממוט' ,תסאגא דסא ,'למוט' ,פגגצ עסא) אזאנזתט (12) ו (13) את (14) (* העבר 1-א טבעות מ-4 ל-2 כאשר 6 משמש כמוט בלנלים *) (15) ; (עגאצ סו ,29 07א , אסאגא זסא (1א) 1אז זו (16) (* העבר ממוט 4 למוט 8 את הטבעת שנשארה *) (17) ; ('העבר טבעת',א, 'ממוט',תסאגא 1סא, 'למוט', פגגץצ דסא)אזמינדתט (18) (* העבר 1-א טבעות מ-5 ל-0, כאשר 2 משמש כמוט בלנללם *) (19) ; (ת0א דסא ,סגגצ דסא ,אע2ת דסא ,1-א) זסאגז זו (20) ספא (21) (* פרוצדורה ז0א84 1024181 *) ;אע (22) 109 (* התכנית 1024 *) אנסעת | (23) ; (א)פפת (28) ! ('6' ,'ם' ,'ג' ,א) דסאגא זא1הס6דוו (25) .את (26) נעקוב אחר מסלול ביצוע התכנית באמצעות הצגה חלקית של הפלט למקרה 5=א, ז"א כאשר נתונות 5 טבעות. מכיון שיש שתי קרלאות לפרוצדורה הרקורסיבית, צריך לעקוב אחר הקריאה הרקורסיבית וגם אחר המקום בתכנית שבו נעשית קרלאה זו. מסלול הפתרון מוצג בתרשים שבעמוד הסמוך. שורות פלט (שורה 12 בתכנית): 1. העבר טבעת 1 ממוט 2 למוט 6 2. העבר טבעת 2 ממוט 4 למוט 5 3 העבר טבעת 1 ממוט 6 למוט 5 84. העבר טבעת 3 ממוט 4 למוט 6 5. העבר טבעת 1 ממוט 5 למוט 4 6. העבר טבעת 2 ממוט 2 למוט 6 7. העבר טבעת 1 ממוט 4 למוט 6 8 העבר טבעת 4 ממוט 4 למוט 5 הסבר: הקוש במעקב אחרי הפתרון נובע מן העובדה ששמות הפרמטרלם של הפרוצדורה תמיד מתחלפים. במחזור הראשון המוט המקורי, מוט היעד ומוט הבלנלים הם 4, 6 ו-89 בהתאמה. במתזור 2, שמגיעים אללו בשורה (16) של הפרוצדורה, הסדר החדש הוא 2 ,2 ,6 (מוט הבלניים 2 עובר למקומו של מוט היעד). הקושי מודגש במלוחד במשבצת האמצעית של מחזור 4, שבו יש החלפה נוספת של סדר המוטות לאחר הסתעפות לביצוע חדש של הפרוצדורה משורה (20). בטורה (20) סדר הפרמטרלם הוא מוט מקורל, מוט לעד ומוט בינלים דהיינו ‏ 6, 5, ו-4 בהתאמה (עיין במחזור 5 שבתרשלם המצורף). לאחר שאוספים ‏ 64 שורות של פלט, לש במשבצת הנמוכה של מחזור 3 קריאה נוספת לפרוצדורה. הפרמטרים עכשיו הם 5, 6, 4 (עלין במחזור 8). המחשב יצטרך בשלב הזה לקרוא מחדש את הפרוצדורה פעמלם נוספות. כאשר עורכים מעקב לדנל אפשר לשים לב לעובדה שמחזור 4 החדש (עם 2=א) שונה ממחזור 4 הישן (שכבר סיימנו) רק בזה שבמקום מוטות 6,2,2 סדר המוטות הוא 4,0,8. לכן במקום להוציא את שורות (5), (6), (7) של הפלט ע"י לצירה מחדש של הפרוצדורה, נוכל להעתיק את שורות הפלט (1), (2), (3) אבל יש להחליף את א ב-8, 2 ב-6 ו-6 ב-2. כך קבלנו את שורות (5), (6) ו-(7) של הפלט. בטשלב זה, נוכל לחזור לטורה (20) שממנה הסתעפנו, לסלים מחזור 3 ולחזור לשורה (17) במחזור 2. בשורה (18) מדפיסים שורת פלט (8), כאשר הפרמטרלם המתאלמים רשומלם במשבצות של מחזור 2. מכאןו עוברים לשורה (20) כדל להתחיל מחזור 3 חדש (אינו מופיע בתרשים). על פי אמונתם של כוהני הדת בטיבט, העולם יגיע לקיצו כאשר הם לסיימו בהצלחה את משחק המגדלים כשמספר הטבעות הוא 64. כאשר מנסים לעקוב אחר התהליך של העברת 5 טבעות, אפשר להבין מדוע אין כל חשש מכך שקץ העולם יגיע בקרוב. 200 יש)ן1א)66ט 86 ץ 06486 044001 6גם (8)== '₪0)206 שא6664 66גש6 6% 0% 2666 ה ה הרה שאה ---ת ָ% 8066ם 48 שא א66 > . 66 77 1 66066 -- ללשל , 66 "ל 600166 )נש 87 01)6 '06: - . ְ ש : 06 66 ₪ 86 1 46 אש .ג שא064 4406ש0ש 616 '] 6600 0466 1601640 - -- --] )16 6א066 044001 ₪16 1 660 8166 1602640 1 8:66 6אם6 6666 5 את 139 -1ַ108% 600 שן) א06 020 0 6066 ?‏ 660 8066 16260 א א ךז 6166 6686 46660 1 'אז = ך -1 0406 1 ש₪8066₪ 6086 :קש 1 8066ם 1 א"=ץ 46846 323-204 ץצ 6 08% -גצצ) ‏ > 0 א323-10 > 0 שא 23104 = 6 0%- 323 01-20 = 6 9 אסת גטט? = 6 6 א66 אס גל > 0 0 אל = ל צּ אס סאל = ץ 0 ? / = ך 84 ץ 00166 ?+ 00106 5 00166 4 > 20166 ג 7 6 | )0664816 שא 068 *₪028 ץ 600106 4016 -- ---|%1-131%40918א 10‏ ב660 א060 070 80660 'ץ 660 8166 ₪160 1 6066 ₪066 131 גטאסך ש)0 ₪068 08 0%66ם 16260 8166 660 8' ₪086 ₪6066 81 6---- 1 6066₪סם ַפ 1% , 2 ב אס 323 = 8 0 23108ט? > 0 שא א23-0בא5 > 6 שא (פ' צ' כ' 8) % מ 2 א06 א = 8 ש)4 068 ו = 0 41₪ א₪6 = ל ב = וש .. ב אס אאנסט? = ץ אס וסט = ץ )0 א' = 5 אל = ל אל = 6 א ך 6646ש ךז 00106 ? 0106 . 001606 211 4 תרג?ללים 1 ששאלות (1) מה מבצעת התכנלת הזו: ; ( קיטס , צטפאד) פדאאתצע אגתססתת | (1) תפגט (2) ; פפ0מעאד :8128 ,א ,1 (3) ; ( ח6₪מאד :א 2) שס0סעגא ‏ תתסתתססתע | (4) אזסטת (5) אפח א= עד (6) (א) מזדתח (07 שפזת (8) אנסטת (9) ;(1) מקדתח (10) (א ,1+1) 47001 (11) (1) צדתט (12) פאם (13) ; פא (14) (* סדאגתצק *) אנססת | (15) ;(5128) פגמת (16) 0 8125 1710 1=:א תסע (17) אזסחת (18) 1 =:1 (19) ((א ,1) [ססעו (20) א יזוח (21) סאת (22) .פא | (23) (2) נתונה הפרוצדורה הרקורסלבית "מגדל? הנוי", שהוצגה בסעיף 15.2. סללם את תהליך המעקב, משלב 9 עד שלב 31, כאשר 5=א. (3) שנה את התכנית דוזתא | דגע.חזס ד כדל שלא< תדפיס את הנקודה בסוף המחרוזת. 2 תכנלות (1) כתוב תכנלת רקורסלבית שקוראת תווים ומדפלסה אותם עד שהלא נתקלת בתו רוות. (2) כתוב שתי תכנלות, אחת אלטרטיבלת ואחת רקורסיבית, כד? לחשב כל אחת מן הפונקצלות דלהלן: א. [ַא (עצרת). נתון: 1 0א , (1-א)זעתתל?ד*א (0 )ידיד (א) 2 12 ב. מכפלה של א ו-א. נתון: א = (1,א)תיטא א , (1-א,א)זעא + א = (א, א)זפעפ1 ג. מספר פלבונצ'? א. נתון: 1 = (1)פדק ,0 = (18)0ע וכו 1א , (2-א)פ1ע + (1-א)פדע = (א)18ע (3) כתוב פונקציה רקורסיבית כדל לבנות מספר שלם מסדרה של תוול ספרות. השלטה מבוססת על שלמוש חוזר בנוסתה: ('0')ת0 - (092)00 + תגתפדא * 10 =:8גת5זו 6 הוא התו טעכשיו נקרא. סדרת הספרות לבניית המספר מסתילמת כאשר פוגשים בתו שאלננו ספרה. (4) כתוב תכנית רקורסלבית כדי להפוך מספר עשרונ? למספר אוקטלי, ע"ל טשימוט בטשיטה המתוארת, כאשר % הוא המספר העשרונל: אם 0=א, סללם את התהליך. אם 0<>א, הספרה האוקטלית הלא משמעותית ביותר הינה: 8 כסא א. החלף את % בביטול 8 דכ א. חזור לצעד א. > על (5) כתוב פונקציה רקורסיבלת לבצע את האלגוריתם של אוקללדס. האלגוריתם מלועד למציאת ה-607 (740108 אסא60 57מעמת0) של שני מספרים שלמלם 1 ו-א. זהו הערך (או "המכנה המשותף") הגדול ב?ותר שאפשר לחלק בו את 1 וגם את א. השלטה מתוארת כך: א. אם א ו-א שוולם, אפשר לבחור בכל אחד מהם כ-607 ולסלים את התהללך. ב. אם א ו-א שונלם, לש להפחלת את המספר הקטן מן הגדול, ולעבוד עם שנל המשתנלם האלו: = השלם שהלה הקטן בלותר לפנל פעולת החיסור. = השלם החדש שהוא ההפרש בלן שנל המשתנים המקורללם. ג. חזור לשלב א. 3 פרק 16 מבני נתוניס 1 רשלמות. 1 רשלמה מסודרת רשימה מסודרת (115% 02686266) היא מערך ממויין (צְ8עץ4 50:866), שבו כל אלבר ‏ גדול מן הקודם לו. הערך של האיבר הראשון במערך זה הוא הקטן ביותר והערך של האלבר האחרון הוא הגדול ביותר. אם השם של המערך הוא א1אס1טא וגודלו א, אזי נוכל לומר שקיים: [1]א1אטעפא < [1+1]א1אטעטא בעבור כל ערר של 1 בין 1 לבין 1-א. כדל להוסיף איבר לרשלמה דצו דרושות שלוש פעולות: למצוא את המקום ברשלמה, אשר מתאים בעבור האיבר החדש: למשל, בין האלבר הטליש? לבין הרביעל. לפנות את המקום בעבור האלבר החדש: לשם כך יש להזיז את כל האיברים שמקומם להלה אחרל האלבר החדש מקום אחד לאחור כלומר, איבר שמקומו היה 1 יעבור למקום 1+1. ג. להכנלס את האלבר החדש למקום שהוכן עבורו. א. ב. נציג דוגמא: מנהל גן חיות בקיבוץ מחזיק רשלמה של בעלל החלים שנמצאלם ברשותו. רשימה זו מסודרת לפ* האלפבלת, ומופיעה במערך א1אטעטא. אי אוו = [1]אזאטעטא ברבור = [2]אזאטזטאא חתול = [3]א1אטיאא פרה = [4 ]א1אשזפא שועל = [5]א1אשעאא מנהל הגן מוסלף כלב לגן החיות ומוסילף שם זה לרשלמה. הצירוף של המלה "כלב" לרשימה מחליב את הצעדלם הבאלם: א. מצלאת המקום המתאלם ברשלמה עבור המלה "כלב". זהו המקום הרביעל, לפנל "פרה" ואחרי? "חתול". ב. הזזת האלברים שנמצאים במקום הרביעל ואילך, ז"א "פרה" ו-"טועל". 24 הרשימה החדשה נראלת כך: אווז = [1]א1אטעטא ברבור = [2]א1אט1טא חתול = [3]א1אטעטא כלב | = [4]אזאטזטא פרה = [5]א1אטישא שועל = [6]א1אטזפא כדי לבטל אלבר מן הרשלמה סדר הפעולות טונה במקצת וכולל שנל צעדים: א. איתור האלבר שרוצלם לבטל. ב. הזזה לכיוון ראש הרשלמה של כל האלברים שנמצאים אחרל האיבר שרוצים לבטל. הזזה זו היא של מקום אחד ובסופה יתפנה מקום אחד בסוף הרשלמה. הבלטול של האיבר המלועד למחלקה בתהללך ההזזה נעשה ע": כתיבה של הא*בר הבא אחרלו ברש?מה במקומו. נובע מכך, שאם מוסיפים או מבטלים איבר בראש רשלמה שאורכה א, צריכים לעשות כ-א פעולות הזזה. אם האיבר הנוסף או המבוטל נמצא בסוף הרשלימה, אין צורך בפעולות הזזה כלשהן. בממוצע דרושות 2/א הזזות בכל פעולת הוספה או בלטול של איבר ברשימה. 2 רשלמה משורשרת 7-6 כדל להקטין את מספר ההזזות בזמן הוספה, או ביטול טל איברים של רשלמה מסודרת, משתמשלם בשיטה של רסימה משורטרת (115%6 48 שבה שנל מערכלם: א. מערך הנתונים (ץ4::8 28%58) מחזיק את הנתונים ללא סדר כלשהו. הנתונלם לכולים להילות ערכלם מספרלים, רשומות, או שמות כמו בדוגמא ועוד. ב. מערך המצבלעים (8ת%6מ201 0% ץ8:ע) מכלל את. סדר האלברים של מערך הנתונלם. כל אלבר במערך זה מקביל לאיבר במערך הנתונים והוא מכיל מצביע אל האיבר שנמצא אחריו לפ? סדר המלון של הרשלמה. מצביע ‏ 0 מורה טהנתון באיבר המקביל במערך הנתונים הוא האחרון ברשלמה. למטה מוצגת רשימת גן החיות כרשימה משורשרת. המערך הראשון והשנל נקראלם אזאטעשא ו-412212 בהתאמה. מערך הנתונלם: מערך המצבלעים: שועל = [1]א1אטעעא 0 = [2814]1דז1ן ברבור= [2]א1אט0טא 5 = [1(12214]2 פרה = [3]א1אטזעא 1 = [4]3דמ2דג אווז = [4]א1אטזטא 2 = [11/72814]4 חתול = [5]אנאטזטא 3 = [117281415 = [6]א1אטעעא = [1112814]6 נסביר את הקשר שבין שנל. המערכלם המרכלבים רשלמה משורשרת: א. האיבר השנ* במערך הנתונים מכיל את המלה "ברבור". המלה שאחרלו לפי סדר המיון היא המלה "חתול", אשר נמצאת באיבר החמליטל של מערך זה. בהתאם לכך באיבר השנ: במערך המצביעים, אשר מקביל לאיבר עם "ברבור", נמצא את המצביע 5, שפונה אל האיבר החמלשל במערך הנתונים. 15 ב. באיבר [2212]1דא נמצא מצביע למקום הבא ברשימה אחרי אלבר 1 שבמערר הנתונים. האלבר הראשון ברשימה אינו נמצא לאחר איבר אחר וכדל לדעת את מלקומו יש צורך במשתנה מליוחד, שנקרא לו א15%80ת. במקרה זה 4=אסמפדת, ז"א בראש הרשלמה נמצאת השם "אווצ", שרשום במקום הרביעי במערך. ג. כדי להמשיך בסריקה ברשימה בודקים את [41281]4/ אשר טשווה ל-2. עוברים למערר הנתונים, לאיבר [2]א1אט1תא אשר רשום בו "ברבור". זהו האיבר הטשנל ברשימה מבחינת. סדר האלפבית. בודקים את [2]ג1281א אשר שווה ל-5 ועל סמך זה עוברים אל [5]א1אטעמא שבו רשום "חתול", שהוא השלישי ברשימה בסדר האלפבית, על אף שהוא נמצא באיבר החמלש במערך. ממשלכים כך ל"פרה" ואחר כך ל"שועל", אשר רשום באיבר הראשון במערך הנתונלם. האיבר המקביל במערך המצביעים הוא 477814]1[=0א, אשר מסמן ‏ את סוף הרשימה. [ ללצוג סכמטי של רשימה משורשרת זו, כולל הוספת איבר, נראה כך: אסתווסת אסוופ1ת ₪ - צר אי א 6 כדי להוסיף איבר לרשימה צריך לבצע את הפעולות הבאות: א. לשנות את המצביע של האיבר שלפני האיבר החדש כד? שיצביע עתה אל האלבר החדש. ב. לרשום מצביע עבור האיבר החדש כד?ל שיצביע בצורה נכונה אל האלבר שאחריו. בדוגמא זו, אם מוסיפים איבר שמכיל את המלה "כלב" הוא צריך להלות, לפל סדר המלון, בין המלה "חתול" לבין המלה "פרה". לפיכך צריך להחליף את המצביע של האיבר המקביל ל"חתול" כדל שיצביע אל האיבר שמכיל את המלה "כלב". את המצביע של האיבר המקביל ל"כלב" יש לכוון אל האיבר שמכיל את המלה "פרה". באופו מפורש לותר, הוספה של המלה "כלב" לרשימה מחילבת את הוספת האלברלם הבאים: א. במערך הנתונים: כלב=[ 6 ]א1אטצטא איבר זה הוא האיבר הפנוי הראשון במערך א1אט1תא. רושמלם בו נתון חדש מבלי להזיז איבר כלשהוא. את סדר האיברים קובעים באמצעות המצביעים. ב. במערך המצביעים: 6 =:[7914]5ד7 המלה "חתול" נמצאת באיבר החמלשי וצריכה להיות לפני המלה "כלב" בסדר האלפביתי. המצביע של "חתול" לצביע על [14]6אטזעא שמתזיק את "כלב". ג. במערך המצביעלם: 3: [6] דפ2ידו המלה "פרה" נמצאת בסדר האלפביתי אחרי "כלב" ולכן המצבלע של "כלב" לצביע על האיבר שמכיל את "פרה". 416 לפנל ההוספה של האיבר החדש, האיבר [%412814]5 הכלל את הערך 3, אשר נמצא כעת באיבר [4712814]6א. לפני ההוספה האיבר "חתול" הצביע על האיבר "פרה", ועכטיו האיבר "כלב" מצביע עליו. זה מדג?ם את העובדה שאת המצביע החדש נלתן לקבל תמילד מן האיבר שמיקומו ברשימה לפנל האלבר שזה עתה מוסיפים. את האיבר החדט רושמלם במקום הראשון הפנוי, כדי להמנע מהזזות כלשהן. לכאורה אפשר להנלח שהמקומות הפנויים להלו תמיד בסוף הרשלמה. לשם כך אפשר להשתמש במשתנה א0תג208, אשר ‏ יצביע על המקום האחרון, כפי שמחזלקים את המטשתנה א15%0 להצביע על האיבר הראשון ברשימה.אולם, מכיון שמבטלים איברלם בכל מקום במערך הנתונלם, נוצרלם מקומות פנויים גם באמצע הרשימה והבעיה של מציאת המקום הפנוי הראשון נעשית מורכבת לותר ומשתנה העזר המוצע לא לועיל. ו הפתרון לבעלה זו הוא להשתמש לא רק באלברלם של המערך 4412212 שמקבילים לאיברים ה"מלאים" במערך אזאטעעא, אלא גם באלברים של 47281 המקבילים לאיברים הפנוללם שבמערך א1אטעמא. נשתמש באלברים אלה כדל? להצביע על האיבר הפנול הבא. בכל פעם שמתוסף איבר פנוי, נעדכן את הערכים במערך 41281 כדל לטקף את המצב החדש. את המצללן (6ק12ש6פפט5) של האיבר הראשון הפנול נתזלק במשתנה שנקרא צשאג2. כתוצאה, המערך זל מחזיק שת" רשימות משורשרות, אחת עבור האלברים המלאים ואחת עבור האלברים הפנוללם. לדוגמא, נתונה רשימה משורשרת אשר כוללת אלברים "מלאלם" ואיברים "פנוללם". ננלח שהמערכים המוצהרים הם בנל 10 אלברים כל אחד. ננלח גם שערכ? המשתנים המצביעים על האיברלם הראשונים ברשלמת האיברים המלאים וברשימת האלברלם הפנויים הם: 6=א1580ת, 7=צטאגת בהתאמה. המערכים של הרשימה המשורשרת הם: 0 = [1]גזמ?דאא שועל | = [1]אזאטצטא 0 = [2]ג11.72891 = [2]א1אטצפא 8 = [2814]3דא ברבור = [3]א1אעפא 2 = [472814]4 = [4]א1אטעטא 1 = [5]ג281דא פרה = [5]א1אטצעא 3 = [472814]6 אווז | = [6]א1אטזעא 9 = [281.]7דאא = [7]א14אטעפא 0 = [147281]8 חתול | = [8]א1אטצעא 4 = [72814]9 = [9]א1אטעטא 5 =[72814]10 כלב =[10 ]א1אטיפא המשתנה צשאג? שווה ל-7 ולכן נפנה לאיבר 7 ונמצא ש-[7]א1אטזעא הוא פנול. בתוך [%8412814]7 נמצא הערך 9, אשר מצביע אל [9]אזאטזטא וגם הוא פנול. בדרך זו ניתן לעקוב אחרל כל רשלמת האיברים הפנוילם עד שמגיעלם אל [ 2 ] ג דמלידון שתוכנו ‏ 0. דבר זה מסמן שאיבר 2 במערך א1אשזעא הוא האחרון ברשימת האלברלם הפנוללם. 107 6.2 ?יבוד של רש?מות 1 הוספת אלברלם לרשימה משורשרת נתאר בתרשלם הלרארכל (02826 עג0ע110?8) את הצעדים הבסיסלים להוספת אלבר לרשימה משורשרת. בתרשלם מסוג זה משרטטלם מלבן נפרד עבור כל פרוצדורה, ומראים את היחס בינה לבין הפרוצדורות האחרות הנקראות על ידה או הקוראות לה. תרשים זה איננו מתאר את הלחס הלוגי? בין הפרוצדורות המתוארות בו. התרשלם ההילרארכל שמוצג כאן מתאר הוספת נתונים, אשר נמצאלם במשתנה בשם ₪ אשעגא, אל רשימה משורשרת: הוסף צזפתסתצס. אטעיהא לרשימה המשורשרת שים הפתפתאס. אטצתא באיבר שמספרר ההפתסתזס מצא מקום פנרל ברסימת הפנויים, וקרא ‏ לר הפתסתאס עדכן את המצביעים כך שאיבר מספר הפתסתחס יפסיק להיות חלק מן הרשימה המשוררשטרת של הפנרלים, ריהיה חלק מן הרשימה המשורשטרת של הנתונים תרשילם הזרלמה הבא מאפשר פירוט רב יותר של הפרוצדורה לעדכון המצביעים ברשלמה משורשרת. נתכנת את הפתרון על פי התרשלם. רשימת המשתנים הגלובליים שלוגדרו בתכנית: אנאטעעא - מערך שמחזיק את המשתנים. 4 - מערך שמחזיק את המצביעלם. 1508 - מצביע לאיבר שמחזיק את הערך הקטן בלותר ברשימה המשורשרת. צטאגת - מצביע לאיבר הראשון ברשילמה המשורשרת של תאלם פנוללים. אטץזאא 506 - סוג הנתונ?ם שמופלעים במערך אדאשצטא. - קבוע שמצלין את סוף הרשלמה ושערכו שווה ל-0. 218 צופתפתאס אטתא צריך להיות ראטון ברטימה 7 סרוק את הרשימה (בעזרת מערך המצביעים) עד שתגיע לאיבר אשר גדול מ-5₪1תסתס.,אטינגא או לסוף הרשימה. כך תקבע את הנתון שקודם ל-א5הסתא6 אטצגא ברטשימה העבר את הערך הקודם של אסאפזת לתוך [אפתסתאס] תזפקדת האיבר הראשון הוא עכשיר פאס רלכן פתכתה0 --> אספזת תקן את הָמצביע של האיבר שמקומו לפנ? אפתסתאס. אטנתא כדי שיצביע על 58%הסת63. אטצתא [אפתפתצס] הזמ2לתון כדי שיצביע על האיבר שמקומו אחר? אפתסגאס אטנגא כוון 19 הערך של המשתנה א1980ת יכול להיות 0 כאשר הרטלמה ריקה ולכן הטווח של המצללנלם (5058021258) עבור המערך ‏ א1אטצטא הוא מ-0 עד א. אע"פ שלא מחזלקלם נתונלם באיבר [0]א1אטזשא, נמצאת ‏ בתכנלת ההתללחסות [אסט5זת2]אזאטצפא. מכאו, שצריך להגדיר את [0]א14אטעטא כדל טלא תהלה בזמו בילצוע הפקודה המת?יחסת לאיבר זה. התכנלת להוספה של אלברים לרשלמה משורשרת נתונה להלן: ; (או1אא 506 :0 אטצגא) 044 מתטסמססתק תאצ מתסתלאד :גגה ,אתפסא ,00451 אזסטת (א מצא מקום לכתוב את הנתון החדש *) ; צזאת =:0142451 דאג לכך שהאלבר, שהלה קודם שניל ברשימת הפנוללם, *) (* להפוך להלות הראשון ברשלמה זו. ; [ צטאת ]2814דאא =:שטאוע (* רשום 6842851 אש?גא בתא הפנול *) 6458 אטעאא =: [6842458 ]אזאטצטא בדוק אם 0842488 אט?גא צריך להיות במקום *) (* הראשון ברשימה המשורשרת ועדכן בהתאם. 8 (םתטא=אסאפדַ3) עד אתא [א0ס158ת]אטעגא > ה5גפגז6 אטזגא אזסטת ;א1580ת =: [11281.]08.0258ן זז =:א315₪0 מצא את מקומו של הנתון החדש | *) אזספג מבחלנת מיקומו הלוגל לפ? סדר המלון האלפבלתי, ולא מבחינת מלקומו הפיסל. הנתון החדש נמצא באיבר שמספרו ]08140451. מגילעים לכאן אם הרשימה אלננה רלקה, (* והערך הקטן ברשימה קטן מן הנתון החדש. ;,א1580ת =:01סא ; [א15₪0ת] 11172814 =: 1452 פאג (ממטא <> גפג) םח ספ [8454]א1אטצטא < אטעאא) אזספת | ; 1488 =:8מכ0א [1454] 2814דא =: גפ ; פא עדכן את המצביעים כדי לאפשר הוספה. *) מגלעלם לכאן כאשר [1484 ]אזאטדטא => 040458 אטצגא, או כאשר 0842458 אטצגאא יותר גדול מכל הערכ?ם שהיו ברשלמה עד עכשלו. בשני המקרים המקום עבור הנתון החדש נמצא לאחר המקום עם מציין שווה ל- 028%א. לכו, המצביע באלבר מספר %ש02א צריך להצביע על ₪ והמצביע באלבר מספר 0142458 צריך להצביע על האיבר שבא אחר*? %028% (לפנל ההוספה) ומספרו 0 לאיבר שגיאה (* נמצא בתוך המשתנה ששמו 18. (43) =: [004א] 2814ד (44) התג =: [0140458 ] 2814דא (45) פא (46) ; פא (47) בזמו בנילת הרשלמה, המצב ההתחלתי של א51580 הוא םתטא, הערך ההתחלתל של צטאגת הוא 1 וכל האיברים במערך פנוללם. הלולאה הבאה לוצרת מערך של מצביעים המתאלם למצב ‏ ההתחלת? כשהרשלמה רלקה ולכן הילא מלוצגת על ידיל מערך שכל איברלו פנויים. כל איבר פנוי מצבלע אל זה שבא אחרלו. את האלבר האחרון מסמנים ע"ל מצביע שערכו שווה ל-0. 0 1-א 70 1:=1 תסע ;1+ =:[1]זמ2דג ;טא =:[א]2214דאו 2 מחלקת אלברלם מרשלמה משורשרת הפרוצדורה הבאה מוחקת אלברלם מרשימה משורשרת: ; (אט1הא 500 :אדא6מא1 אטצגא) גאזסמון מתטפמססתת (1) ן (2) ; ת68תעאז :אגתפגצ ,אמפסא (3) (* מצא את האלבר למחלקה *) (4) אזסחת (5) ;א190ת =:אגטפצ (6) עאג אזח0ט1 אטצגא <> [אג451צ]אנאטנטא שד 0 (7) 0כ תתטא <> אגמפצ (8) אדסח (9) ; אצ =:אמפסא (10) [אגה5צ] 2814דאא =:אגחפצ (11) ; פאת (12) (* נוציא את האיבר למחלקה מן הרשלמה *) (13) אתחע מעטא = אגחפגצ חך (14) ('האיבר לא נמצא ברשלמה -%') אנט (15) כ (16) אמח אגחפהצ = אסחפנת עך (17) [א1580ת12214]5א =:אסמפזת (18) ₪ (19) ; [אז5צ] 12513 =: [אמפסא ] גדםל?דאא (20) (5 הוסף לרשימת הפנויים את האלבר שהתפנה עכשלו *) (21) צטאגתע =: [אתפגצ] םדו (22) אצ =:צטאה? (23) ; פא (24) הסבר: (12)-(6) בכל שלב מחזיקים בשני נתונים: האלבר הקודם ברשלמה והאלבר הנוכחי. בשורה (6) אין איבר קודם, כל נמצאים באיבר הראטון ברשלמה. אם 1 זהו האיבר המלועד למחיקה, לא נכנסים ללולאה שבשורות (7) עד (12). אם האלבר הראשון אינו מלועד למחיקה, נכנסים ללולאה וממשיכים. רושמלם בכל שלב את האיבר הקודם ב-%028% ואת האיבר הנוכחל ב-א458+ עד שפוגשים באיבר למחיקה. (15)-(14) אם מעטא=אח5)צ פירושו שסרקנו את הרשלמה כולה ולא מצאנו את הנתון למחיקה. מדפיסי?ם הודעת שגיאה. (20)-(16) אם אג458צ-א1580ת, לא נכנסים ללולאה של השורות (7) עד (12), כי האיבר למחליקה היה האיבר הראשון. כדל לטפל באיבר למחיקה, צריכים לשנות את הערך של המשתנה א1580ת, אשר מצביע לראש הרשימה (18). אם אסעפזת שונה מ-אג57+, המשמעות הלא שמוחקים אחד מן האלברלם האתרים. לשם כך צריך לדאוג לכך שהמצביע של האיבר שקדם לאלבר למחיקה יצביע על האיבר שבא אחריו. כלומר: [א4584צ]2814?דא =: [אמפסא]ג1תל?דגא (23)-(22) המקום שהתפנה ברשימה כתוצאה מהמחיקה צריך להופלע מכאן ואללך ברשימת הפנולים. מכלון שמלקומו ברשימה אינו חשוב, הרל קל *הלה לשלם אותו בתחללת הרשלמה. ‏ כדי לעשות זאת, מוצאלם את האלבר הראשון ברשלמת הפנויים וגורמים לכך | שהאליבר | הפנול | החדש לצביע | אליו, ז"א צטאגת=: [אגח5צ]14פ2א. | בכך קובעים שבראש רשימת הפנויים להלה האלבר שזה עתה התפנה, ז"א א58צ=: צטאג?. הפרוצדורה הקודמת מתאלמה גם למקרה שהרשלמה המשורשרת אינה מסודרת כלל. ‏ אם ידוע שהיא מסודרת, אפשר להגבלל את הלולאה שבשורות(7)-(12) לבדלקה של איברים, אשר יותר קטנים מ-4א1ז101₪01 אט10גא. צריך אז לשנות את התוכן של שורות (13)-(20) כד? לבדוק אם: חן אטעגא = [אגא5צ]אנאטזפא פקודת 12 החדשה תהלה: אפחץ א101 אטצגא <> [אגחפהצ]אנאטצסא סד ('האיבר לא נמצא ברשלמה') אומצ1תח ₪ (* שורות (17)-(20) ללא שלנול *) בסעיפים הקודמים, בדלון על רשימות משורשרות הצהרנו על שנל מערכלם: אנאטצפא ו-ג1281א. ניתו גם להצהיר על מערך אחד בלבד שאלברלו הם רטומות שבהן שני שדות: אחד עבור הנתון ואחד עבור המצביע. נקרא לאיבר ברשימה זו בשם צומת (86סא). ההצהרות המתאימות לרשימה משורשרת מפורטות להלן: 007 =: 1פמה אגא מקצץ = 207 0 ;אסטז4א 5060 :אטזגא א :2814דגו ; פא תג 207 עס [גאדהפסת אגא. .1]צגתתה :גאדמפת 12 אל הנתון בצומת 1 פונים כך: אטצגא. [ד] גאזאפות אל המצביע בצומת 1 פונים כך: ד .ָ [ד ] גא1אפטת 16.3 מחסנ "ות ברטשימה משורשרת אפשר להוסיף ולמחוק אלברים בכל מקום שהוא. האפשרות הזו מקשה קצת בקידוד, אבל נותנת מרחב רב לתמרון. הטלפול ברשימת הפנוללם נותח מבחלנת התכנות, כל ההוספות והמחלקות הן תמלד בראש הרשימה. מחסנית (5580%) היא רשימה משורשרת שבה כל הוספה או מחיקה מוגבלת לסוף הרשימה בלבד. שלטה זו נקראת 0ע21 (6ש0 715% ם1 1856),. או "נכנס אחרון לוצא ראשון". נתאר את המחסנית בשרטוט הבא: אסצנט המצביע אל האלבר האתחרון נמצא במשתנה א0צ2 וערכו הוא המספר היחסי של האיבר ברשימה. האיבר האחרון שמוסיפילם למחסנלת הוא גם הראשון שמורידים ממנה, כאשר צריך להוריד איברלם. הוספת איבר למחסנית מקבללה להוספת איבר בסוף רשימה משורשרת ונקראת דחלפה (8ת1ת5ט2). הסרת איבר ממחסנית מקבילה לביטול האיבר האחרון מרשימה משורשרת ונקראת הסרה (פַם51ק0?). הוספה ובלטול של אלברים בסוף הרשלמה הן פעולות פשוטות לחסית לפעולות הוספה וביטול במקומות אחרים ברשלמה. איברל המחסנלת תמלד רצופים מכלון שלא מבטלים אלברים בתוך הרשימה (מערך), אלא רק בסופה, על פל? הערך שבמשתנה א0צ/ע. לפיכך, אין צורך במערך מלוחד כדי להצבלע על האלבר הבא. בכל שלב של פעולות ברשלמה יש לדעת את מספר האיברים שנמצאים במערך, ז"א את הערך הנוכחי של א0צ2. הערך ההתחלתי של אסצתם הוא 0, כל אז אין אלברלם במחסנית. מצהירלם על מחסנית בדרך זו: 01 2 =77א54ת0ן אגון תג אזאטצסא 506 עס [שדאג5אסגא אגא. .1] צגתתה :1דא054ו 17 אגא. .0 :אסצעת 33 לביצוע פעולות דחיפה והסרה דרושות שתי פרוצדורות: ; (אטצגא 506 :אטצהא) געדאסטס מאטפמססאע יש עוד איבר במערך ולכן מספר *) (* המקומות התפוסים עולה ב-1. (* הערך של המקום הנוסף להיה אשץ1גא ‏ *) אזסטת ; 1+א0סצ1זע =:אסצזע אטתזגא =: [אסצזם ] ז'זא54ת6א ; פאע ; (אטץ?4א 506 :אסזא תגטצ) בתהפגה מתנזתפססתע אזסעת (* מעבירים את האיבר העליון למשתנה אש?גא *) ; [אסצת ] 17א6154א =:אטזגא אין צורך למחוק או לאפס את האיבר העליון, *) אלא רק לחסר 1 מן המצביע אל האיבר העליון, שהוא האחרון במחסנלת. כל האלברים שנמצאלם לאחר המצביע לאיבר העליון כאללו לא קללמים ואלן כל גישה אללהם, אף על פל שלא מוחקלם אותם ממש. כאשר מוסלפים ערכים נוספים למחסנלת הם (* לכתבו באלברים אלו והתוכן הקודם לימחק. 1צ =:אסצזע ; פא 1 מצב גללשה במחסנית עד עתה הנחנו שתמלד להלה מקום במערך 1%א40152 כד? לדחוף אלברים נוספים. גם הנחנו שלא ננסה להסלר אלברלם מן המחסנית כאשר פעולה זו בלת?ל אפשרלת כל המחסנלת ‏ רלקה. אולם, שתל תופעות אלו עלולות לקרות ולכן צריך לטפל במצבים אלו בהתאם. דחלפה למחסנלת מלאה גורמת למצב של גללשה (אס1+עסט0). הפרוצדורה המורחבת 28081922 מטפלת במצב זה ע"? החזרת משתנה בוללאנל שערכו 8 כאשר מגיעים למצב של גלישה. ניסיון (שס1++60ת0). בפרוצדורה (14542, אם המחסנית רלקה, הערך אסצ/ע :הלה 24 של ;אסצגא 506 :אשצגא) 42ע1ה0מכ מתהטפמססתק ; (א2001.0 :זוס1עתתטס תג אזספת אפחד דזא52 0 אהא = אסצעם עך 5 =: אסתעתמטס כ א =: אסעתמטס + אסצם =: אסצוקת אסטזאא =: [א0סצעת ]11א54א6 פא ; פא הסרת אלבר ממחטנית רלקה מובלל למצב של שגלאה שנקראת תת-גללשה 0. הפנייה לאיבר [אסעתע]11א40854א מכוונת לאיבר [117]0א40854א שאלנו מוגדר וזו שגיאה. נוכל להתגבר על תקלה זו ע"? הגדרה של משתנה בוליאנל? שערכו להפוך ל-1808 כאשר מגלעים למצב של תת-גלישה. ,אסא 506 :אטדגא תגט) 2גתה5גח מתטסע6סתע ; (אמ2001 :אסתעתפפאט תג אזספת אמחץ 0 = אסצם עך שטתץל =: אסעתתפאט הכיופן אזסעת = :א0עתמפאטס ; [אסצת ] ז1א6854א =: אטצגא 1 - אסצעע =: אסצזא פאק ; עאם 2 לתרונות השלמוש במחסנית נדגים את השלמוש במחסנית באמצעות תכנית אשר קוראת רשימה של שמות וציונים של סטודנטלם. הפלט הוא השם של הסטודנט, או הסטודנטלם, שקבלו את הצלון הגבוה בלותר. כאטר משתמשים במערך רגיל לפתרון הבעיה הזו, הפתרון כולל שלושה צעדים: א. כתיבה של השמות והצלונים למערך. ב. סריקה של המערך כדי לברר את הצלון המקסלמלל. ג. סריקה של המערך פעם נוספת כד? לברר את השמות של כל הסטודנטלם בעלל אותו ציון מקסימלל. על ידי שלמוש במחסנית אפשר להמנע מהחסנה של השמות במערך ומסרלקתו פעמללם. מחזיקים במחסנלת את השם של כל סטודנט שהצלון שלו שווה לציון המקסלמלל שזוהה עד עכשלו. כאשר מגללם סטודנט עם ציון גבוה יותר, מרוקנלם את המחסנית וכותבלם את השם של הסטודנט עם הצלון המקסימלי המעודכן. תכנית שכתובה בשלטה זו נילתנת להלן: ; (1טפצטס , תצטפא1) 6002 אטצד2ד אגתססתתק ו =: 11א0154ן אגא 8קצך :1 קס [1..20]צגתתג = אטעגא 506 תג ;אהא 506 עס [דדאה5מסגו אגא. .1] צגהתתה :דדא0354ו ;01 אגא. .0 :אסצנת ;אסא 506 : 51 ; דא : 64702 אשצד2ץ , אטצד2ד ,אס : 758 ;אטעגא 506 יאטעהא) 42קדאסמכ מאטפמסספק ;תיאת ; (אהתזססת :טסמעתתטס תגל ,אאא 506 :אש1גא תגט) 15442 תתטכמססתץ ;.1האחתידאת ; (אגמתססת :א0קתתפאט אגט 5 *( *( הסבר: השם מכאן אתאסת מונזסמססאע אז6סמ 0 =: אסצעם ; פא ; 0511 פמקסג מתססמססתע 0 אסצנע 10 1 =:1 סק ([1]צדא54ט0.) אזמדדתט ; פא סק אזסטפת ;('כתוב שם וצלון של סטודנט') אזמדדתח (אעצ21ץ ,אשע5) אתפגעת ; פא תכנלת ראשלת ‏ *) אזסתת רוקן את המחסנלת *) אאאסת קרא סטודנט ראשון *) ; זא טפל בסטודנט ראשון כאללו הצלון *) ;אטצ21ץ =:604704 אשוד2ך שלו הוא הגבוה ביותר. ; (011570 ,53₪1) 2גחדחסמת סע (ג61158 ת0 ע0ם) עסא םוחו אזסטת ; זא אמזד 64003 אעצד2ל < אטצד2ד עך אזסטת זהה מקסימום חדש *) ;אצ ץ =: 64004 אטצד2?ך נקה את המחסנלת *) ; אמאסת (61.1580 ,51001) 42ת1מסטת פא ₪ אזסטם אוד 62003 אשצ21ץ = אושדקץ עד ; (61.1514 ,51101) בהחדחסמת אע 6151 עד ('טעות. יש גלישה') אזמדזתט פא ; פא אמח 01584 עסא עד ו פמספג . סא הראשון מוכנס מיד למחסנלת והציון הראשון נחשב לציון הגבוה בלותר. ואילך 64008 אטצז12 יוחלף רק אם לימצא ציון לותר גבוה מן הצלון שנמצא ב-64002 וצ7121. במקרה כזה, מרוקנים את המחסנלת. אם מוצאים צלון אטר שווה ל-02002 אטשצ121 דוחפים את השם של הסטודנט בעל ציון זה אל המחסנלת. 126 4 תורלם תור (6ט68ט0) הוא רשימה שאפשר להוסיף לה ולמחוק ממנה איברים רק בתנאלם אלה: א. הוספות נעשות רק בסוף הרשלימה. ב. בלטולים נעשים רק בראש הרשימה. שלטה זו נקראת 0ע21 (006 71286 םמ1 86ע71) כלומר, סדר השרות הוא כסדר המופע. מכיון שההוספות הן תמלד בסוף הרשלמה, יש צורך לדעת את מקום ההוספה של האיבר האחרון כדי להוסיף אחריו. דוגמא לתור 170ע הוא התור של אנשלם העומדים לפנ קופת הקולנוע כדי לקנות כרטיסלם: אנשים מצטרפים לסוף התור ועוזבים אותו מראשו לאחר רכלשת כרטיסים. אפשר לללצג תור בשתי דרכים: א. רשלמה משורשרת עם רשימת מקומות פנוללם. לצורך זה דרושים שלושה משתנלם: א1580ת - מצביע אל המקום של האלבר הראשון בתור, א0%0 - מצביע אל המקום של האלבר האחרון בתור, צטאגע - מצביע אל המקום הראשון ברשלמת המקומות הפנויים. לניהול תור בטיטה זו דרושלם שנ?ל מערכלם: אחד עבור הנתונלם ואחד עבור המצבלעלם. , ב. מערך אחד בלבד אשר מחזיק את נתונל המחכים בתור. כאטר מגיעים למקום האחרון במערך ממשלכלם אל המקום הראשון. מעדכנים באופן שוטף את המצביעים אל המקום הראשון ואל המקום האחרון בתור. נהחזור לדוגמא של התור לקופת הקולנוע כדל להדגים את שיטת הליצוג השנללה. נצהיר על המערך 108 ועל המשתנלם המתלוולם אללו. 0% (* התור אלנו יכול להכלל *לותר מ-10 איברלם *) | :10 = 108 אג מפצך ;תס עס [1..25]צגתתג סמאסגת = אטזגא 506 תג ;אטזגא 506 עס [ת0סך אגא..1] צגתתה :תסךד ת008דא1 :א0ת4ת40 ,אסחפ1ת במצב ההתחלתי יהיה: 1-א1580ת ו-708 אגא=אסת1ה0. בדרך כלל, כאשר אדם מצטרף לתור מוסיפים אחד ל-א0ת4088, כי מספר האלבר שמחזיק את האדם האהרון בתור גדל ב-1. רק אם 708 אגא=א408120 (כמו במצב ההתחלתי) לא מוסלפים 1 ל-א0ת01, אלא משווים את א20880 ל-1. נמצא, שאחרל שהאדם הראשון מצטרף לתור, גם א1980ת וגם א0ת4088 שווים ל-1. בנקודה מסוימת בזמן, התור יוכל להיראות כך: 207 .1 בנקודה מסוימת בזמן, התור לוכל להיראות כך: האיבר הראשון במערך: אברהם [08]1ץ *= האחרון בתור: להודה [7089]2 05]3[ 09] 4[ 709]5[ 05] 6[ ** הראשון בתור: חוה [08]7 שרה [08]8 האיבר האחרון במערך: חנוך 1 ** מצביע אל המקום הראשון בתור 7 = אסחפזת ** מצביע אל המקום האחרון בתור 2 = א0ת4048 8 כנלסה ויצליאה את הכנלסה ואת היציאה מן התור נבצע בעזרת שתי פרוצדורות, אשר נכנה אותן 4, ו-1212תצ בהתאמה. כניסה לתור: (אט1הא 506 :אטצגא) גפנאתת מתטסתססתתע (1) את (2) 1+א0ת01 =:אסתב (3) אתחז 708 אגא < אסתגא6ג עד (4) =:א0400 (5) אטעגא =: [אסתג0 ]תפס (6) ; פא (7) כאשר אדם נוסף מצטרףלתור, מוסיפים 1 למצביע אל המקום האחרון התפוס בתור. אם הערך החדש של א408180 גדול ממספר המקומות במערך, מצלבים 1 ב-א0ת4084, ז"א הוזרים לתחילת המערך. אפשר להחליף את השורות (3)-(5) בפקודה אחת: + 708 אגא פסא אסתגת40 =: אסתת0ב החיסרון בפקודה זו הוא בכך שהלא אינה מבליטה בבהירות את שנל המקרלם השונלם שלכולים להתרחש: המקרה הטלפוסי, בו מוסיפים ‏ 1 ל- א00ס0גת0ג והמקרה החרלג, בו מחזירילם את ערכו של א0תג4081 ל-1. לציאה מתור: ; (אטנגא 506 :אטץעגא תגט) הדעצ מתטפתססתת | (1) 7 אזסעת | (2) ; [א205]21580 =:אטעגא (3) ; 1+א1580ת =:אסמפזת (4) אפ ת0סך אגא < אסאפנת עד (5) 1 =:אסטפדת (6) ;פאע (7) 108 בזמן יציאה מן התור, ראש התור נסוג לאחור מקום אחד, אל המקום שאחרלו ולכן גם המציילן המקביל במערך 108 גדל ב-1. הלוצא מן הכלל הוא כאשר האדם הראשון בתור נמצא במקום האחרון במערך. כאשר אדם זה מקבל שלרות ולוצא, הראשון בתור להיה במקום הראשון במערך. רעיון זה מתבטא בשורות (8)-(6). גם בפרוצדורה זו נלתן לקצר ולהחליף שורות אלו בפקודה אחת: ;1 + 708 אגא פסא א1580ת =: אסמפנת כדי להגן מפני האפשרות של גלישה במערך שמחזיק את התור, כדאי להחזיק משתנה שלקרא 94108 31528, אשר ערכו ההתחלת? שווה ל-0. לפני שנאפשר כניסה נוספת נבדוק את ערכוה של ת0עגת ת5גת15א, ולא נאפטשר את הכניסה אם ערכו טווה ל-108 4%א. כמו כן לא נרשה לציאה אם 24108 15218 כבר שווה ל-0. 2 משמטטרל תור שונים תור כפול (₪005כ - 00606 ₪866 518ט20ע) הוא תור שמאפשר הוספות ולצלאות כמו בתור רגיל ובנוסף, הוא מאפשר הוספות בראשו ולצלאות מסופו. כדוגמא לתור כפול ניקח את תור האנשים טמתכים במשרד של רופא. רוב האנשלם מחכים לתורם כדי? לקבל שירות. לש אנשים שנכנסים, בוחנים את התור ועוזבים מלד, מכיון שאלנם רוצים לחכות. זהו מצב של יציאה מסוף התור. איןו אלו הדוגמאות הלתידות לתורים. קיימים תורלם עם אפשרות לסדרל עדיפות שונים. בדוגמא זו, אדם שלש לו עדיפות גבוהה משל אחרלם יקבל שירות לפנלהם, גם אם הצטרף אחרילהם לתור. רק אם קדמו לו אחרים בעל? רמת עדלפות שווה לטלו, הוא ימתין וליקבל שירות לפי סדר המופע. כל זה חורג מהדיון בספר זה. הפרוצדורות המתאלמות לניהול תור כפול הן הרחבות של הפרוצדורות המתאימות למקרה של תור רגיל. .0 ל בלברללם * [") לרטשימה משורשרת יש יתרונות מבחינת נלהול אלברל המערך, כל אפשר להוסלף ולמחוק ערכים מבל?ל להזיז את הערכים האחרים שנמצאים בה. הקושל הוא באפשרויות החיפוש. במערך מסודר רגיל יש שלטות מהירות למצוא איבר שמחזיק ערך מסולם. אפשר להשתמש למשל, בשיטת חלפוש בינרל (ג0ע508 שְע8ת21), אשר מנצלת את העובדה שהמערך ממויין. ברשימה משורשרת שיטה זו איננה מתאלמה, כל אין קשר בין המקום הפלסל של אלבר לבין המקום הלוגי שלו במערך. עץ בינרי (868ע1 עצאתג2) הוא סוג נוסף של רשימה משורשרת. האיבר הראשון ברטימה כזו הוא האיבר שמבתינה לוגלת נמצא באמצע הרשלימה. כל אלבר לכול להלות משורשר לשנל איברים אחרים, המכונים בן ימני (114ת0 סתפַגת) או בך שמאלי (118ת0 16+8), בהתאמה. האיבר שמצביע אליהם נקרא אב או הורה (ע6ת186, או 6מ2826). הערך של איבר הבן הימני גדול בערכו מהערך של אלבר האב והערך של איבר הבו השמאלי קטן בערכו מהערך של איבר האב. גם לאיבר הראשון וגם לבנים שלו לא חייבים להלות בנים, אבל אם לש, הכללים שהוזכרו תקפים, ז"א הבן הלמנל גדול בערכו מאבלו והבן השמאל* קטן בערכו מאביו. אם יש רק בן אחד, הוא לחשב כימני או שמאל? בהתאם ללחס בלנו לבין הערך של איבר האב. כדוגמא של עץ בינרי נשתמש ברשימת החיות בגן החילות של הקלבוץ. בגן החלות 209 נמצאים כעת בעלי החיים ששמותיהם ממולינים לפ? סדר א"ב עולה: )3(‏ ---> אווצ )2(‏ ---> ברבור חמור )1(‏ ---> חתול כלב נחטש שועל נניה שמחפשלם ‏ "אווז" ורוצים למצוא אותו בשלטת חיפוש בינרל. מכלון שלשנם שבעה איברים ברשלמה, האיבר האמצעי הוא האלבר הרביעי, חתול. תחללה בודקלם את האלבר אשר מסומן בספרה 1 ובו נמצא הערך חתול. היות והמלה חתול גדולה מהמלה אווז בסדר המיון, צדיך להמשיך את החיפוש בחלק התחתון של הרשלמה, באלזור הערכים הקטנלם לותר. בשלב הבא מחלקלם את קבוצת האלברים מאווז עד חתול ל-2. ישנם רק שלושה איברלם בחלק זה והאמצעי בהם, ברבור, מסומן ב-2. מכיון שברבור גדול מאווז, לוקחים את קבוצת האילברים הקטנים לותר שבה נמצא רק איבר אחד, אווז, שהוא האלבר שמחפש?ם ומסומן 3 ברשימה. בדוגמא זו נדרשו 3 צעדים, או השוואות, בכדי לסלים את החלפוש. מכיון שהמלה "אווז" הלנה הראשונה ברשלמה, הלה נדרש צעד אחד בלבד כדל למצוא אותה בשלטת חיפוש ללנארל. אך אם היה נדרש למצוא מלה אחרת, כמו נחש או שועל, צרלך היה לבצע מספר רב של צעדים. בשיטת חיפוש בעץ בינרי אפשר למצוא מלים אלו במספר קטן לותר של צעדים. כאשר מספר האיברים ברשימה גדול, החלסכון במספר הצעדלם למצלאת ערך כלשהו הוא הרבה לותר משמעותל. אפשר לרשום את שמות החיות במבנה של עץ בינרי, שבו כל מלבן שמחזיק שם של חיה נקרא צומת (88סא). עורכים את הצמתים במבנה עץ בסדר שבו מבצעים חיפוש בינרי. ההבדל היחיד הוא בכך שחוצים את הרשלמה בשני הכלוונלם, כאשר החצלון העליון הוא הבן הימני והחציון התחתון הוא הבן השמאלל. כל צומת מורכב משלושה חלקים: 200 המצביע הימנל של הצומת מורה על צמתים שמחזיקלם ערכים אשר גדולים מאשר הערך שנמצא באותו צומת. המצביע השמאלי מורה על צמתים שערכם קטן מן הערך של צומת זה. הצומת שמכיל "חתול" הוא הטורש (006סת) של העץ. האליבר ‏ "חהתול" הוא אב של האלברים "נחש" (בן ימני) ו"ברבור" (בן שמאלי). בדרך זו "שועל" הוא הבן הימני ו"כלב" הוא הבן השמאלי של "נחש", ‏ "ברבור" הוא האב של "חמור" ו"אווז". האלברים האחרונילם בעץ הם אבות ללא בנים ומקובל לכנות אותם עלים (85ט168). עלה הוא אלבר שאינו מצביע על איבר כלשהו. בעץ זה אפשר להתקדם מן השורש והלאה שתל פעמים עד אשר מגלעים לעלה, ז"א עוברים דר שלושה צמתים - השורש ועוד שניים. לכן קובעים שלעץ זה טלוש רמות (1606815). בזמן חיפוש משווים את האיבר בשורש עם האלבר שמחפשלם. אם איבר השורש הוא זה שמחפשים, מסיימים את החיפוש. אם האיבר שמחפשים קטן מן השורש, ממשלכים בכיוון של המצביע השמאלי. הוא מורה אל תת-העץ בצד שמאל טל הטורש, ‏ אשר מורכב מאלברילם שכולם קטנלם בערכם מאיבר השורש. אם האלבר שמחפשים גדול מאלבר השורש, ממשיכים בכיוון של המצביע הלמנל אשר מורה אל האיברים הגדולים יותר. עצי חיפוש בינרלים הם מבנים רכורסיבלים. כל תת-עץ של עץ היפוש בינרי הוא בעצמו עץ חיפוש בינרל. כלומר, השורש גדול מכל האלברים שבצד שמאל וקטן מכל האיברים שבצד *מלן שלו. בדוגמא זו, "ברבור" גדול מ"אווז" וגם מכל אלבר שיכול להלות בן של "אווז". שיטת בנללת העץ גרמה לכך שכל אלבר, למשל ברבור, גדול מן האלבר שהוא מצביע אליו משמאלו (אווד), קטן מן האלמנט שהוא מצביע אליו מימלן (חמור) ועוד יותר קטן מן האלמנט המצביע אליו משמאלו (חתול). כדל למלין את העץ לפי סדר עולה צריך למיין כל תת-עץ משמאל לימין. לסיכום, רשלמה הינה עץ בלנרל אם נוכל לומר לגבי כל צומת: א. האלבר (אם יש) שהוא מצביע אליו משמאל קטן ממנו. ב. האלבר (אם יש) שהוא מצביע אללו מימין גדול ממנו. מחזיקים עץ בלנרי במערך נתונים עם שנל מערכל מצביעים שנקרא להם בהתאמה: אזאאצ 4זפלדגא 27 דוגמא לצורת ההחסנה של העץ הבלנרי שהוזכר קודם: 4 = 508058 אנאאצ ג251דגא | מסא5 גדפ2דגא | אדאטנסא | 508508127 1 כאשר מגיעים לסוף ענף, ערך המצבלע הוא 0. לכן יש לעלה שנ* מצבליעים שערכם הוא 0. מליצגים עץ בשפת פסקל בעזרת הרשומה וההצהרות שמופלעות למטה: אס 2 = אתאטזטא אגא שפצ ;תתא אא. .0 = 4ד28?דגון תתססעת = לשאס2ץ ;אא 506 :אטצגא ;דא :540 ג1מ2דון 214עא :אדאאצ גז25דגו ; פא תגצ 0 [אבאטצטא אגא. .1]צגתתה :לוע במשתנה 51088598 נאחסן את מספר האיבר של הצומת, שהוא השורש של העץ. ערכו ההתחלתי להיה 0 (11טא). רשלמת האילברים הפנוילם תבנה כמו ברשלמה משורשרת, כאשר צטאת יצביע על המקום הראשון ברשלמה זו. רשלמת האלברים הפנוללם צרלכה רק מצביע אחד, ונניה באופן שרלרותי שהוא המצבלע הימנל. נסקור עתה מספר פעולות אשר אפשר לבצע על עצים. 1 הוספת אלברים לעץ כדל להוסיף אלבר לעץ קללם מבצעלם תהליך של חיפוש הערך שלו. אם מוצאים ערד זה, אלן צורך להוסלף אותו לעץ. אם לא מוצאלם אותו, מגלעים לבסוף לאלבר שהמצביע שלוו הוא 0. המקום שבו נרשום את האיבר החדש הוא מקום שעכשלו עוד לא קללם. כאשר נוסלף אותו, האיבר הקודם לצביע אללו. נחזור לדוגמא של גן החיות. ארנבת הובאה לגן התיות ועל כן יש להוסיף את המלה "ארנבת" לרשימת החלות. מתחילים את החיפוש מן השורש. המלה "ארנבת" נמצאת בסדר האלפביתל לפנל המלה "חתול" ולכן ממשיכים לחפש בכלוון של המצביע השמאלי, אל המלה "ברבור" (מספר 3 ברשלמה). "ארנבת" קטנה גם ממנו, ולכן ממשיכים למלה "אווז" (6). "ארנבת" גדולה מ"אווז" ולכן נמשיך בכלוון למין. המצביע הלמנ של אווז הוא 0 ולכן נוסיף כאן את המלה החדשה. נוכל לכתוב את הפקודות הבאות: (* הכנס את הערך החדש למקומו *) ארנבת =:[14]8אטצטא (* כוון את המצבליע של השורש אל האלמנט החדש *) 8 =; [6[אזטאצ ג81לדון (* כוון את המצביע השמאלי של האלמנט החדש *) 0 =:[5600]8 172214 (* כוון את המצביע הימנל של האלמנט החדש *) 0 =:[8]אזאגאצ 514לד עץ נקרא שלם (000018%58), אם כל העלים שלו הם באותה רמה. עץ נקרא מאוזן (000מ28138), אם הפרשל רמה בין כל זוג עללם אלנו עולה על 1. לפנל ההוספה של "ארנבת" העץ הלה שלם ברמה 3. לאחר הוספת המלה "ארנבת", העץ אלנו שלם אבל הוא עדיין מאוזן, כל יש לו איבר אחד ברמה הרביעלת והשאר 22 הם ברמה 3. המספר המלרבל של צמתלם שלכולים להיות ברמה הרביעית הוא: 8. ככל טמוסיפים לותר אלברלם יש יותר סיכויים שהעץ לא להליה מאוזן. נכתוב פרוצדורה אשר מקבלת כקלט שנ* ערכים: א. 082458 שא - איבר (ערך) שרוצים להוסיף לעץ, ב. אסאאגאא - המקום של האלבר הראשון שבותנלם. בסלום, המשתנה 0%א44/ מציין את המלקום של האיבר החדש שהוספנו. אם העץ כבר מכיל איבר עם הערך של 0258ת0 שעזסת, המשתנה %4%0% יחזלר את המקום של איבר זה. בכל טלב של התהליך, 0%א.% הוא הצומת שעומדים לבדוק כדי לראות אם תוכנו שווה ל-082458 אט1א. רק אם אף אחד מן הצמתלם הקללמים לא מחזיק נתון זה, המשתנה 0%א4 מקבל מקום של איבר שעד עכשלו לא הלה מנוצל ואשר עתה נכתוב בו את 040858 אטזגא. בזמן הקריאה הראשונה לפרוצדורה, ערכוה של א0אא *היה שווה לערך של 8. הפרוצדורה רכורסיבית וקוראת לעצמה ולכן המשתנה 04א יקבל את ערכו בקרלאה הבאה מן המצביע הלמנל או מן המצביע השמאל? של הצומת שבודקלם בקריאה הנוכחית. בכל קריאה לפרוצדורה מקבלים את הערך של המשתנה 0%א% מאחד מ-3 מקורות: א. כערכו של 5808051. !| ב. כערכו של אזאגצ 412212 של צומת כלשהוא. ג. כערכו של 5%0 4712812 של צומת כלשהוא. הערך של 0%א44 יהיה שווה ל-םתשא בשלושה מקרלם: א. העץ רלק: הערך של 580058 שווה מתטא. ב. מנסלם להתקדם לימלן, אבל המשתנה א41אצ 12812 שווה תתטא ולכן הוא מורה על כך שאין איברים נוספלם באותו כיוון. ג. מנסים להתקדם לשמאל, אבל המשתנה 5%00 1221 שווה םתטא, ‏ כל אין איברים נוספים באותו כיוון. הקרלאות הרכורסיביות מסת?למות באחד משני המקרים: א. כאשר הערך של אסאגא שווה ]תשא. מוסיפים ערך זה לעץ. ב. כאשר 0820454 שתזתא שווה לאחד מן הערכים שנמצאים כבר בעץ. לא עושים דבר ולכן 0%א44 יהלה שווה למיקום של אותו ערד. להלן הפרוצדורה: 4דת2דא :אסאגון תגע) גצדאתת מתטעמססתת (1) ; (אטזאא 506 :612458 ץם זחא (2) אזסתת (3) אפחע טא = אסאגא עד (8) (* הגענו לעלה ולש להוסיף איבר חדש *) (5) אזססת (6) (* מצאנו תא פנול *) (7) ; את =:אסא4א (8) (* עדכון רשלמת המקומות הפנויים *) (9) ; (צטא23) אדאגצ 14ם2דון =:עאוע (10) (* הכנסת הערך לאיבר החדש *) (11) א =:59400 בדמ2דגוע. [אסאגא]?דע (12) מנטא =:אדאגאצ 221דג. [אסאגא] ?ד (13) פאע (18) כו (15) הגענו למקום שתפוס ע"י אלמנט מסוים בעץ. *) (16) (א נבדוק עכשיו אם להתקדם לימין או לשמאל. (17) אזסתת (18) אשזיד אטצגא. [אסאג]2דת > 358 דסא עך (6)19 ג (5₪סס 7 1 א. [04א11] 7 ) צזאתת (20) אטח אטצגא. [אסא4א]2ת < הפס דט וטא עד (21) (458כזס דא ותא ,אזואצ 2814דגוו. [אסאגא]2דק ) 4צזאספת (22) פא (23) ;פאת (24) אם הקלט החדש שווה לערך שנמצא באותו צומת, מסיימים פרוצדורה זו מכיון שאף אחת מפקודות ‏ ע1 לא מתבצעת. כתוצאה, מסתיימות כל הפרוצדורות שקראו לפרוצדורה זו. אפשר להוסיף לתכנלת פקודה שתודיע למפעיל שמצב זה קרה, כדל שיוכל לבדוק את הסיבה ולתקן את הקלט, במידת הצורך. אם נעקוב אחרל פקודות הפרוצדורה ונשתמש בנתונים חתול, נחש, כלב, שועל, ברבור, חמור ואווז, נקבל את העץ שהתווינו קודם. עץ זה הוא מאוזן וגם טלם. בצורה כללית אפשר לומר, שאם נקפיד להוסיף בנלם רק אחרי אבות, העץ להיה מאוזן. אך אם נקדים בנים לאבות, העץ לא להיה מאוזן. נניתח שרוצלם לבנות עץ מרשלמה מסודרת. מוסלפים תחילה את האלבר האמצעל אשר חוצה את הרשימה לשתי קבוצות של ערכים גדולים וקטנים. אחר כך מוסיפים את האיבר האמצעי של קבוצת האיברים הגדולים ואת האיבר האמצעי של קבוצת הקטנים. ממשיכים בדרך זו עד שרושמים את כל האיברים. העץ הזה *היה מאוזן במידה רבה. בעית האיזון של עץ בלנרל חורגת מדיון זה. הקורא המעוניין לפנה לביבליוגרפיה. 12 ביטול איברים מעץ ביטול, או מחיקה של איברים מעץ קיים נעשית בדרך זו: א. מוצאים את הצומת למחיקה. ב. אם הצומת הוא עלה (ז"א שנל המצביעים שלו שווים ל-0), משנים ל-"0" את המצביע אליו ומוסיפים את האיבר שהוא תופס במערך 212 לרשימת המקומות הפנויים, כד? שאפשר יהיה להשתמש בו פעם נוספת. ג. ‏ אם לש לצומת מצביע אחד שאינו 0, המחיקה מתבצעת בצורה דומה למחלקה של איבר מרשימה משורשרת רגללה. משנים את ערכו של המצביע אל הצומת שמוחקים כד? שיצביע אל הצומת שמקומו אחר? הצומת שמוחקים. בדרך זו ההורה צריך להצביע על נכדו לשעבר, שהפך כעת לבנו, כפי שמוצג בתרשלם הבא: 58 המצביע החדש המצביע המצביע החש *--- קהל הצומת שמוחקיס ד. אם שני המצביעים של הצומת שרוצים למחוק שונים מ-0, צרלך להעביר צומת ממקום אחר בעץ להחליף את הצומת שמוחקים, כפי שנראה בדוגמא הבאה. דוגמא למחיקה: נניח שרוצים למחוק את השם "חתול" מרשלמת גן החלות. במקומו לוכל לבוא אי?בר אחר, שגדול מכל האיברים בצד שמאל שלו וקטן מכל האלברלם בצד למלן שלו. כדל למצוא איבר כזה, מתחילים לחפש מן האיבר שמוחקלם ("התול") לכיוון למין כדל למצוא את האלבר הקטן בלותר, אשר קטן מכל איבר בצד *מין אבל גדול מ"חתול". בדרך זו נמצא את השם "כלב". אפשרות אחרת היא לחפש בצד שמאל את האיבר הגדול ביותר, אשר גדול מכל איבר אתר בצד שמאל אבל קטן מ"חתול". בדרך זו נמצא את השם "המור". לאחר שבוחרים את האיבר המחללף ("כלב" או "חמור"), צריך למחוק אותו תחללה ממקומו הנוכחי. אהר-כך משנים את הערך של הנתון בצומת שהכיל את השם "חתול" כד? שיהלה עתה "חמור" או "כלב" בהתאם לאיבר המחליף שנבחר. הכלל הוא שהאיבר שמחליף את האיבר המבוטל צרלך להלות: א. גדול מכל איבר אחר בצד שמאל. ב. קטן מכל אלבר אחר בצד למין. נשלג זאת ע"? בחירה של האלבר הקטן בלותר בצד למלן, או של האיבר הגדול ביותר בצד שמאל של האלבר המבוטל. 3 הדפסת עץ 6 נערוך תרשים הירארכל להדפסת עץ: הדפס איבריס טל עץ, לפי סדר המיון שלהם הדפס את התת- עץ השמאל?ל הדפס את התת- עץ הימני הדפס את השורש בעץ בינרל המצביע השמאלי מורה תמיד לאיבר שערכו יותר קטן והמצביע הלמנל מורה לאיבר שערכו יותר גדול. כדי לקבל הדפסה של האלברים לפ: סדר המלון, סדר ההדפסה שלהם צריך להיות משמאל לימין. העובדה שגם לתת-עץ משמאל או מימין יכול להלות תת-עץ תגרום לביצוע חוזר של הפרוצדורה, אשר ליפסק רק כאשר נגיע לעלה, ז"א לצומת בלל בנלם. פרוצדורה להדפסה נלתנת להלן: ; ( 12818 :1 50) סש פמקעגע מתטעתססתע | (1) אזסאת | (2) סע [2]5808054עע אעדט (3) אזסמת (4) אטו מנשא <> 5400 גזת?דאא עד (5) : 5601 472818) ?דש פמססזן (6) ג (אט?גא) אזמנזתו (7) אתא ממטא <> אזאגצ גזם2?דגא קד (8) (אזאאצ (221דו) ?דש פמפסגז (9) פאע (10) :אע (11) מעקב אחרל פעולות הפונקציה הרכורסיבית בדוגמא זו מוצג בתרשים. המספר בתוך העלגול שליד כל חץ מורה על מספר הפקודה שלזמה את הקרלאה הרקורסיבית. המספר, שבתוך המלבן ליד כל פקודת הדפסה, מציין את סדר ההדפסה. קרילאה שלישית קריאה שניה קריאה ראטשונה אווז = ב5₪09858 הדפס "אררז" הפרוצדורה הסתיימה חתרל = | ברבור > 0 הדפס "חתול" ,69 הפרוצדורה הסתיימה חמור = 58090583 הדפס "חמרר" הפרוצדורה הסתיימה הפרוצדורה הסתיימהת כלב = 7 הדפס ‏ "כלב" (5) הפרוצדורה הסתיימה נחש = 0 הדפס "נחשט" הפרוצדורה שרעל = 0 הסתיימה הדפס "שועל" (2) הסתיימה הפרוצדורה 16 סדר ההדפסה הוא לפ? הסדר האלפבלתל, כפל שנראה להלן: ְ = אווז , * ברבור * חמור - חתול , = כלב * נחש = שועל 6 תרג?ל?ם 1 תכניות (1) כתוב תכנית אשר תבנה רשלמה משורשרת, תאהזר מלדע ותדפלס אותו. הרשימה המשורשרת תכלל : א. את הטמות של הבריך לכיתה, מסודרים לפי סדר אלפבלתל. ב. ציוו של הגשת 10 תרגיללם ינתן במערך בן 10 איברים: האות א במקום 1 (151510) תציין שהתלמיד השלים את התרגיל ‏ 1 בהצלחה והספרה אפס תציין כישלוו. ג. צלון מבחן בלנלים בין 0 ל- 100. ד. ציון מבחן סופל בין 0 ל- 100. ה. ממוצע צלונלם, אשר בנוי בצורה זו: מבחו סופל * 0.5 + מבחן בלנללם * 0.3 + מספר תרגילים * 2 ההוראות לאלחזור מלדע מהרשלמה הן בנות אות אחת בלבד, או אות ונתונלם כמפורט להלן: תע - פלט של כל הרשלמה, עם כותרות מתאלמות. 1 ושם תלמלד - פלט של רשומת תלמלד. תע וטם תלמלד - ביטול רשומת תלמלד מסולם. א והשדות הדרושים להוספת רשומה (שם תלמיד, 10 תווי << או אפס כדל לצלין הגשת תרג*ללם, 0 עד 3 צילונים) - הוספה של רשומת תלמלד. 2 וציון (בין 0 ל-100) - פלט של שם וצלון ממוצע של כל תלמלד שלש לו ציון ממוצע גבוה מן הציון הנקוב בקלט. (2) מטריצה דלילה מכילה אפסים רבים (בדרך כלל יותר מ-90%), למשל: 0 0 0 0 4 0 07 0 5 0 0 0 0 0 0 0 3 0 0 0 0 0 0 .0 0 0 0 0 כתוב תכנית שתקבל כקלט מטריצה בגודל א*א% ותחזיק כל שורה כרשלמה משורשרת. אלבר? הרשלמה מכלללם ערך חלוב או ערך שלללי ואת מספר העמודה שבה רשום אותו ערך. ערכלם שהם 0 אלנם מוחזקים ברשלמה כד? לתסוך מקום. לפתרון הבעיה הטתמש בווקטור עזר, ורשום בו באלבר 1 את מקומו של האלמנט הראטשון בשורה 1 שברשלמה המשורשרת. התכנית צריכה להפיק את הפלטלם הבאלם: א. הערכים שאלנם אפס בכל שורה. ב. המטרלצה המקורלת עם האפסלם. ‏ להדפיס אותה ע"? שלמוש ברשימה המשורשרת שבנית. 107 ג. הסכום של הריבועים של האלמנטים באלכסון מ-(1,1) עד (1,2), כאשר ,1 הוא המלנימום שבין א ו-א. (3) אפשר לילצג פולינום כסדרה של זוגות מספרים. למשל, אפשר לללצג את הפולינום 5+5%3-16א כסדרה של הזוגות (16,0-), (5,3), (1,5), כאשר הערך הראשון בכל זוג הוא המקדם והשני הוא החזקה. כתוב תכנית שמקבלת זוגות כאלו והופכת כל אחד מהם לרשימה משורשרת. בנה פרוצדורות שימצאו את הסכום והמכפלה של שני פולינומלם שקוראים כקלט: 5 3 התשובות תודפסנה כך: הסכום הוא: 8 + 2**א + 3**א5 המכפלה היא: | 65 + 72% -2**א76 - 3**א56 + 45%**4 + 5אאא6 (6) בבניין מסוילם לש 50 חדרים. בכל חדר לשנם מ-1 עד 5 אנשלם וטלפון אחד. נתונה רשימה של כפ האנשלם בבניין כשהיא מסודרת בסדר אלפבלתי, עם מספר הטלפון של כל אחד. רשימה זו תהיה הקלט לתכנלת. הפלט הוא רשילמה של מספרי טלפון, ממולינים בסדר עולה. ליד כל מספר תוצג, בסדר אלפביתל, רשלמת האנשלם שיש להם אותו מספר טלפון. מומלץ לבנות רשימה משורשרת של האנשלם שמשתמשים בכל טלפון. בכל צומת ?הלו שני מפתחות: מספר הטלפון והשם. אפשר גם לבנות רשלמה נפרדת בעבור כל מספר טלפון. רשלמה נוספת לכולה להכלל את המיקום של הצומת הראשון ששייך לכל מספר טלפון. (5) לחברת תעופה יש 5 טלסות ביום מסוים. הנתונים אודות טיסות אלו רשומלם בטבלה: תפושת המטוס | מספר טלסה 17 20 001 לש להגדיר שני מערכים: א. 71507 - האלברים במערך זה הם רשומות בנות 3 שדות: שדה ראשון: מספר הטלסה. שדה שנל: מספר המקומות הפנוליים בטלסה. שדה שלישי: ראש רשלמה משורשרת שמחזיקה את שמות הנוסעים באותה טלסה. ב. 0514 - מערך שמכיל 5 רשומות משורשרות, כאשר המקום ההתחלתל של כל אחת מהן נמצא ב-11501. הרשומות במערך זה מכילות את שמות הנוסעלם וכתובותיהם ומצביע אל הנוסע הבא ברשלמה. הרשימות מסודרות בסדר אלפביתל. | המערכים 051%8א ו-907די והמשתנה צטאע הם משתנים גלובלללם. 1508 הקלט למערכת זו כולל 4 סוגי תנועות: א. ב. ג. ד. הזמנות - הקוד הוא 2א.142%. הנתונלם הנללוים הם שם הנוסע ומספר הטלסה שלו. בלטולים - הקוד הוא מ8110. הנתונים הם שם הנוסע ומספר הטלסה שלו. בלרור בקשר למספר המושבים הרלקים - הקוד הוא א0584/1א. הנתון הוא מספר הטלסה. בירור של שמות הנוסעים בטיסה מסוימת - הקוד הוא 422454 והנתון הוא מספר הטלסה. מוצע להגדיר את הפרוצדורות הבאות, כאשר 588% הוא שם נוסע ו-א41522/ הוא מספר טלסה: (35ת5זא ,אמז5) עפפסוע - הוספה של שם נוסע לטלסה מסוימת. (15238 ,5% ) תחזואת - ביטול הזמנה של נוסע לטלסה מסולמת. (פ0ת15א) תעפתג - מספר המקומות הרלקים בטיסה מסוימת. (ת4158) פמפסגת - הדפסה של רשלמת נוסעים הרשומלם לטיסה מסולמת. רצוי לתכנת תחילה את הפרוצדורות ע3058 ו-85ק110 ולבדוק אותם לבד. כאשר לדוע שפרוצדורות אלו פועלות כראו:י והמערכת קולטת נתונים, יש לבדוק את הפרוצדורות 288% ו-24780. )6( )7( קרא רשימה של מספרלם, רשום אותם במחסנלת, הוצא אותם מהמחסנית והדפס לפל סדר ההוצאה מהמחסנלת. המספרים לוצגו בסדר הפוך לסדר המקורל שלהם. נתונה סדרת מחרוזות מן הסוג 1, לדוגמא: 8 - מסמל סדרה של התוולם + ו - 4 - מסמל את האות 4 1 - מסמל את הסדרה ש-5 מסמל, אבל בסדר הפוך של התווים. כתוב תכנלית שבודקת בעזרת שלמוש במחסנלת אם המחרוזת אכן שילכת לסוג הזה. )8( כתוב פרוצדורה: : ; אטזגא 6 :אשעאא תגט) געגהזחסו (ת08מ1א1 :תגטם 15 הפרוצדורה מקבלת מספר איבר במתחסנלת 4. הלא מחזירה את הערך של הנתון שנמצא באלבר שמספרו במחסנית תגטת 15248ו. (9) אפשר להחזיק שתל מחסנלות בווקטור אחד כפ? שמוצג בתרשלם: סז | 1אסצזע כתוב את הפרוצדורות הבאות: א. ב. להוסיף נתון חדש למחסנלת 1: : : (אטזגא 506 :אטעגא ; תתסמואד :) בע1אסעת לבטל איבר ממחסנית מספר 1: . (אטזאא 506 .אטזגא תגט ; תתסמעאך :) 54 9 השתמש בפרוצדורות אלו כדל לבדוק אם מחרוזת נתונה היא מן הסוג 5051 כאשר: 5 הוא כמו שמתואר בתרגיל 7 ₪ מורכב ממחרוזת מן הסוג +טש0: שש מורכב מסדרה של הסמלים * ו-/ 1+ מסמל את האות 5 1 הוא סדרה הפוכה ל-ש. (10) הזמן שהוקצב לעיבוד של תכנלית במחשב הוא שת דקות. אם בסיום שתל הדקות לא הסתיים העיבוד, התכנלת מפסלקה וחוזרת לסוף התור. אפטר להנלח שתי קדימויות לפל סיווג העבודות: * עבודות חשובות. * עבודות לא חשובות. נניח שנתונות העבודות הבאות: מספר עבודה|זמן שירות|זמן המופע|קדימות בנה שנל תורלם, אחד בשביל קדימות מסוג 1 ואחד בשביל קדלמות מסוג ‏ 2. התור עם הקדלמות הגבוהה תמלד מקבל שירות לפני התור השנל. כתוב תכנית שתדפיס את מספר העבודה שנמצאת בשירות בסוף כל דקה, עד שהתורלם מתרוקנים. חשב גם מספר ממוצע של תכניות בכל תור ב-21 הדקות הראשונות. (11) (*) סופרמרקט מעוניין להשוות שתי חלופות להתקנה של דלפק? קופות. 100 ההשוואה תבוצע באמצעות סימולציה שמטרתה להציג את שתל החלופות ולעזור למנהל הסופרמרקט להחליט אלזו שיטה עדיפה. צלין זאת בסלום התרגלל. שתי החלופות להשוואה הן: א. 3 דלפקים רגילים. ב. 2 דלפקים רגילים ודלפק אקספרס אחד, לאנשלם שקנו 5 פרלטלם או לותר. אפשר להניח שלקוחות מצטרפים לתור הקצר בילותר. אפשר גם להנלח שכאשר אהד מו התורים לדלפקים מתפנה, מצטרפים אללו מן התורלם האחרלם. נתונים: א. המופע של הלקוחות לדלפקים הוא אקראל. הזמן הבין-מופע? הוא מספר אקראי בלן 0 ל-360 שניות. ב. מספר הפרלטים שלקות קונה הוא מספר אקראי בין 1 ל-480. ג. משך השרות של הלקוח הוא 30 שניות כפול מספר הפרלטים שהוא קונה. כל אחד מהאירועים האלה קובע את האלרוע הבא שהתכנית תטפל בו: א. סלום שלרות בכל אחד מן הדלפקים. ב. מופע חדש של לקוח. מבנה הפלט: . ה ]ה מספר הלקוחות שקיבלו שלרות במשך שעה זמן המתנה ממוצע ללקוח ו --| הזמן (4) שהדלפק פנול + > אורך ממוצע של התור בסלמולצלה הראשונה האות 4 תוחלף בכותרת "דלפק 3" ובסימולצלה השנייה הלא תוחלף בכותרת "דלפק אקספרס". (12) תור כפול מתיר כנלסה ויצלאה משני קצותיו. כתוב פרוצדורות המאפשרות ניהול תור כפול והדפסת שמות האנשים אשר נמצאים בו. ‏ יש לצלין מופע או לצלאה מראשו או מסופו ואת שם האדם, אם האירוע הוא מופע. נתוני הקלט להלו שני תווים: התו הראשון לצלין מופע או יציאה והתו השנל לציין אם האלרוע מתרחש בראש התור או בסופו. אם האלרוע הוא מופע נצרף נתון שלישל: את השם. נתוןו ראשון: מ - מופע נתון שנל: ר - ראש התור ל - לצלאה ס - סוף התור להדפסה לש לצלין את הדרישה בלבד: "ה". נניה שנתון הקלט הזה: מ ר יעקב מ ר טובה מ ס שמריהו ל ר מ ר חנלתה ה ל ס מ ס חנה מ ס אהרון ה 11 דוגמת פלט תהלה: תור כפול = חנלתה לעקב שמרלהו תור כפול = חנלתה יעקב חנה אהרון (13) (*) כתוב פרוצדורות לבצע את הפעולות הבאות: א. למחוק אלברים מעץ. ב. להדפיס תוכן של עץ לפי סדר מיון עולה. (14) (*) כתוב תכנית שקוראת פיסקה ומכנלסה בצורה סלדרתית את כל המלים לתוך עץ בינרי, כשהן מסודרות בעץ לפל סדר אלפבית?ל. בכל צומת של העץ רטומים המלה ומספר המופעים שלה. כתוב תכנית שתדפיס את רשימת המללם בסדר אלפביתי וליד כל מלה - את מספר המופעלם שלה. (15) (*) בחנות לממכר הלקל החילוף רוצים לבנות עץ פריטים שלהלה מסודר לפ: מספר פעולה. כל צומת *כלול מספר פעולה, תאריך, שם החלק שנמכר ושם לקוח. נתונים לדוגמא הם: 200 4 פרידמן אברהם רחמלם זהבל רחמלם לחלאל לחלאל לחיאל רחמלם שבתאל 00 תש > ₪ < ש ם < ש ם < ש - 4 0 סא > כתוב פרוצדורה כדי להפוך את הרשלמה המסודרת של נתונ? הקלט לעץ מאוזן ולהדפיס אותו לפ? סדר הפעולות. רמז: כתוב פרוצדורה רקורסיבית (/6201, אגנגא)לדק שתשבץ את הערך האמצעל שבין אג1% ל-62200. הפרוצדורה תקרא לעצמה פעמיים באופן רקורסיב? כדל לכתוב את הערך האמצע? בתחום העליון ואת הערך האמצעל בתחום התחתון ותמטיך בדרך זו, עד אשר הערך של 62202 קטן מן הערך של אגץגץ. הצג את כל הפעולות בהן כלול חלק א ואת כל הפעולות ללקוח בשם רחמים. (16) (*) חזור על תרגיל מס' 5 כאשר שמות הנוסעים מוחזקים בעץ בינרל. פרק 17 מבני נתונים דינמיים 1 הגדרה ו?לשומ?ם מבנה נתונלם דלנמל (6שטססטץ56 8 6בתהחעכ ) הוא מבנה נתונים שגודלו אינו קבוע מראש ומספר איבריו משתנה. רשימה משורשרת (ראה פרק 16), אפשר להחציק במערך שמספר האיברים שלו קבוע, אשר נוכל לכנות אותו מבנה נתונים סטטל (6טטססטשט5 2858 5808816). כאשר הרשימה גדלה או קטנה, מספר האיברים שבשימוש גדל או קטן בהתאמה, אבל גודל המערך אינו משתנה. בנוסף לזה, אם גודל הרשימה עולה על מספר האלברלם במערך, מגיעים למצב של גלישה. החסרונות של רשימה משורשרת במבנה נתונים סטטל המוחזק במערך הם שנללם: א. מחזיקים בזיכרון מקומות פנויים כדל שיהיו זמלנים בעת הצורך. גם כאשר מקומות אלה אינם מנוצלים, אי אפשר לפנות את הזיכרון למטרות אחרות. ב. כאשר יש דרישה למספר איברים אשר גבוה ממספר האיברים במערך, מגיעים למצב של גלישה. כדיל להתגבר על חסרונות אלה משתמשים בעת הצורך במשתנה-מצביע ( 8118218 צ66ףת201), אשר מאפשר ליצור מבנה נתונים דינמכ- משתנה-מצביע שונה ממצביע רגיל שהזכרנו בדיון על רשימות משורשרות ועצים רק בדבר אחד: : * המצביע הרגיל הוא מצלין (50556106), או מספר סידורי, של אחד מן האברים במערך של הרשימה המשורשרת, אשר הוצהר בראש התכנלת. * משתנה-מצביע הוא כתובת של מקום פנוי בזיכרון, שלא הוצהר תחילה כחלק ממערך, אשר בו כותבים את האיבר החדש. הכתובת, אשר המשתנה-מצביע מורה אליה לא קשורה כלל אל התכנית. לכן, כדל להוסיף איבר לרשימה במבנה נתונים דינמי, אין פונים אל רשימת פנולים שהוכנה מראש, אלא אל מאגר של מקומות פנויים בזיכרון. המקומות במאגר זה פנויים לשימוש של כל תכנית עד להקצאה שלהם. 23 הפנליה למאגר נעשלת בעצרת הפונקציה: (ארגומנט) חפא שתכונותיה הם: א. הפונקצלה פא מבקשת מקום בזיכרון שבו אפשר להיה להחזיק איבר אחד מן הסוג הרצול. הכתובת של מקום זה נמצאת במשתנה-מצביע שהוא ה"ארגומנט" של הפונקצלה. ב. אם הסוג של האלבר הוא רשומה, הפונקציה אחא מאפשרת להתלחס לשדה מסולם ברשומה זו בעזרת הכלנול: שם-שדה. משתנה-מצביע ג. הפונקציה אחא מאפשרת לפנות לאיבר כולו ע"ל השם: משתנה-מצביע המזהה "משתנה-מצביע" מתילחס לכתובת של האלבר בשטח המאגר בזיכרון ולא לערד שלו. הציון של החץ מלמין לשם המשתנה-מצביע מורה על כך שמתייחסים לערכו, ז"א לתוכן של האיבר שנמצא באותה כתובת. במשתנה רגלל, שאינו משתנה-מצביע, פונים תמיד לתוכן של המשתנה ולא לכתובת שלוה ולכן אין צורך להבדיל בינלהם. דוגמא להגדרה של משתנה-מצביע: פעצד (1) (* סוג מצבלע *) 0 = גדפלדגא (2) תת 0סעת = ומאס?ד (3) )4( 5481: 2 )5( 54082: 1 ;ת500 :מ8כה5 (6) 1 :תתחפתת (07 ; פאק (8) פא (9) : ,תק (10) הסבר: (2) המלה 4412812 הלא השם של הסוג החדש שמגדירים, ‏ "סוג מצביע". המהדר מזהה זאת על-5? החץ שבצד שמאל של השם של הרשומה 7120%81, אשר בשלב זה הוא אינו יודע את גודלה. זהו המקרה היחלד בכתיבת תכנית בפסקל שמותר להשתמש בשם של סוג, או של משתנה בצד למין של פקודה או הצהרה כאשר הגדרתו אלנה ידועה. משתנה שסוגו 7281 אינו מתזיק ערך, אלא כתובת, שגודלה 2 או 4 בתלם, בל קשר לגודלה, או להרכבה של הרשומה 120%81. לכן ההגדרה של הרטומה אלנה חשובה בעת הקצאת מקום לכתובת שלה. לאחר הידור ובזמן הבלצוע של התכנילת והפונקציה אפא, צריך לדעת את גודלה של הרשומה 120/81 לשם בקשת הקצאה מהמאגר הפנול. בשלב זה לדוע כבר הגודל של הרשומה מסוג %₪א20ץ. (7) לאחר שמצהלרים עפ הסוג 41281/, משתמשלם בו כדי לתאר את השדה תממפקץ בתוך הרשומה 70%8%ך. שדה זה מחזיק מצביע לאלבר הבא ברשימה משורטרת. השימוש בסוג 2512דאא בצד ימין של הביטוי אפשרי כעת מכלון שהוא הוצהר בטורה (2), כי אסור להשתמש בשם משתנה או סוג שאינו מוגדר. השם 4412818 מופיע בשורה (2), (7) ו-(10)אבל הוא לא מופיע בשום מקום אחר בתכנית. המידע הקשור לשם 72818 נמצא בצד *מין של הבלטוי בשורה (2) 14 בלבד. אפשר להשמלט שורה (2) ולכתוב במקום המלה 11472812 את הסלמון 72081" בשורות (7) ו-(10) כד? לקבל את ההצהרה הבאה: מפצך עתססתת = 720187 :54081 ;2 :54002 ;506 :תמכ50 תמאסלדי :תתטפתת ; פא תג | דאס" :7,0 התוכן של המשתנה 2 לא מוגדר עד שרושמלם בו ערך. הרלשום יכול להלעשות באחת משלוש דרכים: א. הפעלת הפונקציה (ת)שחא. פונקציה זו מעמלדה לרשות התכנלת את המקום הדרוש ושמה את הכתובת של אותו מקום במשתנה 2. ב. השוואה ל-מזא. מא הלא מלה שמורה אשר מצלינת ערך מוגדר מראש. ומשמעותה, שהמצביע עדלין אלנו מופעל כל הוא מחכה לקבל כתובת. השוואת המצביע ל-11א נעשלת ע"? פקודת הצבה רגללה: תנא =:תתמפקא.י תע (* מציבים ,11א במצביע שהוא חלק מהרשומה מסוג 720687 *) או כותבים: מא =:ק (* מציבים 12א במשתנה המצבלע 2 בעצמו *) בהצהרות אלו יש שנל משתנלם-מצביעילם נפרדים: אחד בתוך הרשומה (תתאפםא. 2) שתפקידו *היה להצביע אל האלבר הבא ברשלמה, ואחד שמצביע על הרשומה הזאת ממש (2). ג. השוואה של ? למשתנה-מצביע אחר (למשל בפקודת הצבה תתחפתא."ק =:2) בין אם ערכו 1א ובין אם הוא מכיל כתובת של ממש. . מו רשרות אפשר לתאר רשימה משורשרת בעזרת מבנה נתונים דלנמל. נשתמש בדוגמא של בנליה והדפסה של רשלמה כזו. שלטה זו אלנה מחייבת להקצות מראש מקום למערך, מכיון שאפשר להקצות מקום לאלבר נוסף בכל פעם שדרוש. ; ( צטקינטס, צטעאד) דחפמ אתססתק (1) מקציי (2) ,תג 0 [1..10] צהתתה מחאסגק =ַם2סתת0גו (3) 20" =201ד (4) כפסססת =ז₪ס2ך (5) ;0027 :א (6) לדו :אפוח (7) ; פא (8) תג (9) ,גזת?ד :0 ,2 ,058ת (10) 5 ; (00207א:א תגט) 54 התא מתטפמססתע (11) אזסטת (12) ;('תן שם | ') אשמדדתט (13) ; (א) פאמת (14) אזפאחת (15) ; פא (16) (* גאזהפתת *) אזססת (17) ; (ע)אפא (18) ;ת =:3058 (19) (* האיבר הראשון ברשלמה *) ; (58₪4. 27ע) אא5 גחא (20) ;דא =:24. "2 (21) (* הוספת אלברלם לרשלמה *) 0 עסם עסא מנח (22) אזססת (23) )28( = ; (2)שפא (25) ; (7.5084ק) 4ם5 גתא (26) ;תע =:484ה. 07 (27) ענא =:4פגע.7ת (28) ; פא (29) (א הדפסת תוכן הרשלמה לפ? סדר האלברלם *) ;0 =:7 (30) סכ םתא <> ע מהנאח (31) אזססת ' (32) ; (58₪4. 27) אזמדדתט (33) הת "קת =:ק (34) פאם (35) . פא (36) הסבר: (21)-(18) בניית הצומת הראשון. לאחר שלוצרים את המקום עבור האיבר הראשון בטורה (18), רושמים את כתובתו במשתנה-מצביע 2058 (19) וקוראים לתוך הרשומה ‏ "? את השם הראשון שברשלמה (שורה 20). הלות ואין איברים אחרלם ברטשימה בשלב הזה, מציבים ם1א בשדה ₪22 ברטומה 27 שמצביע על האלבר הבא (טורה 21). (29)-(22) בפקודות אלו שומרים את הכתובת של האלבר האחרון שהוספנו (28), לוצרים איבר חדש (25) ורוטמים בו את השם ההדש (26). אה"כ חוזרים לאיבר הקודם ורושמים בשדה המצביע שלו את הכתובת של האיבר שעתה הוספנו, שורה (27). לבסוף רושמים 11א בשדה המצביע של האיבר החדש, שורה (28). תהליך זה נמשך עד שמסלימים את הטיפול בכל הנתונלם. (35)-(30) בשורות אלו מדפלסים את כל הרשלמה, החל באלבר הראשון. רושמלם את הכתובת של האיבר הראשון, 2058, בתוך המצביע ‏ 2 ומדפיסים את השם שנמצא באותה כתובת (שורה 33). אח"כ מעבלרלם ל-2 את הכתובת של האיבר הבא 7-2 וחוזרים על פעולת הכתיבה (33) עד שמגיעים לאיבר האחרון (1₪א=2). 6 תדפיס הרצה של התכנלת: קלט: תן שם"" (* 72" מסמל סוף קלט *) 2 טסאגגצ כאשר משתמשלם במצבלעים אין צורך להגדיר מערך שלכול להחזיק את המספר המירבל של האלברים, כל משתמשים בזיכרון לפ? מספר הכנלסות ברשימה שבונים. בדוגמא זו הוספנו את האלברלם בסוף הרטלמה לפל סדר הגעתם ולא נלצלנו את היתרון של רשימה משורטרת להוספת איברים במקום כלשהו ברשימה, כדל ליצור מלד רשלמה ממולינת. 1 הוספה ובלטול של אלברים ברשלמה מסודרת 1 תההוספה וביטול של איברים ברטומ םב--ריים הוספה של איברים לרשימה משורשרת *כולה להיות באחד מתוך שלושה מקומות ברשימה: א. ראש הרשימה: כאשר מוסלפים איבר לפנל האיבר הראשון ברשימה צריך לעדכן את המשתנה 205% המצביע על ראש הרשלמה. למשל, הוספה למחסנית (ראה בהמשך). דוגמא אחרת הלא הוספה לרשימה מסודרת, כאשר האלבר החדש קטן מכל אלה שנמצאים כבר ברשימה. ב. בין שנל אליברים: אם מוסיפים את הרשומה 87 בין הרשומות ') ו-57, צריך לכוון את המצביע ב- 0 כדל שיצביע על "א (ת=:07.8424) ואת המצביע ב- 5 שלצביע על 7ק (7.8424:=5ת). לדוגמא, הוספה לרשלמה מסודרת. ג. סוף הרשלמה: איבר חדש לרשם אחרל האיבר האתחרון ברטימה ואז המצביע של האלבר החדש יהיה תמיד שוה ל-ם1א. לדוגמא, הצטרפות של לקוחות בסוף תור שמחכה לשרות. דוגמא אחרת הלא הוספה לרשלמה מסודרת כאשר האלבר החדש גדול מכל אלה שנמצאים כבר ברשימה. ביטול של אלברלם מרשלמה משורשרת לכול להלות באותם שלושה מקומות שהוזכרו קודם. לש לעדכן את המצביעים כנדרש בכל ביטול. התכנית הבאה מדגימה הוספה ‏ ובלטול של איברים ממקומות שונים ברשלמה. בונים תחילה רשלמה מסודרת ואח"כ משמלטלם ממנה אלברלם שונלם לפ? הוראת המפעלל. ; ( דטפנטס, סקאד ) אזו0פון 0547 אותססתת ‏ (1) שפצ (2) ;ו 09 [1..10] צגתתג פמאסת = 14/10 (3) ; 1207" =.ד28דגון (4) תת =1קא20ד (5) 0 :5% (6) 1207 ונ :גת ; פא תג ;גזפ2דא :0 ,תק ,הפסת (7010 : מאגא תגט) אח5 התא מתטסמססתע אזססת ;('כתוב שם להוספה או לביטול') אשעזתח ; (פאגא) פגמת אזסותת ; פא (* קרלאת נתונלם *) גאדהפסת פמקסגט מתאטסמססתע אזסטת =:ת סע תתא <> תע מודחט אזסעת ; (88ש5. 27) אזחדתח אמחפ. ץ =:ק פא ; פא (* הדפסה *) (* הוספת אלברלם *) ;0 תסססאק תג ; 4זהלדא :תק אזסטת ; (8)אטא ; (ה5. 27) אפ התא 0:= 2:= 0 (4פ."ת => אמחפ.יע) פאג (מ1א <> ת) ממדאט אסא ; פא (* המקום של האלבר החדש נמצא *) אתחדך מזא =0 תך (* בראש הרשלמה *) אזססת =:3058 ע =:גפגת. ית סא ₪ (* המקום של האיבר החדש נמצא *) | אחחך מא <> ע שד (* בתוך הרשלמה *) אזסחת (* המקום של האיבר החדש נמצא *) אזסספת 1508 (* בסוף הרשלמה *) =:פג. 07 (52) עזא =:24ה. "ת (53) פא (54) (* 105472 *) ;פאת (55) (* ביטול איברלם *) ; דסא מתטפמססתק | (56) תא (57) ;0 :א (58) אזסתת | (59) ,(8) אחת5 תא (60) ;זא =:0 (61) )62( 2:= 0 (א > 4מפ. "פ) פאה (מנא <> ת) מתדז (63) אזסטת (64) )65( 0:= גגז."ץ =:ק (66) ; פא (67) אמח עזא <> תע קד (68) אחעד א =אמת5. קת תד (69) אזססת (70) אמח מעא =0 עד (71) התזז. "קת =:058ת (72) )73( | ₪ תז. "תע =:54. 07 (74) (* ראה הסבר בהמשך *) (ע) 1500588 (75) פא (76) )77( 8 ('לא מצאנו את השם ' ,א) אזמצזתח (78) בו (79) ('לא מצאנו את השם ' ,א) אומזזתט (80) (* אדאסםא *) ;את (81) (* התכנלת הראשלת *) אזססת | (82) ;תא =:2088 (83) ;('בנלית רשימה משורשרת') אזמדזתח (84) ; א זמדתט (85) 0 סש עסא מ זז (86) )87( 05; ; (צטקא1) צעפסת (88) ; א1ופעת פפקסג (89) ; א זט (90) ;('איברים שמבטלים מן הרשלמה') א[מד1תח (91) ; אזטזתה (692 0 עסם עסא מוזדוט (693 ; אדו (694 הא1הפעת פמקכז (95) .עאת (96) 109 הסבר: (16)-(11) פרוצדורה זו נקראת ע"י הפרוצדורות 805272 ו-%א₪011 כדל לקרוא שם מן המסך להוספה או לביטול. מנלחים שמותר לקרוא את הנתון, אשר מוגדר ע"כ צגתתה כמאסגת, בפקודת קרלאה אחת. מהדר שלא מאפשר קרלאה כזו ידרוש לולאה שקוראת כל תו בנפרד. (25)-(17) פרוצדורה זו עוברת על פנלי הרשלמה מראשה ועד האלבר האחרון, אשר קיים עבורו 1א=2".₪484? ומדפיסה כל שם שמופיע בה. (55)-(26) פרוצדורה זו לוצרת צומת חדש "5 (שורה 30) וקוראת לתוכו שם חדש (טשורה 31). אח"כ היא עוברת על פנל הרשימה עד שהלא מוצאת אלבר אשר יותר גדול מן האלבר החדש, או עד שהיא מג*עה לסוף הרשלמה. בגמר ביצוע הלולאה בשורות (34)-(38) קלימות שלוש אפשרויות למצבו של האיבר החדש: א. האיבר החדש קטן מכל האלברים שנמצאים כבר ברשימה. במצב זה המשתנה 0 שווה לערך ההתחלת? שלו, םא (39) כי לא נכנסנו כלל אל הלולאה (כל אחמפ. ק > אתטפ. ת). כתוצאה, 5 להפוך להיות הכתובת של התחלת הרשימה (41) ויצביע על האיבר שהלה קודם בראש הרשלמה (42). ב. האיבר החדש קטן מאחד מאלברל הרשלמה, אבל לא מכולם. אם זה קורה, ענא<>0 וגם מזא<>2. במקרה כזה מציבים במצביע של האלבר הקודם 07 את הכתובת של 87 (47) ובמצביע באיבר "% מציבים את הכתובת של 27 (48). ג. האלבר החדש גדול מכל איברי הרשימה. מצב זה קיים אם יוצאים מן הלולאה בשורות (34)-(38) לא בגלל שקלים 588%. 588%4>2."ת, אלא מכיון שקילם זזא=גתו."ק. הלולאה ממשיכה עד אשר היא מגיעה לאיבר ‏ האחרון ברשימה, שכתובתו נמצאת ב-0 (36). במקרה כזה משנלם את המצבלע של 0 מ-1א ל-5 (52) ורושמים ם1א במצביע של "7ת, שהוא עכשיו האיבר האחרון. (81)-(56) פרוצדורה שמבטלת אלברלם מהרשימה: עושלם לולאה ומחזיקים את האיבר הקודם ב-0. הלולאה מסתלימת כאשר % הופך להלות שווה או קטן מאחד האלברים ברשימה. מסללמים את הלולאה הזו באחד מהתנאלם הבאלם: א. שורה (80): מזא=?. הגענו לסוף הרשימה ולא הלה איבר גדול או שווה ל-א. מדפיסלם הודעה שהשם לא נמצא ברשימה. ב. שורה (69): תא<>?, א=ופ. "ע ושורה (71): 1א=0. השם שרוצים לבטל הוא הראשון ברשימה. העובדה ש-0 נשאר שווה ל-12א מורה על-כך שלא נכנסנו כלל ללולאה. לכן מטנים את ראש הרשלמה מ-2 ל: 7.184 (72). ג. שורה (73): ם1א<>2, א=8%א5."ק, 1א<>0. מצאנו את השם שמחפשים, אך הוא אלנו בראש הרשימה (0 כבר אינו שווה ל-11א). לא צריך לעדכן את 8₪8פסת, אלא רק את המצבלע באיבר "0 שלפנלו כך, שיצביע על האלבר שאחרל ץ, שכתובתו 27.12 ולא על האיבר ל בעצמו. במקרים ב' ו-ג' מצאנו את האלבר שרוצים לבטל. הביטול נעשה ע"? העברה של האיבר 2 חזרה למאגר האיברילם הפנוללם, ע"? שלמוש בפונקציה חדשה, (ע)150058כ (75). / הצורה הכללית של הפונקצלה הלא: (ארגומנט) 2152058 "ארגומנט" ‏ הוא השם של משתנה-מצביע שערכו הנוכחי הוא הכתובת של האלבר שאת מקומו רוצים להחזיר עכשיו למאגר. 100 0000000000 רבקננררירב. בב ו-יב- ב ופדה הנוה תק ד. שורה (78): מזא<>, אש50."ק>א. מצב זה קורה אם השם למחיקה קטן מן האלבר הראשון, או שהוא נמצא בין שנל איברלם אחרים ברשימה. בשנל המקרלם שם זה אלנו מופיע ברשימה ולש לדווח על שגיאה. (96)-(82) התכנית הראשלת. מוסיפים שמות לרשלמה עד שמגיעים לסוף הקלט. בנקודה צו חליבים להפוך את הפונקציה הבוליאנית ע₪0 מ-08ת7 ל-2158ע כדל שנוכל להוסיף ולקרוא נתונל קלט מו המסך בהמשך התכנילת. זאת עושלם בשורה (88). פקודת (לטתאד)7מפעת פותחת את קובץ ע20א1 (לוח המקשים) מחדש ומעבירה ערך 24258 ל-ע0ם. 25 מחסנלות צומת במחסנלת (א5686%) מוגדר כמו צומת ברשלמה משורשרת וההבדל בינלהם מתבטא רק ביחס לפעולות שמפעלילים עליהם. במקרה של מחסנית הטלפול לותר פשוט, כל כל ההוספות והבלטולים מוגבלים לראש הרשלמה. הצהרה של מחטנלת1 מפציד ; זא5 א" =ג291דזן 2פ60מת =דדא0154א ;אטץגא 506 :אטצגא 4דמלדאא :הפו 9 פא פרוצדורת כדל להוסיף אלברים למחסנלת (ג8ש2): ; (1142818 :אסצזת תגט ;אטדהא 506 ב 01 מתטפעססתת (* הוסף איבר % לראש המחסנלת *) תג ;21 :ק אזספת (* צומת חדש *) ; (פ)אפא (* אחסן את הנתון *) ;א =:אטעגא."ק האיבר החדש יצביע על האלבר *) ;אסצעם =:84גא.7קע (* שהיה קודם בראש הרשלמה. האיבר החדש הופך להלות *) פ =:אסצע (* בראש המחסנלת . ;פא פרוצדורה כדי להסיר איברים מן המחסנית (200): ; (( 72818 :אסצזע תגט ;אטצאא 506 :א ת4ט0) 4ת52ה תתטסטססתע (א הסר את האלבר מראש המחסנלת *) תג ;זא :2 אזסעב אזוז'גא. "אסצזע =:א (* אחסן ב-ע את המצביע לאלבר העליון. *) ;אסצזת =:ע 1 (* העבר את הכתובת של הנתון העליון החדש אל המצביע אסצעם. *) ;תג "אסצזת =:אסצזת (* האיבר העליון החדש הוא האיבר שהיה קודם האיבר השני? *) (ע)2152055 ; פא 7.84 תור?ם אפשר לליצג אלברלם בתור (6ט6ט0) בעזרת מצביעים. המתכנת אינו צריך לטפל באיברים פנויים כאשר הוא עובד עם מצביעים, כפ? שראינו גם בללצוג של רשלמה משורשרת ובמחסנית. בייצוג תור ע"? רשימה משורשרת, כדאי לשים שני מצבלעים בכל צומת, אחד שמצביע לפנלם ואחד שמצביע לאחור. כדאל להשתמש גם בשני מצביעים חיצוניים, אחד שמצביע אל ראש התור ואחד שמצביע אל סופו. מצביעים אלה לאפשרו לגשת מלידלת לראש התור כדי לבטל את האיברלם שגמרו לקבל שרות, או לגשת לסוף התור כדל להוסיף אלברלם חדשלם. נדגים את ניהול התור ע"י אירוע המספרה. הקלט יהלה אחד משלושה תווים: 8 - מופע של לקוח חדש במספרה. הלקוח יצטרף לתור הממתינים לשרות. ץצ - יציאה של לקוח מן התור לאחר סיום השרות. 2 - הדפסה של רטשימת הממתינים במספרה בנקודת זמן כלשהל. התכנלת לאירוע המספרה: ; (צטקטס ,צטפא1) גת523דא אגתסספת (1) פעצץ (2) ;0 עס [1..10] צהתתה קמאסגץ = סנטג7 (3) סל" = בדם7?דגא (4) עתססעת = [מא20ך (5) )6( 56: ;דא :התג (7) 21 דא :אמפסא (8) ;פא (9) תאצ (10) דא :507 ,8פסת ,תק (11) ;תס :סא (12) גא (13) ; (710ד : םוטא תהט) 54 גתא תתטפתססתת (18) אנסתת (15) :('כתוב את השם של הלקוח שהגיע') אממדדתט (16) ; (מאאא) פוגפת (17) אזפת (18) ;פאת (19) 22 %( ;(' הדפס 0% (' ;5קתג מתטסמססתק אזססת ; א זתדזתט (('תור77"7') אומצזתח ;0 =:2 ספ מא <> תע ממזצט אזסטת ; (5888. 27) א)זפדדתט התז."ק =:ק פאע ; פא (14010 : מאגא) גתסא מתטפתססתע את ;(ע) אסא מאגא =:אתטפ.יק ;דא =:גתגז. "2 ;509 =:אמפסא. "ק אפחץ םא = 508 עד =:058 ₪ 20 =:4תז. 5077 ע =:ע50 ; פא ; דעצ מתטפפססתק אזסטת אפחאץ םא <> אפסת תך אזססת ;0 =:2 ; 4פ1. "058ת =:051ת אפ גדא <> 8פסת עד מא =:אמפסא. "אפסת ₪ א =:507 (ע) 152085 פאם ; פא התכנית הראשלת *) אז6ג " ;א =:3051 =:507 "א" לסמו מופע זייייי!') אתמצדתח "צ" לסמן יציאה יירייו) אתמדדתט "א" לבקש הדפסה ירירי!) אתמעזתט ; (ס0א) אזפגמת 0 עסם עסא מדחט עס פסא 0488 אזספת :'אי .(א) 5 התא )20( )21( )22( )23( )28( )25( )26( )27( )28( )29( )30( )31( )32( )33( )38( )35( )36( )37( )38( )39( )40( )41( )42( )43( )48( )45( )46( )47( )48( )49( )50( )51( 6)52( )53( )54( )55( )56( )57( )58( )59( )60( )61( )62( )63( )68( )65( )66( 33 (א) תפסא (67) פא (68) ,ךלדסצ :'ץ' (69) פמפסג :'ז' (70) פא (071 .עאת (72) הפלט של התכנלת: הדפס 'א' לסמן מופע 'צ' לסמן לצלאה '' לבקש הדפסה א כתוב את השם של הלקוח שהגיע ]את א כתוב את השם של הלקוח שהגיע אסטתגת ש א כתוב את השם של הלקוח שהגיע כ ה תור"7" ₪4 תמתפוץע א כתוב את השם של הלקוח שהגיע אס א כתוב את השם של הלקוח שהגלע ו 0 ה תור7-77 תמתסע א ונ עו הסבר: הפרוצדורות %ַע58 גתא ו-842285 אלינן שונות מפרוצדורות דומות עבור רשלמה משורשרת. בהדפסה מתחלללם מראש התור (2058) ומתקדמים עד לסופו, כאשר ענא=גפות. ק. (42)-(31) הפרוצדורה 407: לוצרלם אלבר חדש (שורה 33) שרושמלם בו את המופע החדש, שעכשלו נמצא בסוף התור (שורה 34). את המצביע לאחור של האיבר החדש מכוונים ל-1א (35), כל האלבר החדש הוא תמלד האחרון בתור. את המצביע לפנלם של האלבר החדש מכוונים אל האיבר שעד עכשיו היה האחרון (36). אם התור היה ריק עד למופע זה (1א=507), צריך לשנות את הכתובת ב-058ת מ-ם1א ל-2 (38). אם התור לא הלה רלק, צרלך לשנות את המצב?ע של 104 האיבר שהילה עד עכשלו האחרון בתור כדי? שלצביע על האלבר של המופע החדש (40). בכל מקרה, הכתובת של האלבר החדש הלא הערך החדש של 50 (41). (55)-(43) הפרוצדורה 8121+: כאשר מסתיים השרות של הלקוח, הוא לוצא מראש התור. לכן, אם יש מישהו בתור (כלומר, ם1א<>058ת בשורה (6)45), עוברים לראט התור ומורלדים את האיבר שנמצא שם (שורות (47), (48), (53)). אם התור החדש אינו רלק, צרילך לשנות ל-10א את המצביע %028% של האיבר שעד עכטיו היה שני בתור וזה לסמן שהוא עכשיו הראשון בתור (49)-(50). אם התור החדש רלק, אלן צורך לעדכן את המצביעלם של צומת כלשהו, אך צריך לעדכן את המצביע לסוף התור (509) שלהיה שוה ל-1א (52). (72)-(56) התכנית הראשית מורכבת מלולאה אחת שמקבלת את קוד הפעולה (מופע, לצלאה והדפסה) וקוראת שם לקות,. אם יש מופע. התכנית מסתיימת כאשר מגלעים לסוף הקלט. 5 עצים מבנה עץ (66ע7) אפשר להחזיק כרשלמה משורשרת עם שנל מצבלעים לשנ? מקומות במערך, כלומר לשנ אלברים סטטלים. אפשר גם להחזיק ברשומה מצביעים לשנל איברים דלנמלים. נכתוב תכנית כד? לבנות ולהדפיס עץ. ; (צטעעטס ,(עטעא1) ממתך 4גתססתע (1) מתצ (2) 2 = 47221 (3) ו עתסססת = 2דע (4) (* מחללפים אטךא 5806 *) :;אטצאא 506 :אטעגא (5) (* בסוג אמלתל *) 2010 :00 (6) :אזאצ (07 ;פאת (8) ו פט (9) ; זא :500058 (10) נאטץגא 506 :[םזקא (11) 2 :207 תגט) בצנאספת מתטכעססתת (12) ; (אטעגא 506 :מפגעחס [מופא (13) (* פרוצדורה זו מוסיפה צומת לעץ *) (14) אסשת (15) אפחז דא = 20%₪8ד עך (16) (* נוצר צומת חדש *) אזסטת (17) ; (120%₪7) אמא (18) ;זא .500:=‏ ת₪אס2ך (19) ;דא =:אדאגצ. ‏ ושאסלד (20) צמזטא =:אטצגא. "סד (21) פא (22) 8 (23) את (24) אמחד אטדגא. ‏ דתאס2ד > מפגסגמ0 דתותא עך (25) ; (0488 דסא ,0א5. חאס2ד') גצזאחם אחוד אטדגא. ‏ עשאס2ד < הפהפגחס ששזחא עך (0358 עשנפא , אדועאצ. ‏ דשאס2ד') גצדאמב פא (* הצדאחם *) ; פא ; (2818ד1 : [שאס2ד) ג5בעסג מאטסטסספק (* הדפס את הנתונים לפ? סדר מלון עולה *) אס (* בדוק אם צרלכים להפסלק *) אפח םדא <> 720887 עך אזסטם .5805( ;‏ ת20₪ד) ג5בפסגא ; (אט1א. ז₪אס2ד) מודתט (א1אגצ. ‏ זעאס2י) ג46פסג (* הדפסת צמתלם *) פא (* ג5געסז *) ; פא (* תכנית ראשלת ‏ *) את 5808₪58:= ;(('הכנס ערכלם | ') אמדדתט ; (₪6זעא) פגמת (פתזתא ,5000058) גצזאסחת 0 ע0ם צסא ממזמא (* בנלית עץ *) את ; (דותת ,5108058) הצדאמם (דם,זתא) סגמת ; פא (* דלג שורה *) ; אזטןזתח ;('התוכן של העץ מופיע למטה') אןמדדתח (509058) גפגקסגה . פא לדוגמא, נקרא ערכים ונבנה עץ. לקרוא משמאל לימלן: 15 5- -13- 20070 -5 15 18 4% העץ שנבנה על פי התכנית: 106 -5 )26( )27( )28( )29( )30( )31( )32( )33( )34( )35( )36( )37( )38( )39( )40( 7.6 תרג?ללם (1) שנה את הפרוצדורה 84525 כדל שתבדוק אם המחסנלת רליקה. (2) תכניות 1 עד 15 שבפרק 16, מבנה נתונים, מתאימות גם לפרק זה. יש להשתמש רק במבנים דלנמלים. אנחנו אבודים. רק הוא הבין מה הולך כאןי 17 נספת א! המחשב ושיטות ספירה 1 מצרכת המחשב 1 לתלדת העיבוד המרכזית - יע"מ אפשר לסווג את הרכיבים של מחשב בשתל קבוצות: = להידת עליבוד מרכזית - יע"מ, או (020 -001% 8מ22006551 5%81ת00). = לחידות קלט/פלט (58גח0 1/0 - 1%8מ0 סטק6ט0/>טקה1). קבוצת רכיבי הקלט/פלט מורכבת מלחידות הקלט ולחידות הפלט, כמו מדפסת, מצג (מסוף), דיסק, תקליטון ועוד. קבוצת רכיבי ה-020 כוללת את שלוש הלחלדות הבאות: = כהחידה ארלתמטית-לוגית (210 - 0516 6%16-20816(ת1%ע1). + זיכרון (ץץסת6א). = בקרה (01ע56מ00). הקשר בין הרכיבים האלה נראה בציור הבא, כאשר חץ רגיל מסמן זרלמת הוראות, חץ עבה מסמן זרימת נתונים וחץ מקווקו מסמן זרלמת אותות בקרה ופיקות. החלוקה של הלחידות הבסיסיות במחשב מוסכמת על הכל, אך לש חילוק? דעות לגבל המלנוח וההקבצה שלהן. לש שמחילים את השם יע"מ, או שק0, לא על שלוש היחידות שהוזכרו קודם, אלא רק על היחלדה הארלתמטלת-לוגית, כאשר הזיכרון ולחידת הבקרה נפרדים מן ה-020. אחרים כוללים רק שתל *הידות, את להלדת הבקרה והיחידה האריתמטית-לוגית במושג של היע"מ. 2 הכרטלס המנוקב מחזור החילם של נתונים שמעובדלם ע"י מחשב מתה:ל מחוץ למחשב ומסתללם מחוץ לו. כדל להעביר את הנתונלם לתוך המחשב נעזרילם בלחלדות קלט. 8 ?חידה אריתמטית- לוגית ן 1 [ 1 בקרה = = -- זרימת נתונים ב זרימת הוראות ₪ זרימת פיקוח <חד- עד סוף שנות השבעים, השיטה המקובלת ביותר לקליטת נתונים ע"? מחשב היתה מורכבת משנל צעדים. בתחילה הלו מקישים את הנתונים בכרטיסים במכונה לניקוב כרטיסים. המכונה ניקבה מ-1 ועד 3 חורים בגוף הכרטיס כדי שישמטו קוד, אשר המחשב יוכל לקרוא אותו בילחידת הקלט. בנוסף, המכונה היתה מדפיסה את התוולם על השפה העליונה של כרטלס כדל שאנשלם יבינו את תוכנו. כל תו נוקב ‏ והודפס בעמודה אחת מתוך 80 העמודות של הכרטלס. הטלב השני הלה הזנה של הכרטלסלם האלה למכונה אחרת, קוראת כרטלסלם. מכונה זו הלתה מזהה את הנקבים, מפענחת את הקוד ומעבירה אל המחשב עותק של הנתונילם מהכרטיס שנקרא. 1.9 | | | 2 2 21 קההד 1 18 : והוהוו וו וווווווווה. ו הו ה0- עווווווווו ו ) ו והתואתאממהאפטטאאאשטהפפצעצפמאטפתאצצ עתגתמאמתתאפטוטפ5%.טסהאוו'ו'ווונוו וווו]וווווו]ווווווווווווווקווווווווווווווווווווווווווווווווקווווווווקוווווווווןו ומוווווווו!ווווווווווווווו:יםיםם!יוויוווווווווווווופוווונוותוווווווווווווווווָוג נננכףרבככבכנבכנבננכםנכנבנ: נכנככנננננקפפםינרנבכנננגם בנננננוםנבכבננננםרנברננוננםננר ) )+ : :"+ % )+ '].' וווווווווווווווווווומוווווווווווווווווווווווושווווווומיויווווופוווווויוומווווווי :ו - 8 + וו ייוו ץצ 'האו מ ףמההתפאטאמאטטתמצכעצפאעעתמהטטצטאטנהטתאלגפאמעתתאהאהאמאממתאראטדהאטטראוונונונוי הרוי ל עלין בתמונת הכרטלס: המספרים בשפה הימנלת של הכרטלס הם מספר? השורות. המלבנלם המאורכים למטה מכל תו מודפס מסמנים את מקומם של החורים אשר מהוולם את הקוד של אותו תו. למשל, הקוד של הספרה ‏ 0 הוא נקב בשורה 0, הקוד של 1 הוא נקב בשורה 1 וכדומה לשאר הספרות. הקוד עבור 4 הוא שנל נקבלם: אחד בשורה 12 ואחד בטורה 1. הקוד עבור 5 הוא שנל נקבים: אחד בשורה 12 ואחד בשורה 2. לשאר האותלות שלטת הקודלם דומה, אלא שצוגות הנקבים כוללים נקב בשורה 11 לחד עם נקב של ספרה ונקב בשורה 0 לחד עם נקב של ספרה. הקוד לאותלות בעברית מורכב משנל נקבים, אשר חופפים את הנלקוב לתווים באנגלית, פרט לאות "א" (האות ה-27), אשר חורגת ומנוקבת כנקב נפרד בשורה 2. הקוד לסלמנלם מלוחדים הוא בן 3 נקבים כמו למשל הקוד עבור סימן החיבור (+) אשר כולל 3 נקבים בשורות 12, 6, 8. מספר העמודות בכרטלס הוא 80 ולכן המספר המלרב? של תוולם שאפשר הלה להכיל בכרטיס אחד הלה 80 תווים. מן הראול לציין שהיו בשלמוש גם כרטיסים בעלל מבנה שונה. 3 עבודה במסוף בכלים אשר נמצאים ברשותנו היום ניתן להזין נתונים למחשב בשלב אחד. במקום להשתמש במכונת הניקוב, משתמשים במסוף לשם הזנה של הקלט, אשר מועבר באופן ישיר אל המחשב בלל התיווך של כרטיסים. בתקופת השלמוש בכרטיסלם, מכונת הניקוב לא הלתה מחוברת אל המחשב. קוראת הכרטיסים בלבד היתה מחוברת אללו ועל כן רק היא נחשבה לחלדת קלט. המסוף, אשר משלב את התפקידים של מכונת הניקוב ושל קורא הכרטלסלם, הפך להיות מכשלר הקלט הנפוץ ביותר. הנתונים עוברילם מן המסוף אל זלכרון המחשב ללא התערבות ידנלת נוספת. העברה זאת נעשלת כתוצאה מהוראה של לחלדת הבקרה, 100 אשר מפקחת על תהליך העיבוד מתחילתו עד סופו. לכן, בציור למעלה, יס חץ מקווקו שמקשר בין יחידת הבקרה לבין לחלדת הקלט. ‏ אלן זרלמה של נתונלם לעיבוד בין שת יחידות אלה, אלא של אותות פיקוח שמורים ליחידת הקלט מה ואיך לעשות. 08 ציכרון המחשב בזיכרון המחשב מחזלקים 3 סוגים של נתונלם: א. הוראות למחשב. ב. נתונים. ג. תוצאות בלניים ותוצאות סופלות. סוגל נתונלם א' ו-ב' מגיעים לזיכרון מן החוץ באמצעות מסוף או באמצעות לחידת קלט אחרת. הסוג השלישל נוצר כתוצאה מעיבוד של נתונל הקלט ע"ל הוראות התכנלת. קבוצת הוראות אשר מהווה לחידת עיבוד אחת נקראת תכנית (מהמשסץ2). כדי לבצע את התכנית קוראים אותה לזליכרון המחשב מדיסק או תקליטון. בגמר הביצוע, תכנית אחרת תופשת את מקומה כדי להתחיל תהליך עיבוד חדש. הזיכרון משמש לנתונלם כלחידת המתנה. הם נמצאים שם אתחרל שמעבלרים אותם מיחידת הקלט ולפנל שמעבירלם אותם לעיבוד ולפלט. ההוראות (המהוות תכניות) מועברות כסידרן ליחידת הבקרה, שבה מפענהחים כל הוראה ומבררלם איזו פעולה על המחשב לבצע. נתונים אלנם מועברלם ל<חידת הבקרה. בהתאם להוראות התכנית הם מועברים ממקום למקום בזיכרון, או מן הזיכרון ל-410. זהו תהליך עיבוד הנתונלם. מכיון שהעברות אלו הן תחת הפיקוח של לחידת הבקרה, נרשם חץ מקווקו בשרטוט של היע"מ, בין לחידת הבקרה לבין הזלכרון. מעבירים נתונים ממקום למקום בזיכרון אם רוצים לשלב לחד נתונים חלקיים אשר נמצאים בו במקומות שונים בצורה לא רצלפה, או לא בסדר הדרוש לשורת הפלט. מעבירים נתונים ל-410 אם לש פעולות אריתמטלות או לוגיות (ז"א הטוואות מסוגים שונים) שרוצים לבצע עליהם. כאשר המחשב מסיים לבצע פעולות אלו, לחידת הבקרה מחזירה את התוצאות לשמלרה בזיכרון. זהו החץ העבה הדו-כיוונל בין הזיכרון וה-210. החץ המקווקו מיחידת הבקרה ל-410 מסמן שלחידת הבקרה לוזמת העברת התוצאות חזרה לזיכרון בתום פעולת החלשוב. בסיום ביצוע התכנית, המחשב שוב פעם צרלך להתקשר עם העולם החלצון והוא עושה זאת בעזרת לחהלדות הפלט. יחידות הפלט הנפוצות ביותר הן המדפסת, אשר מפיקה את הפלט בנייר והמסוף אשר מציג את הנתונים על גבי המסך. לחידות פלט חשובות הן יחידות ההחסנה של הנתונלם, כמו הסרט המגנטי, הדלסק והתקליטון. ביחידות אלו מחסלנים את תוצאות העיבוד לשם עיבוד נוסף במועד אחר וא+ הן משמשות כלחידות קלט. 21 1.5 ליצוג תווים, מספרים, סלב?ות ובתים כל הנתונים שהמחשב מעבד צריכים לשהות בשלב כלשהוא בזיכרון. הזיכרון בנול מרכלבים חשמליים שלכולים להלות באחד משנ? המצבים, דלוק (א0) או כבול (ע07) ובמונחים מתמטלים - 1 או 0. כל רכיב נקרא סיבית (211, קיצור של 21811 קְזת21). מכיון שדרושות סיביות רבות בכדי לילצג תור תוולם שונלם, מקבצים אותן יחד לקבוצות של 8. צירוף של 8 סיביות נקרא בלת (86ץ2). הזיכרון של מחשב גדול מכיל מלליוני בתים, למשל, 2 מיליון. שם מקוצר לאלף בתים הוא קילו-בית (מִךַצת2-א, מ75צ%1108) ושם מקוצר למלליון בתים הוא מגה-בית (56ע86280). מה אפשר להחזיק בבית אחד? כאמור, מחרוזת של אותות השמליים אשר מורכבת מלחידות של 0 ושל 1. כמה מחרוזות שונות כאלו יש? הלות והבית מכלל ‏ 8 סיביות, שכל אחד מהם לכול להלות באחד משנ? מצבים, אפשר להחזיק בו 256 צירופים שונלם (256 = 285 = 2%2*2*2%2%2*2%2), או מחרוזות שונות של סיבילות. מה לכוללם לללצג בעזרת 256 המחרוזות האפשרלות השונות של סלביות? א. ספרות (0-9) - דרושות 10 מחרוזות כדל לייצג את כל הספרות. ב. אותיות לטלניות גדולות וקטנות - דרושות 52 (26*2) מחרוזות שונות. ג. סימנים מלוחדים - למשל +, -, *, ), (, ועוד. ד. אותלות בעברלת - דרושות עוד 27 מחרוזות. ה. תווי בקרה שונלם - דרושות מחרוזות בהתאם לצורך. תוול הבקרה דרושלם בעיקר לניהול תקטורת בין המחשב לבין היחידות השונות המשמשות לעיבוד מקוון (8ת2:0006551 86מ13ת0). צירוף של 8 סלבלות יכול לייצג ספרה, אות, או סלמן כלשהו ונכנה אותו בשם תו (0(8:80%562). מספר המחרוזות שאפשר לבנות בבית של 8 סיביות הוא 256. מספר זה גבוה ממספר התווים שנצטרך לללצג. אלזו מחרוזת מסוימת של סיביות "אפס" וסיביות "אחד" *לצג כל תו? קיימות כמה שיטות קידוד לתווים, כפי שנתאר בהמשך. בשלב זה דל לדעת שמחרוזת של 8 סלבלות יכולה לייצג כל תו שנרצה. לדוגמא, נניח שהקוד עבור הספרה 4 הוא: 0 110 00 והקוד עבור הספרה 0 הוא: 0 110 00 לפיכך, הילצוג הפנימי של המספר 4000 יהיה: |---4---| = ]---0--| | ]--9--| | |]---9--+| 00 110 100 00 110 000 | 00 110 000 | 00 110 0 לליצוג זה דרושלם 4 בתים, שהם 32 סלביות. כמו שאפשר לשלב יחד 8 סיבלות כדי לקבל בית אחד, נוכל לשלב יחד מספר בתים כדי לקבל מלה (0:6ח%). במחשב 222-11 למשל, המלה מורכבת משנל בתים (16 סיביות), כאשר במחשבים לותר גדולים כדוגמת מחשבי ילבמ בארכלטקטורת 370, או 2 מחשבי אגצ, המלה מורכבת מ-8 בתים (32 סיביות). חשוב להכלר את המושג מלה מכיון שהגודל של האוגרים (90818%088), שבהם מתבצעות פעולות ארלתמטיות ופענוה הוראות הוא בדרך כלל כגודל של המלה של המחשב. נובע מזה שהערך המספרל הגבוה ביותר והנמוך בלותר וגם ההוראה הטלפוסית, נקבעים לפי אורך המלה. 6 אוגרים אוגר (20815%0%) הוא אביזר ביע"מ שמסוגל לקלוט נתונים, להחציק אותם, ולהעביר אותם בין שלבי עיבוד שונים בתוך היע"מ. הוא מלועד בעיקר להחזקה זמנלת של נתונים לביצוע פעולות חיטוב ופעולות לוגיות. מכיון שהוא מלועד לעבודה עם נתונים מספריים, גודלו צריך להיות כגודל מלה באותו מחשב. התיאור של היע"מ והאוגרים העיקריים הניתן בתרשלם הינו סכימתי, לשם הסבר מושגים ולא לשם ל:מוד של מחשב מסולם. יחידה אריתמטית- לוגית 3 בזלכרון של המחשב מחזיקים גם נתונים וגם הוראות (או פקודות). הוראה טילפוסית יכולה להראות כך: כתובת שנליה כתובת ראשונה קוד הפעולה הקוד מציין את סוג הפעולה, למשל חיבור, חיסור, העברה ממקום למקום או השוואה. כתובת בזיכרון היא המספר הסידורי של תא מסוים (מספר הבית או מספר המלֶה) בזיכרון. הכתובת הראשונה בהוראה מציינת את מלקומו של הערך שנבצע בו את הפעולה המבוקשת (האופרנד הראשון). הכתובת השנילה מצללנת את מקומו של האופרנד השנל, אם מדובר על פעולה הזקוקה לשנל אופרנדים. התוצאה של הפעולה תאוחסן בכתובת השנייה ותחליף את תוכנה הקודם. ההוראות מוחסנות בזיכרון באופן סודר, ז"א אחת אחריל חהברתה ויוצרות תכנלת. בזמן ביצוע התכנלת, לחידת הבקרה מעבירה את הכתובת של ההוראה הראשונה לאוגר שנקרא מונה התכנית (20 - עשסתט00 מהעפסץת). להידת הבקרה בודקת את האוגר 20 ומעבלרה את הפקודה שנמצאת בכתובת שמופיעה ב-20 אל אוגר ההוראות (18 -76818%561 מ6%10טש55ת1). בכל פעם שהוראה מועברת, התוכן של 26 גדל ב-2 (אם אורך ההוראה הוא שנל בתים) ולכן הוא מצביע תמיד על הפקודה הבאה שבתור לביצוע. לאחר פיענוח וביצוע ההוראה הנוכחית, יחידת הבקרה תביא עוד הוראה מו הכתובת שב-6ק. בנוסף על פקודות חישוב והעברות ממקום למקום בזיכרון, יש גם פקודות דילוג, או הסתעפות (51085סטע56ת1 אַח1תסת2:8) שמנתבות את הביצוע אל הוראה שנמצאת במקום אחר,ולא אל ההוראה העוקבת. ביצוע הוראה כזאת גורם לשלנוי התוכן של 6 לכתובת של ההוראה שמבקשים להסתעף אליה. לפעמים ההסתעפות מותנלת בתוצאה של פעולה קודמת. למשל, נסתעף אם התוצאה של הפעולה הקודמת הלתה חיובלת או שלילית, או שגרמה לגלישה. מצב של גלישה קורה כאשר מגיעים לתוצאה אשר גדולה מהקלבולת של האוגר. בסיום כל פעולה שומרת היע"מ "תמונת מצב" באוגר מלוחד הקרול 25% (06658ע2 46 568008). באוגר זה שומרת הלע"מ קוד, שערכו מסמל אם התוצאה של הפעולה הקודמת היתה חלובית, שלילית, אפס, או גלישה. לכן, בעת בדיקת קלום תנאל לש לפנות אל ה-25%. פנייה זו אלנה לשילרה, אלא באמצעות פקודה מתאימה. שלושת האוגרים 6ע, ת1, א5ע הם אוגרל עזר ליחידת הבקרה. האוגר 208 (86815%6% 28%8 קעסףת8/) משמש כתחנת מעבר לנתונלם בלן *חידות הקלט/פלט, או אוגרל הלע"מ לבין הזיכרון. הכתובת בזיכרון לקרלאה או כתיבה מועברת לאוגר 4% (ע76815%0 2081655 ע:סת6/) לפני שפעולות אלו מתבצעות. מפאת התפקיד אשר ממלאלם שנל האוגרים תגא ו-תסא, אפשר לראות אותם כחלק מיחידת הזלכרון. כאשר מחסלנלם נתון בזיכרון, לחידת הבקרה מעבירה אותו תחילה ל-2%5/ ואת כתובתו - ל-45א. לאחר מכן, הלא משגרת אות שגורם להעברת הנתון הזה לכתובת היעד בזיכרון. כאשר קוראים נתון מן הזיכרון, *חידת הבקרה מעבלרה את הכתובת שלו ל-45 ומשגרת אות אשר גורם להעברתו ל-22/. משם הוא מועבר ל-1%8 אם הוא הוראה, ואם הוא נתון לעיבוד, הוא מועבר ל-410, למקום אחר בזיכרון, או ללחידת פלט. 16 בכל :יע"מ יש גם אוגרלם כללים (628 - 882156628 שפסקעט? [6:8ת06). הם מילועדים לביצוע פעולות אריתמטלות ופעולות לוגיות במספרים | בלנרללם ובמספרים המוצגים בשיטת נקודה צפה (ראה הסבר בהמטך). המתכנת *כול להשתמש באוגרים הכללליים באופן ישלר כאשר הוא מתכנת בשפת סף (ז45502010). שפות תכנות עלללות (פפָהטפַת18 16061 ת818), כדוגמת פסקל משתמשות ‏ באוגרים אלו גם כן, מבלי שהמתכנת לציין זאת במפורט. אפשר להסתכל על אוגרים אלה כהשלמה לאוגרים הפנימלים של ה-210. במחשבי יבמ בארכיטקטורה 0 >ש 16 אוגרים כללללם ו-4 אוגרים לשלטת הנקודה הצפה, במחשב 22-11 לש 6 אוגרים אשר פנולים לשימוש המתכנת וב-אג% יש 12 אוגרלם. מן הראול לציין שהמבנה הארכיטקטוני של היע"מ שונה במחשבים שונלים. כך למשל, במחשבי ‏ ילבמ לשנם אוגרים נפרדים כד? לבצע פעולות חישוב ופעולות לוגיות בתווים ובמספרים עשרונלים, בנוסף לאוגרים לפעולות בשיטת הנקודה הצפה. ספרים ב?נר?? סיס? מספרים מכל שנאמר אודות ילצוג ספרות בזיכרון של המחשב, נובע שמחשב שבו המלה הלא בת 32 סלבלות יכול להחזלק מספר שגודלו המקסלמלי הוא ‏ 4 ספרות (4 בתים) ומחטב שבו המלה הלא בת 16 סלביות לוכל להחזיק מספר שגודלו עד 2 ספרות. הקורא אול תמה על הערך העשרוני הקטן של המספר המקסלמלי, שלכאורה המחשב לכול להחזיק במלה. ערך זה הוא 99, אם אורך המלה הוא 2 בתלם, או 9999 אם אורר המלה הוא 4 בתים. התשובה לשאלה זו הלא, שיש צורה יותר לעללה להחזיק מספרים, אטשר מבוססת על מקורה של המלה סיבית (211), דהליינו ספרה בינרית (41817 קְדבת21). הכוונה הלא שאפשר לראות כל סדרה של ספרות 0 ו-1 כמספר בבסיס 2. למשל, אפשר לראות את המספר 101 כאללו הוא שונה ל: 5 = 1*20 + 0*21 + 1*22 אפשר להציג בצורה כללית כל מספר לא שלילי א כמספר בלנרל: כ ++י 7-2 1-מַת , 1-ו ערכו סל המספר יהיה: + <=א כאטר כל ות יהיה טשווה או ל-0 או ל-1. 0 להלן טבלה של 8 המספרלם הבלנרלים שאפשר להצלג ב-3 סלביות: 0 וַם כת א 0 0 0 0 1 0 0 7 0 1 0 2 1 1 0 3 0 0 1 4 1 0 1 5 0 1 1 6 14 14 7 55 בצורה כלללת, אפשר להצלג מספרים בכל בסלס 5<2 כסדרה של ₪ ספרות: גֶם וֶם .... 2-חת 1-חת כאשר: ‏ א. ‏ 5-1 > גת > 0 ב "כ > א ג 01 גת 5 = א ערכים מקובלים בעבור הבסיס 2 הם: 10 (דצלמלל - 2601081), 2 (בלנרל - ץְצאת31), 8 (אוקטלי - 00681) ו-16 (הקסדצימלי - 800601081א16). מספר הספרות הטונות בשלטת ספירה מסוימת הוא כגודל הבסיס. בשיטה הבלנרית יש שתי ספרות (0,1), בעשרונית לש 10 (0-9) ובאוקטלית ובהקסדצימלית יהיו 8 ו-16 ספרות, בהתאמה. בטבלה מוצגות הספרות האפשרלות בכל אחד מ-4 הבסלסים: אוקטלל הקסדצימלל דצימל: המספר הגדול בלותר שנוכל להחזלק ב-₪ סיביות הוא [-"פ. למשל, אם בשלטה הבינרית 3=ח, המספר הגדול בלותר שאפשר להחזיק הוא 7 (111=23-1=7). בטבלה למטה מצלגים את המספר העשרונל 37 בבסלסים שונלם: פלרוט החלשוב בינרל 111 אוקטלל 5 הקסדצלמלל 25 מתוך הטבלה אפשר ללמוד, שאם נקבץ את הספרות הבלנרלות בקבוצות של 3, ונחליף כל שלישלה בספרה אוקטלילת, נקבל ייצוג אוקטלי. המספר הבלנרל בטבלה הוא 100101. נקבץ אה הספרות הבלנריות לשלישלות ונקבל: 1 100 ===> 45 אוקטלל 4 5 אם נקבץ את הספרות הבינריות ברביעלות ונחליף כל רביעיה בספרה הקסדצימלית, נקבל ייצוג הקסדצימל?, כפי שמוצג למטה: 1 10 ===> 25 הקסדצימלל 2 5 נוכל גם לפעול בכיוון הפוך ולהתחיל עם המספר 45 אוקטלי, לכתוב את ה-5 ואת ה-4 כסדרה של ספרות בינריות (101, 100, בהתאמה) ולשלב אותם לחד כדל לקבל את המספר המקורל (45) בליצוג בינר? (101 100). 6 1 מעבר בין שיטות ספירה על פל ההסבר שנלתן אפשר לשרטט תרשים למעבר בין שיטת ספירה אחת על שהוא חזקה של 2 לכל שיטה אחרת על בסיס כזה. בסיס מעבר בין שילטות ספירה: בינרילת, אוקטלית והקסדצימלית החלף כל ספרה אוקטלית ליצוג אוקטלל בסדרה של ספרות בינריות חלק את הספרות הבינריות לקבוצות של 3 וכתוב , את הספרה האוקטלית המקבילה לכל שלישליה ילילצוג בינרל חלק את הספרות הבינריות לקבוצות של 8 וכתוב את הספרה ההקסדצלמלית המקבילה לכל רביעללה *יצוג הקסדצימל? | --------->- החלף כל ספרה הקסדצימלית בסדרה של ספרות בינריות לעבור מליצוג אוקטלי לליצוג הקסדצימלי צריך לעבור תחילה דרך הליצוג כדי הבינרי. לדוגמא, נצלג את המספר הדצימלי 112 בשיטה האוקטלית: 0 6 | מספר אוקטלל 0 110 01 0 העברה לייצוג בינרל 0 | 7 | הקבצה לרביעיות כדל לעבור לילצוג הקסדצימלל ניתן להסיק מן האמור לעלל: אפשר לתאר את התוכן של מלת המחשב כמספר הקסדצימלל, אוקטלי אוו בלנרל. א. בכל מקרה, הרכלבים בעצמם הם סלביות והשאלה הלחידה הלא אם מסתכלים על כל סיבית בנפרד או מקבצים אותן בקבוצות של 3 סיביות כד?ל לקבל מספר אוקטליל, או בקבוצות של 4 סיביות כדי לקבל מספר הקסדצימלל. ב. נוכל להסתכל על סדרת הסיביות בכל בית כמספר בינרל, או כקוד שמטרתו לייצג תו כלשהו. 2 מספרלם שללליים באריתמטיקה מייצגים מספרים שלילל?ים ע"? שימוש בסימן מלנוס (-). סימן זה אלנו מתאלם לשלמוש במחשב, שבו קלימות רק הספרות 0 ו-1, אשר מללצגות את שני המצבים של האותות החשמלליים. משתמשלם בשתל ספרות אלו גם לילצוג הסימן: "פלוס" (+) ע"ל הספרה ‏ 0, ו"מלנוס" (-) ע"? הספרה 1. עתה יש לקבוע כללים איך להבדלל בין 0 המסמל את הספרה "אפס" לבין 0 המסמל "פלוס" ובלן 1 המסמל את הספרה ‏ "אחד" לבין 1 המסמל "מלנוס". התשובה היא שהמלקום של ה-0 או ה-1 במלה הוא הקובע. 107 | | | ו | נתונה מלת מחשב בת ת סלביות: 1-ת 3 2 1 0 מספר הסיבית סיביות המליצגות מספר הסלמן נקבע ע"ל הערך הבינר של סלבית הסימן. הערך של המספר נקבע ע"ל מחרוזת הסיבלות שמופיעה בשאר המקומות של המלה, מלמלן לסלבית הסימן. הערך של המספר נקבע על פל שיטת הילצוג שלו. קיימות שלוש שלטות שונות לילצוג של מספרים שלמים ושלטה אחת כד? לילצג מספרים בשברים. 5. שלטות ל??צוג של מספר?ם שלמ?ם 1 שלטת סימן וערך שיטת סימן וערך (66ט16מ%88 6ת8 ת518) היא הפשוטה ביותר. סיבית הסימן הלא 0 למספר חיובי ו-1 למספר שלילי. המספר עצמו מלוצג כמספר בינר? ע"י סדרת הסיביות שמלמין לסימן. . ערר סימן למשל, המספר 5- ייראה כך: 1 | 1 המספר 5+ יוצג כך: 1 || 0 שיטה זו פשוטה מאד ועל כן נסביר את חסרונותיה כד? להצדלק את השלמוש בשלטת לילצוג אחרת. החסרונות של שלטה צו הם שלושה: א. המספר 0 מלוצג בשתי דרכים: 0 ([( 1 (בשני סלמנים שונלם) 0 | 0 ב. כאשר מחברים שני מספרים, צריך לבדוק את סיבית הסימן של כל אחד מהם. אם הסימנים זהים, צריך לחבר אותם ואם הסלמנים שלהם שונלם, צריך לחסר ולא לחבר אותם. בשלטות אחרות, בדלקה זו אינה נחוצה. ג. אם מרחלבים את המקום שנתפס ע"? מספר שלילי, למשל מ-16 סיביות ל-32 סיביות, צריך לאפס את סלבלת הסימן במלה הלמנית ול"הדליק" את סיבית הסלמן במלה השמאלית, כמו שנראה בדוגמא: 35 0 15 9 15 מצב קודם: 16 סיביות מצב חדש: 32 סלבלות 9 0 108 2 שלטת המשלים לשנללם בילצוג המשלים לשנלים (%5ת00001600 5'סש1) סלבלת הסלמן נמצאת בסיבית מספר משמאל. ‏ היא שווה ל-0 עבור מספר חיובי ושווה ל-1 עבור מספר שלילי, כמו בשיטת סימן וערך. בשיטה זו, סדרת הסיביות בצד למלן היא ייצוג בינרל של המספר ‏ 5 רק אם א חיובי. אם א שלילי, סדרת הסיביות בצד *מלן היא המשלים לטנילים של א%. המשלים לשנלים של א עם 1-םת סיביות מוגדר ‏ כהפרש בין 21 לבין הערך המוחלט של א. הערדך 1 חללב להיות גדול או שווה לערך המוחלט של א. אבל אילך מוצאים את המשלים לשניים של מספר א%? להל 2 סדרת הסלביות ששווה לערך המוחלט של א. המשלים לשנלילם של %< להיה 27. בלטול זה אפשר לכתוב בצורה אחרת, 2771-1-2+1. דרך זו נוחה לותר לבנללת אלגורלתם לְחישוב המשלים של המספר % בשלושה שלבלם: א. חלשוב 27-1-1 ב. חיטוב 20-1-1-2 ג. חלשוב 1+[2-(20-1-1)] דוגמא: נתון 53-=א%. המספר 2 הוא הייצוג של |א] כמספר בינרל שערכו: 1, ננלת ש 8=ת ואז 1=7-ת. עכשלו נבצע צעדים אלה: א. חישוב 1-1-2%: המספר הבינרי הגדול ביותר שאפשר להחזיק ב-3 סיביות הוא 111=23-1. בצורה כללית, המספר הבינרל הגדול ביותר שאפשר להחזיק ע"י 1-ח סלביות כולל 1-₪ פעמים את הסיפרה 1. בדוגמא זו נקבל: 2871-1=1111111. ב. חלשוב 2-(28-1-1): 11 הערך המוחלט של המספר 2 1 בסיום צעד ב' נקבל 110 לאחר צעד ב', מקבלים מספר שהוא היפוך הסיביות של המספר הנתון. ז"א, כל סיבילת שהיתה 0 הפכה ל-1 וכל סלבית שהיתה 1 הפכה ל-0. נוכל עתה לשלב יחד צעדים א' ו-ב' לצעד אחד, שהוא הפלכת כל סיבלת בללצוג הבינרל של הערך המוחלט של המספר המקורל. התוצאה של החלפות אלו נקראת המשלים לאחד (%ת1008מ00 6'5מ0) של מספר בלנרל. המספר הנתון 001 המשללם לאחד 10 ג. חישוב 1+[2-(1-1-ח2)]: הלות וחישבנו בשלב ב' את 2-2 צריכים עכשלו רק להוסיף 1 לתוצאה זו ולקבל את הערך המבוקש. המספר שמקבללם הוא המשלים לשנלים ( 10065 קת 00 0'5): המשלים לאחד 100 הוספה של 1 1 + המשלים לשניים 11 ההוספה של 1 גרמה לכך שהספרה בצד ימלן של המספר הפכה ל-1, כמו במספר המקורל. שאר הסיביות נשארו כמו שהלו בסוף שלב ב'. 19 מכאן נובעת שלטה מקוצרת להגיע למשלים של שניים של מספר נתון: א. מעתיקלם את הייצוג הבינר? של הערך המוחלט של המספר המקורל. מתחיללם מימין עד שמגיעים לספרה הראשונה שערכה 1. ב. לאחר טמזהים ספרה זו, "הופכים" כל סיבית משמאל לה. נמצא את המשלים ל-2 של המספר הבינר? 100 0110 בדרך זו: = נעתיק: ‏ 100 = נהפוך: ‏ 0110 = ונקבל: 100 1001 המשלים ל-2 של המשלים ל-2 של א שווה ל-2, כאשר ? הוא הייצוג הבינרל של הערך המוחלט של המספר המקורל א. הסיבה לכך הלא העובדה שהמשלים של א הוא 27, והמשלים ל-2 של אותו משללם ל-2 הוא (20-1-7)-20-1 ששווה ל-2. הילצוג של המספר השליל: א כולל "1" בסיבלת הסימן ‏ ו- |א|-2771 ב-(1-ת) הסלביות שמימין לו. נלתן לקצר תהליך זה ולחשב את הליצוג המלא בצעד אחד, כלומר: | א| -"2, טהוא המשלים לשניים ב-ח סיביות של המספר המקורל א. שיטת ליצוג זו היא לכאורה מסובכת יותר מן השלטה הקודמת, אך נסקור את התכונות שלה ונעמוד על חשיבותה. בשלטה זו ניתן לחבר שנל מספרלם מבלי להתחשב בסימנים שלהם ותמלד התוצאה תהיה נכונה. למשל, ננית שמחברים א ו-צ כאשר 60א, 0<+ ו-צ>]א]. הליצוג הפנימ:? של המספרים להלה: א שלילי |אן - 20-1 ך- ה נטוא=1 ך--> ך---> נשוא=1 [ א במקרה ‏ זה מצפים לתוצאה חלובית שהיא ההפרש בין צ לבין א, כלומר |א]-צ. נראה בהמשך איך מגיעים לתוצאה זו. (|א]-צ) + 2-1 = צ + |א| -20-1 המספר | המספר החיובל השלללל את המספר 2771 אל אפשר לכתוב ע"? 1-₪ סיבלות ולכן הוא נלשא לסיבית מספר ת, כאשר הסכום !א|-צ נשאר בצד הימנ? של המלה. הנשוא של 1 אל מחוץ לסלבית הסילמן הוא תוצאה מחיבור של ה-1 שהופיע בילצוג של המספר השליל? ‏ < והנשוא שהועבר כתוצאה מחיבור של א-2771 ושל +. התוצאה הלא מספר חיובי (0 בסלבית הסימן) שערכו הוא |א!-צ (הערך של הסיביות מלמין לסיבית הסימן). 100 בתרגיל זה הלו שני נשואים, אחד לתוך סלבית הסימן ואחד מחוצה לה. הכלל הוא שאם מספר הנשואים הוא זוגי (0 או 2), אין שגיאה בחיבור. אך אם מספר הנטואלם הוא אי-זוגי נוצרת גלישה (אס1+:8ט0), ז"א מצב שבו מאבדים נתונלם, או מצב שבו מקבלים תוצאה שגויה. למשל, מחברים שני מספרים חיובללם א ו- צ אשר מקיימים 2771<צ+א. אפשר לכתוב ביטוי זה כך: 8+ 27=צ+א, כאשר 0<א. כאשר הסכום של % ו-ץ גדול מהערך ‏ 1-2% מקבלים נשוא לתוך סיבית הסימן. אבל היות ושתי סיביות הסימן היו "אפס", לא להיה נשוא נוסף מחוץ לסיבלת הסימן. מצב כזה הוא מצב של גלישה, כפי שמוצג בתרשים הבא: ר---> הנשוא של א עבר שמאלה 8 ו נדגים עכשיו את שני המקרלם שתוארו קודם, כאשר 6=ח, כלומר סיבית אחת מוקדשת לסימן ו-3 סיביות לילצוג הערך של המספר. סיבית הסימן א. 6 10 1 | 01 -5 1 1 0 מחברים שני מספרים, האחד חיובי והשני שלללל. תוצאת החיבור הלא 1. הספרה 1 נישאת אל סיבלת הסימן וגם מחוצה לה ולכןו לא הלתה גללשה. 1 !0 0 |0 1 ך, - - בדוגמא זו מחברלם שני מספרים שסכומם גדול מ-7, שהוא הערך המקסימלי שאפשר לייצג ב-3 סיביות (24-1-1=7). הספרה 1 בסיבית הסימן של התוצאה אומרת שהסיביות בצד ימין (011) הן המשלים לשנללם של 2, כאשר 2 הוא הייצוג הבינרי טל הערך המוחלט של התוצאה. 2 שווה אם כו, למשלים לשנללם טל 1 שערכו ‏ 101, דהיינו 5. התוצאה שווה 5- וזו אינה תוצאה אפשרלת לסכום של שני מספרים חיוביים. העובדה שיש רק נטוא אחד לתוך סיבית הסימן ואין נטוא ממנה מצביעה על גלישה, כמו שהוזכר קודם, ולכן התוצאהת שגוילה. 3 ייצוג של עודף 2071 נניה שנתון א > 2071-, אם מוסיפים 2071 לכל ערר ש-א יוכל לקבל, התוצאה לא תֶהיָה שלילית אפ פעם, מכיון שהערֶך המלנימלי של א הוא 1-ח2- והוספנו לו 7 הייצוג של עודף 1 (טנקרא 77 60655את) של מספר א% הוא אם כן, הערך 2771+א. 1 המספר שילצוגו ‏ בשיטת עודף 2771 שווה ל-4 הוא 1-4-27%. למשל, אם 2=1000 בייצוג של עודף 2%71, המספר המלוצג א הוא: (אלה הם מספרים בינר?לם) 0 = 1000 - 1000 = 2871 - 1000 = א ללצוג של עודף 21 של מספר זהה למשלים לשנלים של אותו מספר חוץ מסיבית הסימן, אשר מוצגת בהיפוך. השוואה זו מוצגת בטבלה עבור המקרה שבו 4=ת, ז"א כאשר 3 סלבלות מוקדטות לליצוג ערך המספר. דצימל? עודף 2571 | משלים ל-2 100 000 8 11 0001 7 100 00 -6 11 01 -5 100 000 -4 11 1 3 110 20 =2 11 1 1 000 1000 0 0001 11 1 000 100 2 001 11 3 0000 100 4 001 11 5 0 110 6 21 11 7 4 המספר השלם הגדול במחשב בטלבל חיטשוב טונים חשוב לדעת לעתים את הערך של המספר הגדול בילותר שנוכל להחזיק ב-₪ סלבלות. בכל השלטות, הסיבית השמאלית ביותר של המלה מחזיקה את הסימן ולכן יש בה רק 1-ח סיביות לייצוג הערך של המספר. נבחן כל שלטה בנפרד: א. שלטת סימן וגודל על ידי 1-₪ סיביות נוכל להחזיק מספר שערכו 1-1-2% ולכן זהו המספר החלובל הטשלם הגדול ביותר במחשב. אם סלבית הסימן תהלה 1, נוכל להחזיק את אותו מספך עם סלמן שלילל. מכאן, שהמספר הקטן ביותר שנוכל להחזיק הוא (20-1-1)-. ב. שיטת המשלים ל-2 מכיון שמספר חלובי מוחזק בשיטה זו בדלוק כמו מספר חיובי בשלטה הקודמת, גם גודלו האפשרל לא לשתנה. בשיטה זו מליצגים מספר שלללי בדרך זו: 122 אם א טשווה 59 28-1- בקבל 1-2%=]א]=2 והתוכן של המלה *הלה: זהו המספר הקטן ביותר שהמחשך לכול להחזיק. תוצאה זו סבירה, כי ככל טהערר או לותר גדול, הערך טל ]< 2 להלה נותר קטן, ואלו מספר לותר קטן מ-0. היו והערר המוחלט [א] הגדול בנותר הוא 27-1, הערד הקטן ביותר של א הוא -2-. המספר הטליל: הגדול בלותר טנוכל להחזיק במחשב (+"א המספר הקטן ביותר מבחלנת הערך המוחלט) הוא כאשר |א] הוא הקטך בלותר. מצב זה קורה כאשר א .1 להלה הגדול בלותר. הערך הגדול ביותר של הבלטול [א] 2-1 הוא: 1, שנקבל כאשר 1=]א] . לכן, 1-=< מלוצג ע": שורה של ספרות "אחד". מן הראול לטים לב לכר שטווח המספרלם השליליים שאפשר להחזיק לפל הטיטה של המשללם 2-5 (בתחום 1 1-ת2-) גדול ב-1 מטווח המספרלם הטליליים שאפשר להחזיק לפ* השלטה של סימן וערך (התחום -2-). שקגת שרד 1 ב-ת סלבלות נוכל לכתוב צירופלם שונלם של סלביות 4, כאשר [-ח044>=2. מכיון שהמספר המיוצג א שווה 5. 4-20-1, נובע שהגבולות של א הם: 21 - ן-20 > א + 1-ת2- - ז"א [.2-1 > א + 1-ת2- טווח המספרלם זהה לזה שאפטר להתזיק ל5ל השילטה טל משלים ל-2, כל הללצוג זהה חוץ מסיבית הסימן, אשר מוצגת בהיפוד. 4.1 ליצוג מספרלם במחשבלם שונלם נבחו את :יצוג המספרלם בכמה מחשבלם, שבהם מספרים של*ללים מלוצגים בשלטת המשלים לשנ*לם. במחשב 1-תתת, המלה היא בת 16 סלבלות, כלומר 16=ת. מכאן שהמספרלם השלמלם א שהוא :כול להחזיק מוגבלים לתחום הזה: 7 = 1 - 215 4 4 > 32,768- = 21%- במחשבל לבמ בארכליטקטורה 0 המלה היא בת 32 סלבלות, כלומר ‏ 32=ח. טוות המספרים הוא: 7, 2,147 ב ן - 231 > א + 2,147,483,648- = 231- במחשטב אגט המצב דומה, אך ייש שונל בכך שהליצוג של המספר הקטן ביותר (231-) אינו בשימוש ולכן המספר הקטן ביותר והמספר הגדול בלותר שווים בערכם המוחלט. 3 5, מספרים ממש?י?ם בש?טת הנקודה הצפה המספר העשרונל הגדול בלותר שנוכל לליצג בשני בפים בעזרת הקוד הדצימלי הוא 9 ובארבעה בתים המספר הוא 9999. ללצוג בלנרי מאפשר להחזיק מספרלם הרבה לותר גדולים ולכן הללצוג הפנלמ? של מספרים במחשב הוא בשיטה הבינרלת. למרות זאת, יש הגבלה בליצוג מספרלם בינרלים טהורים מכלון שהם מבטאים מספרים שלמים ולא שברים. בנוסף, גודל המספרים שנוכל להחזיק עדלין אינו מספיק לעבודות מדעיות ובמלוחד אם גודל המלה הוא 16 סיביות בלבד (כמו ב-פפ2 או ב-0ק2-18%). לבעלה זו לש פתרון בשלטה שונה של *לצוג מספרים. שלטה זו מאפשרת לילצג שברים וגם מספרלם יותר גדולים מאשר נלתן ל?יצג בשלטות הקודמות, אשר טלפלו במספרים שלמלם בלבד. הייצוג של שברים באורך םת ובסלס 5 מקביל לליצוג של מספר שלם. נתון: ה-ח ... כ-ת ן-ת .4 =ץ ₪ ות . הערך של ת הוא: 1 ות פּ כאשר: 2 = + עבור 0 > 1 ו 1 בטבלה שלהלן מוצגים שברלם בבסיסים שונלם. 0.1 20.01 2-11 11 בינרל 12 18 1[|8 116 אוקטלל 18 168 112 16 הקסדצימלי 1/16 16 16 16 ללצוג של מספרים ממשלים במחשב הוא בשלטת נקודה צפה (5םמ201 8ת7108%1). בשלטה זו מלת המחשב מחולקת לשלושה חלקלם, כפי שנראה בתרשלם: הסבר: א. ספרת סלמן (ם5918) 0 מלועדת למספר חיובל והספרה 1 - למספר שלילל. ב. המעריך (6ת6מסקא5) הוא החזקה בה צריכים להעלות בסיס 5 כדל לקבל את המספר המלוצג. מקדישים ₪ סיביות למערלך ומציגים אותו בעודף -277, ז"א נוכל לייצג חזקות א כאשר [-20-1 =>א=> 2771-. הבסלס 5 שבו משתמשילם נקבע בארכיטקטורה של המחשב. ג. המנטיסה (61558מ88) הלא חלק השבר של המספר ומנלחים שיש משמאלה נקודה. 104 הערך של המספר שמללצגלם הוא ערך המנטיסה כפול הבסיס מועלה לחזקת המעריך. לדוגמא, במחשב אג% ייצוג נקודה צפה נראה כך: 31 30...23 22........0 :תויבלס‎ מנטלסה מעריד מקדלשים ‏ 8 סיבלות למעריך א, שהוא החזקה בה מעלים את הבסיס 2=פ. המעריך מוחסן בשלטת עודף 1, ז"א 127=%א=1286-. לפיכך, הערך הֶמִיְנימלי שנוכל להכפיל בו את המנטיסה הוא 27125 והערך הגדול להכפלה *היה 0 המנטלסה הלא מספר בינרל רגלל. מנלהלם שהלא מנורמלת (411286תשסא), ז"א שלש בה 1 במקום הראשון מלמין לנקודה. בשלטת הנקודה הצפה אפשר לילצג כל מספר. לדוגמא נצלג את המספר ‏ 5 ו-3/8 (חמש ושלוש שמינלות) ונסביר בשלבים: א. ‏ 011. = 1/4+1/8 =3/8 נובע מזה ש: 3/8 5 טשווה ל: 101.011 ב. כדי לנרמל מספר זה, נכתוב אותו כך: 23%.101011 הזזת הנקודה העטרונית שמאלה גורמת לשלנוי חלובי בערך החזקה והזזת הנקודה העשרונלת למלנה גורמת לשלנוי שלילל בערך החזקה. ג. הילצוג של 3 בעודף 8 הוא 128+א, שערכו 131. לדוגמא, נראה את הליצוג בנקודה | צפה במחשב א02%. המנטיסה היא מספר מנורמל שמתחיל בספרה ‏ 1 משמאל. במחשב זה משמלטלם את הספרה 1 שבמנטלסה משמאל, כי מניחלם שהלא קללמת מבלי לכתוב אותה ומקבלים את תבנלת הליצוג הבאה של המספר: 0 2 23 0 31 11 מ על אף שלש רק 3 סלבלות כד? להחזלק את המנטלסה, ההנחה שיש ספרה 1 משמאל נבותנת אפקט כאללו לש 24 סיביות. 01011000 את המספר הקטן ביותר שנוכל להחזיק בנקודה צפה של ה-א%8 נמצא בדרך זו: החזקה הקטנה ביותר היא 128- והמספר המנורמל הקטן ביותר הוא 0.1 (1/2). לכן המספר הקטן ביותר שאפשר לייצג היה צרלך להלות: 9 > 1.47 = 27129 = 2/ן א 27128 במחשב ‏ זה יש בעלה טכנית של הילצוג של המספר 0. גם אם המנטלסה מכילה רק אפסים, היא תחשב כילצוג של המספר 1/2 ולא של 0, כל הרל מניחים שהלא מתחילה בספרה ‏ 1. לכן החללטו להשתמש במעריך של 128- (ז"א שורה של אפסים ביליצוג עודף 128) כדל ליליצג את המספר 0. מכאן נובע שהמספר הקטן ביותר שנלתן להחזיק במחשב הוא: 27127%1/2=27128=2,94*10739. 155 ילש גירסאות אחרות של פסקל, שמשתמשות במעריך 128- כַדל לציין 0, רק אם המנטלסה מכילה אפסים בלבד, ולכן המספר הקטן ביותר הוא 1.47*10739. את המספר הגדול בלותר מחשבים כך: החזקה הגדולה ביותר שנוכל לללצג הלא 7. המספר המנורמל הגדול בלותר שנוכל להחזלק הוא כמעט אחד (0.111...1 סה"כ 23 ספרות 1. הערך הַעְלָרובִי של המספר המלוצג ע'"ל המעריך והמנטילסה האלה הוא: 1.7*1038 = [*2127 בעזרת ‏ *יצוג של נקודה צפה נפתרה הבעיה של גודל המספר וגם הבעיה של ילצוג שברים. 1 שאלות (1) אילו לחידות קלט הוחלפו ע"י המסוף? (2) האם יש הבדל בין נתונים לבין הוראות אשר בזיכרון? (3) כתוב את המספרים הבינריים האלה כמספרלם דצלמליים: 0, 101001 (8) כתוב את המספרים ההקסדצלמלילם האלה כמספרים דצימללים: 60, (13, פא, 28 (5) א. אם מחברלם שני מספרים שליללים בללצוג של משלים לשנלים, מתל תהלה גלישה? כאשר ‏ אלן גלישה, הראה שהסכום הוא אמנם הסכום הנכון עם הסימן הנכון. ב. חזור על התרגיל עם שני מספרלם חלוביים. (6) נתונה מלת מחשב בת 8 סלבלות. כתוב את המספרלם 27-, 61- בצורת: א. סימן וגודל ב. משלים לשניים ג. עודף 2% (7) כתוב את המספרלם הבינרללם האלה כמספרים דצלמללים: 1, 110.101 (שלים לב לחלוקה של המספר לחלק שלם ולשבר). (8) הפוך את המספר 1011.00111 מבינרי? לאוקטלל. (9) הפוך את המספר 7.7208 מהקסדצימלי לבינרל. (10) איך מללצגים את המספר 1/32 בנקודה צפה במחשב א%%? (11) לשם מה דרושלם אוגרים במחשב? 15066 נספת בי טורבו-פסקל נכתב ע":י משה ראב 1 מבוא טורבו-פסקל (285081 ססעט) הינו נלב נוסף ומהדר לשפת הפסקל, אשר נכתב ע"ל חברת ‏ .6םת1 81ת8610ת:66ת1 במצסת שבקליפורנלה, ארה"ב. מהדר זה פועל במיקרו-מחשבלם ובמחטבים אישיים תחת מערכות ההפעלה 86-א/02, 02/4-80, 85, 20-208 והוא הנפוץ בלותר במערכות אלו בגלל תכונותיו המלוחדות. הטורבו (קיצור טל השם המלא) כולל בתוכו מהדר, עורך (ש20160) המותאם לשפת הפסקל ותפריט לשליטה על אופציות המהדר. הטורבו מאפטר כתיבה בפסקל סטנדרטי - תוך השמטות מסוימות, אשר תפורטנה בהמשך. הוא שונה ממהדרים אחרים בכך שהוא מאפשר שליטה מלאה במלקרו המתשב בצורה שקיימת בשפת האסמבלי (פהַבּט8ת18 ץ801מ1586), ונותן כלים רב: עוצמה טקלימים רק בשפות עלליות מתקדמות. יתרונו הגדול במהלרות ההלדור הגבוהה וביעילות של התכנית בשפת מכונה שהוא לוצר. יתרון נוסף של הטודבו על פנל מהדר פסקל אחר הוא בספריות של שגרות ה-10015, שנוספו לו. הן מאפשרות לכתוב ייטומים בתחומים שונלם ומגוונים כמו נלהול מסדי נתונלם, גרפיקה בהפרדה גבוהה, חלונות, לישומלם מתמטלים ועוד. להלן נתאר את המאפלינלם העלקריים של הטורבו-פסקל ואת ההבדלים הבולטלם בינו לבין הפסקל הסטנדרטי. אלן כאן כוונה ללמד את הטורבו, אלא רק להציג את מגוון האפשרויות הגלומות בו ולאפשר למל שלודע פסקל ללמוד להשתמש בו. א. פקודות 081 ו-201 הושמטו מהשפה. לעומת זאת, הורחבו פקודות כגתת ו-0175 כדי לבצע פעולות של הפקודות שהושמטו. ב. הקצאת זיכרון דינמלת: בגירסה 1.0 של הטורבו קיימות הפקודות אא4, ופא, מפגמזחת, בדומה לאלו שקיימות בגירסת 0082 של פסקל. הפקודה 27 8% נוספה בגירסה 2.0. שטחל זלכרון ששוחררו ע"י הפקודה 2152058 יוכלו להוות מוקצים שוב בקרלאות הבאות לפרוצדורה שעא (דבר זה קללם רק בכמה ממהדר? הפסקל). ג. אלן משתמשים בהצהרה 240882 בעבור מערך. הטורבו משתמש במערך דחוס בכל מקום שמתאפשר לו, מבלי שלש צורך להורות לו על כך במפורש ועל כןו אין צורך בהצהרה ובפרוצדורות כ8א220 ו-ממאסגקאט. ד. לא ניתן להעביר פונקצילות ופרוצדורות כפרמטרלם. ה. תולות (185618) שמוגדרות עבור פקודת 6010 לכולות להיות אלפא-נומרלות ולא רק מספרים שלמלם חלוביים. השימוש בהן זהה: לש לצלין את התולת (או תולות) בהצהרה 128 ובתחיללת קטע התכנית שהתולת שללכת אליו כותבלם את שמה ונקודתלים. לדוגמא, > א ;2 60700 אזעצזתח :2עתגע ו. אל אפשר להשתמש בפקודת 6010 כד? לצאת מפרוצדורה, או מפונקציה (בפסקל סטנדרטי נלתן לעשות זאת במלגבלות מסוימות). ז. במערכת הפעלה 02/8-80 בלבד, לא ניתן להעביר משתנה מקומל לפונקצלה, או לפרוצדורה כפרמטר 4%/, כאשר קוראים להן ברקורסיה. 5 סוג? נתונים וקבוע?ם סוגל הנתונים הלסודלים הסטנדרטילים של פסקל הם: 786088א1 (מספר שלם בתחום 7+ ), מאמת, אהתתססת ו-תגח0. בטורבו קיימים סוגל נתונים נוספים: א. מדצת (בית) - מספר שלם בתחום 0 עד 255, אשר תופס בזיכרון בלת אחד בלבד. נלתן להשתמש בו בביטולים אריתמטלים כמו ב-אא6מ7א1. ב. 6א5181 (מחרוזת) - סוג נתון זה דומה ל-0848 ע0 צגתת2 פמאסגק. ההבדל הוא בכך שסוג זה הוא מחרוזת דלנמלת, שאורכה המקסלמלל הוא 255 תוולם. אם נצהיר [6]30א5191 :57 תג הצהרנו למעשה על משתנה מחרוזת שאורכו המקסלמלל 30 תוולם. באלבר [51]0 נמצא את אורכה של המחרוזת ובשאר האלברים נמצאלם תוולם. ניתן להתליחס לכל תו במחהרוזת. לדוגמא: הבלטוי [518]205 לתן את התו הנמצא במקום 205 שבמחרוזת 8578. ג. קבוע מאופיין (%6מ5%58ת00 66כ1) - משתנה שערכו נקבע בהצהרת ה-51%א00 של התכנלת וניתן לשנות את ערכו (אך יש להזהר בכך). לדוגמא, אם כותבלם: ;1024=תתסמואך :אדצפסת דפא0סס ניתן להשתמש בערך המוצהר של 78צ1108א כאילו הלה קבוע רגיל, אך גם ניתן לשנות את ערכו כמשתנה ולכתוב למשל 56= : מדצתסדא. שימוש אחד של אופציה זו הוא לאתחל (לתת ערך התחלתל) משתנה, שהרל ערכו של משתנה אלנו מוגדר (66ם66+1מ0) עד אשר מציבים בו ערך כלשהו. 108 היתרון של הקבוע המאופילן בכד, שניתן להגדיר באמצעותו קבועים מסוגים מורכבלם, כמו מערכים ורשומות. לתרון נוסף הוא החיסכון בזיכרון. קבועים מאופילנים הם משתנלם ולכן בזמןו ההידור נרשמת בפקודה הכתובת שלהם בזלכרון, בעוד טשימוש בקבועים רגילים גורם להחלפת שם הקבוע בערכו בזמן ההידור. כאשר מופיע בתכנית פעמלם רבות קבוע טאורכו גדול, ?הלה חיסכון בשטח הזיכרון אם נשתמש בקבוע מאופיין במקום בקבוע רגיל. הטורבו-פסקל מאפשר לפעול על סיביות של מספרלם מהסוגים 7868%א1 ו-מדַצת. סדר הקדימויות של האופרטורים בחישוב הביטול, הם: א. ג. סא - דרגת קדימות כשטל הסימן מלנוס (שטייך למספר, להבד?ל מפעולת תיסור שדומה בסדר הקדימות שלה לחלבור). האופרטור 01א גורם להיפוך של סלביות המספר: סיבלות ‏ "1" תהפוכנה לסלביות ‏ "0" ולהיפך. למשל, המספר ‏ 6 מלוצג כך במלה של 8 סיבלות: 0,. לאחר שנפעיל עללו זסא, צלרוף הסלביות *היה 11111001, שערכו למעשה 7- (בשלטת המשלים ל-2). סאג, (16+5 581%6) 58, (>תקגת 581+6) 588 - דרגת קדימות כמו לכפל. האופרטור פא גורם לב?צוע פעולת פא של אלגברה בוליאנלת בלן כל שתל סלבלות מתאלמות בשנל המספרלם. הפעולות .518, ו-588 מזיזות את הספרות הבלנרלות שמאלה או למלנה. למשל: 2 518 64, תהלה הזזה למלנה בשנל מקומות של הסלביות בבית 0100000 ותתן את התוצאה 00010000 שערכה 16 (זוהי למעשה חלוקה ב-4). 8 08א - דרגת קדימות כמו לחיבור. 5% ו-%08 אף הן פעולות טל אלגברה בוללאנלת כמו האופרטור פא. בטורבו-פסקל לשנם סוג?ל קבועים, שאלנם מוגדרלם בשפת פסקל הסטנדרטית. מטרתם לאפשר קלט של תווים מלוחדלם והדפסה שלהם, וגם לתת הוראות הפעלה למדפסת ולמחשב עצמו. סוגי הקבועים המשמשלם למטרה זו: א. קבועים הקסה-דצימלילם (68מ5%8מ00 81ת86601א16). קבועים הקסה-דצלמללים (בסיס 16) מציינלם ע"? התור '%' משמאל לקבוע. לדוגמא, %2 שווה בערכו ל-10 ו-%18 שווה בערכו ל-27 (16+11=27). תוול בקרה (0(8580%628 01ע6ם00). * קבועים טמתארלם ‏ תו לפ? מספרו בצופן 25011, למשל: 10/ שהוא למעשה "660ק-6ת1ם" ו-%18/ שהוא התו ה-27 ב-245011 שמשמעותו "56806ם". = תוולם הנקלטים כאשר מקישים אותם יחד עם מקש ה-א01. למשל, הצירוף 6 שווה ל-צלפצוף, והמשמעות של ]7 הלא 6ק808ע2. ניתן לשרשר תוול בקרה ע"י כתיבתם בזה אחר זה כמחרוזת, כמו לדוגמא: 13/1070/20/. ולו מחרוזות הפעולות שמותר לבצע במחרוזות הן: א. ב. ג. ד. פעולת השמה. . ;9 =:5102 ;'סאדת7פ' =:ת57 חיבור מחרוזות ע"ל האופרטור '+'. ; +" '+'30' =:ת57 הטוואה בין מחרוזות כאשר ההתללחסות הלא לפל סדר המלון של התווים. פרוצדורות ופונקצלות ספרלה שונות. 09 הפרוצדורות המתאימות לפעולות במחרוזות: (אטא, 57,205 )מידע זחת - מחיקת אטא תווים מהמחרוזת 51, החל ממקום 205 (205, דסתג', 05)דפתפאד - הכנסת המחרוצת 122681 לתוך המחרוזת 0271 מהמקום 5 ואללך; (57, מטזג )דפ - הפלכת מספר למחרוזת; (41)51,748,0028/ - הפלכת מחרוזת למספר. רשלמת פונקציות לפעולות במחרוזות: (טא, 57,205 )00 - הפונקציה מחזירה ;טא תווים ממחרוזת 51, החל ממקום 205; (א51, ..,512, 5171 )00641 - שלרשור מחרוזות 511, 512, עד א57 (ניתן להשתמט באופרטור '+' במקום פונקציה זו); (08)57א - אורך מחרוזת; (1ת6תיד, 705008 - המקום הילחסל של המחרוזת 081 במחרוזת צס6תגץ. 5 הקצאת זל?כרון ניהול ציכרון דינמל מתאפשר בטורבו בעזרת הפונקציות והפרוצדורות הבאות: אפא, 52058דת, >תגא, מפגתשעת, |מותעס ו-םךגטגמא. במהדורה 2.0 נוספו הפרוצדורות 1ממתת ו-1)טאגו. ארבע הראשונות קלימות גם בפסקל סטנדרטל. נסקור בקצרה את התכונות של הפונקצלות הנוספות בטורבו. (א, פנש )ה הפרוצדורה משמשת להקצאת זיכרון עבור המצבלע תגטע בגודל א בתים, ללא התייחסות לאיפלון של המשתנה או הזלכרון שעליו מצביע 238 ולאורכו. הקצאת זליכרון זו משמשת בעלקר לניהול מחסנלות. 11 האפונקציה מחזירה את גודל הזלכרון הנותר להקצאה דלנמלת (הגודל המקסימלי שניתן להקצות הוא 6488). במערכות מחשב עם מללם של 16 סיביות, הערך המוחזר הוא גודל השטח במללם בנות 16 סיביות. במערכות של 8 סיביות הערך המוחזר הוא גודל השטח בבתים. האלפיון של הערך המוחצר הוא 8ת0מזא1; אם גודל הזכרון הפנוי עולה על 32767 בתילם (גודלו של השלם המקסימלל), הערך המוחזר יהיה שלילי כך, שגודל הזילכרון הפנוי הוא 65767.0 פלוס הערך המוחזר. (א, בוק )חח פרוצדורה זו משחררת שטח שהוקצה בעזרת 062/8%. יש לשים לב לכך ש-א, מספר הבתים שמשחררלם, יהיה זהה למספר שנלתן בפקודת ה-631/₪1 המקבילה. 12 הפונקציה מחזירה את גודל שטח הזיכרון המקסימל?ל שנלתן להקצות מבין כל השטחים הפנויים. שטח?ל הזיכרון הפנולים אינם רצופלם, אלא ניתנים בקטעים בהתאם להקצאה ולשחרור. 100 כאשר עובדים עם קבצים בדיסק או בתקליטון אין צורך לצלינם בסוגרלים שבשורת הכותרת. יש לללחס לכל קובץ שמוגדר בתכנלת את שמו החלצונל (כפל שמערכת ההפעלה מכירה אותו) בעזרת הפקודה הבאה: ;(579 ,חגטת1ע) א245516 כאסר 211/22 הוא משתנה המוגדר בתכנלת כקובץ ו-518 הלא מחרוזת (או משתנה מחרוזתי) שמכילה את שם הקובץ החלצונל. קבצ תמליל נלתן לפתוהח לקרלאה (זעפסת), לכתיבה (מדדאאתת) או להוספה. פעולת ההוספה לקובץ קללם אלנה נמצאת בפסקל הסטנדרטל. בטורבו משתמשים למטרה זו בפקודה (11%28ת)סאמקק. גם לקבצים רגילים נלתן להוסלף רשומות, אך בדרך שונה. פותחים את הקובץ ע"ל 71, מציבים את מצביע הקובץ על סוף הקובץ ע"? הפרוצדורה 558% וכותבים. כל כתיבה בקובץ תגרום להוספת רשומות. ; (תהטת1ע) צמפתת ; ((28)711048דפתדע ,תהטתדע) אחת8 הטורבו נותן פרוצדורות נוספות לפעולות בקבצלם: (א,תגאזז)אחת5 הצבה של מצביע הקובץ על הרשומה שמספרה א (מספר הרשומה הראשונה הוא אפס); (11089ע)1088ע הורקת המאגר (ת62++ט2) של הקובץ לדלסק או לתקליטון. פעולת הקלט הבאה תתבצע לשירות מהדיסק, ולא מהמאגר שבזיכרון (נוהל זה חשוב בעיקר כאשר פותחים קובץ לקריאה ולכתיבה); (8ג110ת)0055 סגירת קובץ. בטורבו חובה לסגור כל קובץ, משום שהפעולה של סגירת קבצים אלנה מתבצעת באופן אוטומטל בסילום התכנלת; (תה0זדע)תפתת מחלקת קובץ; (ת87, עפהט[זת)טאאתת שינוי השם החיצוני של קובץ. פונקצלות נוספות מספקות מלדע על מצב הקובץ (הן אינן פועלות על קבצל תמללל): (10005)711089ע מחזירה את המספר הלחסי של הרשומה בקובץ, (5120)711088[זע מחזלרה את מספר הרשומות בקובץ. מלבד קבצים רגילים וקבצל תמליל קילם גם קובץ | חסר-איפיון ומטרתו לשמש לקלט/פלט ברמה נמוכה. קלט זה מתבצע לשירות יו הדיסק או התקליטון לבין המשתנים ובכך חוסך את השטח בזיכרון המוקצה לקובץ. ההצהרה על קובץ כזה הלא: :תגטתדע תגצ הפרוצדורות סגסת, 00178 ו-2058 אסורות לשלמוש בקובץ זה ובמקומן נלתנו הפרוצדורות הבאות: ((65עת ,תגט ,תבטתדע) פגמתאסס1ת ((₪05ת ,ת2ט ,תגטתךדע) מדזתטאס0ת תגטזזץ הוא שם הקובץ, 078 הוא משתנה כלשהו שלתוכו קוראים, או שממנו כותבים את הרשומות ו-05ע2 הוא מספר הרשומות שיש לקרוא או לכתוב. היתרונות טל השלמוש בקובץ זה הם מהירות פעולות הקלט והפלט והתלסכון בשטח זיכרון. 1411 שלמוש מקובל בשיטה זו הוא לשם העתקה של קבצים. הטורבו-פסקל מאפשר ניהול קבצים לגלשה ישירה. חבילת התוכנה א50% 1002 מכיללה כלים לניהול קבצלם. הטורבו מספק למתכנת מספר קבצים לוגיים מוגדרים מראש, אשר מצלינים אמצעל קלט/פלט סטנדרטלים. נלתן להשתמש בהם מבלי שיהיה צרלך להצהיר עליהם במפורש, לפתוח ולסגור אותם. אם נצלין אותם כפרמטר הראטשון בפקודות כפגתת ו-178אח, המחשב ל?דע להתייחס אליהם. לדוגמא, ;('עזתאאאת אג 15 5ב1' ,אתך) מצדתט את הוא השם הלוג של המסך. כאשר מציינים אותו כפרמטר הראשון בפקודה 8זזת, הכתיבה תתבצע עליו, ולא על ילחידת פלט אחרת. קובץ לוגי אחר הוא המדפסת, ששמה הלוגי הוא 161. כדל להדפיס שורה במדפסת נכתוב לדוגמא, את הפקודה הבאה: ; ('תתץאדתק מנד אס 6א1עדתח' ,67ם) מלדתט קיימלם מספר קבצים לוגלים נוספים המאפשרים ניצול מלא של כל אמצעל הקלט/פלט של המערכת, כולל תיקשורת חיצונית דרך מודם (אמצעי תקשורת בין מחשבים). ו לות מסך וגרפ?קה שפת פסקל הסטנדרטית אילנה מספקת פקודות או פונקצ:ות ופרוצדורות לשללטה מלאה במסך. הטורבו מאפשר לדוגמא, באמצעות פרוצדורות ספריה שונות, להגיע עם הסמן לכל מקום במסך, להוסיף שורה ולמחוק שורה, או קטעים מן המסך. המסך מחולק לפ? קואורדינטות א ו-צ: ץצ הוא מספר השורה ו-א הוא מספר הטור, כאשר הפינה השמאלית העליונה של המסך הלא הנקודה (1=צ,1=א). כדל להגיע לכל מקום במסך משתמשים בפרוצדורה (205צ,205א)%א6010, אשר מצלבה את הסמן בשורה ' 05עצ ובעמודה 05קא. להלן רשימת הפרוצדורות לשליטה במסך: - נלקול המסך; 1 - מחלקת התוכן מהמקום בו נמצא הסמן ועד לסוף השורה; שאזןעת - מהיקת השורה שבה נמצא הסמן והעלעת כל השורות שמתחתיה שורה אחת מעלה; אאזתפא: - הוספת שורה ריקה למטה מהמקום שבו נמצא הסמן, ע"? דחיפה של כל הטורות שורה אחת למטה; סמפ/ותסא, 0 - שללטה על בהלרות ההצגה ע"? הפרוצדורות ססמסז/תסא (עוצמה רגילה) ו-108/1280 (עוצמה חלשה). במחשב 6ק-18% אפטר לשלוט על הצבעים ועל הגרפלקה בהפרדה גבוהה, ע"ל פרוצדורות סטנדרטיות. פרוצדורות נוספות מאפשרות להפיק צלילים בתדירות רצוללה, לקבוע את משך השהיית הצליל ולהפסיק אותו. לדוגמא: 112 (% יצירת צליל בתדירות 760 הרץ *) (א השהיית הצליל למשך שנייה אחת *) (* הפסקת הצליל *) ; (760) פא500 ; (1000) צג,זעת ; פאספסא חבילת תוכנה בשם א 0842₪81‏ 100, כוללת פרוצדורות לטימוט בגרפיקה ובחלונות. תוכנה זו מכילה ספריה של פרוצדורות בפסקל, אשר מהוות למעשה פקודות רבות עוצמה ללצירת יישומלם גרפיים. נציין מקצת מהפרוצדורות הקיימות: 6 זאד - העברה של המסך למצב גרפל. (.. )דאדספוופת - סלמון נקודה על המסך. (.. )פאדזווופת - שרטוט קו לשר בין שתי נקודות. (.. )תת - שרטוט מעגל או אליפסה (בהתאם לפרמטרים). (.. )צעסס6סתג - הדפסה של המסך (שנמצא במצב גרפי) במדפסת. התפתסתוותת - שרטוט קו על גבולות המסך. 6 - החזרת המסך ממצב גרפי למצב רגלל. 8 בנה התכנ?ת הצהרות בפסקל סטנדרטי מבנה התכנית קבוע. שאינו נליתן לשינול: בתחילת התכנית מופיעות כל ההצהרות בסדר סק א הטורבו מאפשר לשנות את סדר ההצהרות ולא מגביל את מספר הפעמים שמופיעה כל הצהרה. באופן זה יכולה למשל, הצהרת ה-51א00 להופיע פעמלים (או לותר) בתחילת התכנית, או בפרוצדורות, כפל שמודגם למטה. האפשרות הזו דורשת תשומת לב רבה שלא להשתמש בקבוע או במשתנה שטרם הוגדר ולא להגדיר מזהים (61+1855ת146) לותר מפעם אחת. ו ;אאא אבתססתק ; 8 111=1 סא ך 00 0057 :5 תג פס [9128מט. .1] צגתת =םזפגד מקצך ; [ 1078 אד :אא ;תבג :ץססדספא תגל . 67=א10311 6059 אזעת בטורבו מקובל השלמוש בחבלפ ות של שגרות ה-10015, שאלנן אלא קבצילם שמכילים פונקציות פרוצדורות, והגדרות של משתנלם, קבועים ואיפיונים. כל קובץ כזה מספק למתכנת כלים מוכנים מראש לבנ לית לישום בנושא מסוים ואפשר לכלול אותו 13 בתכנית ע"* פקודת 01008א1. הסרת המגבלה של סדר ההצהרות מאפשרת להגדלר משתנים גלובללים גם בין השגרות, בנוסף להצהרות על משתנים, קבועים ואלפלונים אשר נלתנות בקבצים ומשמשות בתכנלת בה הם מוכללם. שגרות 710018 כאלו קיימות בנושאים רבים ומגוונים: ללישום שדורש נלהול קבצים נוכל להשתמש בחבללת שגרות ה-א50 1001, שגרות אחרות מלועדות לתמלכה ביילטומלם מתמטלים, לתמלכה בגרפלקה בהפרדה גבוהה ועוד. מגבלות הזיכרון וקבצ? צגתמטס בטורבו קלימת מגבלה של אורך השורה ושל גודל התכנית. אורך השורה מוגבל ל-127 תווים כפי? שנקבע ע"ל העורך, וגודל התכנית אחרל ההידור אלנו *כול לעלות על 8א64%. הגבלת הגודל נובעת מאופי החומרה במערכות מלקרו-מחשבים שבהןו התוכנה פועלת. בדרך כלל לא כותבילם תכנילות בגודל זה, אך אם בכל צאת צריך לכתוב תכנילת ארוכה, ניתן לעקוף את המגבלה ע"? שלרשור תכנלות, או ע"ל לצירת קבצי צג.זתתטס. שלרשור תכניות היא האפשרות לעבור בתוך כדל ביצוע תכנלת אחת, להרצת תכנלת אחרת. אם הלישטום שכותבלם ארוך מלדל לש אפשרות לפצלו לשת? תכניות ולקשר בלנלהן. קבצי צג,1תעט0 הם קבצים המכילים פרוצדורות ופונקציות. כאשר גודל התכנית חורג מ-64%5, מגדירים קבוצה של פרוצדורות ופונקצלות כ-צ%ַאע/0, ע"י כתלבת המלה צ.07891 בשורת ההגדרה שלהן. לדוגמא: ; (1ק )אאא מתטממססתע צג.נתתטס ; (2חק, 41 ) צצצצ אסדס6אטע צג.זתמטס כל הפרוצדורות והפונקציות שהוגדרו כך ?היו בקובץ נפרד מהתכנלת הראשלת, אטר ‏ בה ילשמר מקום ריק המתאלם לגודל הפרוצדורה הארוכה ביותר שבקובץ ה-צ0/703[.4. נקרא לשטח הדה שטח צ//1א0/08. כאשר התכנלת הראשית מגיעה לשלב שבו ‏ ?לש קרלאה לפרוצדורה שנמצאת בקובץ ה-צ4א0/8, הלא קוראת לה מהקובץ אל השטח השמור בה למטרה זו ואז עוברת לבילצוע שלה. השימוש בקבצי צגתאת/0 מאלט את ההרצה של התכנלת משום שכל קרלאה לפרוצדורה, או פונקצלה, שאלנה נמצאת בשטח ה-צ0/₪9014 דורשת גישה ליחידת החסנה חיצונית. ?לן ג שפת מכונה כבר צויינה בתחילת הפרק לכולתו של הטורבו-פסקל לבצע פעולות שבד"כ אינן בתחום השלילטה של שפות עלללות. בטורבו אפשר להשתמש בשגרות בשפת מכונה ובכך לחרוג מהמגבלות שמוטלות על השפה מהלותה שפה עלללת. להלן נפרט כמה מהאפשרויות האלו. לפנל כן נקדים ונאמר שהטורבו פועל במספר מערכות הפעלה, שפועלות על מלקרו-מעבדים שונים: 8086 ו-8088, 280 ו-280/2. מכלון שמיפוי הזיכרון (מבנה התומרה) שונה במעבדלם השונים נמצא גם | הבדלים קללם, אך לא משמעותלים, במבנה הפקודות. הדוגמאות שלהלן שלייכות למלקרו-מעבדים מסוג 8086 ו-8088 (מערכות הפעלה 048 5, 20-208, ו-02/4-86), אשר נמצאים במחשב 0ע-18%4 ותואמלו. במערכות אלו כל כתובת מתוארת בעזרת שני פרמטרים: מספר קטע הזלכרון (5ת6מ598) שבו נמצאת הכתובת, והמלקום היחס? שלה (%58%+0) בתוך אותו קטע. גודלו של כל קטע בזיכרון הוא 64%8. הדרך לכתיבת שגרות בשפת מכונה היא ע"י הפרוצדורה 8א1א1. הפרמטר טל הפרוצדורה תהלה השגרה בשפת מכונה, אשר תוצג בשיטה הקסה-דצלמלית. כל 8 סיביות, שהן שתל ספרות הקסה-דצלמליות, תופרדנה ע"?ל קו נטוי ('/'). לדוגמא: אזסטת ; ( 'שאזינטסת מא1תסא 2 75 מאך לאתא מ') אזתודפה ; (%50/%53/%51/%52/%57/%56/%06/%28) מפאזמאד (* רוטלנה זו חסרת משמעות ולכן אלן לנסות להרלצה !| *) השגרה בשפת מכונה אלנה קרלאה משום שהלא כתובה בקודילם הקסה-דצלמליים של פקודות שפת המכונה. לכן, כדל לשלב שגרות של שפת מכונה ע"? פרוצדורת מאזזא-, יש לכתוב אותן תחילה באסמבלי ולתרגם לשפת מכונה, או להשתמט בשגרה מוכנה. בטורב ישנה אפשרות לפנות לכל כתובת בזיכרון המחשב. ניתן לדעת את מלקומו טל כל משתנה ולהצלב בכל מצביע כל ערך כך שיצביע על המקום הרצול בזיכרון. לדוגמא, קיימות פונקציות ספרלה המאפשרות לקבל מלדע על מיקומו של משתנה בזיכרון המחשב, או לקבוע מראש את כתובתו של כל משתנה: (פ3)פסכג פונקציה המחזירה ערך בגודל 32 סלביות, שהוא כתובת בזיכרון של המשתנה ת%2. ערך זה ניתן להציב במצביע כדי שיורה על אותו משתנה. (520)028 הפונקצלה מחזירה את מספר הקטע בזיכרון שבו נמצא המשתנה %8. (8)038ע0 הפונקציה מחזירה את המיקום היחסי של המשתנה בקטע. שלמוש נוסף בשגרות בשפת מכונה הוא לשם גישה ל"לצלאות" (68ע0סת) של המחשב, לשם הפעלה וניצול התכונות שלהן. : 0. ;וראות למהדר מספר מאפיינים של המהדר נלתנים לשליטה דרך התכנית באמצעות הוראות הנקראות 38 50 1160ק0ס. הן מאפשרות להכליל או להשמיט פעולות סטנדרטיות אשר מסופקות ‏ ע"ל המהדר בזמן ההידור של התכנלת. בתנאים מסולמלם התכנלתן לכול לקבוע שפעולות מסוימות דרושות, או שאלנן דרושות לכל התכנלת או לחלקים ממנה. בכך הוא יכול לליעל אותה ולשפר את צמן הביצוע שלה. למשל, נלתן לטלוט על שיבוץ או השמטה של בדיקת שגיאות (של זמן הרצה) בתכנלת. לאחר שמנפים מהתכנלת את כל השגלאות אפשר להשמיט את הבדיקות כדל שהתכנלת "תרוץ" מהר לותר ותהיה יותר קצרה. את ההוראות למהדר נותנים בתוכנית באמצעות הערות, אשר התו הראסון בהן הוא 'פ! והתו השנל הוא אות שמתארת את ההוראה. אם זוהל פעולה שניתן להפעילה או להפסיקה, יש לכתוב לאחר האות את הסימן '+' (להפעיל), או '-' (לא להפעלל). 155 לדוגמא, כתיבת ההערות בשתי דרכים שונות: ( +%6+ | או (* +66*) ( ענע.תסא1 %1) | או (* מדע.סאד דךַ4*) [ -ט,+ת,-42) | או (* -ץ,+ת, -ת*) בטפת פסקל הסטנדרטית וגם בטורבו נלתן לכתוב את ההערות בין סוגרים גדולים, או בילן סוגרים עגולים שבצידם הפנלמל יש כוכבית. את ההערות אפשר לכתוב בכל מקום בתכנית שמופלע בו תו הפרדה (רווח, פסיק או נקודה-פסיק) ולכן גם ההוראות למהדר לכולות להיכתב באותם מקומות. בדרך זור נלתן לשנות את מאפללנל ההלדור בכל חלק של התכנלת. להלן נתאר כמה מן ההוראות למהדר: א. בדלקות קלט/פלט מצלינלם ע"? קוד הפעולה 1. כאשר האופציה מופעלת, כלומר (+%1+, כוללים בתכנלת בדלקות הקשורות בביצוע של פעולות קלט/פלט שלגרמו להפסקת ההרצה במקרה של שגיאה. כברירת מחדל, אופציה זו מופעלת. כאשר אלן מפעללים אותה, על המתכנת לערוך את הבדלקות הדרושות. הציון של שגיאה בביצוע של פעולות קלט/פלט ניתן באמצעות הפונקציה 0507ת10, אשר מחזירה ערך שונה מאפס אם הלתה שגיאה. לדוגמא, ( ניסיון לפתיחת קובץ לקרלאה + ;(+%1) (תהט1דע)דספעת (-%1+ ; (10389011=0) =:א0% [ 0% - משתנה בוללאני שלכיל מ735 אם היתה שגלאה בפתלחת הקובץ + (('!!! דע 6אדאמפס א1 תסתעת') א[מתצדתה אע אס עסא עד ב. מפעיל התכנלת לכול לתת הוראה להפסיק את ההרצה של התכנית בכל שלב ע"ל הקשת ‏ 1-0ת0₪%. ההרשאה לכך נלתנת ע"? קוד הפעולה ש. ברירת המחדל הלא (-%0), כלומר שאין אפשרות להפסלק הרצה. הפעלת האפשרות הזו בתכנלת, דהילנו כתילבת (+%0+, גורמת לירידה במהירות הביצוע שלה. ג. קילמות הוראות שאפשר לתת למהדר פעם אחת בלבד בתכנית ולאחר שניתנו, לא נלתן לשוב ולשנותן במהלך אותה תכנית. דוגמא לכך הלא ההוראה לאפשר קללטת פסק (6קטת*66ם1) כלשהו בזמן פעולת התכנלת: * הקשה של 1-0ש06% לשם הפסקת הרצה, * הקשה של 0621-5 כדל לעצור במהלך התצוגה על המסך. * הקשה של 08%*1-0 כדל להמשיך את התצוגה על המסך, לאחר הפסקה. ההוראה נלתנת ע"? קוד הפעולה ‏ 6 כך, ש-(+%6) מאפשר לקלוט הפרעות, ו-(-%0) אלנו מאפשר דאת. ברלרת המחדל הלא [+%0). אם מרגישלם שהפלט איטל מלדלל כתוצאה מכך, יש להורות [-%60+. ד. שילוב של קובץ חלצוני בתכנית נעשה באמצעות הוראה למהדר. ההוראה גורמת לכך, טבזמן ההידור יתוסף לתכנית הקובץ שנמצא בהוראת ה-00008א1, במקום שבו כתובה ההוראה ויהילה חלק בלתי נפרד ממנה. היתרון שבכך הוא באפשרות לכתוב תכנילות שאורכן גדול ממה שהעורך (28160%) מתלר. הדבר תורם גם לבהירות התכנית ומאפשר להשתמש בתכניות (בעיקר בשגרות) שנכתבו ונופו ע"ל מישהו אחר. התחביר של הוראה זו שונה במעט משאר ההוראות. קוד ההוראה הוא האות 1, אך במקום הסלמנים '+' או '-' אחריה, משאלרים רוותח ולאחתרלו כותבילם את שם הקובץ שרוצים לכלול בתכנלת. לדוגמא: (תדע. תפטתסאד %1+ אם לא נצלין בשם הקובץ את הסוג שלו (המלה שמופיעה אחרל הנקודה בשם הקובץ), ברירת המחדל הלא שזהו קובץ פסקל. ההוראה (28061 %1+ למשל, תובן כמו ההוראה (001.745תע 61). 106 ביבליוגרפיה ספרלם בעברים א. טאובר, דני ורונ?: "פסקל", אקדמון, תשמ"ד (1984). ב. "תכנות מבני בשפת פסקל" (מעובד), ביה"ס לטכנולוגיה של האוניברסיטה הפתוחה, תשמ"ו (1986). ספר? סיסיים .0 5ח50 8 עפווא התסט , "שַתוההה"פסץ? [4563ק" :[1980] .1 ,(הספתוא6ה . 0% 6 הסו0006%יפה1 הבה :5 פתוהההז09ץק [8568ק" :[1980] .6 ,צע8%7ת6 .4 ,065508 ,30056 פָהותפוופגוק ה₪6500 , "פַהוהתהלפסץק 6ו5/5%5608% 60 0 תסו00066"סה1 חה :ו8568ק" ]1978[:‏ .2 ,885% %8.,3 גצַהּותוץ .0 ,7050086 ,77655 66ה5616 00000567 , "פַתומחהזפָסזק [68ו6סת66 ה365%0 ,"|78568 0876ת558 8ַהוהחה"ףסזק" :[1980] .0 ,סחטתה ,.6.₪ ,5וס₪ .ה) ,ה₪65%0 ,30056 פהותפוופטק (%ו00 ,"[8568ק הסוא פָהוּטן50 ח00|6ץק 5570680766" -:.1 ,021366 ."0+ א6) ( תסספתו/ 6הה לתההסהות עלופ"6טות0 046ו"פח68 ,"וה6פהק הז/ פהותההיפסיוק" :[1980] .0.5 ,והסק .6 , 27655 0 פהוהחה"פסצק" :[1978] .0 ,החוץ6? ,.5 ,88"5ה%61 ,.6 ,(ז06ו6הת56 .%"סץ 6 ,ץ6ווא ,"[3563? תסוּא פתוט[50 מס[פסק "[3508ק 0" :[1980] .| ,0056%0 ,.₪ ,%תש8 ,.0 , עְב[פה6"ך ."0+ 698 ,.6ת1 [[81-א3ץ66!₪ "[3568ק 0 הסוא פתוחחהזטסיק 0 08ו5700065ה1" :[1983] .2 ,(סשאשטך - 0%+ אס הסספת1/ התג סהתפת1ה ,%[ס₪ "[3568ק 0 חסו06000"סה1" | :[1980] .4 ,10656 ,.0 ,ה5ו6ע - 7" 06₪ ,5+%ו[0 9160006ת5 ,[[66-88וסה6"ק 0 08ו00060"סת1 [0986%168 ה" :[1978] .1 ,הההע00ה ‏ ,.1.2 ,הספווש .ח00ת0] ,655"ק תג|[ו8608 ,"[568ק 10. 11. ספרים למתקדמים הצוּא) 600956 6 2 ,60860255 פח ווחה טסוק" : [1982] .א ,858ה00 .1 אשא ‏ ,5זצוּו6 ו , [[768%166-88ק , "([73568 תו 65וסחהַאם וברי "6 וח 09 "0+ | [568ַק" :[1984] .0 ,6506) -,.0 (06ז ]668‏ .2 ."סץ א6) 16.0 [[וה-א6678] 7 6 פתותתהלפסיק 60" :[1981] .4 ,]806 6.00 ,ז06106ה 50‏ .3 . איזסצ א ,5ח50 8 ע6ווא התסט ,"[8568ק הסוא פַתוטו50 ח6ולסיק פָּחו05 5-5 8" :[1981] .א ,תו566ה6פט -,.4 (הטה8פה6ה6ד ‏ .4 שבוי 6 ,0111+5 509168006 , [[0768%166-88 "[3568ק טעורבו-פסקל 06/60 [78568 6 6חז - [785608 סטזטז" ‏ :[1985] )-(‏ .1 .[68 ,.6ח1 [8ה8%10מ56%ה1 0ַת3ו"80 ,">ה6התסתוטהם וא לעלבוד נתונ?ם ומבנה המחשב א. האן ?', עמיהוד :': "המחשב האלקטרוני - עיבוד נתונים ותכנות בי?סיק", הוד-עמי, רמת-גן, 1985. ב. עמ?הוד ?י': "תכנון ותכנות ?ישומי מחשבים", הוד-עמי, רמת-גן, 1975. ג. הייפרמן ר': "ארגון נתונים וניהול קבצים", הוד-עמי, רמת-גן, 1982. , "פ דוחה פסיק ה0ו285ות0"98 6056" :[1974] .ו ,"0687 1.0 אס סא , [011-א608 60 0 08ו00065ע6ת "1‏ :[1975] 0.5 6%תסואפו5 0חה .₪8 6ה0ס5 .2 , [ 1 60788-1 "חסו%ו0ם 1 :5500650785 83 3 008ו1285ה0"98 . אס 6% .[=8 אינדקס ומילון מונחים מללון המונחים הקצר מגיש לקורא את המונחים העיקרלים שהוא נזקק להם כאשר הוא לומד את שפת פסקל. במילון משולב גם אלנדקס, אשר נותן את מראל המקומות העלקריים של הדיון בנושא או במונת. אב, הורה אוגר אוגר הוראות אוגרים כלללם אופרטורים אופרטורים ארלתמטלים אילחוד של קבוצות אלטרצילה אינו מוכר אלמנט ארגומנט בוליאנל בחלרה ביטול ארלתמטל ביטוי בוליאנל ביקורת תקינות בית בו ימני (במבנה עץ) בן שמאלי (במבנה עץ) בלוק בקרה ברירת מחדל גבול שורה גישה לשירה גלישה גרעין |33 99 20 15 120 22 109 109 15 108 20,000 25 2006 31 148 %ת6עהק ,(עסת6אק בו (18) ע20815%66 ת610סטע56ת1 (ת02) 8ע26815%6 56סק:ט? 6281ת00 ב 58 6610ת1%6: תסנמט 56% ת106:8610 6 תד ו[ )תסמופץ 00163 מ56180610 ת65510:קא6 6616מת16ץ1 ת0:65510א6 מ200168 קַת1א60ת6 78210 6 4 סמפנת 4 מְ₪=167% 10% 01 מסנצסקס 6%8₪1%6כ ץעה68תטסס 6ת11 58 660₪ע1 100 ?טס 6 1099 דחיפה דיוק כפול דיסק "הבא אחרלו" "הקודם" הגורם המשותף הגדול ביותר הדמליה, החקיילה הלדור הלקף הכברה של אלרטוסתינס הסרה הסתעפות בלת? מותנלת הסתעפות מותנלת הפרש ב?ן קבוצות הצהרות (חטלבת ה...) הצהרת פונקצלה הצהרת פרוצדורה הצהרת תולת השמה התחל (תחללת התכנית, או קטע) וקטור זילהול הפונקצלה +ציכרון זקיף חוקל דל מורגן חיפוש חיפוש בלנרל חיפוט ללנארל חישוב חיתוך של קבוצות חלון טבלה טבלת אמת לחידה ארילתמטית לוגלת לחידות החסנה היקפיות לחידות קלט/פלט לחידת עיבוד מרכזית ( לע"מ) כותרת התכנלת כתובת לא נכון (ארית' בוללאנלֶת) לולאות 110 1-39 9 1-99 1210 202 13 5 108 202 108 108 355 18 5 2 קמ1תפטע ת661510עק 16טטסת אפגת 0 607 (002) 286602 תסתם00 67685656 ת510₪18%610 0018 בנ 8 05 51606 שמ 8ַתנסקסץ קת1ת6מהתס [8ת41610מססחט אַמנת6תהעס 81ת61610ת00 68 566 ת560010 מ2601828%10 ת8601828%10 תס1ססתטץ ת6601378610 6עט660ססעק ת8601878%10 4061 | 6תסעת5518 תנפקסת יביב ת51+108610ת1866 ב10>סתטץ ילסוו 8 8 פ'תהפעסא 28 8018 [56820 צע8ת31 ת0ע508 שהסת11 מ0810018610 מ6:500510סת3 56% שס6ת1ש 68 6 סע (410) 036 10810 1716026616 8 88₪ע5502 [8ת6ת(ק6:1ק 58 סטשק6ט6/0טפחד (020) 16ת0 8ת22000551 066-841 קת6801 מהעפס:ץ 8 06 868 מאגר מבנה נתונים דינמל מבנה נתונלם סטטל מבנה סדרתל מגה-בלת (מלללון בתלם) מהדר מונה התכנלת מוכר (משתנה מוכר) מחסנלית מחרוזת מחשב מטרלצה מיון מלון בועות מיון ע"י החלפה מיון ע"ל סלקצלה ללנארלת מיון ע"? סריקה מלזוג מלים שמורות מלת מחשב מלת מפתח ממשל (מספר) מנורמל מנטלסה מנייה מעבר מעריך (חזקה) מערך מערך ארוץ מערך דו-מימדל מערך המצביעים מערך הנתונלם מערך ממויין מפתח מצביע מצליו מצעל החסנה, החסנים משלים ל-1 מטשללם ל-2 משפט הצהרה משתנה משתנה גלובלל משתנה מאגר משתנה מקומל משתנה מצביע נכון (ארית' בוללאנלת) נקודה צפה נקודת הגדרה נקודת יישום 3 23,,8 18 133 1-9 1-39 139 1277 16 139 106 22 220 1,,68 55 1208 |18 19 108 11 11 133 155 1555 258 208 2,.3 1337 ,3 22 6+פות סנטססטת5% 6868 16מהמצע 6עטססטע80 6868 568810 6שטםסטע5% %181ת560₪6 6 ב (20) עסמתטסס מהצקסלק 6 5% התע סקס 41 קַת61ע02 50% 16ססטם 50% 6ק8תהה6א 0% 561600102 עבסת11 0% גב610ת56ת1ך 8ת1קסן 36506606 8 0 0 ₪ 4 בס צ8א 1 סא 8 3610 סתטת 8 %תסתמססא צהצע ץהעעה 6ַ6ַאסק לעה 81מ510ת6120-סחץ 8 0 עהלץב למעה ההכ ץהעצה 50:660 ץסא עססתנסק 2% 8 "מסתס[קתסס 6'5ם0 10% קותסס 5' סשיך %ת568606 ת8%10ע260182 1-6 86 610581 86 קש םס6++טת 86 10081 6 עססת1סק שטעץ %תנסק קת108%1ק ת1510ת646+1 +0ס סתצ+סק ת1108%10קק8 0% >ת1סק 111 סגירה של קובץ 23 סדר המיון 12 סדר ?ורד (של מלון) 146 סדר עולה (של מלון) 16 סוג גלובלל 12 סוג הבסיס 131 סוגי נתונים 108 סודר 111 סיבית 2,555 סיים (ציון סוף קטע, או תכנית) 21,90 סיכום 209 סימן וערך 1508 סמו 2,007 סרט מגנטל 22 עברית 77 עדכון 206 עודף 2771 1 עורך תמליל 200 עילבוד מקוון 2 2660 עיבוד תמליל 200 עלים 21 עץ בינרל 2,5 עצם 21 עשרונל ארוז+ 120 פונקציה 275 פונקצילה בוליאנית 00 פונקציה רקורסיבית 13 פורטרן 66 פלט 15 פלינדרום 156 פסודו-קוד 1464 פקודה מורכבת 2 פקודה ריקה 55 פקודות 17 פקודות (חטלבת ה...) 355 פקודת 1% מקוננת 6 פקודת ע1 משורשרת 6 פקודת דמה 5 פקודת הסתעפות ו פקודת הפרוצדורה 12 פרוצדורה 17 פרוצדורה מקוננת 18 פרמטר אמלתל 112 פרמטר משתנה 13 פרמטר ערכל 3 פרמטר פורמלל 112 פתיחה של קובץ 23 412 6 116ע 68 ₪מ0011861 עס 8ת50001פכ עס קת01ת4500 68 610581 %6ץ 3858 ץד 1 (217) 61815 עעהתות 4 קדה ותותטס 86 86 ת518 עסו 86 א6צססת 8ת361כט 27 688סא 601602 6א76 אַת6881ססק 8מ11ת0 קת1פפסססעק 7686 ברערדיו 6 ץשהאתנת וני 2408666 1 מס1ג6סתטץ מ6610מט+ ב3001682 מ6610ת+ 80075106 מהע6עסץ 0 8116 9-6 "5% 6תטסקת 00 558%6060% ע+קתו בל תמ560610 6ת6ע5%68% ץע 655606א ץע[ 66ם81ת0 %ת6ת5%68%0 עפתטכ ת610סטע56ת1 קת1ת0ת3:8 58% 6ש0ט60ססמע 6 66016ס:ק 656806 6667מה8עאק 206₪81 66סתהעהק 78218016 עסס6תהעאק 78106 ץ666תהאק 1אמעסע תסקס 116ע צומת קבוע קבוע קבוצתל קבוצה קבוצה חלקית קבוצה חלקלת ממש קבוצות זרות קבוצת העוצמה קובץ קובץ אב קובץ אינדקס סדרתל קובץ חלצונל קובץ סדרתל קובץ פנלמל קובץ תמליל קובץ תנועות קוד תווים במחשב קוד תווים במחשב קלט רוות (תו רווח) רמה רטומה רטשומה באורך משתנה רשלמה רטימה מסודרת רשימה משורשרת שגרה שדה תוית שורש שיטה קונגרואנטית שלטות מונטה קרלו שיטת אמצע הרלבוע שלם (מספר שלם) שם גלובלל שם לוקלל שפת סף (אסמבלר) שפת (תלכנות) עיללת תו תוול קוד תולות מקרה תוית תכנית תור תור - "אחרון נכנס ראשון ?וצא" תור - "ראטון נכנס ראשון ?וצא" 2,020 19 106 21 15 12 110 13 22,22 206 209 22 200 124 5 107 209 31 155 1%6 207 11 37 ,2 13 13 6 006 566 00% 6% = בי % מסססטע 6 מט51ש₪%61 צץ811ש106 5 שמסטאסע 6 15060; 6 6 [518ת500₪00 60א66ת1 68 1המעססאע 6 6181ת56000 6 1ַתע66ת1 6 >א6ץ 6 מסדםסבפ5ת7:8 01 6 %טקת1 א%תה3ןת 1 ב 46 ממה1שבל 1% 1% 6ע668ע0 % 66את11 6 טספ 4 אשב יו 4 008065181 5 ס0821 066 4 1110-508:6 בכ ספת 610281 התהת 10081 5516 הרטפתה 16061 האנ 03 50826 6 08856 56 11 יקס 6 (1100) 005 712586 ם1 1856 (0חדע) "00 71256 ם1 ספעגע ק 13 תור כפול תחום תיכון תכנות תכנית קוראת תנאי מורכב תנאל פשוט תקליטון תרשים הלררכל תרשים זרימה תת-גלישה תת-תחהום 8 86866 200516 מס1קסת מ18פסכ תקסע מהצפקסמק 8ת08111 ת61610ת60 א16קן00 ת61610ת60 16קת51 5% 8% עת60שהעס1ת 68% שסנע א0ס1+:פתס לטפ" מעטססע 0807186 114 1. המחשב האלקטרוני - עיבוד נתונים ותכנות בייסיק, 1985 -‏ י' האן ו-?' עמיהוד 2. תכנון ותכנות ?ישומ? מחשבים, 1975 - |י' עמיהוד 3 ארגון נתונים וניהול קבצים, 1982 -‏ ר' הייפרמן 4. בסיסי נתונים - עקרונות, מודלים ו?לשומים, 1984 -‏ ר' הייפרמן 5. מערכות תקשורת נתונ?ם, 1981 - א' סקופ 6. יסודות בניתוח ותכנון מערכות מידע, 1980 -‏ י' עמיהוד ו-י' קורפל 7. מיקרו-מחשבים וה-6800, חומרה ותוכנה, 1983 -‏ א' הראל הספר ‏ "המחשב האלקטרונ?" אושר ע"? משרד החי?נוך כספר לימוד. שאר הספרים אושרו כספרי עזר והעשרה. 115 ב + וב ב ו ב + איך מיישמיס את עקרונות התכנות המבני בשפת פסקל! איך מתכנתיס תנאים בוליאנייס, לולאות והסתעפויות, פונקציות ופרוצדורות? איך מעבדיס נתוניס במערכיס ובקבצים! מה הם מבני נתוניס סטטִייס ומה הס מבניס דינמיים! מה הס קבצי תמליל ואיך כותבים עורך תמליל (0זו0ם): מה הן הפרוצדורות לשליטה במסוף! מהי רקורסיה ואיך היא מיושמת בפסקל! מהו טורבו-פסקל ומה הס ההבדלים בינו לבין פסקל: % א % % א פסקל -- שפה לתכנות מבני מציג בפני הקורא והלומד את שפת פסקל ואת יסודות התכנות המבני. הוא מדריך את הקורא בהדרגה ומאפשר לו ללמוד את עקרונות התכנות בשפת פסקל באמצעות דוגמאות תכנות רבות, אשר מלוות בהסברים, תרשימי ורימה ותרשימי הסבר שונים. בסוף כל פרק ניתנו שאלות לחזרה ותרגילי תכנות רביס. פסקל -- שפה לתכנות מבני מאפשר ללומד השקדן ללמוד באופן עצמאי. הוא מקיף את כל נושאי התכנות בשפת פסקל ברמה תיכונית ואוניברטיטאית ועל כן מתאיס לשלב הלימוד המתקדם. הלומד יוכל להיעור בספרות העניפה המפורטת בביבליוגרפיה, ובמילון המונחיס והאינדקס שבסוף הספר. הנספת על טורבו-פסקל והביבליוגרפיה, יאפשרו להכיר ולהשתמש גס בניב זה של השפה. הספר ערוך לפי הדרישות של תכנית הלימודיסם החדשה של משרד החינוך והתרבות עבור מגמות מחשבים-ענייא בבתי הספר העל- יסודיים ובמכללות להנדסאיס. הוא מותאס לדרישות מרכג ענייא במכון לפריון העבודה והייצור, המכון להכשרה טכנולוגית (מחייט) ותכניות הלימודיס באוניברסיטאות ובמכללות למחשבים. הספר נועד גס כספר עזר לכל המשתמש בשפת פסקל כשפת תכנות ושירות בתחומי עיסוקו. המחבר: . : פרופ' אבא אנגלברג הינו בעל תואר דוקטור בחקר ביצועים מאוניברסיטת ניו-יורק (טצא) משנת 1969. לאחר הוראה במשך שלוש שנים בפוליטכניקוס של ניו-יורק, (צאא זט 16טזו51ח! 0וחח180ו!סש) עלה ארצה, ומאז הוא מנהל את המחלקה למחשבים ומרצה בביהייס הגבוה לטכנולוגיה בירושלים. פרופ'י אנגלברג פרטס מאמרים בכתבי עת מקצועיים בנושאים של חקר ביצועיס ומחשביס וכתב ספר בסטטיסטיקה.