הפקולטה למדעי המחשב סמסטר חורף תשע"ו הטכניון ,מכון טכנולוגי לישראל 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 © כל הזכויות שמורות
© Copyright 2024