37
תתתת תתתתת: תתתתתת ףףף ףףףף

בקרת זרימה: לולאות

Embed Size (px)

DESCRIPTION

בקרת זרימה: לולאות. קרן כליף. ביחידה זו נלמד:. לולאות הצגת הפתרון תרשים זרימה כתיבת הפתרון בפסאודו-קוד. חישוב סכום ספרותיו של מספר. בהינתן מספר שלם חיובי כלשהו, נרצה למצוא את סכום ספרותיו דוגמאות: 347  3+4+7=14 2251  2+2+5+1=10. - PowerPoint PPT Presentation

Citation preview

Page 1: בקרת  זרימה: לולאות

בקרת זרימה: לולאות

כליף קרן

Page 2: בקרת  זרימה: לולאות

לולאותהצגת הפתרון תרשים זרימהכתיבת הפתרון בפסאודו-קוד

2 © Keren Kalif

ביחידה זו נלמד:

Page 3: בקרת  זרימה: לולאות

בהינתן מספר שלם חיובי כלשהו, נרצה למצוא את סכוםספרותיו

:דוגמאות◦347 3+4+7=14◦2251 2+2+5+1=10

חישוב סכום ספרותיו של מספר

3 © Keren Kalif

Page 4: בקרת  זרימה: לולאות

"תן ספרה ימנית" 7 347דוגמא: ◦

"קצץ ספרה ימנית"

34 347דוגמא: ◦0קיצוץ מספר חד ספרתי מחזיר את הערך ◦

אסטרטגיית הפעולה: לעבור על כל אחת מספרות המספרולהוסיף אותה לסכום

מאחר ובכל שלב יש לנו גישה רק לספרה הימנית ביותר, יהיה ◦עלינו לקצץ אותה כדי להגיע לספרה שלידה

כאשר נסיים לקצץ את כל הספרות )כלומר הערך שישאר לנו יהיה ◦(, נדע שסיימנו את העבודה0

חישוב סכום ספרותיו של מספר – ההוראות בהן מותר להשתמש

4 © Keren Kalif

מדוע לדעתכם יש את הפקודות "תן/קצץ ספרה ימנית", ואין

פעולות מקבילות עבור הספרה ?השמאלית

Page 5: בקרת  זרימה: לולאות

חישוב סכום ספרותיו תרשים זרימהשל מספר –

5 © Keren Kalif

Xנשים לב שערכו המקורי של נהרס

זוהי הנקודה בה אנו מחליטים האם לבצע את כל התהליך פעם נוספת, או לצאת

Page 6: בקרת  זרימה: לולאות

חישוב סכום ספרותיו תרשים זרימהשל מספר –

6 © Keren Kalif

Xבמקרה זה שמרנו את ערכו של X וכך ערכו המקורי של tempב-

נשמר

Page 7: בקרת  זרימה: לולאות

sum=0הגדר 1.

Xקלוט מספר לתוך 2.

temp=Xהגדר 3.

:temp > 0כל עוד 4.)a -תן ספרה ימנית מtemp -והוסף אותה ל sum)b -קצץ מtempספרה ימנית

sumהצג את 5.

כתיבה פורמאליתחישוב סכום ספרותיו של מספר –

7 © Keren Kalif

הרצה יבשה:

sum = 0

X = 472

temp = 472

sum = 2sum = 9sum = 13

temp = 47temp = 4temp = 0

שימוש במושג "כל עוד" מעיד על קטע שיש לחזור

עליו

Page 8: בקרת  זרימה: לולאות

יש לקלוט מספרים עדאשר יקלט מספר

שלילי. יש להציג את ממוצע המספרים )לא כולל המספר השלילי

