Computer Programming in C – Fall 2012

22
1 Computer Programming in C – Fall 2012 1 Computer Programming Fall 2012 31.10.2011 ללללל1

description

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

Transcript of Computer Programming in C – Fall 2012

Page 1: Computer Programming in C – Fall 2012

1 Computer Programming in C – Fall 20121

ComputerProgramming

Fall 2012

31.10.2011

1תרגול

Page 2: Computer Programming in C – Fall 2012

אתר הקורס•http://www.cs.bgu.ac.il/~prog121באתר הקורס מופיעים:•הודעות חשובות מצוות הקורס יתפרסמו תחת •

announcementsassignmentsעבודות יתפרסמו תחת • previousמבחנים משנים קודמות יפורסמו תחת •

examsgradesציונים לעבודות יפורסמו תחת • forum שאלות על העבודות ניתן לשאול תחת •

2

Page 3: Computer Programming in C – Fall 2012

עבודות

10 עבודות )בערך כל 6במהלך הקורס יהיו •ימים תהיה הגשת עבודה(.

ביחידים.העבודות יוגשו •

בקשות לדחיית העבודה )עקב מילואים, או •למרצי הקורס מחלה( יש להגיש להפנות

בלבד!

3

Page 4: Computer Programming in C – Fall 2012

מטרת התרגול – פיתוח חשיבה אלגוריתמית

אלגוריתם•

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

אלגוריתם צריך להיות נכון כדי למלא את ייעודו•רצוי שיהיה גם יעיל )חסכוני במשאבים(•

4

Page 5: Computer Programming in C – Fall 2012

פתרון בעיות – שלבי עבודה

כאשר מוצגת בפנינו בעייה שעלינו לפתור, למשל, •חיבור שני מספרים, נכתוב אלגוריתם כללי לפתרונה.

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

נבצע בדיקה ידנית כדי לראות שהאלגוריתם נכון.•

5

Page 6: Computer Programming in C – Fall 2012

6

פתרון בעיות – שלבי עבודה )המשך(

הגדרת משתנים

פלט למסך

פלט למסך

קלטביטוי חשבוני

הערה

Page 7: Computer Programming in C – Fall 2012

1תרגיל מספר ומספר hh::mmכתבו אלגוריתים אשר מקבל זמן •

דקות offset. על האלגוריתים להוסיף offsetחיובי לזמן

לדוגמא•30::00 נקבל 180 ו- 30::21עבור –20::10 נקבל 199 ו-01::07עבור –

רמזים•( 2 = 24 % 26השתמשו באופרטור השארית % )למשל –offsetמספר הדקות הכולל שווה למספר הדקות ועוד –60מספר השעות להוספה שווה מספר הדקות הכולל חלקי –60מספר הדקות החדש שווה מספר הדקות הכולל שארית –

7

Page 8: Computer Programming in C – Fall 2012

פתרון•hours, minutes, offset, total_minutesהגדר משתנים:

בהתאמהoffset ו-hours, minutesנקלוט ––total_minutes minutes + offset–new hour hours + total_minutes / 60) % 24)–new minutes total_minutes % 60

נבדוק את נכונות האלגוריתים •נשתדל לכסות את כל המקרים כולל "מקרי קצה"–11 ו-21:09מקרה עבורו מספר הדקות עולה בלבד. למשל –51 ו- 21:09מקרה עבורו מספר הדקות מתאפס. למשל –52ו- 21:09 מקרה עבורו מספר הדקות עובר ל"סבב חדש". למשל –180ו- 21:09 מקרה עבורו השעה מתעגלת. למשל –

8

פתרון

Page 9: Computer Programming in C – Fall 2012

משפטי בקרה אם-אז

אלגוריתם פשוט, המקבל שני מספרים שלמים ומדפיס •את הגדול מביניהם יראה כך:

max ו num2,num1נגדיר משתנים –num2 ו-num1קלוט שני מספרים – אזיnum2 גדול מ-num1אם –

• num1 max

אחרת –•num2 max

maxהדפס את –

נבדוק את נכונות האלגוריתים•20 ו-60 למשל num2 < num1מקרה עבורו –67 ו-60 למשל num1 < num2מקרה עבורו –60 ו-60 למשל num2 = num1מקרה עבורו –

9

Page 10: Computer Programming in C – Fall 2012

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

את הגדול מביניהם

10

Page 11: Computer Programming in C – Fall 2012

