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

‫מבוא למדעי המחשב – שפת ‪ ,)232112( C‬קיץ ‪2016‬‬
‫תרגיל בית ‪1‬‬
‫מועד להגשה‪:‬‬
‫יום ד' ‪ 10/8/2016‬בשעה ‪20:00‬‬
‫המתרגל האחראי על תרגיל זה‪ :‬איתי פרי‬
‫משרד‪ :‬טאוב ‪ , 213‬טכניון‬
‫‪[email protected] :E-mail‬‬
‫שעות הקבלה מופיעות באתר‬
‫חשוב לשמור את קוד‬
‫אישור ההגשה שמקבלים‬
‫מהמערכת כשמגישים!!‬
‫הוראות הגשה‪:‬‬
‫‪ ‬הגשה אלקטרונית בבודדים‪.‬‬
‫‪ ‬תרגיל שיוגש בזמן יקבל אוטומטית בונוס של ‪ 5‬נקודות‪.‬‬
‫‪ ‬תינתן הארכה אוטומטית של שלושה ימי עבודה (מלבד שישי ושבת) למאחרים‪ ,‬ללא בונוס‪.‬‬
‫‪ ‬ערעורים ניתן להגיש עד לתאריך המסומן בהודעה על מתן הציונים (כשבועיים לאחר קבלת הציון)‪.‬‬
‫במידה והערעור לא יתקבל תהיה הורדה אוטומטית של הבונוס (חמש נקודות) אם התקבל כזה‪.‬‬
‫‪ ‬ערעורים על הדפסות שגויות בפלט שלכם לא יתקבלו‪ .‬עליכם לבדוק את התוכניות שלכם עם‬
‫‪ DiffMerge‬לפני ההגשה‪.‬‬
‫הנחיות‪:‬‬
‫‪ ‬אנא קראו את השאלות בעיון לפני שתתחיל‪/‬י בפתרונן‪.‬‬
‫‪ ‬ניתן להניח כי הקלט תקין‪ ,‬אלא אם כן נאמר אחרת‪.‬‬
‫‪ ‬שימו לב! הבדיקה של השאלות תהיה אוטומטית‪ ,‬ולכן הקפידו מאוד להדפיס בדיוק בפורמט‬
‫המבוקש ולבדוק את הפלט שלכם מול הפלט של הדוגמאות שקיבלתם בעזרת ‪.DiffMerge‬‬
‫‪ o‬וודאו את נכונות האותיות הגדולות והקטנות בפלט לפי הדוגמאות וההסברים בתרגיל‪.‬‬
‫‪ o‬הורדת שורה אחת בסוף כל שורה שהודפסה‪ ,‬אפילו אם היא האחרונה בתוכנית‪.‬‬
‫‪ o‬אין להדפיס רווחים בהתחלת שורה ובסופה‪.‬‬
‫‪ ‬יש לבדוק את אתר ה‪ FAQ -‬של התרגיל לעיתים תכופות על מנת לקבל עדכונים על התרגיל‪.‬‬
‫‪ ‬בתרגיל זה מותר להשתמש בפונקציות מהספרייה ‪ stdio.h‬בלבד (בלי ‪ clrscr‬ו‪.)delay-‬‬
‫‪ ‬ההגשה האלקטרונית (בבודדים) היא דרך אתר הקורס‪ .‬הגישו קובץ ‪ zip( hw1.zip‬ולא פורמט אחר‬
‫כגון ‪ .)rar‬השם של הקובץ צריך להיות באנגלית ללא רווחים (אין דרישות נוספות על שם הקובץ)‪.‬‬
‫כלומר גם ‪ sharon.zip‬למשל מקובל מבחינת המערכת ‪.‬‬
‫הקובץ יכיל בתוכו רק את הקבצים הבאים (לא לעשות ‪ zip‬על התיקייה בה נמצאים הקבצים להגשה‪,‬‬
‫אלא עם הקבצים עצמם‪ ,‬במקרה כזה ההגשה לא תתקבל ע''י המערכת!)‪:‬‬
‫‪ o‬קובץ ‪ students.txt‬עם שמך‪ ,‬מספר תעודת הזהות שלך וכתובת האימייל שלך‪.‬‬
‫‪ o‬קובץ פתרון ‪ hw1q1.c‬עבור שאלה ‪.1‬‬
‫‪ o‬קובץ פתרון ‪ hw1q2.c‬עבור שאלה ‪.2‬‬
‫‪ ‬השתמש ב‪ redirection-‬כדי להפנות את הפלט לקובץ טקסט‪.‬‬
‫‪ ‬יש להקפיד להגיש את כל הקבצים בדיוק עם השמות שמופיעים לעיל‪ .‬הגשה שלא תעמוד בתנאי זה‬
‫לא תתקבל ע"י המערכת!‬
‫שימו לב לאתר ה‪ FAQ -‬של התרגיל‪ ,‬אשר מכיל עדכונים ותשובות לשאלות נפוצות‪ ,‬ויעודכן מפעם‬
‫לפעם‪ .‬חשוב להתעדכן לעיתים תכופות – זה יכול לחסוך הרבה בעיות‪ ,‬ונקודות שירדו בבדיקה‬
‫שכשלה‪ .‬בפרט‪ ,‬לפני פנייה למתרגלת האחראית בדקו את הכתוב על מנת לחסוך לעצמכם זמן‬
‫המתנה לתשובה‪ ,‬שבדרך כלל תהיה הפניה ל‪ FAQ -‬בכל מקרה‪ .‬ניתן למצוא את ה‪ FAQ-‬בכתובת‪:‬‬
‫‪https://docs.google.com/document/d/1vuNWVcXsnbwyiqAcsfwGk_7iamldDXXSp5lIqL_ri7I/e‬‬
‫‪dit?usp=sharing‬‬
‫שאלה ‪:1‬‬
‫בשאלה זו אסור להשתמש במבני תנאי (‪ ,)if, switch‬באופרטור הטרנרי (‪ )? :‬או בלולאות‪.‬‬
‫אסור להשתמש באופרטור מודולו (‪ .)%‬יש להניח שהקלט חוקי ותקין‪ ,‬כלומר מתאים למבנה‬
‫המפורט ובטווחים הנכונים‪ .‬בפרט‪ ,‬מובטח שכל המספרים אי‪-‬שליליים בשאלה הזו‪.‬‬
‫לייצוג מספרים עשרוניים נשתמש בקורס בטיפוס ‪( double‬אתם יכולים לנסות גם‬
‫להשתמש ב ‪ ,float‬ולהשוות את התוצאות עם תוצאות של שימוש ב ‪ .double‬יש מקרים‬
‫שבהם מודפסים מספרים שונים‪ ,‬כתוצאה משוני בדיוק של שני הטיפוסים‪ .‬שימו לב שאתם‬
‫מגישים בסוף עם הטיפוס ‪.)double‬‬
‫עליכם לכתוב תוכנית שמחשבת עבור המשתמש כמה נתונים על קנייה מסוימת שלו‪.‬‬
‫התוכנית קולטת מהמשתמש ‪ 4‬זוגות של מספרים‪ ,‬כל זוג מתייחס לסוג מוצר אחר‪ .‬המספר‬
‫הראשון בכל זוג מייצג את מספר היחידות שנקנו מהסוג הזה (מספר שלם)‪ ,‬והמספר השני בכל‬
‫זוג מייצג את העלות של יחידה אחת מהסוג הזה (מספר עשרוני)‪.‬‬
‫הקליטה מתבצעת ע"י הדפסת סוג המוצר בכל פעם (‪ C,B,A‬או ‪ )D‬ואחריו נקודתיים וירידת שורה‪.‬‬
‫הפלט של התוכנית הוא ‪ 3‬מספרים (כל זוג עוקב מופרד ע"י רווח‪ ,‬ויש ירידת שורה בסוף)‪.‬‬
‫המספר הראשון זה המחיר הכולל של הקנייה כולה (כלומר‪ ,‬כמה ישלם המשתמש עבור קנייה‬
‫כוללת כזו)‪ ,‬מספר זה צריך להיות מודפס כמספר עשרוני עם ‪ 2‬ספרות דיוק אחרי הנקודה‬
‫העשרונית‪ .‬המספר השני זה מספר היחידות הכולל של הקנייה‪ ,‬מספר זה צריך להיות מודפס‬
‫כמספר שלם (כלומר‪ ,‬בלי נקודה עשרונית)‪ .‬המספר השלישי זה המחיר הממוצע של יחידה‬
‫מסויימת בקנייה הזו‪ ,‬מספר זה צריך להיות מודפס כמספר עשרוני עם ‪ 2‬ספרות דיוק אחרי‬
‫הנקודה העשרונית‪.‬‬
‫הקלט והפלט צריכים להיות בהתאם לדוגמה הבאה ולדוגמאות שמופיעות באתר (הקלט‬
‫מהמשתמש צבוע באדום‪ ,‬הפלט של התוכנית בשחור)‪:‬‬
‫‪A:‬‬
‫‪11‬‬
‫‪B:‬‬
‫‪11‬‬
‫‪C:‬‬
‫‪11‬‬
‫‪D:‬‬
‫‪11‬‬
‫‪Results: 4.00 4 1.00‬‬
‫דוגמאות קבצי קלט ופלט תורידו מהאתר‪.‬‬
‫שאלה ‪:2‬‬
‫בשאלה זו אסור להשתמש במבני תנאי (‪ ,)if, switch‬באופרטור הטרנרי (‪ )? :‬או בלולאות‪.‬‬
‫אסור להשתמש באופרטור מודולו (‪ .)%‬יש להניח שהקלט חוקי ותקין‪ ,‬כלומר מתאים למבנה‬
‫המפורט ובטווחים הנכונים‪.‬‬
‫עליכם לכתוב תוכנית המקבלת ‪ 4‬אותיות אנגליות קטנות כתווים מהמקלדת (מובטח שהקלט תקין‪ ,‬מוכנס‬
‫ברצף ללא רווחים ועם "אנטר" בסוף)‪.‬‬
‫התוכנית מדפיסה כפלט ‪ 3‬שורות של מידע‪ :‬בשורה הראשונה מודפס הסכום של מיקומי ‪ 4‬אותיות הקלט‬
‫הנתונות‪ ,‬הוא מודפס כמספר שלם‪ .‬בשורה השנייה מודפסות ‪ 4‬אותיות אנגליות גדולות שמתאימות‬
‫לאותיות הקלט הקטנות (ללא רווחים ביניהן)‪ ,‬בשורה האחרונה מודפסת האות האנגלית הקטנה‬
‫שמיקומה בא"ב האנגלי שווה לסכום מיקומי ‪ 4‬אותיות הקלט הנתונות‪.‬‬
‫לצורך העניין‪ ,‬המיקום של '‪ 'a‬הוא ‪ ,0‬של '‪ 'b‬הוא ‪ ,1‬וכך הלאה‪ ,‬עד '‪ 'z‬שמיקומה הוא ‪( .25‬ובסוף יש‬
‫ירידת שורה)‪.‬‬
‫מובטח שסכום המקומות (שמודפס בשורה הראשונה) הוא קטן ממש מ ‪.26‬‬
‫הקלט והפלט צריכים להיות בהתאם לדוגמה הבאה ולדוגמאות שמופיעות באתר (הקלט‬
‫מהמשתמש צבוע באדום‪ ,‬הפלט של התוכנית בשחור)‪:‬‬
‫‪input:‬‬
‫‪abcd‬‬
‫‪Results:‬‬
‫‪6‬‬
‫‪ABCD‬‬
‫‪g‬‬
‫הסבר‪:‬‬
‫‪ 4‬אותיות הקלט הן‪:‬‬
‫‪ a )1‬שמיקומה בא"ב האנגלי הוא ‪0‬‬
‫‪ b )2‬שמיקומה בא"ב האנגלי הוא ‪1‬‬
‫‪ c )3‬שמיקומה בא"ב האנגלי הוא ‪2‬‬
‫‪ d )4‬שמיקומה בא"ב האנגלי הוא ‪3‬‬
‫ולפי כך ‪ 3‬שורות הקלט הן‪:‬‬
‫‪ )1‬סכום המיקומים ‪6=0+1+2+3‬‬
‫‪ )2‬האותיות האנגליות הגדולות המתאימות‪ABCD :‬‬
‫‪ )3‬האות האנגלית הקטנה שנמצאת במיקום ‪ 6‬בא"ב האנגלי‪g :‬‬
‫דוגמאות קבצי קלט ופלט תורידו מהאתר‪.‬‬
‫בהצלחה!‬