שהוכנס(.

חישוב ממוצע

8 © Keren Kalif

זוהי הנקודה בה אנו מחליטים האם לבצע את כל התהליך פעם נוספת, או

לצאת

ניתן לחזור למעלה אך ורק לפעולה שהינה בדיקת

תנאי

Page 9: בקרת  זרימה: לולאות

חישוב ממוצע - מתוקן

9 © Keren Kalif

מה יקרה אם כבר במספר הראשון יוקלד ערך שלילי?

מדוע ניתן לחזור למעלה אך ורק לפעולה שהינה בדיקת תנאי?

על מנת לקדם את הלולאה לסיום!

נשים לב שבתצורה זו עלינו לשכפל את פעולת הקליטה

לפני ובתוך הלולאה

Page 10: בקרת  זרימה: לולאות

10 © Keren Kalif

(2חישוב ממוצע - מתוקן )

Page 11: בקרת  זרימה: לולאות

counter=0, sum=0הגדר 1.

Xקלוט מספר 2.

:X ≥ 0כל עוד 3.)a הוסף אתX -ל sum)b הגדל אתcounter -1 ב)c -קלוט מספר נוסף לX

:0 הוא counterאם ערכו של 4.)a"הצג: "לא הוקלדו מספרים חיוביים

אחרת: 5.)a הצג את תוצאת החישובsum/counter

חישוב ממוצע: כתיבה פורמאלית

11 © Keren Kalif

הרצה יבשה, למשל -: 2 1 7עבור

counter = 0

sum = 0

X = 7

sum = 7sum = 9

counter = 1counter = 2

X = 2 X = 1-

נשים לב: בכתיבה פורמאלית ניתן לחזור רק לקטע כתוב שוב בתור סעיף 2המתחיל ב"כל עוד", ולכן סעיף

3C

Page 12: בקרת  זרימה: לולאות

יש לייצר 123למשל, עבור 321את המספר

גם במקרה זה צריך לבודדאת כל אחת מהספרות ולכן

נשתמש בפעולות "תן/קצץ ספרה ימנית"

ניתן להשתמש גם בפעולותחשבון בסיסיות )כפל,

חיבור וכד'(

יצירת המספר ההופכי

12 © Keren Kalif

Page 13: בקרת  זרימה: לולאות

newNum = 0הגדר 1.

Xקלוט מספר לתוך 2.

temp = Xהגדר 3.

:temp > 0כל עוד 4.)a -תן ספרה ימנית מ temp -והוסף אותה מימין ל newNum)b -קצץ ספרה ימנית מtemp

newNumהצג את 5.

ובכתיבה פורמאלית

13 © Keren Kalif

נשים לב שכאשר מבקשים מאיתנו לייצר מספר, "הצמד ספרה לימין אין ברשותנו את הפעולה:

המספר"...

הרצה יבשה:

newNum = 0

X = 123

temp = 123temp = 12temp = 1temp = 0

newNum = 03newNum = 032newNum = 0321

Page 14: בקרת  זרימה: לולאות

כאשר רוצים להוסיף ספרה מימין למספר, כלומר להכניסספרת אחדות חדשה, יש לבצע את הפעולות הבאות:

)כדי לייצר מקום לספרת האחדות 10הכפל את המספר פי ◦החדשה(

הוסף את הספרה החדשה◦

3 נרצה להוסיף את הספרה 65דוגמא: עבור המספר :653מימין, כלומר כדי לייצר את מספר

◦65*10 = 650◦650 + 3 = 653

הוספת ספרה מימין למספר

14 © Keren Kalif

Page 15: בקרת  זרימה: לולאות

יצירת המספר - מתוקןההופכי

15 © Keren Kalif

Page 16: בקרת  זרימה: לולאות

newNum = 0הגדר 1.

Xקלוט מספר לתוך 2.

temp = Xהגדר 3.

:temp > 0כל עוד 4.)a הכפל את הערך שלnewNum 10 פי )b -תן ספרה ימנית מtemp -והוסף אותה ל newNum)c -קצץ ספרה ימנית מtemp

newNumהצג את 5.

