מבוא למדעי המחשב 234111

‫‪ 234111‬מבוא למדעי המחשב‬
‫סמסטר חורף תשע"ו‬
‫תרגיל בית ‪2‬‬
‫כתב ואחראי ‪ :‬ישראל גוטר ‪gisrael@cs.technion.ac.il‬‬
‫הגשה ‪ :‬יחידים בלבד‪ .‬הגשה אלקטרונית בלבד‪ ,‬באמצעות אתר הקורס‪.‬‬
‫הוראות הגשה ‪ :‬בהתאם למתואר במדריך להכנת תרגילי בית‪ ,‬כפי שמפורסם באתר הקורס‪,‬‬
‫ליד תרגילי הבית‪.‬‬
‫תאריך אחרון להגשה ‪ :‬יום שלישי ‪23:55 15.12.2015‬‬
‫הקפידו על שמות הקבצים‪ ,‬כפי שמפורט במשימות השונות‪.‬‬
‫בהצלחה !‬
‫הנושא העיקרי בתרגיל זה ‪ :‬טיפוס תווי‪ .‬מערך חד מימדי‪ .‬לולאה‪ .‬לולאות מקוננות‪.‬‬
‫משימה ‪) hw2q1.c ( 1‬‬
‫מספר שלם חיובי ייקרא מאוזן ‪ balanced‬אם מספר המופעים של כל ספרה אשר מופיעה בו הוא‬
‫כפולה של ערכה של הספרה‪ .‬למשל – אם מופיעה בו הספרה ‪ 9‬אזי היא מופיעה בו מספר פעמים‬
‫שהוא כפולה של ‪ ,9‬למשל – ‪ 18‬פעמים‪ 54 ,‬פעמים‪ ,‬אפשר גם ‪ 0‬פעמים‪ .‬במספר מאוזן לא תופיע כלל‬
‫הספרה ‪.0‬‬
‫כתבו תוכנית אשר תבקש ולאחר מכן תקלוט מהמשתמש מספר שלם אי שלילי‪ .‬מובטח שהמספר גדול מ‪0-‬‬
‫ואינו מכיל אפסים מובילים מצד שמאל‪ .‬בסוף המספר מקישים במקלדת על >‪ <Enter‬כאשר מזינים‬
‫במקלדת‪.‬‬
‫התוכנית תבדוק אם המספר הוא מאוזן ותציג הודעה בהתאם‪.‬‬
‫שימו לב שהמספר הוא שלם כלשהו שאינו חסום בערכו ועל כן יכול להיות גדול ביותר‪.‬‬
‫לא בהכרח ניתן לייצג אותו באמצעות ‪ int‬או ‪ ,unsigned long‬ואפילו לא את מספר הספרות שלו‪,‬‬
‫‪1‬‬
‫©כל הזכויות שמורות‬
‫שגם הוא יכול להיות גדול ביותר‪.‬‬
‫נתונות ‪ 3‬דוגמאות של קלט ושל פלט‪.‬‬
‫חובה להקפיד על פורמט מדויק כמו בדוגמאות‪ .‬בפרט הקפידו על רווחים שמופיעים ועל ירידת שורה‪.‬‬
‫משימה ‪) hw2q2.c ( 2‬‬
‫נגדיר מילה ‪ :‬רצף של תו אחד או יותר‪ .‬מילה בהקשר זה אינה בהכרח מכילה רק תווי א"ב‪ ,‬אלא‬
‫יכולה להכיל כל תו אשר יש לו תצוגה רגילה‪ .‬תווים כמו רווח‪ ,‬ירידת שורה‪ TAB ,‬וכו' – אינם יכולים‬
‫להופיע במילה‪.‬‬
‫מילה תיקרא פלינדרום אם ניתן לקרוא אותה באותה צורה משמאל לימין או מימין לשמאל‪.‬‬
‫לדוגמה ‪:‬‬
‫‪34abcba43‬‬
‫מילה של תו בודד היא פלינדרום‪.‬‬
‫מילה תיקרא פלינדרום אדיש אותיות אם היא פלינדרום כאשר מתעלמים מהבדלים בין אותיות גדולות‬
‫וקטנות‪.‬‬
‫למשל ‪ 34abcBA43‬אינה פלינדרום‪ ,‬אבל אם מתעלמים מהבדלים בין אותיות גדולות וקטנות אזי‬
‫מילה זו היא כן פלינדרום‪.‬‬
‫טקסט הוא רצף של מילים שמופיעות בשורה אחת כאשר בין המילים מופיע תו רווח אחד או יותר‪ .‬בנוסף גם‬
‫לפני המילה הראשונה יכול (לא חייב) להופיע תו רווח אחד או יותר‪ ,‬ובהתאם – גם אחרי המילה האחרונה‪.‬‬
‫בסוף הטקסט יורדים שורה‪.‬‬
‫טקסט ייקרא פלינדרומי אדיש אותיות אם כל מילה שמופיעה בו היא פלינדרום אדיש אותיות‪.‬‬
‫במשימה זו עליכם לכתוב תוכנית אשר תבקש ולאחר מכן תקלוט מהמשתמש טקסט‪.‬‬
‫התוכנית תבדוק אם הטקסט הוא פלינדרומי אדיש אותיות ותציג הודעה בהתאם‪.‬‬
‫אם הטקסט לא מכיל כלל מילים אזי הוא ייחשב כפלינדרומי אדיש אותיות‪.‬‬
‫ניתן להניח שמילה בודדת אינה ארוכה יותר מ – ‪ 25‬תווים (מספר גמיש‪ .‬יכול להשתנות בעתיד)‪.‬‬
‫מספר המילים בטקסט אינו חסום ויכול להיות גדול ביותר‪ .‬אין להניח שום הנחה על אורך שורה‪.‬‬
‫נתונות ‪ 3‬דוגמאות של קלט ושל פלט‪.‬‬
‫חובה להקפיד על פורמט מדויק כמו בדוגמאות‪ .‬בפרט הקפידו על רווחים שמופיעים ועל ירידת שורה‪.‬‬
‫‪2‬‬
‫©כל הזכויות שמורות‬
‫משימה ‪3‬‬
‫סעיף א ( ‪) hw2q3a.c‬‬
‫כתבו תוכנית אשר תבקש ולאחר מכן תקלוט מהמשתמש סדרה של מספרים שלמים כלשהם אשר שונים מ‪.0-‬‬
‫ניתן להניח שניתן לייצג אותם באמצעות ‪ .int‬בסוף הסדרה מופיע ‪ 0‬אשר אינו נחשב ערך בסדרה‪.‬‬
‫מובטח שבסדרה לא מופיעים יותר מ – ‪ 1000‬מספרים (גמיש‪ ,‬יכול להשתנות)‪.‬‬
‫התוכנית תבדוק כמה שלשות של מספרים בסדרה מקיימות שאחד המספרים מתוכן הוא הסכום של‬
‫שני המספרים האחרים‪.‬‬
‫למשל‬
‫‪0‬‬
‫‪24‬‬
‫השלשה‬
‫‪6‬‬
‫‪4‬‬
‫‪4 6‬‬
‫‪2‬‬
‫‪ 2‬מקיימת את הדרישה כי ‪2 + 4 == 6‬‬
‫שאר השלשות‬
‫‪2 6 24‬‬
‫‪2 4 24‬‬
‫‪4 6 24‬‬
‫אינן מקיימות דרישה זו‪.‬‬
‫לכן – סה"כ – שלשה אחת‪.‬‬
‫שימו לב שייתכן שבסדרה אין בכלל שלשות‪ ,‬כלומר‪ ,‬יש פחות מ‪ 3-‬מספרים‪ .‬במקרה כזה התשובה היא ‪.0‬‬
‫נתונות ‪ 3‬דוגמאות של קלט ושל פלט‪.‬‬
‫חובה להקפיד על פורמט מדויק כמו בדוגמאות‪ .‬בפרט הקפידו על רווחים שמופיעים ועל ירידת שורה‪.‬‬
‫‪3‬‬
‫©כל הזכויות שמורות‬
‫סעיף ב ( ‪) hw2q3b.c‬‬
‫בסעיף זה אנו נדרשים לקלוט סדרת מספרים כמו בסעיף א‪ ,‬באותן ההנחות‪.‬‬
‫הפעם התוכנית תבדוק לכמה שלשות של מספרים בסדרה ישנו סכום שהוא השני בגודלו מבין כל הסכומים‬
‫האפשריים של שלשות בסדרה‪ .‬ייתכן גם שאין כלל שלשות כאלה‪ .‬זה קורה כאשר לכל השלשות ישנו אותו‬
‫הסכום או שיש רק שלושה מספרים – שלשה אחת‪ ,‬או שאין בכלל שלשות – יש פחות מ‪ 3-‬מספרים‪.‬‬
‫התוכנית תציג הודעה בהתאם‪.‬‬
‫דרישה ‪ :‬התוכנית צריכה להיות יעילה‪ ,‬עד כמה שניתן‪ ,‬מבחינת שימוש במקום בזכרון‪.‬‬
‫רמז – ניתן לתת כאן פתרון שהוא יעיל יותר מאשר הפתרון בסעיף א‪.‬‬
‫נתונות ‪ 3‬דוגמאות של קלט ושל פלט‪.‬‬
‫חובה להקפיד על פורמט מדויק כמו בדוגמאות‪ .‬בפרט הקפידו על רווחים שמופיעים ועל ירידת שורה‪.‬‬
‫משימה ‪) hw2q4.c ( 4‬‬
‫מספר שלם חיובי ייקרא ראשוני אם הוא מתחלק ב‪ 1-‬ובעצמו בלבד‪.‬‬
‫‪ 1‬נחשב גם כן ראשוני‪ 2 .‬הוא המספר הראשוני הזוגי היחיד‪.‬‬
‫כתבו תוכנית אשר תבקש ותקלוט ‪ 2‬מספרים שלמים חיוביים ‪. m n‬‬
‫ניתן להניח ‪n <= m <= 50‬‬
‫התוכנית תציג טבלה שבה יש שורת כותרת ומתחתיה שורות שמתאימות לכל אחד מן הערכים‬
‫השלמים שנמצאים בתחום ‪ n‬עד ‪( m‬סה"כ ‪ m-n+1‬שורות)‪.‬‬
‫השורה הראשונה מתאימה עבור ‪ . n‬השורה השניה מתאימה עבור ‪ n+1‬וכך הלאה‪.‬‬
‫באותו האופן הטבלה מכילה עמודת כותרת מצד שמאל ואחריה מימין ישנן עוד עמודות‬
‫שמתאימות לכל אחד מן הערכים השלמים שנמצאים בתחום ‪ n‬עד ‪( m‬סה"כ ‪ m-n+1‬עמודות)‪.‬‬
‫העמודה הראשונה מתאימה עבור ‪ . n‬העמודה השניה מתאימה עבור ‪ n+1‬וכך הלאה‪.‬‬
‫ביחד עם שורת הכותרת ועם עמודת הכותרת אנו מקבלים טבלת מספרים בגודל‬
‫)‪(m-n+2) * (m-n+2‬‬
‫‪4‬‬
‫©כל הזכויות שמורות‬
‫שורת הכותרת מכילה מקום ראשון ריק מצד שמאל ולאחריו משמאל לימין מופיעים כל המספרים מ – ‪n‬‬
‫ועד ‪ .m‬אותו הדבר לגבי עמודת הכותרת – מלמעלה למטה‪.‬‬
‫עבור איבר בטבלה אשר עבורו בשורת הכותרת כתוב ‪ i‬ובעמודת הכותרת כתוב ‪ j‬נקבל את‬
‫מספר המספרים הראשוניים אשר נמצאים בתחום‬
‫])‪[min(i,j) .. max(i,j‬‬
‫למשל‪ ,‬עבור ‪ j==3 i==1‬נקבל ‪ 3‬כי בתחום ‪ 1..3‬יש ‪ 3‬מספרים ראשוניים‪.‬‬
‫גם עבור ‪ j==1 i==3‬נקבל אותו הדבר‪.‬‬
‫שימו לב שעבור ‪ i==j‬אנחנו‪ ,‬למעשה‪ ,‬בודקים האם ‪ i‬הוא ראשוני והערך שיהיה במיקום הרלוונטי‬
‫בטבלה יהיה ‪ 1‬או ‪ 0‬בהתאם‪.‬‬
‫דוגמה ‪:‬‬
‫עבור ‪ m==5 n==2‬נקבל‬
‫‪5‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2‬‬
‫‪3‬‬
‫‪2‬‬
‫‪2‬‬
‫‪1‬‬
‫‪2‬‬
‫‪2‬‬
‫‪1‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪2‬‬
‫‪4‬‬
‫‪1‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪5‬‬
‫שימו לב שהטבלה היא סימטרית כלפי האלכסון הראשי‪.:‬‬
‫דרישות תצוגה ‪:‬‬
‫כל העמודות מיושרות‪ .‬אין רווחים בתחילת שורה או בסוף שורה‪.‬‬
‫כל איבר בטבלה יוצג בפורמט ”‪ “%5d‬וללא כל רווח נוסף‪ .‬כלומר – מספרים באותה שורה יוצגו בזה אחר זה‬
‫בפורמט ”‪. “%5d‬‬
‫נתונה ‪ 3‬דוגמא של קלט ושל פלט‪.‬‬
‫חובה להקפיד על פורמט מדויק כמו בדוגמא‪ .‬בפרט הקפידו על רווחים שמופיעים ועל ירידת שורה‪.‬‬
‫‪5‬‬
‫©כל הזכויות שמורות‬