63
ףףף ףףףף

חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

קרן כליף

Page 2: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

2 © Keren Kalif

Page 3: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

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

3 © Keren Kalif

Page 4: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

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

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

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

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

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

4 © Keren Kalif

Page 5: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

5 © Keren Kalif

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

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

Page 6: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

6 © Keren Kalif

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

נשמר

Page 7: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

sum=0הגדר 1.

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

temp=Xהגדר 3.

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

sumהצג את 5.

7 © Keren Kalif

הרצה יבשה:

sum = 0

X = 472

temp = 472

sum = 2sum = 9sum = 13

temp = 47temp = 4temp = 0

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

עליו

Page 8: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

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

שהוכנס(.

8 © Keren Kalif

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

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

או לצאת

Page 9: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

9 © Keren Kalif

Page 10: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

Xקלוט מספר 2.

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

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

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

10 © Keren Kalif

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

counter = 0

sum = 0

X = 7

sum = 7sum = 9

counter = 1counter = 2

X = 2 X = 1-

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

3C

Page 11: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

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

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

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

חיבור וכד'(

11 © Keren Kalif

Page 12: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

newNum = 0הגדר 1.

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

temp = Xהגדר 3.

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

newNumהצג את 5.

12 © Keren Kalif

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

המספר"...

הרצה יבשה:

newNum = 0

X = 123

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

newNum = 03newNum = 032newNum = 0321

Page 13: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

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

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

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

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

13 © Keren Kalif

Page 14: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

14 © Keren Kalif

Page 15: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

newNum = 0הגדר 1.

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

temp = Xהגדר 3.

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

newNumהצג את 5.

15 © Keren Kalif

הרצה יבשה:

newNum = 0

X = 123

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

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

Page 16: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

מאות וכד'

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

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

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

16 © Keren Kalif

Page 17: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

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

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

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

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

17 © Keren Kalif

הרצה יבשה:

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

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

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

Page 18: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

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

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

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

18 © Keren Kalif

Page 19: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

19 © Keren Kalif

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

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

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

Page 20: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

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

temp=Xהגדר 3.

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

newNum והוסף אותה ל- locationהכפל את הספרה פי 1.

10 פי locationהכפל 2.

tempקצץ ספרה ימנית מ- 1.

newNumהצג את 5.

20 © Keren Kalif

הרצה יבשה:

location = 1

X = 258

newNum = 0

temp = 258

newNum = 8newNum = 28

location = 10location = 100

temp = 25 temp = 2 temp = 0

Page 21: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

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

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

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

כאשר מתחילים דווקא מהמספר השני21 © Keren Kalif

Page 22: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

22 © Keren Kalif

Page 23: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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.23 © 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 24: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

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

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

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

24 © Keren Kalif

Page 25: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

25 © Keren Kalif

Page 26: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

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

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

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

maxDigit = tempעדכן: 1.

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

maxDigitהצג את 5.

26 © Keren Kalif

הרצה יבשה:

num = 387

temp = 8

maxDigit = 7

num = 38num = 3num = 0

maxDigit = 8

temp = 3

Page 27: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

בו.

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

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

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

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

אשר יגמרו גם לו הספרות.27 © Keren Kalif

Page 28: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

28 © Keren Kalif

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

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

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

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

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

Page 29: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

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

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

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

29 © Keren Kalif

Page 30: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

30 © Keren Kalif

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

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

המבוקשת

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

1

Page 31: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

Xקלוט מספר 1.

counter=0הגדר 2.

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

31 © Keren Kalif

הרצה יבשה:

X = 3

counter = 0

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

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

counter = 1counter = 2counter = 3

* * *

Page 32: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

Xקלוט מספר 1.

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

32 © Keren Kalif

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

כוללXלהיות

הרצה יבשה:

X = 3

i = 1i = 2i = 3

* * *

Page 33: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

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

33 © Keren Kalif

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

iהצג את ◦

Page 34: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

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

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

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

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

34 © Keren Kalif

Page 35: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

עוד...

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

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

35 © Keren Kalif

Page 36: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

יוצג המלבן הבא:5 ורוחב 3למשל עבור גובה * * * * *

* * * * * * * * * *

פעמים 3נשים לב שיש פה תהליך מרכזי שחוזר על עצמו והוא הדפסת שורה

בכל הדפסת שורה יש תהליך שחוזר על עצמו והואהדפסת כוכבית אחת ולבסוף ירידת שורה.

36 © Keren Kalif

Page 37: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

37 © Keren Kalif

תהליך שחוזר על heightעצמו

פעמים

בתוך התהליך המרכזי, ישנו תהליך נוסף שחוזר

פעמיםwidthעל עצמו

Page 38: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

height ו- widthקלוט 1.

:height...1 בטווח iעבור 2.)a עבורj 1 בטווח...width:

.iהדפס כוכבית

)bרד שורה

38 © Keren Kalif

הרצה יבשה:

width = 3

height = 2

*

i = 1

j = 1

* ** * *

i = 2

j = 2j = 3

jהספירה של מתחילה מההתחלה

Page 39: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

יש לקלוט מהמשתמש אורך בסיס של משולש ולהציג משולשישר-זוית של כוכביות, מוצמד לשמאל, שבסיסו כגודל שנקלט.

יודפס המשולש הבא:4למשל, עבור בסיס בגודל ** ** * ** * * *

פעמים והוא 4נשים לב שיש פה תהליך מרכזי שחוזר על עצמו הדפסת שורה. העובדה שאורך השורות שונה אינה משנה!

בכל הדפסת שורה יש תהליך שחוזר על עצמו והוא הדפסתכוכבית אחת ולבסוף ירידת שורה.

39 © Keren Kalif

Page 40: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

מאחר ובכל שורה כמות שונה של כוכביות, ננסה למצואאת החוקיות, ולכן נצייר את הטבלה הבאה:

:ניתן לזהות קשר בין מספר הכוכביות למספר השורהמספר הכוכביות הוא כמספר השורה

40 © Keren Kalif

# כוכביותבשורה

# שורה

1 1

2 2

3 3

4 4

5 5

** ** * ** * * ** * * * *

Page 41: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

41 © Keren Kalif

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

פעם. i למעשה מייצג את מספר

השורה שאנחנו כרגע מציירים.פעולה זו קובעת כמה כוכביות

יודפסו. מיצג i, מאחר ו- iבמקרה זה

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

Page 42: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

basisקלוט 1.

:basis...1 בטווח iעבור 2.)a עבורj 1 בטווח...i:

.iהדפס כוכבית

)bרד שורה

42 © Keren Kalif

הרצה יבשה:

basis = 3

*

i = 1

j = 1

*** *

*

i = 2

j = 2j = 3

jהספירה של מתחילה

מההתחלה ורצה המעודכןiעד

i = 3

Page 43: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

יש לקלוט מהמשתמש אורך בסיס של משולש ולהציגמשולש ישר-זוית של כוכביות, מוצמד לשמאל, שבסיסו

כגודל שנקלט, אבל הבסיס למעלה. יודפס המשולש הבא:4למשל, עבור בסיס בגודל

* * * ** * ** * *

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

משנה!

43 © Keren Kalif

: כל פלט תמיד יוצג מלמעלה למטההגבלה .כלומר, חובה עלינו להתחיל לצייר מהשורה

הכוכביות עד האחרונה עם 4הראשונה עם .כוכבית אחת

Page 44: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

מאחר ובכל שורה כמות שונה של כוכביות, ננסה למצואאת החוקיות, ולכן נצייר את הטבלה הבאה:

ניתן לזהות שמספר הכוכביות מהווה סדרה יורדת, החל.1מגודל הבסיס עד

.44לכן ננסה למספר את השורות באופן שונה © Keren Kalif

# כוכביותבשורה

# שורה

5 1

4 2

3 3

2 4

1 5

* * * * ** * * ** * ** * *

# כוכביותבשורה

# שורה

5 5

4 4

3 3

2 2

1 1

Page 45: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

45 © Keren Kalif

קטן בכל iהפעם ערכו של basisסיבוב: החל מערכו של

.1עד שהוא מגיע להיות

Page 46: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

הרצה יבשה:

basisקלוט 1.

:basis...1 בטווח iעבור 2.)a עבורj 1 בטווח...i:

.iהדפס כוכבית

)bרד שורה

46 © Keren Kalif

basis = 3

*

i = 3

j = 1

***

* *

i = 1

j = 2j = 3

i = 2

Page 47: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

.יש לקלוט את רוחבו העליון של טרפז ואת רוחבו התחתון.ניתן להניח כי הרוחב העליון קצר מהרוחב התחתון.יש לצייר טרפז בהתאם לרוחבים שנקלטו:דוגמא

נצייר את הטרפז הבא:7 ורוחב תחתון 4עבור רוחב עליון ◦* * * * * * * * * * * * * * * * * * * * * *

וכך עד שיש שורה 5 כוכביות, בשניה 4כלומר, בשורה הראשונה ◦ כוכביות.7עם

נשים לב שציור הכוכביות בכל שורה אינו בהכרח מתחיל מתחילת ◦השורה!

47 © Keren Kalif

Page 48: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

בשורה. הדרך היא לצייר רווחים )תו שאינו נראה אך מקדם את

המיקום( לפני ציור הכוכביות.

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

48 © Keren Kalif

---*-*-*-*--*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*

---****--*****-*************

Page 49: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

,ניתן לראות שכל שורה מורכבת מכמות כלשהי של רווחיםואז זוגות של כוכבית+רווח, פרט לכוכבית האחרונה, שאין

מימינה רווח לצורך הכלליות, נצייר גם ליד הכוכבית האחרונה רווח )לא

ישנה את התצוגה על המסך מאחר ורווח הוא תו שאינו נראה(

49 © Keren Kalif

---*-*-*-*--*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*

---*-*-*-*---*-*-*-*-*--*-*-*-*-*-*-*-*-*-*-*-*-*-

Page 50: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

נצייר טבלה שבנוסף לכמות הצמדים של כוכבית+רווחבכל שורה, מציינת כמה רווחים יש לצייר בתחילת השורה

50 © Keren Kalif

---*-*-*-*---*-*-*-*-*--*-*-*-*-*-*-*-*-*-*-*-*-*-

הצגת הפלט הוא תמיד מלמעלה למטה, ומשמאל לימין, לכן עלינו להקפיד על ציור הרווחים בתחילת

.כל שורה

צמדים של #כוכבית + רווח

רווחים #בשורה

# שורה

4 3 1

5 2 2

6 1 3

7 0 4

Page 51: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

51 © Keren Kalif

צמדים של #כוכבית + רווח

רווחים #בשורה

# שורה

4 3 1

5 2 2

6 1 3

7 0 4

---*-*-*-*---*-*-*-*-*--*-*-*-*-*-*-*-*-*-*-*-*-*-

צמדים של #כוכבית + רווח

רווחים #בשורה

# שורה

4 3 4

5 2 5

6 1 6

7 0 7

העמודות 2סכום השמאליות הינו

כגודל הרוחב התחתון

נזהה כי כמות הרווחים היא:

buttom - line

Page 52: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

52 © Keren Kalif

בתוך התהליך המרכזי שחוזר על עצמו )הדפסת שורה(, יש שני

תהליכים: - הדפסת רווחים1- הדפסת צמדים של כוכבית+רווח2

צמדים של #כוכבית + רווח

רווחים #בשורה

# שורה

4 3 4

5 2 5

6 1 6

7 0 7

:buttom=7 ו- top=4למשל עבור

---*-*-*-*---*-*-*-*-*--*-*-*-*-*-*-*-*-*-*-*-*-*-

Page 53: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

topקלוט מהמשתמש 1.

buttomקלוט מהמשתמש 2.

:top...buttom בטווח iעבור 3.)a עבורj 1 בטווח... buttom-i:

צייר רווח1.

:i...1 בטווח jעבור 1. צייר כוכבית ורווח1.

צייר ירידת שורה2.

53 © Keren Kalif

הרצה יבשה:

top = 4

i = 4

j = 1

i = 6

j = 3j = 2

i = 5

buttom = 7

*__ _ _ *_*_*__ _ *_*_*_*_*__ *_ *_*_*_*_*_*_*_ *_*_*_*_*_

i = 7

j = 4j = 5

Page 54: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

מספרים והצג כמה ספרות מופיעות 2קרא מהמשתמש בשניהם

:דוגמאות מופיעות בשניהם3 ו- 7, כי הספרות 2 יוצג 7839 ו- 1734עבור ◦ מופיעה בשניהם3 כי הספרה 1 יוצג 33 ו- 112233עבור ◦

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

שהספרה טרם הופיעה בראשון כדי לא לבדוק פעמיים. המספרים.2( נבדוק האם היא מופיעה ב- 0-9עבור כל ספרה )2.

יותר פשוטה2אסטרטגיה

54 © Keren Kalif

Page 55: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

9 עד 0עבור כל אחת מהספרות:בדוק האם הספרה מופיעה במספר הראשון◦אם כן, בדוק האם מופיעה במספר השני◦counterאם כן, עדכן את ◦

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

שווה לספרה המבוקשת

55 © Keren Kalif

Page 56: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

יש לעבור על כל הספרות 9 ל- 0עבור כל ספרה בין המספר.

יש לעבור על כל ספרות 9 ל- 0מאחר ועבור כל ספרה בין המספר, יש להשתמש בפעולת הקיצוץ שהורסת את

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

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

משתנה שתפקידו להעיד האם הספרה נמצאה במספר.56 © Keren Kalif

Page 57: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

57 © Keren Kalif

בדיקה האם הספרה מופיעה במספר הראשון

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

במספר שניאם אינה מופיעה במספר הראשון נעבור לבדוק את

הספרה הבאה

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

להמשיך לעבוד איתו בסיבוב הבא.

Page 58: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

58 © Keren Kalif

בדיקה האם הספרה מופיעה במספר השני

אם מופיעה גם במספר השני נגדיל את ה-

counter

אם אינה מופיעה גם במספר השני נעבור לבדוק את הספרה

הבאה

Page 59: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

59 © Keren Kalif

Page 60: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

מספרים ולהציג האם השני הוא תת-מספר 2יש לקלוט של הראשון

:דוגמאות יוצג "כן"23 ו- 1234עבור ◦ יוצג "לא"823 ו- 1234עבור ◦ יוצג "לא"144 ו- 1244עבור ◦

60 © Keren Kalif

Page 61: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

נגדיר את הספרה הימנית שלnum2 -כ current -כל עוד לא סיימנו לעבור על כל הספרות בnum1 ועדיין לא

כתת-מספר:num2זיהינו את :num1 היא הספרה הימנית של currentנבדוק האם ◦

אם כן: נזיז אתcurrent -להיות הספרה השמאלית הבאה ב num2 אחרת: נחזיר אתcurrent להיות הספרה הימנית של num2num1קצץ ספרה ימנית מ- ◦

-אם לא נותרו ספרות בnum2 משמע הוא תת-מספר של num1

אחרת, אינו תת-מספר

61 © Keren Kalif

הרצה יבשה של הרעיון הכללי:

num1 = 1234num2 = 23

current

num1 = 123num1 = 12אם לא נותרו ספרות ב-

num2 משמע הוא num1תת-מספר של

num1 = 1

Page 62: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

נגדיר את הספרה הימנית שלnum2 -כ current -כל עוד לא סיימנו לעבור על כל הספרות בnum1 ועדיין לא

כתת-מספר:num2זיהינו את :num1 היא הספרה הימנית של currentנבדוק האם ◦

אם כן: נזיז אתcurrent -להיות הספרה השמאלית הבאה ב num2 אחרת: נחזיר אתcurrent להיות הספרה הימנית של num2num1קצץ ספרה ימנית מ- ◦

-אם לא נותרו ספרות בnum2 משמע הוא תת-מספר של num1

אחרת, אינו תת-מספר

62 © Keren Kalif

הרצה יבשה של הרעיון הכללי:

num1 = 1234num2 = 53

current

num1 = 123num1 = 12num1 = 1num1 = 0

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

num2הזזת הסמן לתחילתו של מרמזת שיש לשמור את ערכו המקורי

, ולכן יהיה שימוש num2של במשתנה עזר

: כיתבו את הרעיון בכתיבה תרגילפורמאלית

Page 63: חשיבה תכנותית – חלק 3 בקרת זרימה: לולאות

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

63© Keren Kalif