ובכתיבה פורמאלית

16 © Keren Kalif

הרצה יבשה:

newNum = 0

X = 123

temp = 123temp = 12temp = 1temp = 0

newNum = 30newNum = 32newNum = 321newNum = 3newNum = 320

Page 17: בקרת  זרימה: לולאות

כאשר מוסיפים ספרה משמאלו של מספר יש לקחתבחשבון איזה מיקום היא תופסת: אחדות / עשרות /

מאות וכד'

3 להוסיף את הספרה 47דוגמא: אם רוצים למספר 300משמאלו, למעשה יש להוסיף את הערך

◦47 + 300 = 347אם נרצה להוסיף ספרה נוספת משמאל, היא כבר תהייה ◦

במיקום של האלפים

הוספת ספרות משמאל למספר

17 © Keren Kalif

Page 18: בקרת  זרימה: לולאות

תוך כדי הוספת ספרות משמאלו: 724נייצר את המספר ◦4 2 7

0בהתחלה המספר יהיה4 נוסיף למספר את הערך

◦4*100 = 4*1 = 4 20נוסיף למספר את הערך

◦2*101 = 2*10 = 20 700נוסיף למספר את הערך

◦7*102 = 7*100 = 700 724המספר המתקבל הוא

הוספת ספרות משמאל למספר - דוגמא

18 © Keren Kalif

הרצה יבשה:

724המספר: 24המספר: 4המספר: 0המספר:

ניתן לזהות את החוקיות שהוספת ספרה משמאל היא למעשה חזקה

בכל 1, שגדלה ב- 10כלשהי של פעם

Page 19: בקרת  זרימה: לולאות

יש לקלוט מספר ולייצר מספר המכיל רק את הספרותשערכן זוגי

246 יווצר המספר 123467דוגמא: עבור המספר:הכלים העומדים לרשותינו הן הפעולות

"תן/קצץ ספרה ימנית" ◦פעולות חשבון◦בדיקה האם ערך הוא זוגי◦

במקרה זה עלינו להוסיף ספרות משמאלו של המספרהמיוצר

יצירת מספר המכיל רק את הספרות הזוגיות

19 © Keren Kalif

Page 20: בקרת  זרימה: לולאות

יצירת מספר המכיל רק את הספרות הזוגיות

20 © Keren Kalif

ייצור הערך המתאים להוספה למספר

רק locationנכפיל את במידה והוספנו ספרה,

כהכנת התשתית לספרה הבאה

Page 21: בקרת  זרימה: לולאות

location=1, newNum=0הגדר 1.

Xקלוט ערך לתוך 2.

temp=Xהגדר 3.

:temp > 0כל עוד 4.)a תן ספרה ימנית שלtemp:ואם זוגית בצע ,

.i הכפל את הספרה פיlocation -והוסף אותה ל newNum.ii הכפלlocation 10 פי

)b -קצץ ספרה ימנית מtemp

newNumהצג את 5.

ובכתיבה פורמאלית

21 © Keren Kalif

הרצה יבשה:

location = 1

X = 258

newNum = 0

temp = 258

newNum = 8newNum = 28

location = 10location = 100

temp = 25 temp = 2 temp = 0

Page 22: בקרת  זרימה: לולאות

מספרים הזהים בכמות הספרות שלהם, ולייצר 2יש לקלוט מספר חדש כך שהספרות בו הם מיזוג הספרות של שני

