מבוא למדעי המחשב 234111
Transcription
מבוא למדעי המחשב 234111
234111מבוא למדעי המחשב סמסטר חורף תשע"ו תרגיל בית 2 כתב ואחראי :ישראל גוטר gisrael@cs.technion.ac.il הגשה :יחידים בלבד .הגשה אלקטרונית בלבד ,באמצעות אתר הקורס. הוראות הגשה :בהתאם למתואר במדריך להכנת תרגילי בית ,כפי שמפורסם באתר הקורס, ליד תרגילי הבית. תאריך אחרון להגשה :יום שלישי 23:55 15.12.2015 הקפידו על שמות הקבצים ,כפי שמפורט במשימות השונות. בהצלחה ! הנושא העיקרי בתרגיל זה :טיפוס תווי .מערך חד מימדי .לולאה .לולאות מקוננות. משימה ) hw2q1.c ( 1 מספר שלם חיובי ייקרא מאוזן balancedאם מספר המופעים של כל ספרה אשר מופיעה בו הוא כפולה של ערכה של הספרה .למשל – אם מופיעה בו הספרה 9אזי היא מופיעה בו מספר פעמים שהוא כפולה של ,9למשל – 18פעמים 54 ,פעמים ,אפשר גם 0פעמים .במספר מאוזן לא תופיע כלל הספרה .0 כתבו תוכנית אשר תבקש ולאחר מכן תקלוט מהמשתמש מספר שלם אי שלילי .מובטח שהמספר גדול מ0- ואינו מכיל אפסים מובילים מצד שמאל .בסוף המספר מקישים במקלדת על > <Enterכאשר מזינים במקלדת. התוכנית תבדוק אם המספר הוא מאוזן ותציג הודעה בהתאם. שימו לב שהמספר הוא שלם כלשהו שאינו חסום בערכו ועל כן יכול להיות גדול ביותר. לא בהכרח ניתן לייצג אותו באמצעות intאו ,unsigned longואפילו לא את מספר הספרות שלו, 1 ©כל הזכויות שמורות שגם הוא יכול להיות גדול ביותר. נתונות 3דוגמאות של קלט ושל פלט. חובה להקפיד על פורמט מדויק כמו בדוגמאות .בפרט הקפידו על רווחים שמופיעים ועל ירידת שורה. משימה ) hw2q2.c ( 2 נגדיר מילה :רצף של תו אחד או יותר .מילה בהקשר זה אינה בהכרח מכילה רק תווי א"ב ,אלא יכולה להכיל כל תו אשר יש לו תצוגה רגילה .תווים כמו רווח ,ירידת שורה TAB ,וכו' – אינם יכולים להופיע במילה. מילה תיקרא פלינדרום אם ניתן לקרוא אותה באותה צורה משמאל לימין או מימין לשמאל. לדוגמה : 34abcba43 מילה של תו בודד היא פלינדרום. מילה תיקרא פלינדרום אדיש אותיות אם היא פלינדרום כאשר מתעלמים מהבדלים בין אותיות גדולות וקטנות. למשל 34abcBA43אינה פלינדרום ,אבל אם מתעלמים מהבדלים בין אותיות גדולות וקטנות אזי מילה זו היא כן פלינדרום. טקסט הוא רצף של מילים שמופיעות בשורה אחת כאשר בין המילים מופיע תו רווח אחד או יותר .בנוסף גם לפני המילה הראשונה יכול (לא חייב) להופיע תו רווח אחד או יותר ,ובהתאם – גם אחרי המילה האחרונה. בסוף הטקסט יורדים שורה. טקסט ייקרא פלינדרומי אדיש אותיות אם כל מילה שמופיעה בו היא פלינדרום אדיש אותיות. במשימה זו עליכם לכתוב תוכנית אשר תבקש ולאחר מכן תקלוט מהמשתמש טקסט. התוכנית תבדוק אם הטקסט הוא פלינדרומי אדיש אותיות ותציג הודעה בהתאם. אם הטקסט לא מכיל כלל מילים אזי הוא ייחשב כפלינדרומי אדיש אותיות. ניתן להניח שמילה בודדת אינה ארוכה יותר מ – 25תווים (מספר גמיש .יכול להשתנות בעתיד). מספר המילים בטקסט אינו חסום ויכול להיות גדול ביותר .אין להניח שום הנחה על אורך שורה. נתונות 3דוגמאות של קלט ושל פלט. חובה להקפיד על פורמט מדויק כמו בדוגמאות .בפרט הקפידו על רווחים שמופיעים ועל ירידת שורה. 2 ©כל הזכויות שמורות משימה 3 סעיף א ( ) hw2q3a.c כתבו תוכנית אשר תבקש ולאחר מכן תקלוט מהמשתמש סדרה של מספרים שלמים כלשהם אשר שונים מ.0- ניתן להניח שניתן לייצג אותם באמצעות .intבסוף הסדרה מופיע 0אשר אינו נחשב ערך בסדרה. מובטח שבסדרה לא מופיעים יותר מ – 1000מספרים (גמיש ,יכול להשתנות). התוכנית תבדוק כמה שלשות של מספרים בסדרה מקיימות שאחד המספרים מתוכן הוא הסכום של שני המספרים האחרים. למשל 0 24 השלשה 6 4 4 6 2 2מקיימת את הדרישה כי 2 + 4 == 6 שאר השלשות 2 6 24 2 4 24 4 6 24 אינן מקיימות דרישה זו. לכן – סה"כ – שלשה אחת. שימו לב שייתכן שבסדרה אין בכלל שלשות ,כלומר ,יש פחות מ 3-מספרים .במקרה כזה התשובה היא .0 נתונות 3דוגמאות של קלט ושל פלט. חובה להקפיד על פורמט מדויק כמו בדוגמאות .בפרט הקפידו על רווחים שמופיעים ועל ירידת שורה. 3 ©כל הזכויות שמורות סעיף ב ( ) hw2q3b.c בסעיף זה אנו נדרשים לקלוט סדרת מספרים כמו בסעיף א ,באותן ההנחות. הפעם התוכנית תבדוק לכמה שלשות של מספרים בסדרה ישנו סכום שהוא השני בגודלו מבין כל הסכומים האפשריים של שלשות בסדרה .ייתכן גם שאין כלל שלשות כאלה .זה קורה כאשר לכל השלשות ישנו אותו הסכום או שיש רק שלושה מספרים – שלשה אחת ,או שאין בכלל שלשות – יש פחות מ 3-מספרים. התוכנית תציג הודעה בהתאם. דרישה :התוכנית צריכה להיות יעילה ,עד כמה שניתן ,מבחינת שימוש במקום בזכרון. רמז – ניתן לתת כאן פתרון שהוא יעיל יותר מאשר הפתרון בסעיף א. נתונות 3דוגמאות של קלט ושל פלט. חובה להקפיד על פורמט מדויק כמו בדוגמאות .בפרט הקפידו על רווחים שמופיעים ועל ירידת שורה. משימה ) hw2q4.c ( 4 מספר שלם חיובי ייקרא ראשוני אם הוא מתחלק ב 1-ובעצמו בלבד. 1נחשב גם כן ראשוני 2 .הוא המספר הראשוני הזוגי היחיד. כתבו תוכנית אשר תבקש ותקלוט 2מספרים שלמים חיוביים . m n ניתן להניח n <= m <= 50 התוכנית תציג טבלה שבה יש שורת כותרת ומתחתיה שורות שמתאימות לכל אחד מן הערכים השלמים שנמצאים בתחום nעד ( mסה"כ m-n+1שורות). השורה הראשונה מתאימה עבור . nהשורה השניה מתאימה עבור n+1וכך הלאה. באותו האופן הטבלה מכילה עמודת כותרת מצד שמאל ואחריה מימין ישנן עוד עמודות שמתאימות לכל אחד מן הערכים השלמים שנמצאים בתחום nעד ( mסה"כ m-n+1עמודות). העמודה הראשונה מתאימה עבור . nהעמודה השניה מתאימה עבור n+1וכך הלאה. ביחד עם שורת הכותרת ועם עמודת הכותרת אנו מקבלים טבלת מספרים בגודל )(m-n+2) * (m-n+2 4 ©כל הזכויות שמורות שורת הכותרת מכילה מקום ראשון ריק מצד שמאל ולאחריו משמאל לימין מופיעים כל המספרים מ – n ועד .mאותו הדבר לגבי עמודת הכותרת – מלמעלה למטה. עבור איבר בטבלה אשר עבורו בשורת הכותרת כתוב iובעמודת הכותרת כתוב jנקבל את מספר המספרים הראשוניים אשר נמצאים בתחום ])[min(i,j) .. max(i,j למשל ,עבור j==3 i==1נקבל 3כי בתחום 1..3יש 3מספרים ראשוניים. גם עבור j==1 i==3נקבל אותו הדבר. שימו לב שעבור i==jאנחנו ,למעשה ,בודקים האם iהוא ראשוני והערך שיהיה במיקום הרלוונטי בטבלה יהיה 1או 0בהתאם. דוגמה : עבור m==5 n==2נקבל 5 4 3 2 3 2 2 1 2 2 1 1 2 3 1 0 1 2 4 1 1 2 3 5 שימו לב שהטבלה היא סימטרית כלפי האלכסון הראשי.: דרישות תצוגה : כל העמודות מיושרות .אין רווחים בתחילת שורה או בסוף שורה. כל איבר בטבלה יוצג בפורמט ” “%5dוללא כל רווח נוסף .כלומר – מספרים באותה שורה יוצגו בזה אחר זה בפורמט ”. “%5d נתונה 3דוגמא של קלט ושל פלט. חובה להקפיד על פורמט מדויק כמו בדוגמא .בפרט הקפידו על רווחים שמופיעים ועל ירידת שורה. 5 ©כל הזכויות שמורות