slide1
Download
Skip this Video
Download Presentation
הרצאה 04 בקרת זרימה: לולאות 2

Loading in 2 Seconds...

play fullscreen
1 / 30

הרצאה 04 בקרת זרימה: לולאות 2 - PowerPoint PPT Presentation


  • 121 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'הרצאה 04 בקרת זרימה: לולאות 2' - phyre


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide2
ביחידה זו נלמד:
  • לולאות מקוננות
  • הצגת הפתרון תרשים זרימה
  • כתיבת הפתרון בפסאודו-קוד
slide3
ציור מלבן
  • יש לקלוט מהמשתמש גובה ורוחב ולהציג מלבן של כוכביות לפי הכמויות שנקלטו
  • למשל עבור גובה 3 ורוחב 5 יוצג המלבן הבא:

* * * * *

* * * * *

* * * * *

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

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

בתוך התהליך המרכזי, ישנו תהליך נוסף שחוזר על עצמו width פעמים

slide5
ובכתיבה פורמאלית
  • קלוט width ו- height
  • עבור i בטווח 1...height:
    • עבור j בטווח 1...width:
      • הדפס כוכבית
    • רד שורה

הרצה יבשה:

width = 3

height = 2

i=1

i=2

j = 1

j = 2

j = 3

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

*

*

*

*

*

*

slide6
ציור משולש מוצמד לשמאל
  • יש לקלוט מהמשתמש אורך בסיס של משולש ולהציג משולש ישר-זוית של כוכביות, מוצמד לשמאל, שבסיסו כגודל שנקלט.
  • למשל, עבור בסיס בגודל 4 יודפס המשולש הבא:

*

* *

* * *

* * * *

  • נשים לב שיש פה תהליך מרכזי שחוזר על עצמו 4 פעמים והוא הדפסת שורה. העובדה שאורך השורות שונה אינה משנה!
  • בכל הדפסת שורה יש תהליך שחוזר על עצמו והוא הדפסת כוכבית אחת ולבסוף ירידת שורה.
slide7
ציור משולש מוצמד לשמאל: ניתוח הצורה
  • מאחר ובכל שורה כמות שונה של כוכביות, ננסה למצוא את החוקיות, ולכן נצייר את הטבלה הבאה:
  • ניתן לזהות קשר בין מספר הכוכביות למספר השורה: מספר הכוכביות הוא כמספר השורה

*

* *

* * *

* * * *

* * * * *

slide8
תרשים זרימה

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

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

פעולה זו קובעת כמה כוכביות יודפסו.

במקרה זה i, מאחר ו- i מיצג את מספר השורה, שערכה זהה למספר הכוכביות בשורה.

slide9
ובכתיבה פורמאלית
  • קלוט basis
  • עבור i בטווח 1...basis:
    • עבור j בטווח 1...i:
      • הדפס כוכבית
    • רד שורה

הרצה יבשה:

basis = 3

i=2

i=3

i=1

j = 3

j = 2

j = 1

הספירה של j מתחילה מההתחלה ורצה עד i המעודכן

*

*

*

*

*

*

slide10
ציור משולש מוצמד לשמאל שבסיסו למעלה
  • יש לקלוט מהמשתמש אורך בסיס של משולש ולהציג משולש ישר-זוית של כוכביות, מוצמד לשמאל, שבסיסו כגודל שנקלט, אבל הבסיס למעלה.
  • למשל, עבור בסיס בגודל 4 יודפס המשולש הבא:

* * * *

* * *

* *

*

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

הגבלה: כל פלט תמיד יוצג מלמעלה למטה.

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

slide11
ציור משולש הפוך: ניתוח הצורה
  • מאחר ובכל שורה כמות שונה של כוכביות, ננסה למצוא את החוקיות, ולכן נצייר את הטבלה הבאה:
  • ניתן לזהות שמספר הכוכביות מהווה סדרה יורדת, החל מגודל הבסיס עד 1.
  • לכן ננסה למספר את השורות באופן שונה.

* * * * *

* * * *

* * *

* *

*

slide12
תרשים זרימה

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

slide13
ובכתיבה פורמאלית
  • קלוט basis
  • עבור i בטווח basis...1:
    • עבור j בטווח 1...i:
      • הדפס כוכבית
    • רד שורה

