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

‫הפקולטה למדעי המחשב‬
‫סמסטר חורף תשע"ו‬
‫הטכניון ‪ ,‬מכון טכנולוגי לישראל‬
‫‪ 234127‬מבוא למחשב בשפת ‪MATLAB‬‬
‫‪ – 234127‬מבוא למחשב בשפת ‪MATLAB‬‬
‫סמסטר חורף תשע"ו‬
‫תרגיל בית מס' ‪2‬‬
‫כתב ‪ :‬ישראל גוטר‪.‬‬
‫מתרגל אחראי ‪ :‬ישראל גוטר‬
‫‪gisrael@cs.technion.ac.il‬‬
‫מועד אחרון להגשה‪ :‬יום שישי ‪ 4.12.2015‬בשעה ‪ 14:00‬בצהרים‪.‬‬
‫סטודנטים שירצו‪ ,‬יוכלו להגיש את התרגיל עד יום ראשון ‪ 6.12.2015‬בשעה ‪ 14:00‬בצהרים‪.‬‬
‫נא שימו לב שביום ראשון ‪ 6.12.2015‬יוצאים לשבוע חופשת חנוכה‪ ,‬והרעיון הוא למסור את התרגיל‬
‫לפני שיוצאים לחופשה‪.‬‬
‫התרגיל שלהלן מכיל משימות עבורן צריך לכתוב תוכניות בשפת מטלאב‪.‬‬
‫לתרגיל מצורפים קבצי ‪ m‬עבור המשימות השונות‪ ,‬בהם תידרשו להשתמש‪.‬‬
‫קבצים אלו‪ ,‬בדרך כלל‪ ,‬כבר מכילים את הפקודות הדרושות לקליטת הקלט מהמשתמש (פקודות ‪)input‬‬
‫ולהדפסת הפלט (פקודות ‪ fprintf‬ו‪/‬או‪ .)disp-‬בשום מקרה‪ ,‬אין לשנות שורות אלו ואין להוסיף פקודות קלט‬
‫או פלט נוספות אלא אם כן נאמר במפורש אחרת !! את גוף התוכנית כתבו במקום המיועד לכך (המצוין‬
‫בתוך כל קובץ ‪ .)m‬כמו כן יש להקפיד שלא תהיינה הדפסות מיותרות (ע"י שימוש בנקודה‪-‬פסיק)‪.‬‬
‫בדקו היטב שהתוכניות שכתבתם רצות ללא שגיאות‪ ,‬על קלטים רלוונטיים שונים‪ .‬בפרט יש להריץ על מקרי‬
‫הדוגמות הניתנים בכל שאלה (אם הם ניתנים בשאלה)‪ .‬אל תסתפקו רק במקרים אלה והגדירו בעצמכם‬
‫מקרי בדיקה נוספים ומשמעותיים‪ ,‬בהתאם לכל שאלה‪.‬‬
‫אופן הגשה‪:‬‬
‫‪ ‬יש להגיש את התרגיל ביחידים בלבד‪.‬‬
‫‪ ‬התרגיל יוגש אלקטרונית בלבד באמצעות אתר הקורס‪.‬‬
‫נדרש להגיש קובץ ‪ zip‬המכיל בתוכו את כל קבצי ‪ m‬כפי שכתבתם עבור השאלות‬
‫השונות‪ .‬בתוך קובץ ‪ zip‬זה עליכם לצרף גם קובץ ‪ name.txt‬שמכיל פרטים של‬
‫המגיש ‪ /‬מגישה‪.‬‬
‫נתונים לכם קובץ ‪ zip‬ריק (שלתוכו תוכלו להכניס את כל הקבצים הנדרשים) וכן קובץ‬
‫‪ name.txt‬שאותו צריך למלא (וכאמור‪ ,‬לצרף‪ ,‬גם כן‪ ,‬לתוך קובץ ‪.)zip‬‬
‫הקפידו למלא את ‪ name.txt‬במלואו‪ ,‬באנגלית בלבד ובדיוק על פי הפורמט וסדר‬
‫השדות הניתנים‪ .‬הקפידו בפרט למלא בו כתובת ‪ Email‬במדויק‪.‬‬
‫הקפידו שלא לשנות את שמות קבצי ה‪ m-‬המצורפים לתרגיל !!‬
‫את קובץ ‪ zip‬אשר מכיל את כל הקבצים הנדרשים כמפורט צריך להגיש אלקטרונית‬
‫בלבד‪ ,‬באמצעות האתר של הקורס‪.‬‬
‫‪ ‬אל תשכחו לשמור אצלכם עותק של קובץ ה‪ zip-‬המוגש‪.‬‬
‫‪ ‬הקפידו לרשום ולשמור אצלכם את קוד ההגשה אשר תקבלו מהמערכת תוך כדי‬
‫ההגשה האלקטרונית של קובץ ה‪ .zip-‬קוד זה יכול להידרש במקרה של בירורים‬
‫עתידיים אפשריים‪.‬‬
‫שימו לב ‪ :‬ייתכן שהבדיקה בחלקה או כולה תיעשה באופן אוטומטי ולכן חשוב מאד להקפיד‬
‫הקפדה יתרה על תקינות קובץ ה‪ zip-‬המוגש‪ ,‬הימצאות הקבצים הנדרשים‪ ,‬שמות‬
‫קבצים כנדרש‪ .‬נא וודאו שאין תת תיקיות בתוך קובץ ה‪.zip-‬‬
‫בהצלחה !‬
‫‪1‬‬
‫© כל הזכויות שמורות‬
‫הפקולטה למדעי המחשב‬
‫סמסטר חורף תשע"ו‬
‫הטכניון ‪ ,‬מכון טכנולוגי לישראל‬
‫‪ 234127‬מבוא למחשב בשפת ‪MATLAB‬‬
‫תרגיל בית זה מתמקד בנושא ‪ :‬מחרוזות‪ ,‬מערך דו מימדי‪.‬‬
‫בתרגיל זה אסור להשתמש במשפט תנאי ( ‪ ) if‬וגם אסור להשתמש בלולאות‪.‬‬
‫להלן הפעולות שמותרות לשימוש בתרגיל זה ‪:‬‬
‫כל הפעולות והאופרטורים שהותרו לשימוש בתרגיל הבית הקודם‪ ,‬ובנוסף הפעולות‬
‫‪. zeros , ones , reshape , repmat , double , char‬‬
‫אסור להשתמש בפעולה שאינה מצוינת כאן אלא אם כן נאמר במפורש אחרת‪.‬‬
‫אסור להשתמש באופרטורים && & || | ‪.‬‬
‫בפרט אסור להשתמש בפעולות ייעודיות למחרוזות כמו ‪, strfind , num2str , str2num‬‬
‫‪. lower , upper‬‬
‫אסור גם להשתמש בפעולות ‪ , eye , diag‬וגם אסור להשתמש ב – ‪.isequal‬‬
‫פעולות קלט פלט כבר רשומות לכם בקבצי ‪ m‬השונים המצורפים לתרגיל זה‪ .‬השתמשו בהן‬
‫כפי שהן מופיעות בקבצים אלה‪ .‬אין לשנותן‪.‬‬
‫הקפידו שלא להשתמש בדברים שטרם למדנו עליהם בכיתה ובדברים שלא פורטו לעיל‪ ,‬אלא אם כן‬
‫נאמר אחרת במפורש בנוסח המשימה‪.‬‬
‫בכל המשימות ניתן להניח שהקלט תקין‪.‬‬
‫משימה ‪: )hw2_q1.m( 1‬‬
‫כתבו תוכנית אשר קולטת תרגיל חשבון פשוט ב‪ 2-‬מספרים שלמים אי שליליים‪.‬‬
‫התוכנית מציגה כתוצאה את הערך המספרי המתקבל‪.‬‬
‫התרגיל החשבוני נקלט בתור מחרוזת‪ .‬פעולת החשבון היא אחת מבין ‪ +‬או ‪ -‬או * ‪.‬‬
‫המחרוזת תקינה בכל מובן‪ .‬אינה ריקה ואינה מכילה תווים לא חוקיים‪ .‬המחרוזת עשויה להכיל‬
‫רווחים‪( .‬בכל מקרה לא יופיע רווח בין תווי ספרות של מספר אלא רק "מחוץ" למספר)‪.‬‬
‫דוגמה ‪ :‬עבור ’‪ ‘2341+2‬נקבל כתוצאה את המספר ‪.2343‬‬
‫שימו לב שהגרשים אינם חלק מהמחרוזת וגם אינם מוזנים במקלדת במהלך קליטת המחרוזת‬
‫ע"י התוכנית‪.‬‬
‫דרישות ‪:‬‬
‫ללא ‪ .if‬ללא לולאות‪ .‬ללא ‪ num2str‬או ‪.str2num‬‬
‫מותר להשתמש רק בפעולות המפורטות בתחילת התרגיל‪.‬‬
‫‪2‬‬
‫© כל הזכויות שמורות‬
‫הפקולטה למדעי המחשב‬
‫סמסטר חורף תשע"ו‬
‫הטכניון ‪ ,‬מכון טכנולוגי לישראל‬
‫‪ 234127‬מבוא למחשב בשפת ‪MATLAB‬‬
‫משימה ‪: )hw2_q2.m( 2‬‬
‫כתבו תוכנית אשר מבקשת מהמשתמש להזין מחרוזת‪.‬‬
‫התוכנית בודקת מהו האורך המקסימלי של תת מחרוזת מספרית כלשהי לא ריקה אשר נמצאת במחרוזת‪.‬‬
‫האורך המקסימלי הזה יוצג כתוצאה‪ .‬אם לא קיימת כלל תת מחרוזת מספרית אזי יוצג ‪ 0‬כתוצאה‪.‬‬
‫תת מחרוזת מספרית היא תת מחרוזת רציפה (כל איבריה סמוכים זה לזה במחרוזת המקורית)‬
‫אשר כל איבריה הם תווי ספרות (מותר גם תווי אפסים)‪ .‬תת מחרוזת מספרית אינה יכולה להיות‬
‫תת מחרוזת של תת מחרוזת מספרית ארוכה יותר‪.‬‬
‫דוגמה ‪:‬‬
‫המחרוזת הנקלטת ‪xfd342hgf56mnbv6.7jhg5fgf5676 :‬‬
‫אזי – בסך הכל יש ‪ 6‬תת מחרוזות מספריות ‪:‬‬
‫'‪'342', '56', '6', '7', '5', '5676‬‬
‫האורך המקסימלי של תת מחרוזת מספרית כלשהי הוא ‪ ( 4‬עבור ’‪.) ‘5676‬‬
‫לכן יוצג ‪ 4‬כתוצאה‪.‬‬
‫דרישות ‪:‬‬
‫ללא לולאות‪ ,‬ללא ‪ . if‬אסור להשתמש ב – ‪.isequal‬‬
‫אסור להשתמש בפעולות דוגמת ‪. str2num, num2str‬‬
‫אסור להשתמש באופרטורים && & || | ‪.‬‬
‫משימה ‪: )hw2_q3.m( 3‬‬
‫במטלאב קיימת הפעולה ‪. strncmpi‬‬
‫הפעלת הפעולה נעשית בפורמט הבא ‪:‬‬
‫)‪strncmpi(s1, s2, n‬‬
‫כאשר ‪ s2 ,s1‬הן מחרוזות כלשהן (יכולות להיות גם ריקות)‪ n .‬הוא מספר שלם אי שלילי‪.‬‬
‫הפעולה בודקת האם תת המחרוזת של ‪ s1‬באורך ‪ n‬אשר מתחילה מתחילת ‪s1‬‬
‫שווה (תוך התעלמות מהבדלים של אותיות גדולות‪/‬קטנות) לתת המחרוזת של ‪s2‬‬
‫באורך ‪ n‬אשר מתחילה מתחילת ‪. s2‬‬
‫אם ‪ n‬גדול מעבר למספר התווים הקיימים‪ ,‬אזי מתחשבים רק בתווים הקיימים‪.‬‬
‫אם ‪ n‬שווה ‪ ,0‬אזי התשובה היא ‪( 1‬כן)‪ ,‬לא משנה מהו תוכנן של המחרוזות‪.‬‬
‫אם שתי המחרוזות ריקות‪ ,‬התשובה היא ‪( 1‬כן) עבור כל ערך של ‪.n‬‬
‫דוגמה ‪: 1‬‬
‫‪'abcde' : s1‬‬
‫‪'ABcd' : s2‬‬
‫‪3 :n‬‬
‫התשובה ‪( 1 :‬כן)‬
‫ב‪ s1-‬נקבל את תת מחרוזת ’‪ 3( ‘abc‬תווים ראשונים)‪.‬‬
‫ב‪ s2-‬נקבל את תת מחרוזת ’‪ 3( ‘ABc‬תווים ראשונים)‪.‬‬
‫אם מתעלמים מהבדלים של אותיות גדולות‪/‬קטנות אזי התת מחרוזות האלה זהות‪.‬‬
‫שימו לב שהגרשים אינם חלק מהמחרוזת‪.‬‬
‫דוגמה ‪: 2‬‬
‫‪'abcde' : s1‬‬
‫‪'ABcd' : s2‬‬
‫‪10 : n‬‬
‫‪3‬‬
‫© כל הזכויות שמורות‬
‫הפקולטה למדעי המחשב‬
‫סמסטר חורף תשע"ו‬
‫הטכניון ‪ ,‬מכון טכנולוגי לישראל‬
‫‪ 234127‬מבוא למחשב בשפת ‪MATLAB‬‬
‫התשובה ‪( 0 :‬לא)‬
‫ב‪ s1-‬נקבל את תת מחרוזת ’‪( ‘abcde‬רק ‪ 5‬תווים כי אין יותר)‪.‬‬
‫ב‪ s2-‬נקבל את תת מחרוזת ’‪( ‘ABcd‬רק ‪ 4‬תווים כי אין יותר)‪.‬‬
‫‪ 2‬תת מחרוזות אלה אינן שוות כי אינן באותו האורך‪.‬‬
‫שימו לב‪ ,‬כמו בדוגמה הקודמת‪ ,‬שהגרשים אינם חלק מהמחרוזת‪.‬‬
‫דוגמה ‪: 3‬‬
‫‪'abcde' : s1‬‬
‫‪'ABcdE' : s2‬‬
‫‪10 : n‬‬
‫התשובה ‪( 1 :‬כן)‬
‫בהמשך לדוגמה ‪ ,2‬הפעם ‪ 2‬תת מחרוזות הן באותו אורך (‪ 5‬תווים כל אחת)‪ ,‬ואם מתעלמים‬
‫מהבדלים בין אותיות גדולות וקטנות אזי המחרוזות זהות‪.‬‬
‫כתבו תוכנית אשר קולטת ‪ 2‬מחרוזות בזו אחר זו ואחר כך מספר שלם אי שלילי‪.‬‬
‫המחרוזות יכולות להכיל תווים כלשהם‪ ,‬כולל תווי אלף בית גדולים או קטנים וכולל גם כל תו אחר‪,‬‬
‫אבל מובטח שהן לא מכילות את התו ’!‘‪ .‬ניתן להניח שהקלט תקין ומקיים את שאמור לעיל‪.‬‬
‫התוכנית מבצעת את מה שמבצעת הפעולה ‪ strncmpi‬והיא מציגה כתוצאה ‪ 1‬או ‪ 0‬בהתאם‬
‫לתוצאה המתקבלת‪.‬‬
‫דרישות ‪:‬‬
‫ללא לולאות‪ ,‬ללא ‪ . if‬אסור להשתמש ב – ‪.isequal‬‬
‫אסור להשתמש בפעולות דוגמת ‪. strcmp, strcmpi, strncmp, strncmpi‬‬
‫אסור להשתמש באופרטורים && & || | ‪.‬‬
‫משימה ‪: )hw2_q4.m( 4‬‬
‫מערך דו מימדי ריבועי לא ריק של מספרים שלמים ייקרא ריבוע קסם זוגיות אם מתקיים כדלקמן ‪:‬‬
‫לכל השורות ולכל העמודות ולשני האלכסונים מתקיים שסכומי המספרים הזוגיים שנמצאים בהם‬
‫שווים בין כולם‪ ,‬ושווים גם לסכומי המספרים האי זוגיים שנמצאים בהם‪ ,‬שגם הם שווים בין כולם‪.‬‬
‫דוגמה ‪:‬‬
‫‪1 12 16 27‬‬
‫‪27 16 12 1‬‬
‫‪12 1 27 16‬‬
‫‪16 27 1 12‬‬
‫במערך לעיל מתקיים ‪:‬‬
‫בכל אחת מהשורות סכום המספרים הזוגיים הוא ‪ 28‬וגם סכום המספרים האי זוגיים הוא ‪.28‬‬
‫כך לגבי כל אחת מהעמודות – בכל עמודה סכום המספרים הזוגיים הוא ‪ 28‬וגם סכום המספרים‬
‫האי זוגיים הוא ‪ .28‬כך גם לגבי כל אחד מ‪ 2-‬האלכסונים ‪ -‬בכל אחד משני האלכסונים סכום האיברים‬
‫הזוגיים הוא ‪ 28‬וגם סכום האיברים האי זוגיים הוא ‪ .28‬כלומר‪ 28 ,‬הוא סכום אחיד שמתקבל‬
‫בכל אחת מהשורות ובכל אחת מהעמודות ובכל אחד מ‪ 2-‬האלכסונים‪ ,‬וזה כאשר סוכמים בנפרד‬
‫את המספרים הזוגיים ובנפרד את המספרים האי זוגיים‪.‬‬
‫לכן המערך לעיל הוא ריבוע קסם זוגיות‪.‬‬
‫כתבו תוכנית אשר קולטת מערך דו מימדי ריבועי ‪ m‬לא ריק של מספרים‪.‬‬
‫התוכנית בודקת אם הוא ריבוע קסם זוגיות ובהתאם היא מציגה כתוצאה ‪ 1‬לוגי (‪ )true‬או‬
‫‪ 0‬לוגי (‪.)false‬‬
‫‪4‬‬
‫© כל הזכויות שמורות‬
‫הפקולטה למדעי המחשב‬
‫סמסטר חורף תשע"ו‬
‫הטכניון ‪ ,‬מכון טכנולוגי לישראל‬
‫‪ 234127‬מבוא למחשב בשפת ‪MATLAB‬‬
‫דרישות ‪:‬‬
‫אסור להשתמש ב‪ . if-‬אסור להשתמש בלולאות‪.‬‬
‫בפרט אסור להשתמש ב – ‪. eye , diag‬‬
‫מותר להשתמש רק בפעולות המפורטות בתחילת התרגיל‪.‬‬
‫משימה ‪: )hw2_q5.m( 5‬‬
‫כתבו תוכנית אשר קולטת מערך ‪ m‬דו מימדי של מספרים‪.‬‬
‫המערך מכיל לפחות ‪ 2‬שורות‪ .‬מספר העמודות הוא כלשהו גדול מ‪.0-‬‬
‫התוכנית בודקת האם במערך ‪ m‬קיימות ‪ 2‬שורות כלשהן זהות‪ .‬אם כן – מוצג ‪ 1‬לוגי (‪.)true‬‬
‫אם לא – מוצג ‪ 0‬לוגי (‪.)false‬‬
‫ניתן להניח שהקלט תקין‪.‬‬
‫דוגמה ‪:‬‬
‫‪19 0‬‬
‫‪23 45‬‬
‫‪23 46‬‬
‫‪19 0‬‬
‫‪5‬‬
‫‪2‬‬
‫‪2‬‬
‫‪5‬‬
‫‪23‬‬
‫‪5 -2‬‬
‫‪2 867 6‬‬
‫‪2 867 6‬‬
‫‪23‬‬
‫‪5 -2‬‬
‫במערך זה שורות ‪ 1‬ו – ‪ 4‬זהות‪ ,‬ולכן התוצאה היא ‪.1‬‬
‫נשים לב ששורות ‪ 2‬ו – ‪ 3‬שונות בעמודה ‪ ,6‬ולכן הן אינן נחשבות זהות למרות שכל שאר איבריהן‬
‫זהים‪.‬‬
‫דרישות ‪:‬‬
‫אסור להשתמש ב‪ . if-‬אסור להשתמש בלולאות‪ .‬בפרט אסור להשתמש ב – ‪.isequal‬‬
‫מותר להשתמש רק בפעולות המפורטות בתחילת התרגיל‪.‬‬
‫משימה ‪: )hw2_q6.m( 6‬‬
‫במטלאב קיימת הפעולה ‪ .strfind‬פעולה זו מקבלת כפרמטרים ‪ 2‬מחרוזות‪.‬‬
‫הפעולה בודקת האם המחרוזת שמתקבלת בפרמטר השני (המחרוזת השניה)‬
‫מופיעה במחרוזת המתקבלת בפרמטר הראשון (המחרוזת הראשונה)‪ ,‬ואם כן‪,‬‬
‫מהם המקומות במחרוזת הראשונה שבהם היא מתחילה‪.‬‬
‫התוצאה המתקבלת היא מערך שורה שמכיל את אותם מקומות‪ .‬המקומות ממוינים‬
‫מהקטן לגדול משמאל לימין‪ .‬אם המחרוזת השנייה אינה מופיעה כלל במחרוזת הראשונה‬
‫אזי מתקבל מערך ריק שמימדיו ‪.0 x 0‬‬
‫דוגמאות ‪:‬‬
‫עבור )’‪ strfind(‘abababa’, ‘aba‬נקבל‬
‫עבור )’‪ strfind(‘aba’, ‘abababa‬נקבל‬
‫] ‪[1 3 5‬‬
‫] [ (מערך ריק)‬
‫כתבו תוכנית אשר מקבלת כפרמטרים ‪ 2‬מחרוזות לא ריקות‪ .‬ניתן להניח שהקלט תקין‪.‬‬
‫התוכנית מבצעת את מה שהפעולה ‪ strfind‬מבצעת‪ ,‬כלומר מציגה כתוצאה את כל המקומות‬
‫במחרוזת הראשונה שבהם מתחיל מופע של המחרוזת השניה‪ .‬אם אין כאלה מקומות אזי‬
‫התוצאה תהיה מערך ריק במימדים ‪.0x0‬‬
‫‪5‬‬
‫© כל הזכויות שמורות‬
‫הפקולטה למדעי המחשב‬
‫סמסטר חורף תשע"ו‬
‫הטכניון ‪ ,‬מכון טכנולוגי לישראל‬
‫‪ 234127‬מבוא למחשב בשפת ‪MATLAB‬‬
‫דרישות ‪:‬‬
‫ללא ‪ .if‬ללא לולאות‪.‬‬
‫בפרט אסור להשתמש ב – ‪. strfind‬‬
‫מותר להשתמש רק בפעולות המפורטות בתחילת התרגיל‪.‬‬
‫הערה ‪ :‬שימו לב שפעולת ‪ find‬על מערך חד מימדי נותנת כתוצאה מערך חד מימדי שמימדיו הם‬
‫‪ 1 x m‬כאשר ‪ m‬הוא מספר האינדקסים שנמצאים בתשובה‪.‬‬
‫בפרט‪ ,‬אם ‪ find‬לא מוצאת‪ ,‬אזי התוצאה היא במימדים ‪ ,1 x 0‬וזה שונה ממה שאנחנו צריכים‬
‫כאשר לא מוצאים – מימדים ‪.0 x 0‬‬
‫ניתן‪ ,‬בין היתר‪ ,‬להמיר למימדים ‪ 0 x 0‬ע"י שימוש בפעולת ‪.reshape‬‬
‫למשל ‪:‬‬
‫)‪find([ 21 22 23] == 24‬‬
‫יתן מערך ריק שמימדיו ‪. 1 x 0‬‬
‫)‪reshape(find([ 21 22 23] == 24),0,0‬‬
‫יתן מערך ריק שמימדיו ‪. 0 x 0‬‬
‫‪6‬‬
‫© כל הזכויות שמורות‬