Download as pdf or txt
Download as pdf or txt
You are on page 1of 5

‫מבוא למדעי המחשב מ'‪/‬ח' )‪ ,(234114/7‬סמסטר אביב ‪2013‬‬

‫תרגיל בית ‪1‬‬


‫מועד אחרון להגשה‪ :‬יום ג' ‪ 19/11/2013‬עד שעה ‪23:00‬‬

‫המתרגל האחראי על תרגיל זה‪ :‬אביב סגל‬


‫משרד‪ :‬טאוב ‪320‬‬
‫טלפון במשרד‪04-829-5652 :‬‬
‫‪segaviv@cs.technion.ac.il :E-­‐mail‬‬
‫שעת קבלה רגילה‪ :‬יום ג' ‪12:30-13:30‬‬
‫שעות קבלה מיוחדות לשאלות על התרגיל‪:‬‬
‫יום ה' ) ‪ ,10:30-11:30 (31.10.2013‬יום א' )‪15:30-16:30 (10.11.2013‬‬
‫אם שעות אלו אינן נוחות לכם ניתן לתאם פגישה בשעות אחרות‪.‬‬

‫הנחיות‪:‬‬
‫• הגשה בבודדים‪ .‬עליכם לכתוב את הפתרונות לבד ולהגיש ביחידים‪.‬‬
‫• קראו את השאלות בעיון לפני שתתחילו בפתרונן‪.‬‬
‫• מלבד מילואים‪ ,‬לא יתקבלו תרגילים אחרי מועד הגשה‪ .‬הגשה באיחור לאחר מועד הגשה‬
‫נחשבת כאי הגשה‪.‬‬
‫• כל יום מילואים = יום דחייה‪ .‬על מנת לקבל את הדחייה‪ ,‬עליכם לשלוח באי מייל או להשאיר‬
‫בתא הדואר של המתרגל האחראי לתרגיל זה )בקומה ‪ 5‬בבניין טאוב(‪ ,‬עותק של האישור‬
‫המראה שהייתם במילואים )טופס ‪ .(3010‬אם האישור יגיע אליכם בתאריך מאוחר‪ ,‬יש להודיע‬
‫על כך למתרגל אחראי על התרגיל‪.‬‬
‫• ערעורים ניתן להגיש עד שבוע לאחר קבלת הציון‪.‬‬
‫• לא ניתן לערער על תוצאות הבדיקה האוטומטית‪.‬‬
‫• שימו לב! הבדיקה הינה אוטומטית‪ ,‬ולכן הקפידו להדפיס בדיוק בפורמט שהתבקשתם‬
‫ובידקו עם ‪ DiffMerge‬את הפלט שלכם מול הפלט של הדוגמאות שקיבלתם‪.‬‬
‫‪ o‬השתמשו ב ‪ redirection‬כדי להפנות את הפלט לקובץ טקסט‪.‬‬
‫‪ o‬וודאו את האותיות הגדולות והקטנות לפי הדוגמאות וההסברים בתרגיל‪.‬‬
‫‪ o‬הורדת שורה אחת בסוף כל שורה שהודפסה‪ ,‬אפילו אם היא האחרונה בתוכנית‪.‬‬
‫‪ o‬אין להדפיס רווחים שלא התבקשתם להדפיס )בתחילת שורה או בסופה(‪.‬‬
‫• בתרגיל זה מותר להשתמש בפונקציות מהספרייה ‪ stdio.h‬בלבד‪ ,‬שנלמדו בהרצאות ובתרגולים‪.‬‬
‫ההגשה הינה אלקטרונית ובבודדים דרך אתר הקורס‪ .‬קובץ הההגשה יהיה מסוג ‪) zip‬ולא אף פורמט‬ ‫•‬
‫אחר( ויכיל בתוכו את הקבצים הבאים בלבד‪ ,‬ללא כל תיקיות‪:‬‬
‫‪ o‬קובץ ‪ students.txt‬עם שמך באנגלית‪ ,‬מספר תעודת הזהות וכתובת האי מייל שלך‪.‬‬
‫‪ o‬קובץ פתרון ‪ hw1q1.c‬עבור שאלה ‪.1‬‬
‫‪ o‬קובץ פתרון ‪ hw1q2.c‬עבור שאלה ‪.2‬‬
‫‪ o‬קובץ פתרון ‪ hw1q3.c‬עבור שאלה ‪.3‬‬
‫חובה לשמור את קוד אישור ההגשה שמקבלים מהמערכת לאחר שמגישים‪ ,‬עד לסיום הקורס‪.‬‬ ‫•‬
‫יש להקפיד להגיש את כל הקבצים בדיוק עם השמות שמופיעים לעיל‪ .‬הגשה שלא תעמוד בתנאי זה‬ ‫•‬
‫לא תתקבל ע"י המערכת! אם המערכת לא מקבלת את התרגיל שלכם‪ ,‬חפשו את הפתרון לבעיה‬
‫באתר הקורס תחת הכפתור ‪.FAQ‬‬
‫תרגיל זה עשוי להבדק גם ידנית‪ .‬יושם דגש מיוחד על אינדנטציה נכונה ושמות משתנים‬ ‫•‬
‫משמעותיים‪.‬‬
‫שאלה ‪1‬‬
‫בשאלה הזו עליכם לכתוב תוכנית שמזהה ביצוע פעולה חשודה בחשבון בנק‪.‬‬
‫התוכנית תקבל רשימה של פעולות שנעשו בחשבון הבנק )הפקדות ומשיכות( ואם לפחות בפעולה אחת‬
‫הועבר סכום כסף הגדול פי ‪ x‬מהממוצע החשבון יסווג כחשוד‪.‬‬

‫התוכנית תקלוט תחילה את המספר ‪) x‬שבר( ותוודא שהוא חיובי‪ .‬במידה והוא לא חיובי תודפס הודעת‬
‫שגיאה והתוכנית תאפשר למשתמש להכניס ערך אחר‪.‬‬
‫לאחר מכן‪ ,‬התוכנית תקבל את רשימת הפעולות שהתבצעו בחשבון כסדרה של מספרים שלמים‬
‫המציינים את ההפקדות והמשיכות שנעשו לאחרונה בחשבון‪ .‬מספר חיובי מציין הפקדת כסף בחשבון‬
‫ומספר שלילי מציין משיכת כסף מהחשבון‪ .‬המספר אפס יתקבל בסוף הרשימה ויציין את סופה‪.‬‬
‫ניתן להניח שכל המספרים ברשימה הם מספרים שלמים בלבד‪.‬‬
‫לבסוף על התוכנית להדפיס את המאזן בחשבון )בהנחה שלפני תחילת הפעולות המאזן היה אפס(‪ ,‬את‬
‫ממוצע סכומי הפעולות )הערכים המוחלטים( שהתבצעו בחשבון ולהדפיס האם התבצעה פעולה חשודה‬
‫בחשבון אם לפחות באחת מהפעולות הסכום היה יותר מפי ‪ x‬מהממוצע‪ .‬במידה ולא התבצעה פעולה‬
‫חשודה תודפס הודעה מתאימה )כמו בדוגמא(‪.‬‬
‫במידה ולא התבצעו פעולות בחשבון החשבון לא ייחשב כחשוד‪.‬‬
‫יש להדפיס את הממוצע עם שתי ספרות אחרי הנקודה העשרונית‪.‬‬

‫יש להקפיד שהפלט של התוכנית שלכם ייראה בדיוק כמו דוגמת ההרצה )שימו לב לרווחים וירידות‬
‫שורה(‪.‬‬

‫מקרי הרצה לדוגמה‪:‬‬

‫‪Enter a positive number: -3.0‬‬


‫‪Invalid number. Please enter again: 0.0‬‬
‫‪Invalid number. Please enter again: 1.707‬‬
‫‪Enter the account activity: 234 -142 -321 1000 257 -800 0‬‬
‫‪Account balance: 228‬‬
‫‪Average amount: 459.00‬‬
‫!‪Suspicious account‬‬
‫‪  ‬‬

‫ממוצע הסכומים )האבסולוטיים( של הפעולות שבוצעו הוא ‪ 459.00‬ולכן הסכום המקסימלי שניתן למשוך‬
‫או להפקיד בלי לעורר חשד הוא ‪ .459.0  *  1.707  =  783.513‬מאחר ויש פעולות עם סכום אבסולוטי גבוה‬
‫יותר ) ‪ (-­‐800 ,1000‬החשבון ייחשב כחשוד‪.‬‬

‫‪Enter a positive number: 1.5‬‬


‫‪Enter the account activity: 1900 -3000 2234 -1225 0‬‬
‫‪Account balance: -91‬‬
‫‪Average amount: 2089.75‬‬
‫‪No suspicious activity detected.‬‬
‫‪  ‬‬

‫במקרה זה כל הסכומים היו מתחת ל ‪ 2089.75*1.5=3134.625‬ולכן לא זוהתה פעילות חשודה בחשבון‪.‬‬


‫כדי להדפיס מספר ממשי עם דיוק של ‪ x‬ספרות אחרי הנקודה יש לכתוב‪:‬‬

‫;)>‪printf("%.xf", <real number‬‬

‫למשל‪ ,‬כדי להדפיס עם דיוק של ‪ 2‬ספרות אחרי הנקודה‪:‬‬

‫;)‪printf("%.2f", 2.87473‬‬

‫והמספר שיודפס הוא‪.2.87 :‬‬


‫שאלה ‪2‬‬
‫בשאלה זו עליכם לכתוב תוכנית המקבלת כקלט רצף תווים באורך לא מוגבל‪.‬‬
‫כאשר התו שנקרא הוא אות אם המספר האחרון שזוהה בקלט מתחלק ב ‪ 3‬או שלא זוהה עדיין מספר‬
‫בקלט התוכנית תדפיס את האות במרחק ‪ 3‬אותיות קדימה מהאות שנקלטה‪.‬‬
‫אם המספר האחרון שזוהה בקלט לא מתחלק ב ‪ ,3‬התוכנית תדפיס את האות במיקום ‪ 3‬אותיות אחורה‬
‫מהאות שנקלטה‪.‬‬
‫אם נקלטה אות גדולה תודפס אות קטנה‪ ,‬ואם נקלטה אות קטנה תודפס אות גדולה‪.‬‬
‫הקידוד מעגלי כלומר האות הבאה אחרי ‪ z‬היא ‪ ,a‬והאות הקודמת ל ‪ a‬היא ‪.z‬‬

‫לדוגמא‪ ,‬אם המספר האחרון בקלט מתחלק ב ‪ 3‬ונקלטת האות ‪ a‬תודפס האות ‪ D‬ואם נקלטת האות ‪Y‬‬
‫תודפס האות ‪.b‬‬
‫אם המספר האחרון בקלט לא מתחלק ב ‪ 3‬ונקלטת האות ‪ a‬תודפס האות ‪ X  ‬ואם נקלטת האות ‪ Y‬תודפס‬
‫האות ‪.v‬‬

‫כל תו אחר שאינו אות ואינו ספרה יודפס כפי שהוא‪ .‬ספרות לא יודפסו‪.‬‬
‫ניתן להניח שכל המספרים בקלט חיוביים )לא יופיעו מספרים שליליים או אפס בקלט(‪.‬‬
‫התוכנית מסיימת את קליטת הקלט עם קבלת התו ‪ ) EOF‬מתקבל ב ‪ Windows‬ע"י הקשת ‪ Ctrl+Z‬וב‬
‫‪ Mac‬ע"י הקשת ‪ Ctrl+D‬ואח"כ ‪.(Enter‬‬

‫דוגמת הרצה‪:‬‬

‫‪ABcd14%defg |1|36 Zzx 35Zzx ABC.‬‬

‫הפלט יהיה‪:‬‬

‫‪deFG%ABCD || cCA wWU xyz.‬‬

‫‪  ‬‬ ‫‪  ‬‬
‫שאלה ‪3‬‬
‫בתרגיל הזה עליכם לכתוב תוכנית המדפיסה סמיילי‪.‬‬
‫הסמיילי שיודפס יהיה מורכב מריבוע )הראש( ובתוכו שתי עיניים ופה‪.‬‬
‫התוכנית תקלוט תחילה את גודל הצלע של הריבוע ותוודא שהוא גדול או שווה ל ‪ .6‬יש לאפשר למשתמש‬
‫להמשיך להכניס מספרים עד שמתקבל גודל תקין‪.‬‬
‫לאחר מכן‪ ,‬התוכנית תקלוט את העמודה שבה תצויר העין השמאלית‪ .‬העין הימנית תצויר באופן סימטרי‬
‫מימין לעין השמאלית‪ .‬לכן‪ ,‬יש לוודא שהעמודה שנקלטה אכן נמצאת בחצי השמאלי וגדולה ממש מאפס‪.‬‬
‫שימו לב‪ :‬במידה והתקבל אורך אי זוגי עבור הריבוע העמודה האמצעית אינה חוקית )ראו דוגמא(‪.‬‬
‫יש לאפשר להמשיך להכניס מספרים עד לקבלת עמודה חוקית‪.‬‬
‫לאחר מכן התוכנית תקלוט ‪ 3‬תווים )הראשון עבור הראש‪ ,‬השני עבור העיניים והשלישי עבור הפה(‪.‬‬
‫יש להתעלם מכל סוגי הרווחים בקליטת התווים‪.‬‬
‫התוכנית תדפיס ריבוע בגודל שנקלט‪ ,‬בשורה השלישית מלמעלה יודפסו העיניים לפי העמודה שנקלטה‬
‫ובשורה השלישית מלמטה יודפס הפה בין העמודות של העיניים )לא כולל‪ ,‬כמו בדוגמא(‪.‬‬
‫בתרגיל זה אין לרדת שורה לאחר הדפסת השורה האחרונה‪.‬‬

‫מקרה הרצה לדוגמה‪:‬‬

‫‪Enter the size of the head: 5‬‬


‫‪Invalid size. Try again: 9‬‬
‫‪Enter the left eye's column: 4‬‬
‫‪Invalid column. Try again: 0‬‬
‫‪Invalid column. Try again: 2‬‬
‫_ ^ * ‪Enter three chars:‬‬
‫*********‬
‫*‬ ‫*‬
‫^ *‬ ‫* ^‬
‫*‬ ‫*‬
‫*‬ ‫*‬
‫*‬ ‫*‬
‫* ___ *‬
‫*‬ ‫*‬
‫*********‬

You might also like