הרצה יבשה:

basis = 3

i= 3

i= 1

i=2

j = 1

j = 2

j = 3

*

*

*

*

*

*

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

* * * *

* * * * *

* * * * * *

* * * * * * *

    • כלומר, בשורה הראשונה 4 כוכביות, בשניה 5 וכך עד שיש שורה עם 7 כוכביות.
    • נשים לב שציור הכוכביות בכל שורה אינו בהכרח מתחיל מתחילת השורה!
slide15
ציור טרפז: ניתוח הבעיה
  • מאחר וכל שורה, פרט לאחרונה, אינה מתחילה צמודה לשמאל, יש למצוא דרך לצייר את הכוכביות יותר ימינה בשורה.
  • הדרך היא לצייר רווחים (תו שאינו נראה אך מקדם את המיקום) לפני ציור הכוכביות.
  • ניתן לראות שאכן בצד שמאל הטרפז נראה תקין, אבל צידו הימני ישר, ולכן ננסה לשים רווח בין כל כוכבית
  • ---*-*-*-*
  • --*-*-*-*-*
  • -*-*-*-*-*-*
  • *-*-*-*-*-*-*
  • ---****
  • --*****
  • -******
  • *******
slide16
ציור טרפז: ניתוח הבעיה (2)
  • ניתן לראות שכל שורה מורכבת מכמות כלשהי של רווחים, ואז זוגות של כוכבית+רווח, פרט לכוכבית האחרונה, שאין מימינה רווח
  • לצורך הכלליות, נצייר גם ליד הכוכבית האחרונה רווח (לא ישנה את התצוגה על המסך מאחר ורווח הוא תו שאינו נראה)
  • ---*-*-*-*-
  • --*-*-*-*-*-
  • -*-*-*-*-*-*-
  • *-*-*-*-*-*-*-
  • ---*-*-*-*
  • --*-*-*-*-*
  • -*-*-*-*-*-*
  • *-*-*-*-*-*-*
slide17
ציור טרפז: ניתוח הבעיה (3)
  • נצייר טבלה שבנוסף לכמות הצמדים של כוכבית+רווח בכל שורה, מציינת כמה רווחים יש לצייר בתחילת השורה
  • ---*-*-*-*-
  • --*-*-*-*-*-
  • -*-*-*-*-*-*-
  • *-*-*-*-*-*-*-

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

slide18
ציור טרפז: ניתוח הבעיה (4)
  • מאחר ויש סטיה קבועה בין מספר השורה לעמודה השמאלית, נשנה את מספור השורות:
  • ---*-*-*-*-
  • --*-*-*-*-*-
  • -*-*-*-*-*-*-
  • *-*-*-*-*-*-*-

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

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

buttom - line

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

1- הדפסת רווחים

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

תרשים זרימה

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

  • ---*-*-*-*-
  • --*-*-*-*-*-
  • -*-*-*-*-*-*-
  • *-*-*-*-*-*-*-
slide20
ובכתיבה פורמאלית

הרצה יבשה:

top = 4

buttom = 7

  • קלוט מהמשתמש top
  • קלוט מהמשתמש buttom
  • עבור i בטווח top...buttom:
    • עבור j בטווח 1...buttom-i:
      • צייר רווח
    • עבור j בטווח 1...i:
      • צייר כוכבית ורווח
    • צייר ירידת שורה

i= 4

i= 7

i= 6

i= 5

j = 2

j = 1

j = 4

j = 5

j = 3

_

_

_

*_

*_

*_

*_

_

_

*_

*_

*_

*_

*_

_

*_

*_

*_

*_

*_

*_

*_

*_

*_

*_

*_

*_

*_

slide21
קריאת 2 מספרים והצגה כמה ספרות מופיעות בשניהם
  • קרא מהמשתמש 2 מספרים והצג כמה ספרות מופיעות בשניהם
  • דוגמאות:
    • עבור 1734 ו- 7839 יוצג 2, כי הספרות 7 ו- 3 מופיעות בשניהם
    • עבור 112233 ו- 33 יוצג 1 כי הספרה 3 מופיעה בשניהם
  • 2 אסטרטגיות לפעולה:
    • עבור כל ספרה בראשון נבדוק האם מופיעה בשני. יש לוודא שהספרה טרם הופיעה בראשון כדי לא לבדוק פעמיים.
    • עבור כל ספרה (0-9) נבדוק האם היא מופיעה ב- 2 המספרים.
  • אסטרטגיה 2 יותר פשוטה
