Computer Programming in C – Fall 2012

Post on 03-Jan-2016

49 views 0 download

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

1 Computer Programming in C – Fall 20121

ComputerProgramming

Fall 2012

31.10.2011

1תרגול

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

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

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

2

עבודות

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

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

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

בלבד!

3

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

אלגוריתם•

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

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

4

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

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

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

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

5

6

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

הגדרת משתנים

פלט למסך

פלט למסך

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

הערה

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

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

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

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

7

פתרון•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

פתרון

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

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

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

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

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

10

פתרון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

3תרגיל מספר

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

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

12

פתרון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

4תרגיל

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

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

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

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

0sum .2

. בצע:3

sum+num%10sum .3.1

num/10num .3.2

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

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

16

5תרגיל מספר

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

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

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

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נאמת את נכונות האלגוריתם:

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=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נאמת את נכונות האלגוריתם:

21

7תרגיל מספר

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