המספרים:ספרה ראשונה )משמאל( מהמספר הראשון וספרה שניה מהמספר ◦

השניספרה שלישית מהמספר הראשון וספרה רביעית מהמספר השני◦וכו'◦

:דוגמא3871 יש לייצר את המספר 81 ו- 37עבור המספרים ◦

:מאחר וניתן לבודד ספרות מימין אסטרטגיית הפעולה לשמאל, בניית המספר החדש תתבסס על הוספת ספרות

משמאל, כאשר מתחילים דווקא מהמספר השני

מיזוג ספרות של שני מספרים זהים באורכם

22 © Keren Kalif

Page 23: בקרת  זרימה: לולאות

תרשים זרימה

23 © Keren Kalif

Page 24: בקרת  זרימה: לולאות

num1קלוט מספר ל- 1.

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

newNum=0הגדר 3.

location=1הגדר 4.

:num2 > 0כל עוד 5.)a -בודד ספרה ימנית מnum2 -הכפל אותה ב ,location -והוסף ל

newNum)b הכפל אתlocation 10 פי)c -בודד ספרה ימנית מnum1 -הכפל אותה ב ,location -והוסף ל

newNum)d הכפל אתlocation 10 פי)e -קצץ ספרה ימנית מnum2)f -קצץ ספרה ימנית מnum1

newNumהצג את 6.

ובכתיבה פורמאלית

24 © Keren Kalif

הרצה יבשה:

num1 = 37

newNum = 0

location = 1

num2 = 81

newNum = 1newNum = 71

location = 10

newNum = 871newNum = 3871

location = 100

num1 = 3num1 = 0

num2 = 8num2 = 0

location = 1000location = 10000

Page 25: בקרת  זרימה: לולאות

.קלוט מהמשתמש מספר והצג את הספרה הגדולה ביותר

:דוגמאות4 יוצג 1234עבור ◦9 יוצג 8997עבור ◦2 יוצג 1212עבור ◦

אסטרטגיית הפעולה: נאתחל את המקסימום עם ערךהספרה הראשונה )הימנית( ונבודד כל פעם ספרה אחרת. אם הספרה הנוכחית גדולה מהספרה המקסימלית שראינו

עד כה, נעדכן אותה.

מציאת הספרה הגדולה ביותר

25 © Keren Kalif

Page 26: בקרת  זרימה: לולאות

26 © Keren Kalif

תרשים זרימה

Page 27: בקרת  זרימה: לולאות

numקלוט מהמשתמש מספר לתוך 1.

ואתחל אותה בספרה הימנית של maxDigitהגדר את 2.num

numקצץ ספרה ימנית מ- 3.

(:num>0 ספרות )numכל עוד נותרו ב- 4.)a -תן ספרה ימנית מnum ואחסן אותה בתוך temp)b אםtemp > maxDigit:

.i :עדכןmaxDigit = temp

)c -קצץ ספרה ימנית מnum

maxDigitהצג את 5.

ובכתיבה פורמאלית

27 © Keren Kalif

הרצה יבשה:

num = 387

temp = 8

maxDigit = 7

num = 38num = 3num = 0

maxDigit = 8

temp = 3

Page 28: בקרת  זרימה: לולאות

