1 / 22

Computer Programming in C – Fall 2012

Computer Programming Fall 2012. תרגול 1. 31.10.2011. Computer Programming in C – Fall 2012. 1. אתר הקורס. http://www.cs.bgu.ac.il/~prog121 באתר הקורס מופיעים: הודעות חשובות מצוות הקורס יתפרסמו תחת announcements עבודות יתפרסמו תחת assignments

Download Presentation

Computer Programming in C – Fall 2012

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ComputerProgramming Fall 2012 תרגול 1 31.10.2011 Computer Programming in C – Fall 2012 1

  2. אתר הקורס • http://www.cs.bgu.ac.il/~prog121 • באתר הקורס מופיעים: • הודעות חשובות מצוות הקורס יתפרסמו תחת announcements • עבודות יתפרסמו תחת assignments • מבחנים משנים קודמות יפורסמו תחת previous exams • ציונים לעבודות יפורסמו תחת grades • שאלות על העבודות ניתן לשאול תחת forum

  3. עבודות • במהלך הקורס יהיו 6 עבודות (בערך כל 10 ימים תהיה הגשת עבודה). • העבודות יוגשו ביחידים. • בקשות לדחיית העבודה (עקב מילואים, או מחלה) יש להגיש להפנות למרצי הקורס בלבד!

  4. מטרת התרגול – פיתוח חשיבה אלגוריתמית • אלגוריתם • דרך שיטתית (כלומר כזו שצעדיה מוגדרים היטב) לביצוע של משימה מסוימת, על נתונים, במספר סופי של צעדים (wikipedia). • אלגוריתם צריך להיות נכון כדי למלא את ייעודו • רצוי שיהיה גם יעיל (חסכוני במשאבים)

  5. פתרון בעיות – שלבי עבודה • כאשר מוצגת בפנינו בעייה שעלינו לפתור, למשל, חיבור שני מספרים, נכתוב אלגוריתם כללי לפתרונה. • דוגמה לאלגוריתם אשר מחבר שני מספרים: • נגדיר משתנים num2,num1 ו sum • קלוט שני מספרים שלמים לתוך num1 ו-num2 • השם num1 + num2 לתוך sum • הדפס את sum למסך • נבצע בדיקה ידנית כדי לראות שהאלגוריתם נכון.

  6. פתרון בעיות – שלבי עבודה (המשך) הערה הגדרת משתנים פלט למסך קלט ביטוי חשבוני פלט למסך

  7. תרגיל מספר 1 • כתבו אלגוריתים אשר מקבל זמן hh::mm ומספר חיובי offset. על האלגוריתים להוסיף offset דקות לזמן • לדוגמא • עבור 21::30 ו-180 נקבל 00::30 • עבור 07::01 ו-199 נקבל 10::20 • רמזים • השתמשו באופרטור השארית % (למשל 26 % 24 = 2) • מספר הדקות הכולל שווה למספר הדקות ועוד offset • מספר השעות להוספה שווה מספר הדקות הכולל חלקי 60 • מספר הדקות החדש שווה מספר הדקות הכולל שארית 60

  8. פתרון • פתרון הגדר משתנים: hours, minutes, offset, total_minutes • נקלוט hours, minutes ו-offset בהתאמה • total_minutesminutes + offset • new hourhours + total_minutes / 60) % 24) • new minutestotal_minutes % 60 • נבדוק את נכונות האלגוריתים • נשתדל לכסות את כל המקרים כולל "מקרי קצה" • מקרה עבורו מספר הדקות עולה בלבד. למשל 21:09 ו-11 • מקרה עבורו מספר הדקות מתאפס. למשל 21:09 ו-51 • מקרה עבורו מספר הדקות עובר ל"סבב חדש". למשל 21:09 ו-52 • מקרה עבורו השעה מתעגלת. למשל 21:09 ו-180

  9. משפטי בקרה אם-אז • אלגוריתם פשוט, המקבל שני מספרים שלמים ומדפיס את הגדול מביניהם יראה כך: • נגדיר משתנים num2,num1 ו max • קלוט שני מספרים num1 ו-num2 • אם num1 גדול מ-num2 אזי • num1max • אחרת • num2max • הדפס את max • נבדוק את נכונות האלגוריתים • מקרה עבורו num2 < num1 למשל 60 ו- 20 • מקרה עבורו num1 < num2 למשל 60 ו- 67 • מקרה עבורו num2 = num1 למשל 60 ו- 60

  10. תרגיל מספר 2 • כתבו אלגוריתם אשר מקבל שלושה מספרים ומחזיר את הגדול מביניהם

  11. פתרון • הגדר משתנים: num1, num2, num3, max • נקלוט num1, num2, ו-num3 בהתאמה • אם num1 > num2 אזי num1max • אחרתnum2max • אם num3 > max אזי num3max • הדפס את max • נאמת את נכונות האלגוריתם • סדר גודל של 9מקרים שונים. 3 עבור התנאי הראשון כפול 3 עבור השני: {2,2,2},{2,2,1},{2,2,3},{2,1,2},{2,1,1},{2,1,3},{1,2,2},{1,2,2}, • {1,2,3}

  12. תרגיל מספר 3 • כתוב תכנית שמקבלת מספר שלם חיובי ובודקת שהמספר מורכב מספרות בסדר עולה ומדפיסה הודעה מתאימה. דוגמאות: • 489 is ok • 364 is not ok

  13. פתרון • הגדר משתנים: num, digit, prev_digit • קלוט מספר ל-num • prev_digit 10 • כל עוד num>0 בצע: 4.1. digitnum % 10 4.2. num / 10  num 4.3. אם digit > prev_digit אזי: הדפס:“not ok” , וסיים 4.4. אחרת: prev_digitdigit (חזור ל-4) 5. הדפס: "ok" נאמת את נכונות האלגוריתם:364, 489, 5

  14. תרגיל 4 • כתוב תכנית שמקבלת מספר שלם חיובי ומחזירה את המספר שהוא היפוך ספרותיו • לדוגמה: • 2375 יתקבל עבור הקלט 5732 • 1025 יתקבל עבור 5201 או למשל גם עבור 52010 (מתעלמים מהאפסים העודפים במקרה זה)

  15. פתרון 1. קלוט מספר חיובי ל-num 0sum .2 3. בצע: sum+num%10sum .3.1 num/10num .3.2 .3.3 אם num=0 הדפס sum וסיים 3.4. אחרת: sum*10sum(חזור ל-3)

  16. תרגיל מספר 5 • כתבו אלגוריתם המקבל כקלט מספר טבעי (שלם שגדול מאפס) וגדול מ-1 ומחזיר כפלט האם המספר הזה הוא ראשוני. • תזכורת: מספר טבעי שגדול מ-1 נקרא ראשוני אם הוא מתחלק אך ורק בעצמו וב-1.

  17. פתרון הגדר משתנים: num,div 1. קלוט ל-num מספר שלםשגדול מ- 1 2. אתחל משתנה div עם הערך 2 3. כל עוד div קטן מ-num וגם div לא מחלק את mבצע 3.1. הוסף אחד ל- div 4. אם div שווה ל-num, אזי 4.1. החזר: num הוא ראשוני 5. אחרת, 5.1. החזר: num אינו ראשוני נאמת את נכונות האלגוריתם: 6, 5

  18. שיפורים אפשריים לאלגוריתם הנ"ל 1. לרוץ עד למחצית המספר. 2. לרוץ עד השורש הריבועי של המספר.

  19. תרגיל מספר 6 כתוב תכנית המקבלת כקלט מספר שלם n ומחשבת את האיבר המתאים בסדרת פיבונאצ'י: תזכורת: סידרת פיבונאצ'י מוגדרת באופן הבא: n=0, 0 n=1, 1 = fn אחרת, fn-1+fn-2 כלומר: n: 0, 1, 2, 3, 4, 5, 6, . . . fn: 0, 1, 1, 2, 3, 5, 8, . . . .

  20. פתרון הגדר משתנים: fn, fn-1, fn-2, n, i. 1. אם n=0 הדפס 0 וסיים אם n=1 הדפס 1 וסיים fn-2 .20 fn-1 .31 i .42 5. כל עוד i <= n בצע: 5.1 fn  fn-1+fn-2 5.2.fn-2  fn-1 5.3.fn-1  fn 5.4. הוסף אחד ל i (חזור ל-5) 6. הדפס את fn נאמת את נכונות האלגוריתם: 0, 1, 4

  21. תרגיל מספר 7

  22. פתרון הגדר משתנים: multiplier, result, d,last_result, i. i .11 result.20 last_result.3-1 multiplier .41 5. כל עוד |result – last_result| > /40.0001 בצע: 5.1 last_result  result 5.2. result  result + multiplier/i 5.3. multiplier  -1* multiplier 5.4.i  i + 2 (חזור ל-5) 6. הדפס את result*4

More Related