Presentation is loading. Please wait.

Presentation is loading. Please wait.

לולאות- Loops שני סוגי לולאות:

Similar presentations


Presentation on theme: "לולאות- Loops שני סוגי לולאות:"— Presentation transcript:

1 לולאות- Loops שני סוגי לולאות:
1. Do While Loop - תיכנס ללולאה אם תנאי כלשהו מתקיים, ותמשיך להיכנס ללולאה כל עוד התנאי ממשיך להתקיים וריאציה: Do Until Loop - תיכנס ללולאה אם תנאי כלשהו לא מתקיים, ותמשיך להיכנס ללולאה כל עוד התנאי ממשיך לא להתקיים Do-While-Loop לא מתבצע אם התנאי לא קיים בהתחלה Do Until Loop לא מתבצע אם התנאי קיים בהתחלה

2 לולאות- Loops 2. Do Loop While - תיכנס ללולאה בכל מקרה, ואז תבדוק אם התנאי מתקיים, ואם כן, תמשיך להיכנס ללולאה ווריאציה: Do Loop Until - תיכנס ללולאה בכל מקרה, ואז תבדוק אם התנאי לא מתקיים, ואם לא, תמשיך להיכנס ללולאה Do-Loop-While מתבצע לפחות פעם אחת ובודק. אם התנאי קיים ממשיך. Do-Loop-Until מתבצע לפחות פעם אחת ובודק. אם התנאי לא קיים ממשיך.

3 Do-While-Loop קידוד - Do [{While |Until}] ביטוי בוליאני [פקודות]
[Exit Do] Loop Do While – ממשיכים להיכנס ללולאה כל עוד התנאי מתקיים, ויוצאים מיד כאשר הוא מפסיק להתקיים Do Until - ממשיכים להיכנס ללולאה כל עוד התנאי לא מתקיים, ויוצאים מיד כאשר הוא מתחיל להתקיים הערה: המילים Do ו-Loop מיושרים. התוכן של הלולאה מוכנס פנימה.

4 Alternative Coding for Do-While-Loop
[פקודות] [Exit Do] Loop היות והוא כל כך נפוץ, קיימת צורה מיוחדת עבורו: While ביטוי בוליאני [Exit While] End While

5 תרשים זרימה עבור Do-While
התחל Count 1 Count<=10 Count  Count+1 Count סיים

6 תוכנית ללולאה פשוטה Dim Count As Integer Count = 1
Do While (Count <= 10) Console.WriteLine _ ("Number of cycle through the loop: {0}", Count) Count = Count + 1 Loop

7 אופרטור חדש: += במקום Count = Count + 1, נוכל לכתוב: Count += 1
אופרטורים דומים: יהי x = 6, y = “Hello “. נבצע את הפעולות הבאות אחת אחרי השניה. -= x -= means x = x – 3 => x = 3 *= x *= means x = x * 3 => x = 9 /= x /= means x = x / 3 => x = 3 &= y &=“ John” means y = y & ”John”, y = “Hello John”

8 דוגמא קלטים: A – ספרה, למשל 8 B – מספר כלשהו עם הרבה ספרות, למשל 57382
פלט: True אם A סיפרה המוכלת ב-B, אחרת False

9 תרשים זרימה Found  True C=A כן B  B\10 Found התחל A, B
Found <--False Found  True B=0 or Found לא C=A C B Mod 10 כן B  B\10 Found סיים

10 קוד ב-VB חילוק שלם נותן רק את החלק השלם של המנה Sub Main ()
Dim Found as Boolean Dim A ,B, C, D as Integer Console.writeline (“What number do you want?”) D= console.readline() B = D Console.writeline (“What digit do you want?”) A = console.readline() Do Until B = 0 or Found C = B Mod 10 If C = A Then Found = True: Console.Writeline (“{0} contained in {1}”, A, D) Else B = B \ 10 End If Loop End Sub חילוק שלם נותן רק את החלק השלם של המנה

11 פתרון יותר קל ויותר קצר Sub Main Dim A_IN, B_IN as string
Console.writeline (“What number do you want?”) B_IN = console.readline() Console.writeline (“What digit do you want?”) A_IN = console.readline() If B_IN.contains (A_IN) then Console.Writeline (“{0} contained in {1}”, A_IN,B_IN) End If End Sub

12 לולאות - בדיקה בסוף Do [פקודות] [Exit Do] [פקודות]
Loop [{While |Until}] בוליאני ביטוי Do Loop While - Next iteration only if condition holds Do Loop Until - Next iteration only if condition doesn’t hold היות והתנאי נבדק רק בסוף, תמיד יש לפחות איטרציה אחת

13 Do-Loop-While/Until התחל Count 11 Count Count Count + 1 לא
סיים

14 Code: Ex2.8 –DoLoopUntil דוגמא של לולאה שמתבצעת פעם אחת גם כאשר התנאי לא מתקיים
Dim Count As Integer Count = 11 ‘still allows one loop Do Console.WriteLine _ ("Number of cycle through the loop: " & Count) Count = Count + 1 Loop Until Count > 10

15 עוד דוגמא קלט: טקסט באנגלית. כללי איות: האות i קודם לאות e, אם מיד לפני ה-i יש כל אות חוץ מ-c האות e קודם לאות i, אם מיד לפני ה-e יש האות c בהתחלת מילה האות e תמיד קודם לאות i פלט: מספר הפעמים שהאות i מופיע במילה, ובנוסף מיקומו של כל טעות, כאשר טעות קורית כאשר e מופיע לפני i (אלא אם זה בהתחלת המלה), או i מופיע לפני e והאות הקודמת הייתה c, למשל chief not cheif, but receive not recieve

16 טעויות אפשריות עטעות yטעטעות <>c c first e i second third טעות i
First letter in sentence e Second letter in sentence

17 Check for Spelling Mistake כן התחל Text pos -1, num 0 לא pos = -1?
סיים

18 Check for Problem לא pos =-1” כן כן pos = 0 מספר פעמים שהאות i מופיע
מיקומו של האות i הבא pos לא pos =-1” כן כן pos = 0 לא מספר פעמים שהאות i מופיע שווה ל-num כן האם במקום pos+1 יש “e” לא לא כן pos = 1 לא – יש “i" במקום האחרון במילה pos >= 2 <mila.length - 1 כן האם יש “c” לפניו ו-“e” אחריו כן בעיה במקום pos לא לא האם יש ""ce לפניו האם יש “c” לפניו ו-“e” אחריו או ""ce לפניו כן בעיה במקום pos לא כן בעיה במקום pos בעיה במקום pos num +=1 חזור

19 קוד ב-VB ‘pos is present position, num is number of i’s
Sub Main () Dim mila As String ‘pos is present position, num is number of i’s Dim pos, num As Integer Console.WriteLine("insert a word:") mila = Console.ReadLine() pos = -1 Do pos = mila.IndexOf("i", pos + 1) If pos = -1 Then Console.WriteLine("The number of i's is {0}", num) ElseIf pos = 0 Then If mila.Chars(pos + 1) = "e" Then Console.WriteLine("taut bekom 0") ElseIf pos = 1 Then If mila.Chars(0) = "c" And mila.Chars(2) = "e" Then Console.WriteLine("taut bekom 1") End If

20 Code in VB Console.WriteLine("taut bekom {0}", pos) End If Else
ElseIf pos >= 2 And pos < mila.Length - 1 Then If mila.Chars(pos - 1) = "c" And mila.Chars(pos + 1) = "e" _ Or mila.Chars(pos - 2) <> "c" And mila.Chars(pos - 1) = "e" Then Console.WriteLine("taut bekom {0}", pos) End If Else If mila.Chars(pos - 2) <> "c" And mila.Chars(pos - 1) = "e" Then num += 1 Loop Until pos = -1 end sub

21 הסבר התוכנית עוברים דרך המילה בקפיצות מאות "i" לאות "i" עד שמגיעים לסוף המילה. מוצאים כל אות "i" בעזרת פקודת indexof כאשר בכל פעם מתחילים את החיפוש מן התו שבא אחרי ה- "i" הקודם. ישנן 5 אפשרויות, ומתייחסים לכל אחת בנפרד. 1. pos = -1. זה קורה כאשר לא נשארו הופעות נוספות של האות (או שכלל לא היו). מדפיסים אז את מספר ההופעות 2. pos=0, דהיינו שיש "i" במקום הראשון במלה, ואז אם יש "e" במקום השני התוכנית מתריעה על טעות 3. pos=1, דהיינו שיש "i" במקום השני במלה, , ואז אם יש "c" לפניו ו- "e" אחריו, התוכנית מתריעה על טעות

22 הסבר התוכנית 4. pos>=2, אבל לא שווה למקום האחרון במילה דהיינו שיש "i" במקום שני והלאה אבל לא במקום האחרון, ואז אם יש "c" לפניו ו- "e" אחריו, או "xe" לפניו, כאשר "x" מסמן כל אות חוץ מ-"c", אזי שוב פעם התוכנית מתריעה על טעות. 5. יש "i" במקום האחרון, ואז אם יש "xe" לפניו, כאשר "x" מסמן כל אות חוץ מ-"c", אזי שוב פעם התוכנית מתריעה על טעות.

23 מאפיינים של לולאות 1. אתחל משתנה האינדקס
2. בדוק תנאי (או בהתחלה או בסוף של הלולאה) שמכיל את משתנה האינדקס. תנאי זה חייב לשנות את ערכו באיזשהו מקום בלולאה, אחרת נגיע ללולאה אינסופית 3.הגדל את ערכו של משתנה האינדקס.

24 For – Next Loop General Format:
For counter [as datatype] = first to last [Step כמות] [פקודות] [Exit For] [פקודות] Next [counter]

25 Ex2.9-BasicForLoop 1: Dim Count As Integer, Ans As String
2: For Count = 1 To 10 3: Console.WriteLine("Counting at {0}”, Count) 4: Console.WriteLine("Another? Yes or No") 5: Ans = Console.ReadLine() 6: If Ans.ToUpper = "NO" Then Exit For 'Chance to leave early. 1 line If 7: Next Count ‘The word count is optional

26 הסבר Ex2.9-BasicForLoop –
שורות 2,3,8: Basic For Loop מדפיס ערכים מ-1 עד 10. גידול, אתחול, ובדיקת תנאי הוא אוטומטי בפקודה זו. בשורה 2, אילו הוספנו ,STEP 2 רק 1,3,5,7 ו-9 היו מודפסים. שורה 2. האפשרות של [as datatype] מאפשרת לנו לשכתב שורה 2 ככה: For Count as Integer = 1 To 10, ואז לא צריכים להגדיר מראש את Count (לפעמים עובד גם בלי להוסיף As Integer). שורה 6: מאפשרת יציאה מוקדמת מן הלולאה בעזרת Exit For אם עונים לשאלה תשובה שלילית.

27 Natzeret<--Natzeret * i
התחל N Natzeret 1 i1 i >N לא Natzeret<--Natzeret * i ii + 1 כן סיים

28 קוד ב-VB Dim i as integer, Natzeret as integer, N as integer
Console.writeline (“What factorial do you want?”) N = console.readline() Natzeret = 1 For i = 1 to N Natzeret = Natzeret * i ‘Natzeret *= i Next Console.writeline (Natzeret) עבור N=0, הלולאה לא תתבצע כלל

29 דוגמא קשה - פענוח ספרות רומיות
מספר רומי מיוצג על ידי רצף של תווים כאשר לכל תו יש משמעות מספרית לפי הערכים הבאים: I=1 V=5 X=10 L=50 C=100 D=500 M=1000 מקובל לקרוא מספר רומי משמאל לימין וערכו המספרי שווה לסכום כל התווים. לדוגמא המספר 38 נכתב בייצוג רומי כך: XXXVIII. כלל זה נכון לכל הספרות פרט ל: 4 שנכתב על ידי IV כלומר 5-1 9 שנכתב על ידי IX כלומר 10-1 ובאותו האופן מיצגים את כל המספרים שמכילים ספרות אילו. לדוגמא 40 מיוצג על ידי XL (50-10) וכו'. לפי כלל זה המספר 1999 נכתב MCMXCIX. לכתוב תוכנית המקבלת מספר רומי כמחרוזת ומחשבת את ערכו המספרי.

30 פענוח ספרות רומיות Module Module1 Sub Main()
Dim I, V, X, L, C, D, M, lng, q, num As Integer Dim str, w As String I = 1 : V = 5 : X = 10 : L = 50 : C = 100 : D = 500 : M = 1000 Console.WriteLine(“Insert number in Roman numerals") Console.WriteLine("I = 1 : V = 5 : X = 10 : L = 50 : C = 100 : D = 500 : M = 1000") str = Console.ReadLine() str = str.ToUpper lng = str.Length For q = 0 To (lng - 1) ‘Test to be sure no illegal characters If (str.Chars(q) <> "I") And (str.Chars(q) <> "V") _ And (str.Chars(q) <> "X") And (str.Chars(q) <> "L") _ And (str.Chars(q) <> "C") And (str.Chars(q) <> "D") _ And (str.Chars(q) <> "M") Then Console.WriteLine(“Some letters are not Roman Numerals") Exit Sub End If Next q

31 פענוח ספרות רומיות q = str.IndexOf("IV") ‘removing meaningful doubles
If q >= 0 Then num = num + 4 str = str.Replace("IV", "") Console.WriteLine(str & num & " " & q) End If q = str.IndexOf("IX") num = num + 9 str = str.Replace("IX", "") q = str.IndexOf("XL") num = num + 40 str = str.Replace("XL", "") q = str.IndexOf("XC") num = num + 90 str = str.Replace("XC", "")

32 פענוח ספרות רומיות q = str.IndexOf(“CD") If q >= 0 Then
num = num + 400 str = str.Replace(“CD", "") End If q = str.IndexOf("CM") num = num + 900 str = str.Replace("CM", "") For q = 0 To str.Length – 1 ‘evaluating remaining valid numerals w = str.Chars(q) If w = "I" Then num = num + I If w = "V" Then num = num + V If w = "X" Then num = num + X If w = "L" Then num = num + L If w = "C" Then num = num + C If w = "D" Then num = num + D If w = "M" Then num = num + M Next q Console.WriteLine(num) Console.ReadKey() End Sub End Module

33 Ex2.10-ForWithinFor 2: For Outer = 5 To 1 Step -1
1: Dim Outer As Integer, In1 As Integer 2: For Outer = 5 To 1 Step -1 3: For In1 = 1 To Outer 4: Console.Write(In1 & " ") 5: Next In1 6: Console.WriteLine() 'new line 7: Next Outer

34 Ex2.10-ForWithinFor - Explanation
שורה 2: Step -1 גורם למשתנה Outer לקטון מ-5 ל-1 שורה 4: כזכור, WRITE גורם לכתיבה בלי לעבור לשורה הבאה (כמו ש-WRITELINE עושה), כך שהמספרים יהיו צמודים אחד לשני. שורה 6: מעבר לשורה הבאה. תוצאות : 1 2 1

35 לולאות עם גבול עליון לא ידוע
דוגמא: חשב את המשכורת של מספר לא ידוע של עובדים. שתי אפשריות: 1. מספר העובדים לא ידוע בזמן כתיבת התוכנית, אבל כן ידוע בזמן הרצת התוכנית. פתרון: הזן בזמן ההרצה את מספר העובדים. 2. מספר העובדים לא ידוע גם בזמן ההרצה. פתרון: Do-Whileשמכיל תנאי שהופך להיות False אחרי הזנת פרטי העובד האחרון.

36 דוגמא: הענקת ערך לא מציאותי למשתנה כלשהו בסוף קריאת הנתונים
התחל מכיוון שאנחנו יודעים ש:1- אינו ערך מציאותי עבור Rate, אנחנו יוצאים מן הלולאה Rate Rate <>-1 Hours Salary Hours * Rate Salary Rate סיים

37 Ex2.11-Flags ' Read input data until the input rate equals the flag
' Requires reading rate input twice, before the loop ‘and in the loop 1: Const EndOfData = -1 ' Serves as a flag 2: Dim Rate, Hours, Salary As Decimal 3: Console.WriteLine("What is the Rate?") 4: Rate = Console.ReadLine()

38 Ex2.11-Flags 5: Do While Rate <> EndOfData
6: Console.WriteLine("How many hours?") 7: Hours = Console.ReadLine() 8: Salary = Hours * Rate 9: Console.WriteLine("Your Salary is: {0: C}”,Salary) 10: Console.WriteLine("What is the Rate?") 11: Rate = Console.ReadLine() 12: Loop

39 הסבר Ex2.11-Flags - שורות 3,4: קריאת Rate לפני הלולאה. בסוף, כשיהיה -1, לא ניכנס ללולאה. שורות 10, 11: קריאת Rate לפני סוף הלולאה. כשמזינים -1, לא ניכנס שוב ללולאה. נמשיך עם יתר התוכנית.

40 דרך שנייה לציין הסוף: הצבת “NO” במשתנה המשמש כדגל
הלולאה תמשיך להתבצע כל עוד לא נתנו ערך של "NO" למשתנה שנקרא Flag. כל ערך אחר יאפשר ללולאה להמשיך להתבצע, ולכן זה מפסיק ללחוץ על Enter כל פעם שהשאלה אם להמשיך נשאלת, חוץ מאשר בפעם האחרונה, שאז חייבים להזין "NO". התחל Flag ”YES” Flag <>”NO” Rate Hours לא Salary Salary Hours * Rate No More? כן Flag ”NO” See Ex2.12-QuestionFlag סיים

41 Program Ex12-QuestionFlag
' Read input data until the flag variable indicates end of data ' Requires defining a special flag variable Const EndOfData = "NO" ' Serves as a flag Dim Rate, Hours, Salary As Decimal Dim Flag As String = "Yes" Do While Flag.ToUpper <> EndOfData Console.WriteLine("What is the Rate?") Rate = Console.ReadLine() Console.WriteLine("How many hours?") Hours = Console.ReadLine() Salary = Hours * Rate Console.WriteLine("Your Salary is: {0: C}” , Salary) Console.WriteLine("Any more(Yes/No)?") Flag = Console.ReadLine() Loop End Sub

42 הסבר - Ex12.2-QuestionFlag
יתרונות לשיטה זו פקודת קריאה למשתנה Rate מופיעה רק פעם אחת משתנה נוסף – Flag – משמש כדגל התנאי מתבסס על משתנה הדגל. חסרון: חייבים לענות על שאלת ההמשך כל פעם שהלולאה מתבצעת

43 דרך שלישית לציין סוף נתונים
Dim Rate as string, Rate_Num as Single Dim EndOfData as Boolean Do Until EndOfData If Rate = “” then EndOfData = True Else If IsNumeric (Rate) Then Rate_Num = Rate … End If EndIf Loop מאפשר לחיצת ENTER כשהנתונים נגמרים תרגיל 8 – שאלות אי-זוגיות

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

45 דוגמא ילדים מגיל 1 עד 13 יכולים רק לרכב על אופניים
ילדים בגיל 14,15 יכולים גם לרכב על אופנוע אנשים בני 16 ומעלה יכולים גם לנהוג ברכב תוכנית: קולט גיל, מדפיס אופציות הפתוחות לאותו אדם

46 קוד לדוגמא עם Select 1: Dim Age As Integer
2: Console.WriteLine("Input Age") 3: Age = Console.ReadLine() 4: Select Case Age 5: Case 1 6: Console.WriteLine("Only bike") 7: Case 2, 3, 4 8: Console.WriteLine("Only bike") 9: Case 5, 6, 7 To 13 10: Console.WriteLine("Only bike") 11: ' Alternative way of showing this 12: ' Case Is < 14 13: ' Console.WriteLine("Only bike") 14: Case Is < 16 15: Console.WriteLine("Only bike or motorcycle") 16: Case Else 17: Console.WriteLine(“Even a Car") 18: End Select

47 Select Format Format: Select Case <ביטוי לבדיקה>
פקודות] ……………………… [Case Else End Select

48 Select Format - Explanation
ביטוי לבדיקה (test expression) : 1 מתוך 4 אפשרויות 1. ביטוי אריתמטי אם ערך שלם או דצימלי. אם החלק העשרוני חוזר על עצמו ( למשל 4/3), רשימת ההשוואה צריכה להכיל טווח ולא ערך מדויק. 2. ביטוי בוליאני 3. ביטוי מסוג מחרוזת (1 או יותר מחרוזות מחוברות על ידי אופרטורים המתאימים למחרוזות) 4. תאריך

49 הסבר Select Format - רשימה להשוואה 1 או יותר מ-3 האפשרויות דלהלן, מופרדות על ידי פסיקים: 1. ביטוי (Expression), למשל אריתמטי עם ערך שלם או דצימלי, מסוג מחרוזת, תאריך, או בוליאני 2. Expression1 TO expression2. אם מדובר על ביטוי מסוג מחרוזת, אנו מקבלים כל מחרוזת שערכו האלפביתי הוא בין expression1 ו-expression2. למשל “black” to “green” כולל "brown" 3. IS <operator> expression כאשר operator הוא אחד מתוך: <,>,<=,>=,=,<>

50 הסבר התוכנית שורה 4: הביטוי האריתמטי מכיל רק משתנה אחד, Age
שורה 5: ביטוי אריתמטי המורכב ממספר אחד שורה 7: ביטויים אריתמטיים חד-ערכיים מופרדים על ידי פסיקים שורה 9: כולל אופציית הטווח: 7 To 13

51 הסבר התוכנית שורה 12: שימוש בפורמט: IS <operator>
שורה 14: אם שורה 12 מתבצעת (Age < 14) , לא מבצעים שורה זו, על אף שעדיין: Age < 16 שורה 16: מתבצעת אם לא נבחר אופציה אחרת

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

53 קוד לדוגמת מחשבון Dim Num1, Num2 As Integer Dim Op, Ans As String
Console.WriteLine("Please type a number") Num1 = Console.ReadLine() Console.WriteLine("Please type another number") Num2 = Console.ReadLine() Console.WriteLine("Do you want +, -, *, or / ?") Op = Console.ReadLine() Op = Op.ToUpper 'Translates literal operators to capital letters.

54 קוד לדוגמת מחשבון - המשך
Select Case (Op) Case "+", "ADD", "PLUS" Ans = Num1 + Num2 Console.WriteLine(Num1 & " plus " & Num2 & " is " & Ans) Case "-", "SUBTRACT", "MINUS" Ans = Num1 - Num2 Console.WriteLine(Num1 & " minus " & Num2 & " is " & Ans) Case "*", "MULTIPLY", "TIMES" Ans = Num1 * Num2 Console.WriteLine(Num1 & " times " & Num2 & " is " & Ans) Case "/", "DIVIDE", "INTO" Ans = Num1 / Num2 Console.WriteLine(Num1 & " into " & Num2 & " is " & Ans) Case Else Beep() Console.WriteLine("You didn't input a correct operator.") End Select

55 דוגמא של Select עם If כללי תשלום לשעות נוספות:
150%: ימים 1-5 אחרי 8 שעות עבודה 200%: יום שישי, אחרי 5 שעות עובדה 300%: מוצאי שבת, לכל שעות עבודה קלט: Rate, Hours, Day פלט: Salary (שכר לאותו יום)

56 דוגמא של Select עם If (קוד)
Dim Day As Integer Dim Taut As Boolean Dim Rate, Hours, Salary As Decimal Console.WriteLine("Please type in the rate") Rate = Console.ReadLine() Console.WriteLine("Please type in the number of hours") Hours = Console.ReadLine() Console.WriteLine("Please type day of the week: 1-7") Day = Console.ReadLine()

57 דוגמא של Select עם If (קוד - המשך)
Select Case Day Case 1 To 5 If Hours <= 8 Then Salary = Rate * Hours Else Salary = Rate * 8 + Rate * 1.5 * (Hours - 8) End If Case 6 If Hours <= 5 Then Salary = Rate * 5 + Rate * 2 * (Hours - 5) Case 7 Salary = Rate * 3 * Hours Case Else Taut = True End Select

58 דוגמא של Select עם If (קוד - המשך)
If Taut Then Console.WriteLine("Day of the week - between 1 and 7 only") Else Console.WriteLine("Your salary is: " & Format(Salary, "$#.00")) End If Alternative Method: Declare Day as String Instead of Case 1 to 5, write Case “Rishon”,”Sheni”,…..”Chamishi” Instead of Case 6 write Case “Shishi” Instead of Case 7 write Case “Motzai Shabbat”

59 מגבלות של Select Select יכול לטפל בביטוי לבדיקה אחד בלבד
אם יש לנו 2, עדיף להשתמש ב-ElseIf דוגמא: במקרה הקודם, ילדים משפיעים על שכר שעות נוספות. בכל קטגוריה של שעות נוספות, מקבלים 25% יותר אם יש לך ילדים למטה מגיל 5 (משתנה בוליאני שנקרא Children).

60 הרחבת הדוגמא של שעות נוספות
Console.WriteLine("Do you have children under 5: Type True or False") Children = Console.ReadLine() If Day >= 1 And Day <= 5 And Not Children Then If Hours <= 8 Then Salary = Rate * Hours Else Salary = Rate * 8 + Rate * 1.5 * (Hours - 8) End If ElseIf Day >= 1 And Day <= 5 And Children Then Salary = Rate * 8 + Rate * 1.75 * (Hours - 8)

61 הרחבת הדוגמא של שעות נוספות - המשך
ElseIf Day = 6 And Not Children Then If Hours <= 5 Then Salary = Rate * Hours Else Salary = Rate * 5 + Rate * 2 * (Hours - 5) End If ElseIf Day = 6 And Children Then Salary = Rate * 5 + Rate * 2.25 * (Hours - 5)

62 הרחבת הדוגמא של שעות נוספות - המשך
ElseIf Day = 7 And Not Children Then Salary = Rate * 3 * Hours ElseIf Day = 7 And Children Then Salary = Rate * 3.25 * Hours Else Taut = True End If

63 Select - עוד דוגמא הודעות שונות מודפסות על גבי רישיון הנהיגה, תלוי בקבוצת הגיל 18-30, 31-50,50-59,>60)) קלט: תאריך לידה פלט: ההודעה המתאימה דרוש: 1. עריכה – כדי להיות בטוח שתאריך הקלט הוא תאריך תקין 2. חישוב הגיל, מבוסס על תאריך הנוכחי ותאריך הלידה.

64 עריכת תאריך הלידה וקביעת הגיל
Dim Birthday, Birthdate As DateTime, Age As Integer, sbirthdate As String Console.WriteLine("Please type in your birthdate") sbirthdate = Console.ReadLine() If Not IsDate(sbirthdate) Then Console.WriteLine("Bad date") Else Birthdate = sbirthdate End If Birthday = DateSerial(Now.Year, Birthdate.Month, Birthdate.Day) If Birthday < Now Then Age = Now.Year - Birthdate.Year Age = Now.Year - Birthdate.Year - 1 Console.WriteLine(Age) On Error Resume Next Dim BirthDate As Date, BirthDay As Date, Age As Integer, X As String X = InputBox$("Enter a date", "Date Due Calculation", Date) If Not IsDate(X) Then MsgBox "You made an Error" Exit Sub Else BirthDate = X End If BirthDay = DateSerial(Year(Date), Month(BirthDate), Day(BirthDate)) If BirthDay < Date Then Age = Year(Date) - Year(BirthDate) Age = Year(Date) - Year(BirthDate) - 1 MsgBox Age, 65, "Calculated Age" End Sub On Error Resume Next Dim BirthDate As Date, BirthDay As Date, Age As Integer, X As String X = InputBox$("Enter a date", "Date Due Calculation", Date) If Not IsDate(X) Then MsgBox "You made an Error" Exit Sub Else BirthDate = X End If BirthDay = DateSerial(Year(Date), Month(BirthDate), Day(BirthDate)) If BirthDay < Date Then Age = Year(Date) - Year(BirthDate) Age = Year(Date) - Year(BirthDate) - 1 MsgBox Age, 65, "Calculated Age" End Sub עריכת תאריך הלידה וקביעת הגיל Dim Birthday, Birthdate As DateTime, Age As Integer, sbirthdate As String Console.WriteLine("Please type in your birthdate") sbirthdate = Console.ReadLine() If Not IsDate(sbirthdate) Then Console.WriteLine("Bad date") Else Birthdate = sbirthdate End If Birthday = DateSerial(Now.Year, Birthdate.Month, Birthdate.Day) If Birthday < Now Then Age = Now.Year - Birthdate.Year Age = Now.Year - Birthdate.Year - 1 Console.WriteLine(Age)

65 הדפסת ההודעה הנכונה על רישיון הנהיגה
On Error Resume Next Dim BirthDate As Date, BirthDay As Date, Age As Integer, X As String X = InputBox$("Enter a date", "Date Due Calculation", Date) If Not IsDate(X) Then MsgBox "You made an Error" Exit Sub Else BirthDate = X End If BirthDay = DateSerial(Year(Date), Month(BirthDate), Day(BirthDate)) If BirthDay < Date Then Age = Year(Date) - Year(BirthDate) Age = Year(Date) - Year(BirthDate) - 1 MsgBox Age, 65, "Calculated Age" End Sub On Error Resume Next Dim BirthDate As Date, BirthDay As Date, Age As Integer, X As String X = InputBox$("Enter a date", "Date Due Calculation", Date) If Not IsDate(X) Then MsgBox "You made an Error" Exit Sub Else BirthDate = X End If BirthDay = DateSerial(Year(Date), Month(BirthDate), Day(BirthDate)) If BirthDay < Date Then Age = Year(Date) - Year(BirthDate) Age = Year(Date) - Year(BirthDate) - 1 MsgBox Age, 65, "Calculated Age" End Sub הדפסת ההודעה הנכונה על רישיון הנהיגה Select case age Case 18 to 30 Case 31 to 50 Case 51 to 60 Case Is > 60 End select תרגיל 9, שאלות אי-זוגיות

66 - Ex2.19 יצירת מספרים מקריים
נתכנת משחק שנקרא: נחש את המספר כללים: 1. בקש מן השחקן גבול עליון ותחתון 2. קבע את מספר המטרה על ידי בחירת מספר מקרי 3. בקש מן השחקן לנחש מספר 4. אם הוא מנחש נכון את המספר, המשחק נגמר ומספרים לו כמה ניחושים נדרשו 5. אם ניחש לא נכון, אומרים לו אם הניחוש היה גבוה או נמוך, ומחזירים אותו לצעד 3.

67 קליטת גבול עליון ותחתון Ex2.19 –Random Numbers –
Dim TargetNumber, UpperBound, LowerBound, CurrentGuess, _ Guesscount As Integer Dim Input As String Dim RandomObject As Random = New Random Console.Write("Please enter the lower bound: ") Input = Console.ReadLine() If Not IsNumeric(Input) Then Console.WriteLine("Not Numeric") Exit Sub Else LowerBound = Input End If

68 קליטת גבול עליון ותחתון Ex2.19 –Random Numbers –
Console.Write("Please enter the upper bound: ") Input = Console.ReadLine() If Not IsNumeric(Input) Then Console.WriteLine("Not Numeric") Exit Sub Else UpperBound = Input End If

69 Ex2.19 –Random Numbers Target Number = RandomObject.Next(LowerBound, UpperBound + 1) CurrentGuess = 0 Guesscount = 0 Do While CurrentGuess <> TargetNumber Console.Write("Please enter a guess: ") Input = Console.ReadLine() If Not IsNumeric(Input) Then Console.WriteLine("Not Numeric") Exit Sub Else CurrentGuess = Input End If

70 Ex2.19 –Random Numbers Guesscount += 1
If CurrentGuess < TargetNumber Then Console.WriteLine("Your guess is low") ElseIf CurrentGuess > TargetNumber Then Console.WriteLine("Your guess is high") End If Loop Console.WriteLine("Your did it in " & Guesscount & " guesses.")

71 Ex2.19 –Random NumbersProgram הסבר התוכנית
ליצור מספרים מקריים, מתחילים על ידי כתיבת Dim RandomObject As Random = New Random() הערה: אם כותבים מספר כלשהו בסוגריים, זה גורם לאותה סדרה מקרית להופיע כל פעם שמריצים את התוכנית יצירת מספרים מקריים בין הגבולות הרצויים: Target Number = RandomObject.Next(LowerBound, UpperBound + 1)


Download ppt "לולאות- Loops שני סוגי לולאות:"

Similar presentations


Ads by Google