slide22
הרעיון הכללי לפתרון
  • עבור כל אחת מהספרות 0 עד 9:
    • בדוק האם הספרה מופיעה במספר הראשון
    • אם כן, בדוק האם מופיעה במספר השני
    • אם כן, עדכן את counter
  • בדיקה האם ספרה מופיעה במספר:
    • בידוד כל ספרה באמצעות "תן/קצץ ספרה ימנית" ובדיקה האם שווה לספרה המבוקשת
slide23
הרעיון הכללי לבדיקה הם ספרה מופיעה במספר
  • עבור כל ספרה בין 0 ל- 9 יש לעבור על כל הספרות המספר.
  • מאחר ועבור כל ספרה בין 0 ל- 9 יש לעבור על כל ספרות המספר, יש להשתמש בפעולת הקיצוץ שהורסת את המספר.
    • לכן נעבוד עם משתנה עזר, כדי לשמור את המספר המקורי.
  • אם נזהה שאחת הספרות היא הספרה המבוקשת, אין צורך להמשיך ולבדוק את שאר הספרות, ולכן נתחזק משתנה שתפקידו להעיד האם הספרה נמצאה במספר.
slide24
תרשים זרימה (חלק 1)

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

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

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

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

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

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

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

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

slide26
ובכתיבה פורמאלית
  • קלוט num1 ו- num2
  • הגדר count=0
  • עבור i בטווח 0...9:
      • בצע temp=num1
      • הגדר found=false
      • כל עוד temp>0 וגם found=false:
        • אם ספרה ימנית של temp היא i:
          • בצע found=true
        • קצץ ספרה ימנית של temp
      • אם found=true:
        • בצע temp=num2
        • הגדר found=false
        • כל עוד temp>0 וגם found=false:
          • אם ספרה ימנית של temp היא i:
            • בצע found=true
          • קצץ ספרה ימנית של temp
        • אם found=true:
          • הגדל את count ב-1
  • הצג את count
slide27
האם מספר הוא תת-מספר במספר אחר
  • יש לקלוט 2 מספרים ולהציג האם השני הוא תת-מספר של הראשון
  • דוגמאות:
    • עבור 1234 ו- 23 יוצג "כן"
    • עבור 1234 ו- 823 יוצג "לא"
    • עבור 1244 ו- 144 יוצג "לא"
slide28
הרעיון הכללי לפתרון
  • נגדיר את הספרה הימנית של num2 כ- current
  • כל עוד לא סיימנו לעבור על כל הספרות ב- num1 ועדיין לא זיהינו את num2 כתת-מספר:
    • נבדוק האם current היא הספרה הימנית של num1:
      • אם כן: נזיז את current להיות הספרה השמאלית הבאה ב- num2
      • אחרת: נחזיר את current להיות הספרה הימנית של num2
    • קצץ ספרה ימנית מ- num1
  • אם לא נותרו ספרות ב- num2 משמע הוא תת-מספר של num1
  • אחרת, אינו תת-מספר

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

num2 = 23

num1 = 1234

num1 = 123

num1 = 12

num1 = 1

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

current

slide29
תרגיל: כיתבו את הרעיון בכתיבה פורמאליתהרעיון הכללי לפתרון (2)
  • נגדיר את הספרה הימנית של num2 כ- current
  • כל עוד לא סיימנו לעבור על כל הספרות ב- num1 ועדיין לא זיהינו את num2 כתת-מספר:
    • נבדוק האם current היא הספרה הימנית של num1:
      • אם כן: נזיז את current להיות הספרה השמאלית הבאה ב- num2
      • אחרת: נחזיר את current להיות הספרה הימנית של num2
    • קצץ ספרה ימנית מ- num1
  • אם לא נותרו ספרות ב- num2 משמע הוא תת-מספר של num1
  • אחרת, אינו תת-מספר

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

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

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

num2 = 53

num1 = 1234

num1 = 123

num1 = 12

num1 = 1

num1 = 0

current

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