פתרוןnum1, num2, num3, maxהגדר משתנים: – בהתאמה num3, ו-num1, num2נקלוט –num1 max אזי num1 > num2אם –num2 max אחרת– num3 max אזי num3 > maxאם – maxהדפס את –

נאמת את נכונות האלגוריתם• עבור 3 עבור התנאי הראשון כפול 3מקרים שונים. 9סדר גודל של –

{,1,2,2{,}2,1,3{,}2,1,1{,}2,1,2{,}2,2,3{,}2,2,1{,}2,2,2}השני: {1,2,2,}

–{1,2,3}

11

Page 12: Computer Programming in C – Fall 2012

3תרגיל מספר

כתוב תכנית שמקבלת מספר שלם חיובי ובודקת •שהמספר מורכב מספרות בסדר עולה ומדפיסה

הודעה מתאימה. דוגמאות:•489 is ok•364 is not ok

12

Page 13: Computer Programming in C – Fall 2012

פתרוןnum, digit, prev_digitהגדר משתנים: 1.

numקלוט מספר ל-2.

.3prev_digit 10

בצע:num>0כל עוד 4.

4.1.digit num % 10

4.2.num / 10 num

, וסיים” not ok“ אזי: הדפס:digit > prev_digitאם .4.3

prev_digit digitאחרת: .4.4

(4)חזור ל-

"ok. הדפס: "5

5, 489 ,364 נאמת את נכונות האלגוריתם:

13

Page 14: Computer Programming in C – Fall 2012

4תרגיל

כתוב תכנית שמקבלת מספר שלם חיובי ומחזירה את •המספר שהוא היפוך ספרותיו

לדוגמה:•5732 יתקבל עבור הקלט 2375• 52010 או למשל גם עבור 5201 יתקבל עבור 1025•

)מתעלמים מהאפסים העודפים במקרה זה(

Page 15: Computer Programming in C – Fall 2012

פתרוןnum. קלוט מספר חיובי ל-1

0sum .2

. בצע:3

sum+num%10sum .3.1

num/10num .3.2

וסיים sum הדפס num=0 אם 3.3.

(3)חזור ל-sum*10sum . אחרת: 3.4

Page 16: Computer Programming in C – Fall 2012

16

5תרגיל מספר

כתבו אלגוריתם המקבל כקלט מספר טבעי )שלם • ומחזיר כפלט האם המספר 1שגדול מאפס( וגדול מ-

הזה הוא ראשוני. נקרא ראשוני אם 1תזכורת: מספר טבעי שגדול מ-•

.1הוא מתחלק אך ורק בעצמו וב-

Page 17: Computer Programming in C – Fall 2012

17

פתרון

num,divהגדר משתנים: 1שגדול מ- מספר שלםnum. קלוט ל-12 עם הערך div. אתחל משתנה 2 לא מחלק את div וגם num קטן מ- div. כל עוד 3mבצע

div הוסף אחד ל- .3.1, אזי num שווה ל-div. אם 4

הוא ראשוניnumהחזר: .4.1. אחרת,5

אינו ראשוני numהחזר: .5.1

5, 6נאמת את נכונות האלגוריתם:

Page 18: Computer Programming in C – Fall 2012

18

שיפורים אפשריים לאלגוריתם הנ"ל

. לרוץ עד למחצית המספר.1. לרוץ עד השורש הריבועי של המספר.2

Page 19: Computer Programming in C – Fall 2012

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, . . .

.

Page 20: Computer Programming in C – Fall 2012

20

פתרון.fn, fn-1, fn-2, n, iהגדר משתנים:

וסיים 1 הדפס n=1 וסיים אם 0 הדפס n=0. אם 1fn-2 .2 0 fn-1 .3 1

i .4 2 בצע:i <= n. כל עוד 5

5.1fn fn-1+fn-2

5.2.fn-2 fn-1

5.3.fn-1 fn

i. הוסף אחד ל 5.4(5)חזור ל-

fn. הדפס את 6

4, 1, 0נאמת את נכונות האלגוריתם:

Page 21: Computer Programming in C – Fall 2012

21

7תרגיל מספר

Page 22: Computer Programming in C – Fall 2012

22

פתרון.multiplier, result, d,last_result, i הגדר משתנים:

i .1 1result .2 0

last_result .3 -1multiplier .4 1

בצע:result – last_result| > /40.0001. כל עוד |55.1last_result result5.2. result result + multiplier/i 5.3. multiplier -1* multiplier 5.4.i i + 2

(5)חזור ל-result*4. הדפס את 6