מספרים )שאינם בהכרח באותו האורך(, 2יש לקלוט ולהגיד לאיזה מספר יש יותר ספרות, וכמה ספרות יותר יש

בו.

:דוגמא 2 יש 1234 יש לאמר שבמספר 99 והמספר 1234עבור המספר ◦

ספרות יותר מאשר במספר השני.

:אסטרטגיית הפעולהנקצץ ספרות משני המספרים בו-זמנית עד אשר לאחד יגמרו ◦

הספרות. נתחיל לספור את כמות הספרות שיש לקצץ למספר שנותר עד ◦

אשר יגמרו גם לו הספרות.

זיהוי מספר יותר ארוך

28 © Keren Kalif

Page 29: בקרת  זרימה: לולאות

תרשים זרימה

29 © Keren Kalif

מאחר ובסוף יש להציג גם מי המספר שיש בו יותר ספרות יש צורך לשמור את

tempהמספרים המקוריים ולעבוד עם

כאשר מגיעים לפה בלפחות אחד מהמספרים כבר אין ספרות, לכן בוודאות

ניכנס מקסימום לאחת מהלולאות שסופרות, מבלי צורך לבדוק מהו המספר

שנותרו בו ספרות

Page 30: בקרת  זרימה: לולאות

נרצה לקלוט מספר מהמשתמש, ולהציג כוכביות בכמותשל המספר שנקלט

:הפעולות שעומדות לרשותינו הן"הדפס כוכבית אחת"◦פעולות חשבוניות◦

ניתן להבחין שבתרגיל זה יש תהליך שחוזר על עצמו, והואהצגת כוכבית.

צריך לדאוג שתהליך זה יקרה בדיוק כמות מסוימת שלפעמים

הצגת כמות כלשהי של כוכביות

30 © Keren Kalif

Page 31: בקרת  זרימה: לולאות

תרשים זרימה

31 © Keren Kalif

counter מכיל את כמות הכוכביות שהוצגו עד כה, 0ולכן בהתחלה מאותחל ל-

התהליך יחזור כל עוד לא הצגנו את כל כמות הכוכביות

המבוקשת

לאחר הצגת כוכבית, נעדכן ע"י הגדלתו ב- counterאת

1

Page 32: בקרת  זרימה: לולאות

Xקלוט מספר 1.

counter=0הגדר 2.

:counter < Xכל עוד 3.)aהצג כוכבית)b הגדל אתcounter -1 ב

ובכתיבה פורמאלית

32 © Keren Kalif

הרצה יבשה:

X = 3

counter = 0

המיוחד בדוגמא זו הוא שעם תחילת הלולאה, כבר ידועה כמות הסיבובים שהיא תבצע.

למקרה זה יש את הפורמט שמוצג בשקף הבא..

counter = 1counter = 2counter = 3

* * *

Page 33: בקרת  זרימה: לולאות

Xקלוט מספר 1.

:X...1 בטווח iעבור 2.)aהצג כוכבית

(2ובכתיבה פורמאלית )

33 © Keren Kalif

באופן 1 גדל ב-iבצורת כתיבה זו ערכו של עד שערכו מגיע 1אוטומטי בכל פעם, החל מ-

כוללXלהיות

הרצה יבשה:

X = 3

i = 1i = 2i = 3

* * *

Page 34: בקרת  זרימה: לולאות

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

זוהי למעשה בדיוק אותה בעיה כמו מקודם, רק הפעםבמקום להדפיס כוכבית, יש להדפיס מספר.

הצגת כל המספרים

34 © Keren Kalif

קלוט מספרX עבורi 1 בטווח...X:

iהצג את ◦

Page 35: בקרת  זרימה: לולאות

:נקפיד על פשטות הטקסט, ונשתמש במושגים הבאים– עבור תהליך שחוזר על עצמו כל עוד התנאי כל עוד <תנאי> ◦

מתקיים– עבור תהליך שחוזר על עצמו בטווח <התחלה>...<סוף> iעבור ◦

כמות ידועה של פעמים

– עבור ביצוע פעולות בעת קיום תנאי מסוייםאם <תנאי> אחרת ◦

נקפיד על כתיבה מדורגת )אינדנטציה( המשקפת אתמבנה התוכנית

כתיבה פורמלית - דגשים

35 © Keren Kalif

Page 36: בקרת  זרימה: לולאות

כאשר מספר הסיבובים אינו ידוע מראש, למשל כאשרתלויים בקלט של המשתמש כל פעם נשתמש במבנה "כל

עוד...

כאשר מספר הסיבובים ידוע עם תחילת הלולאה נשתמש בטווח...", שכן מבנה זה כולל בתוכו את iבמבנה "עבור

אתחול וקידום המונה

כללי אצבע לשאלות עם לולאות

36 © Keren Kalif

Page 37: בקרת  זרימה: לולאות

לולאותהצגת הפתרון תרשים זרימהכתיבת הפתרון בפסאודו-קוד

37© Keren Kalif

ביחידה זו למדנו: