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

30
ההההה04 הההה ההההה: הההההה2 ףףף ףףףף

Upload: phyre

Post on 04-Feb-2016

127 views

Category:

Documents


19 download

DESCRIPTION

הרצאה 04 בקרת זרימה: לולאות 2. קרן כליף. ביחידה זו נלמד:. לולאות מקוננות הצגת הפתרון תרשים זרימה כתיבת הפתרון בפסאודו-קוד. ציור מלבן. יש לקלוט מהמשתמש גובה ורוחב ולהציג מלבן של כוכביות לפי הכמויות שנקלטו למשל עבור גובה 3 ורוחב 5 יוצג המלבן הבא: * * * * * * * * * * - PowerPoint PPT Presentation

TRANSCRIPT

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

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

כליף קרן

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

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

2 © Keren Kalif

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

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

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

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

* * * * * * * * * *

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

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

ציור מלבן

3 © Keren Kalif

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

תרשים זרימה

4 © Keren Kalif

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

פעמים

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

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

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

height ו- widthקלוט 1.

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

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

)bרד שורה

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

5 © Keren Kalif

הרצה יבשה:

width = 3

height = 2

*

i = 1

j = 1

* ** * *

i = 2

j = 2j = 3

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

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

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

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

** ** * ** * * *

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

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

הדפסת כוכבית אחת ולבסוף ירידת שורה.

ציור משולש מוצמד לשמאל

6 © Keren Kalif

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

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

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

ציור משולש מוצמד לשמאל: ניתוח הצורה

7 © Keren Kalif

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

# שורה

1 1

2 2

3 3

4 4

5 5

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

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

תרשים זרימה

8 © Keren Kalif

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

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

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

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

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

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

basisקלוט 1.

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

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

)bרד שורה

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

9 © Keren Kalif

הרצה יבשה:

basis = 3

*

i = 1

j = 1

*** *

*

i = 2

j = 2j = 3

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

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

i = 3

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

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

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

* * * ** * ** * *

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

משנה!

ציור משולש מוצמד לשמאל שבסיסו למעלה

10 © Keren Kalif

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

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

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

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

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

.לכן ננסה למספר את השורות באופן שונה

ציור משולש הפוך: ניתוח הצורה

11 © Keren Kalif

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

# שורה

5 1

4 2

3 3

2 4

1 5

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

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

# שורה

5 5

4 4

3 3

2 2

1 1

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

תרשים זרימה

12 © Keren Kalif

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

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

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

הרצה יבשה:

basisקלוט 1.

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

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

)bרד שורה

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

13 © Keren Kalif

basis = 3

*

i = 3

j = 1

***

* *

i = 1

j = 2j = 3

i = 2

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

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

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

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

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

ציור טרפז

14 © Keren Kalif

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

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

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

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

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

ציור טרפז: ניתוח הבעיה

15 © Keren Kalif

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

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

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

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

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

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

(2ציור טרפז: ניתוח הבעיה )

16 © Keren Kalif

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

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

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

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

(3ציור טרפז: ניתוח הבעיה )

17 © Keren Kalif

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

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

.כל שורה

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

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

# שורה

4 3 1

5 2 2

6 1 3

7 0 4

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

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

(4ציור טרפז: ניתוח הבעיה )

18 © 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 19: הרצאה 04 בקרת זרימה: לולאות 2

תרשים זרימה

19 © Keren Kalif

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

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

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

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

# שורה

4 3 4

5 2 5

6 1 6

7 0 7

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

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

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

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

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

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

.iצייר רווח

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

)cצייר ירידת שורה

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

20 © Keren Kalif

הרצה יבשה:

top = 4

i = 4

j = 1

i = 6

j = 3j = 2

i = 5

buttom = 7

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

i = 7

j = 4j = 5

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

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

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

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

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

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

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

21 © Keren Kalif

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

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

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

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

הרעיון הכללי לפתרון

22 © Keren Kalif

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

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

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

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

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

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

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

23 © Keren Kalif

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

תרשים זרימה(1 )חלק

24 © Keren Kalif

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

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

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

הספרה הבאה

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

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

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

תרשים זרימה(2 )חלק

25 © Keren Kalif

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

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

counter

בכל מקרה בסוף נעבור לבדוק את הספרה הבאה

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

ובכתיבה פורמאלית num2 ו- num1קלוט 1.count=0הגדר 2.:9...0 בטווח iעבור 3.

.a בצעtemp=num1

.b הגדרfound=false

.c כל עודtemp>0 וגם found=false:.I אם ספרה ימנית שלtemp היא i:

.A בצעfound=true

.II קצץ ספרה ימנית שלtemp

.d אםfound=true:.I בצעtemp=num2

.II הגדרfound=false.III כל עודtemp>0 וגם found=false:

.A אם ספרה ימנית שלtemp היא i:

found=trueבצע 1(.B קצץ ספרה ימנית שלtemp

.IV אםfound=true:.A הגדל אתcount-1 ב

countהצג את 4.26 © Keren Kalif

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

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

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

האם מספר הוא תת-מספר במספר אחר

27 © Keren Kalif

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

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

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

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

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

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

הרעיון הכללי לפתרון

28 © Keren Kalif

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

num1 = 1234num2 = 23

current

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

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

num1 = 1

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

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

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

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

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

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

(2הרעיון הכללי לפתרון )

29 © Keren Kalif

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

num1 = 1234num2 = 53

current

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

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

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

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

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

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

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

30© Keren Kalif

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