מבוא למדעי המחשב – שפת C (234112), סמסטר אביב 2009

‫מבוא למדעי המחשב – שפת ‪ ,)211332( C‬חורף ‪2132-2132‬‬
‫תרגיל בית ‪3‬‬
‫מועד אחרון להגשה‪ :‬יום ה' ‪ 35215102/‬עם בונוס‬
‫יום ד ‪ 16/12/2015‬בלי בונוס‬
‫המתרגל האחראי על תרגיל זה‪ :‬אריה רונד‬
‫משרד‪ :‬טאוב ‪344‬‬
‫טל' במשרד‪43-928-3828 :‬‬
‫‪[email protected] :E-mail‬‬
‫חשוב לשמור את קוד‬
‫אישור ההגשה שמקבלים‬
‫מהמערכת כשמגישים!!‬
‫שעת קבלה רגילה‪ :‬יום ב' ‪11:44-12:44‬‬
‫שעות קבלה מיוחדות לשאלות על התרגיל‪:‬‬
‫יום א' (‪ 16:30-17:30 )2811112415‬וביום א' (‪16:30-17:30 )1411212415‬‬
‫אם שעות אלו אינן נוחות לכם ניתן לתאם פגישה בשעות אחרות‪1‬‬
‫הוראות הגשה‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫הגשה אלקטרונית בבודדים‪1‬‬
‫תרגיל שיוגש בזמן יקבל אוטומטית בונוס של ‪ 5‬נקודות‪1‬‬
‫תינתן הארכה אוטומטית של שלושה ימי עבודה (מלבד שישי ושבת) למאחרים‪ ,‬ללא בונוס‪1‬‬
‫מלבד מילואים‪ ,‬לא יתקבלו תרגילים אחרי הארכה של שלושה ימי עבודה‪1‬‬
‫‪‬‬
‫כל יום מילואים = יום דחייה‪ 1‬על מנת לקבל את הדחייה‪ ,‬עליכם לשלוח באי‪-‬מייל למתרגל האחראי‬
‫על תרגיל זה (אריה רונד) עותק של האישור המראה שהייתם במילואים‪ 1‬אם האישור יגיע אליכם‬
‫בתאריך מאוחר‪ ,‬אז תודיעו על כך לאריה רונד‪1‬‬
‫‪‬‬
‫ערעורים ניתן להגיש עד לתאריך המסומן בהודעה על מתן הציונים (כשבועיים לאחר קבלת הציון)‪1‬‬
‫במידה והערעור לא יתקבל תהיה הורדה אוטומטית של הבונוס (חמש נקודות) אם התקבל כזה‪1‬‬
‫‪‬‬
‫עירעורים על הדפסות שגויות בפלט שלכם לא יתקבלו‪ 1‬עליך לבדוק את תוכנית שלך עם‬
‫‪ DiffMerge‬לפני הגשתך‪1‬‬
‫הנחיות‪:‬‬
‫‪‬‬
‫אנא קרא‪/‬י את השאלות בעיון לפני שתתחיל‪/‬י בפתרונן‪1‬‬
‫‪‬‬
‫ניתן להניח כי הקלט תקין‪ ,‬אלא אם כן נאמר אחרת‪1‬‬
‫‪‬‬
‫שימו לב! הבדיקה תהיה אוטומטית‪ ,‬ולכן הקפיד‪5‬י מאוד להדפיס בדיוק בפורמט שהתבקשת‬
‫ולבדוק את הפלט מול הפלט של הדוגמאות שקיבלת עם ‪.DiffMerge‬‬
‫‪‬‬
‫‪‬‬
‫‪o‬‬
‫וודא‪/‬י את האותיות הגדולות והקטנות לפי הדוגמאות וההסברים בתרגיל‪1‬‬
‫‪o‬‬
‫הורדת שורה אחת בסוף כל שורה שהודפסה‪ ,‬אפילו אם היא האחרונה בתוכנית‪1‬‬
‫‪o‬‬
‫אין להדפיס רווחים בהתחלת שורה ובסופה‪1‬‬
‫יש לבדוק את אתר ה‪ FAQ -‬של התרגיל לעיתים תכופות על מנת לקבל עדכונים על התרגיל‪1‬‬
‫בתרגיל זה מותר להשתמש בפונקציות מהספרייה ‪ stdio.h‬בלבד (בלי ‪ clrscr‬ו‪1)delay-‬‬
‫‪‬‬
‫הגשה אלקטרונית בבודדים היא דרך אתר הקורס‪ 1‬הגיש קובץ ‪ zip( hw3.zip‬ולא פורמט אחר (!)‬
‫כגון ‪ 1)rar‬השם של קובץ חייב להיות באנגלית ללא רווחים‪ 1‬אין דרישות נוספות לשם הקובץ‪ ,‬כלומר‬
‫גם ‪ sharon.zip‬מקובל מבחינת המערכת‪ 1‬הקובץ יכיל בתוכו רק את הקבצים הבאים (לא לעשות ‪zip‬‬
‫על התיקייה בה נמצאים הקבצים להגשה – במקרה כזה ההגשה לא תתקבל ע''י המערכת!)‪:‬‬
‫‪ o‬קובץ ‪ students.txt‬עם שמך‪ ,‬מספר תעודת הזהות וכתובת האימייל שלך‪1‬‬
‫‪ o‬קובץ פתרון ‪ hw3q1.c‬עבור שאלה ‪11‬‬
‫‪ o‬קובץ פתרון ‪ hw3q2.c‬עבור שאלה ‪12‬‬
‫‪ ‬השתמש ב‪ redirection-‬כדי להפנות את הפלט לקובץ טקסט‪1‬‬
‫‪ ‬יש להקפיד להגיש את כל הקבצים בדיוק עם השמות שמופיעים לעיל‪ 1‬הגשה שלא תעמוד בתנאי זה‬
‫לא תתקבל ע"י המערכת!‬
‫שימו לב לאתר ה‪ FAQ -‬של התרגיל‪ ,‬אשר מכיל עכדונים ותשובות לשאלות נפוצות‪ ,‬ויעודכן מפעם‬
‫לפעם‪ .‬חשוב להתעדכן לעיתים תכופות – זה יכול לחסוך הרבה בעיות‪ ,‬ונקודות שירדו בבדיקה‬
‫שכשלה‪ .‬בפרט‪ ,‬לפני פנייה למתרגל האחראי בדקו את הכתוב על מנת לחסוך לעצמכם זמן המתנה‬
‫לתשובה‪ ,‬שבדרך כלל תהיה הפניה ל‪ FAQ -‬בכל מקרה‪ .‬ניתן למצוא את ה‪ FAQ-‬בכתובת‪:‬‬
‫‪http://www.cs.technion.ac.il/~sarikr/HW3-faq.html‬‬
‫שאלה ‪ – 2‬קלט באורך בלתי מוגבל‬
‫בשאלה זו אסור להשתמש במערכים או מחרוזות (חומר שיילמד בהמשך הקורס)‪ .‬יש להניח‬
‫שהקלט חוקי ותקין‪ ,‬כלומר מתאים למבנה המפורט ובטווחים הנכונים‪.‬‬
‫חיפושית חדשה שהתגלתה יודעת ללכת בכל שנייה באחד מארבעת מהכיוונים הבאים‪ :‬למטה‪,‬‬
‫למעלה‪ ,‬ימינה או שמאלה (בשנייה אחת לא תיתכן תנועה באלכסון)‪ 1‬בנוסף מרחק תנועתה של‬
‫החיפושית בכל שנייה הוא בין ‪ 4‬ל‪ 8‬מטרים‪1‬‬
‫במעבדה לביולוגיה מעוניינים לחקור את החיפושית‪ 1‬לצורך כך מתעדים בכל שנייה את כיוון‬
‫תנועתה של החיפושית ואת המרחק שעשתה בשנייה זו‪1‬‬
‫בהתחלה‪ ,‬החיפושית נמצאת בקואורדינטה ‪ x=0,y=0‬ולאחר כל שנייה הקואורדינטה שבה היא‬
‫נמצאת מתעדכנת בהתאם לתנועתה‪ 1‬כאשר החיפושית זזה ימינה‪ ,‬מוסיפים לערך קואורדינטת‬
‫ה‪ x‬את מרחק הצעד‪ 1‬כאשר החיפושית נעה שמאלה‪ ,‬מחסירים מערך קואורדינטת ה‪ x‬את מרחק‬
‫הצעד‪ 1‬כאשר החיפושית זזה למעלה‪ ,‬מוסיפים לערך קואורדינטת ה‪ y‬את מרחק הצעד‪ 1‬כאשר‬
‫החיפושית נעה למטה‪ ,‬מחסירים מערך קואורדינטת ה‪ y‬את מרחק הצעד‪1‬‬
‫דוגמא לתנועה חוקית – בשנייה הראשונה החיפושית נעה בכיוון שמאלה ‪ 4‬מטרים‪ 1‬כעת‬
‫הקואורדינטה שבה היא נמצאת היא ‪x=-3,y=0‬‬
‫בשנייה השנייה היא נעה למעלה ‪ 8‬מטרים‪ 1‬כעת הקואורדינטה שבה היא נמצאת היא ‪1x=-3,y=9‬‬
‫ובשנייה השלישית היא נעה שוב פעם למעלה ‪ 6‬מטרים‪ 1‬כעת הקואורדינטה שבה היא נמצאת‬
‫היא ‪1x=-3,y=15‬‬
‫דוגמא לתנועה לא חוקית – בשנייה הראשונה החיפושית נעה בכיוון ימינה ‪ 14‬מטרים‪ 1‬תנועה זו‬
‫לא חוקית מכיוון שאסור לנוע יותר מ‪ 8‬מטרים בשנייה‪1‬‬
‫עוד דוגמא לתנועה לא חוקית – בשנייה הראשונה החיפושית נעה בכיוון ימינה ‪ 1‬מטרים ובכיוון‬
‫למטה ‪ 2‬מטרים‪ 1‬תנועה זו לא חוקית מכיוון שאסור לנוע באלכסון בשנייה אחת‪1‬‬
‫עליכם לכתוב תכנית שמקבלת כקלט‪ ,‬תו אחרי תו‪ ,‬כיוון ואורך צעד עבור כל שנייה‪1‬‬
‫הקלט בנוי במבנה הבא‪ :‬עבור כל שנייה תופיע תחילה אות שמתארת כיוון ולאחר מכן יופיע‬
‫מספר בין ‪ 4‬ל‪ 8‬המתאר אורך צעד‬
‫אות שמתארת כיוון יכולה להיות רק אחת מהאותיות ‪ l,r,u,d‬כאשר ‪ l‬מסמלת תנועה שמאלה‪r,‬‬
‫מסמלת תנועה ימינה‪ u,‬מסמלת תנועה למעלה ו‪ d‬מסמלת תנועה למטה‪1‬‬
‫הקלט מסתיים באות ‪ x‬קטנה‪1‬‬
‫דוגמא לקלט חוקי‪:‬‬
‫‪l9u3d2u5d8x‬‬
‫הסבר‪ -‬בשנייה הראשונה החיפושית נעה שמאלה ‪ 8‬מטרים‪ 1‬בשנייה השנייה החיפושית נעה‬
‫למעלה ‪ 4‬מטרים‪ 1‬בשנייה השלישית החיפושית נעה למטה ‪ 2‬מטרים‪ 1‬בשנייה הרביעית‬
‫החיפושית נעה למעלה ‪ 5‬מטרים ובשנייה החמישית החיפושית נעה למטה ‪ 9‬מטרים‪1‬‬
‫פלט‪:‬‬
‫התוכנית תדפיס ‪ 3‬שורות שונות במבנה‬
‫ב=‪, y‬א=‪beetle location is x‬‬
‫ג ‪maximal x displacement is‬‬
‫ד ‪maximal y displacement is‬‬
‫כאשר‪:‬‬
‫‪ 11‬א זה קואורדינטת ה‪ x‬של החיפושית לאחר סיום הצעדים‬
‫‪ 12‬ב זה קואורדינטת ה‪ y‬של החיפושית לאחר סיום הצעדים‬
‫‪ 14‬ג זה קואורדינטת ה‪ x‬המקסימלית בערך מוחלט של החיפושית לאחר סיום הצעדים‪1‬‬
‫‪ 13‬ד זה קואורדינטת ה‪ y‬המקסימלית בערך מוחלט של החיפושית לאחר סיום הצעדים‪1‬‬
‫‪-‬בסיום כל שורה‪ ,‬כולל האחרונה‪ ,‬יש לרדת שורה (ע"י ‪)\n‬‬
‫הערות‪:‬‬
‫‪‬‬
‫הניחו כי החיפושית עושה לפחות צעד אחד‬
‫‪‬‬
‫יש להניח כי הקלט תקין‪ ,‬כלומר מבנה הקלט הוא אות אחת בדיוק ומספר יחיד עבור כל‬
‫צעד‪ 1‬בנוסף‪ ,‬יש להניח כי התו ‪ x‬מופיע בסוף‪1‬‬
‫‪‬‬
‫אין צורך לבדוק תקינות קלט‪1‬‬
‫דוגמת הרצה‪:‬‬
‫עבור הקלט‬
‫‪l9u3d2u5d8x‬‬
‫הפלט הצפוי הוא‬
‫‪beetle location is x=-9, y=-2‬‬
‫‪maximal x displacement is 9‬‬
‫‪maximal y displacement is 6‬‬
‫הסבר‪-‬‬
‫בסיום תנועתה החיפושית הגיעה לקואורדינטה ‪1x=9,y=-2‬‬
‫בציר ‪ ,x‬החיפושית הגיעה במהלך תנועתה לקואורדינטה ‪ x=9‬ולכן קואורדינטת ה‪ x‬המקסימלית‬
‫בערך מוחלט הוא ‪19‬‬
‫בציר ‪ ,y‬החיפושית הגיעה במהלך תנועתה לקואורדינטה ‪ y=6‬ולכן קואורדינטת ה‪ y‬המקסימלית‬
‫בערך מוחלט הוא ‪16‬‬
‫דוגמא נוספת‪:‬‬
‫עבור הקלט‬
‫‪r9l8l9l3r5l0x‬‬
‫הפלט הצפוי הוא‬
‫‪beetle location is x=-6, y=0‬‬
‫‪maximal x displacement is 11‬‬
‫‪maximal y displacement is 0‬‬
‫הסבר‪-‬‬
‫בסיום תנועתה החיפושית הגיעה לקואורדינטה ‪1x=-8,y=0‬‬
‫בציר ‪ ,x‬החיפושית הגיעה במהלך תנועתה לקואורדינטה ‪ x=-12‬ולכן קואורדינטת ה‪x‬‬
‫המקסימלית בערך מוחלט הוא ‪112‬‬
‫בציר ‪ ,y‬החיפושית לא נעה כלל‪ ,‬ולכן קואורדינטת ה‪ y‬המקסימלית בערך מוחלט הוא ‪14‬‬
‫שאלה ‪-1‬לולאות מקוננות‬
‫בשאלה זו אסור להשתמש במערכים או מחרוזות (חומר שיילמד בהמשך הקורס)‪ .‬יש להניח‬
‫שהקלט חוקי ותקין‪ ,‬כלומר מתאים למבנה המפורט ובטווחים הנכונים‪.‬‬
‫עליכם לכתוב תכנית הקולטת מספר שלם חיובי ‪1x‬‬
‫התכנית מדפיסה את מספר הספרות החוזרות יותר מפעם אחת ב‪ 1x‬לאחר ההדפסה יש לרדת‬
‫שורה (ע"י ‪1)\n‬‬
‫דוגמא‪:‬‬
‫עבור ‪ x=1993‬התכנית תדפיס ‪ 2‬מכיוון שהספרה השנייה מימין מופיעה יותר מפעם אחת וגם‬
‫הספרה השלישית מימין מופיעה יותר מפעם אחת‪1‬‬
‫דוגמא נוספת‪:‬‬
‫עבור ‪ x=123‬התכנית תדפיס ‪ 4‬מכיוון שכל הספרות מופיעות בדיוק פעם אחת‪1‬‬
‫דוגמא נוספת‪:‬‬
‫עבור ‪ x=1122‬התכנית תדפיס ‪ 3‬מכיוון שכל הספרות יותר מפעם אחת‪1‬‬
‫רמזים‬
‫‪‬‬
‫תחילה כיתבו קוד העובר על כל הספרות של המספר הנקלט‪1‬‬
‫עשו זאת ע"י לולאה יחידה‪ 1‬לאחר מכן היעזרו בקוד זה כדי לפתור את השאלה‪1‬‬
‫‪‬‬
‫הוסיפו הדפסות ביניים זמניות (שאותם תימחקו לפני הגשת התרגיל) כדי לוודא שהקוד‬
‫שלכם עובד בצורה תקינה‪1‬‬
‫‪‬‬
‫הפתרון מכיל לולאה מקוננת אחת (סה"כ ‪ 2‬לולאות) לדוגמא‪:‬‬
‫{)‪While( exp1‬‬
‫‪…..‬‬
‫‪…..‬‬
‫{) ‪While( exp2‬‬
‫‪…..‬‬
‫‪….‬‬
‫}‬
‫‪….‬‬
‫…‬
‫}‬
‫הערה‬
‫‪‬‬
‫יש להניח כי הקלט תקין‪1‬‬