הרצאה 04
Download
1 / 30

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


  • 116 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

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

קרן כליף


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

  • לולאות מקוננות

  • הצגת הפתרון תרשים זרימה

  • כתיבת הפתרון בפסאודו-קוד


ציור מלבן

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

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

    * * * * *

    * * * * *

    * * * * *

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

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


תרשים זרימה

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

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


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

  • קלוט width ו- height

  • עבור i בטווח 1...height:

    • עבור j בטווח 1...width:

      • הדפס כוכבית

    • רד שורה

הרצה יבשה:

width = 3

height = 2

i=1

i=2

j = 1

j = 2

j = 3

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

*

*

*

*

*

*


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

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

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

    *

    * *

    * * *

    * * * *

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

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


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

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

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

*

* *

* * *

* * * *

* * * * *


תרשים זרימה הצורה

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

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

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

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


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

  • קלוט basis

  • עבור i בטווח 1...basis:

    • עבור j בטווח 1...i:

      • הדפס כוכבית

    • רד שורה

הרצה יבשה:

basis = 3

i=2

i=3

i=1

j = 3

j = 2

j = 1

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

*

*

*

*

*

*


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

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

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

    * * * *

    * * *

    * *

    *

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

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

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


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

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

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

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

* * * * *

* * * *

* * *

* *

*


תרשים זרימה למעלה

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


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

  • קלוט basis

  • עבור i בטווח basis...1:

    • עבור j בטווח 1...i:

      • הדפס כוכבית

    • רד שורה

הרצה יבשה:

basis = 3

i= 3

i= 1

i=2

j = 1

j = 2

j = 3

*

*

*

*

*

*


ציור טרפז למעלה

  • יש לקלוט את רוחבו העליון של טרפז ואת רוחבו התחתון.

  • ניתן להניח כי הרוחב העליון קצר מהרוחב התחתון.

  • יש לצייר טרפז בהתאם לרוחבים שנקלטו.

  • דוגמא:

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

      * * * *

      * * * * *

      * * * * * *

      * * * * * * *

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

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


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

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

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

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

  • ---*-*-*-*

  • --*-*-*-*-*

  • -*-*-*-*-*-*

  • *-*-*-*-*-*-*

  • ---****

  • --*****

  • -******

  • *******


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

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

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

  • ---*-*-*-*-

  • --*-*-*-*-*-

  • -*-*-*-*-*-*-

  • *-*-*-*-*-*-*-

  • ---*-*-*-*

  • --*-*-*-*-*

  • -*-*-*-*-*-*

  • *-*-*-*-*-*-*


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

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

  • ---*-*-*-*-

  • --*-*-*-*-*-

  • -*-*-*-*-*-*-

  • *-*-*-*-*-*-*-

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


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

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

  • ---*-*-*-*-

  • --*-*-*-*-*-

  • -*-*-*-*-*-*-

  • *-*-*-*-*-*-*-

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

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

buttom - line


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

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

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

תרשים זרימה

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

  • ---*-*-*-*-

  • --*-*-*-*-*-

  • -*-*-*-*-*-*-

  • *-*-*-*-*-*-*-


ובכתיבה פורמאלית (הדפסת שורה), יש שני תהליכים:

הרצה יבשה:

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

_

_

_

*_

*_

*_

*_

_

_

*_

*_

*_

*_

*_

_

*_

*_

*_

*_

*_

*_

*_

*_

*_

*_

*_

*_

*_


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

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

  • דוגמאות:

    • עבור 1734 ו- 7839 יוצג 2, כי הספרות 7 ו- 3 מופיעות בשניהם

    • עבור 112233 ו- 33 יוצג 1 כי הספרה 3 מופיעה בשניהם

  • 2 אסטרטגיות לפעולה:

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

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

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


הרעיון הכללי לפתרון מופיעות בשניהם

  • עבור כל אחת מהספרות 0 עד 9:

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

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

    • אם כן, עדכן את counter

  • בדיקה האם ספרה מופיעה במספר:

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


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

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

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

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

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


תרשים זרימה מופיעה במספר (חלק 1)

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

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

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

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


תרשים זרימה מופיעה במספר (חלק 2)

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

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

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


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

  • קלוט 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


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

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

    • דוגמאות:

      • עבור 1234 ו- 23 יוצג "כן"

      • עבור 1234 ו- 823 יוצג "לא"

      • עבור 1244 ו- 144 יוצג "לא"


    הרעיון הכללי לפתרון מופיעה במספר

    • נגדיר את הספרה הימנית של 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


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

    הרעיון הכללי לפתרון (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


    ביחידה זו למדנו: מופיעה במספר

    • לולאות מקוננות

    • הצגת הפתרון תרשים זרימה

    • כתיבת הפתרון בפסאודו-קוד


    ad