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

Post on 06-Jan-2018

244 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

1 .Do While Loop תיכנס ללולאה אם תנאי כלשהו מתקיים, ותמשיך - להיכנס ללולאה כל עוד התנאי ממשיך להתקיים

:וריאציהDo Until Loop ,תיכנס ללולאה אם תנאי כלשהו לא מתקיים - ותמשיך להיכנס ללולאה כל עוד התנאי ממשיך לא להתקיים

1

Do-While-Loop

לא מתבצע אם התנאי לא קיים בהתחלה

Do Until Loop

לא מתבצע אם התנאי קיים בהתחלה

Loops -לולאות 2 .Do Loop While תיכנס ללולאה בכל מקרה, ואז תבדוק אם התנאי -

מתקיים, ואם כן, תמשיך להיכנס ללולאה :ווריאציהDo Loop Until תיכנס ללולאה בכל מקרה, ואז תבדוק אם התנאי -

לא מתקיים, ואם לא, תמשיך להיכנס ללולאה

2

Do-Loop-While

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

Do-Loop-Until

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

Do-While-Loop קידוד -

3

Do [{While |Until}] ביטוי בוליאני

[פקודות]

[Exit Do]

[פקודות]

Loop

Do While – ממשיכים להיכנס ללולאה כל עוד התנאימתקיים, ויוצאים מיד כאשר הוא מפסיק להתקיים

Do Until - ממשיכים להיכנס ללולאה כל עוד התנאי לאמתקיים, ויוצאים מיד כאשר הוא מתחיל להתקיים

מיושרים. התוכן של הלולאה מוכנס Loop ו-Doהערה: המילים פנימה.

Alternative Coding for Do-While-Loop

4

הוא כדלהלן:Doהשימוש הכי נפוץ של פקודת

Do While ביטוי בוליאני

[פקודות]

[Exit Do]

[פקודות]

Loop

היות והוא כל כך נפוץ, קיימת צורה מיוחדת עבורו:

While ביטוי בוליאני

[פקודות]

[Exit While]

[פקודות]

End While

Do-Whileתרשים זרימה עבור

5

סיים

Count 1

Count<=10 Count Count+1Count

התחל

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

Count) Count = Count + 1 Loop

6

+=אופרטור חדש: במקוםCount = Count + 1 :נוכל לכתוב ,Count += 1

אופרטורים דומים: יהיx = 6, y = “Hello נבצע את .“ הפעולות הבאות אחת אחרי השניה.

-= x -=3 means x = x – 3 => x = 3*= x *=3 means x = x * 3 => x = 9/= x /=3 means x = x / 3 => x = 3&= y &=“ John” means y = y & ”John”, y = “Hello John”

7

דוגמא

8

קלטים:

A 8 – ספרה, למשל

B מספר כלשהו עם הרבה – 57382ספרות, למשל

סיפרה A אם Trueפלט: False, אחרת Bהמוכלת ב-

9

התחל

B=0 or Found C B Mod 10

סיים

Found <--False

לא

A, B

כן

C=A

Found True

B B\10Found

תרשים זרימה

VBקוד ב-

10

Sub Main ()

Dim Found as Boolean

Dim A ,B, C, D as IntegerConsole.writeline (“What number do you want?”)

D= console.readline()B = DConsole.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

חילוק שלם נותן רק אתהחלק השלם של המנה

פתרון יותר קל ויותר קצרSub MainDim A_IN, B_IN as stringConsole.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 IfEnd Sub 11

לולאות - בדיקה בסוף

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

היות והתנאי נבדק רק בסוף, תמיד יש לפחות איטרציה אחת

Do-Loop-While/Until

13

Count Count + 1

Count > 10

התחל

Count 11

Count

סיים

לא

Code: Ex2.8 –DoLoopUntilדוגמא של לולאה שמתבצעת פעם אחת גם כאשר התנאי לא

מתקייםDim Count As IntegerCount = 11 ‘still allows one loopDo Console.WriteLine _

("Number of cycle through the loop: " & Count)

Count = Count + 1Loop Until Count > 10

14

עוד דוגמא

15

קלט: טקסט באנגלית.

כללי איות:

c יש כל אות חוץ מ-i, אם מיד לפני ה-e קודם לאות iהאות (1)

c יש האות e, אם מיד לפני ה-i קודם לאות eהאות (2)

i תמיד קודם לאות eבהתחלת מילה האות (3)

מופיע במילה, ובנוסף מיקומו iפלט: מספר הפעמים שהאות (אלא i מופיע לפני eשל כל טעות, כאשר טעות קורית כאשר

והאות הקודמת e מופיע לפני iאם זה בהתחלת המלה), או , למשל cהייתה

chief not cheif, but

receive not recieve

טעויות אפשריות

16

טעותע yטעותטע

><c c first

e i second

i e third

טעותi First letter in sentencee Second letter in

sentence

17

התחל

pos = -1?

סיים

pos -1, num 0

לא

Text

כן

Check for Spelling Mistake

Check for Problem

pos =-1”

” c “האם יש ” eלפניו ו-“

אחריו

חזור

לא כן

" i“לא – יש במקום

האחרון במילה

מספר פעמים מופיע i שהאות numשווה ל-

pos = 0 האם במקום

pos+1” eיש “

בעיה במקום pos

כן

לאכן

לא

pos הבא iמיקומו של האות

pos = 1

בעיה במקום pos

כן

כן

כן

pos >= 2<mila.length - 1

לא

” c “האם יש ” eלפניו ו-“

ceאחריו או "" בעיה במקום לפניו

pos

כן

האם יש "" ceלפניו

בעיה במקום pos

לא

לא

לאכן

num +=1

VBקוד ב-

19

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

Code in VB

20

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 IfElse

If mila.Chars(pos - 2) <> "c" And mila.Chars(pos - 1) = "e" Then Console.WriteLine("taut bekom {0}", pos)

End IfEnd Ifnum += 1Loop Until pos = -1 end sub

הסבר התוכנית" עוברים דרך המילה בקפיצות מאותi" לאות "i עד "

" בעזרת פקודת iשמגיעים לסוף המילה. מוצאים כל אות "indexof כאשר בכל פעם מתחילים את החיפוש מן התו

" הקודם. iשבא אחרי ה- " אפשרויות, ומתייחסים לכל אחת בנפרד.5ישנן 1 .pos = -1 זה קורה כאשר לא נשארו הופעות נוספות .

של האות (או שכלל לא היו). מדפיסים אז את מספר ההופעות

2 .pos=0" דהיינו שיש ,i במקום הראשון במלה, ואז אם "" במקום השני התוכנית מתריעה על טעותeיש "

3 .pos=1" דהיינו שיש ,i במקום השני במלה, , ואז אם "" אחריו, התוכנית מתריעה על טעותe" לפניו ו- "cיש "

21

הסבר התוכנית4 .pos>=2 אבל לא שווה למקום האחרון במילה דהיינו ,

" במקום שני והלאה אבל לא במקום האחרון, ואז iשיש "" x" לפניו, כאשר "xe" אחריו, או "e" לפניו ו- "cאם יש "

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

5" יש .i" במקום האחרון, ואז אם יש "xe" לפניו, כאשר "x "", אזי שוב פעם התוכנית מתריעה cמסמן כל אות חוץ מ-"

על טעות.

22

מאפיינים של לולאות1אתחל משתנה האינדקס .

2 בדוק תנאי (או בהתחלה או בסוף של הלולאה) שמכיל .

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

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

3.הגדל את ערכו של משתנה האינדקס.

23

For – Next Loop לולאתFor – Next המאפיינים לפקודה אחת. 3 משלב כל

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

24

Ex2.9-BasicForLoop1: Dim Count As Integer, Ans As

String2: For Count = 1 To 103: 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 If7: Next Count ‘The word count is

optional25

–Ex2.9-BasicForLoop הסבר 2,3,8שורות :Basic For Loop-10 עד 1 מדפיס ערכים מ .

גידול, אתחול, ובדיקת תנאי הוא אוטומטי בפקודה זו. בשורה

היו מודפסים.9 ו-1,3,5,7 רק STEP 2, אילו הוספנו ,2

האפשרות של [2שורה .as datatype מאפשרת לנו [

, For Count as Integer = 1 To 10 ככה: 2לשכתב שורה

(לפעמים עובד גם Countואז לא צריכים להגדיר מראש את

).As Integerבלי להוסיף

מאפשרת יציאה מוקדמת מן הלולאה בעזרת 6שורה :Exit For.אם עונים לשאלה תשובה שלילית

26

27

! N דוגמא - חישוב

התחל

i >N Natzeret<--Natzeret * i

סיים

Natzeret 1i1

ii + 1

לא

N

כן

VBקוד ב-

28

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עבור הלולאה לא תתבצע כלל

דוגמא קשה - פענוח ספרות רומיות מספר רומי מיוצג על ידי רצף של תווים כאשר לכל תו יש משמעות מספרית לפי

הערכים הבאים:I=1V=5X=10L=50C=100D=500M=1000

.מקובל לקרוא מספר רומי משמאל לימין וערכו המספרי שווה לסכום כל התווים.XXXVIII נכתב בייצוג רומי כך: 38לדוגמא המספר

:שנכתב על ידי 4כלל זה נכון לכל הספרות פרט ל IV 5-1 כלומר9 שנכתב על ידי IX 10-1 כלומר מיוצג על 40ובאותו האופן מיצגים את כל המספרים שמכילים ספרות אילו. לדוגמא

.MCMXCIX נכתב 1999 וכו'. לפי כלל זה המספר XL (50-10)ידי  .לכתוב תוכנית המקבלת מספר רומי כמחרוזת ומחשבת את ערכו המספרי

29

פענוח ספרות רומיות 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

30

פענוח ספרות רומיות 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") If q >= 0 Then num = num + 9 str = str.Replace("IX", "") End If

q = str.IndexOf("XL") If q >= 0 Then num = num + 40 str = str.Replace("XL", "") End If

q = str.IndexOf("XC") If q >= 0 Then num = num + 90 str = str.Replace("XC", "") End If

31

פענוח ספרות רומיות q = str.IndexOf(“CD") If q >= 0 Then num = num + 400 str = str.Replace(“CD", "") End If

q = str.IndexOf("CM") If q >= 0 Then num = num + 900 str = str.Replace("CM", "") End If

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

32

Ex2.10-ForWithinFor1: Dim Outer As Integer, In1 As

Integer2: For Outer = 5 To 1 Step -13: For In1 = 1 To Outer4: Console.Write(In1 & "

")5: Next In16: Console.WriteLine()

'new line7: Next Outer

33

Ex2.10-ForWithinFor - Explanation 2שורה :Step -1 גורם למשתנה Outer-1 ל-5 לקטון מ

כזכור, 4שורה :WRITE גורם לכתיבה בלי לעבור לשורה עושה), כך שהמספרים יהיו WRITELINEהבאה (כמו ש-

צמודים אחד לשני.

מעבר לשורה הבאה.6שורה :

5 4 3 2 1תוצאות : 1 2 3 4 1 2 3 1 2 1

34

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

עובדים.

:שתי אפשריות

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

ידוע בזמן הרצת התוכנית.

.פתרון: הזן בזמן ההרצה את מספר העובדים

2.מספר העובדים לא ידוע גם בזמן ההרצה .

:פתרון Do-While שמכיל תנאי שהופך להיותFalse

אחרי הזנת פרטי העובד האחרון.35

36

דוגמא: הענקת ערך לא מציאותי למשתנה כלשהו בסוף קריאת הנתונים

התחל

Rate

Rate <>-1 HoursSalary Hours

*Rate Salary Rate

סיים

- אינו ערך מציאותי 1מכיוון שאנחנו יודעים ש:, אנחנו יוצאים מן הלולאהRateעבור

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()

37

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: Loop38

-Ex2.11-Flagsהסבר קריאת 3,4שורות :Rate .לפני הלולאה

, לא ניכנס ללולאה.1בסוף, כשיהיה -

קריאת 11, 10שורות :Rate לפני סוף , לא ניכנס שוב 1הלולאה. כשמזינים -

ללולאה. נמשיך עם יתר התוכנית.

39

40

” במשתנה המשמש NO“דרך שנייה לציין הסוף: הצבת כדגל

התחל

Flag <>”NO” Hours Salary Hours *Rate

SalaryRate

סיים

הלולאה תמשיך להתבצע כל עוד לא נתנו ערך . כל ערך אחר Flag" למשתנה שנקרא NOשל "

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

אם להמשיך נשאלת, חוץ מאשר בפעם ".NOהאחרונה, שאז חייבים להזין "

See Ex2.12-QuestionFlag

Flag ”YES”

No More?

Flag ”NO”

כן

לא

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 41

Ex12.2-QuestionFlagהסבר - יתרונות לשיטה זו פקודת קריאה למשתנהRateמופיעה רק פעם אחת

– משתנה נוסףFlagמשמש כדגל –

.התנאי מתבסס על משתנה הדגל

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

42

דרך שלישית לציין סוף נתוניםDim Rate as string, Rate_Num as SingleDim EndOfData as BooleanDo Until EndOfData If Rate = “” then

EndOfData = True Else

If IsNumeric (Rate) Then Rate_Num = Rate …. End If

EndIfLoop

מאפשר לחיצתENTERכשהנתונים נגמרים שאלות אי-זוגיות8תרגיל –

43

Select הרחבה שלIF 2, שבמקור עובד עם רק

אפשרויות

מחלק את כל האופציות לקבוצות מקבילות

דרך פשוטה לתאר כל קבוצה ואבריה

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

44

דוגמא יכולים רק לרכב על אופניים13 עד 1ילדים מגיל

יכולים גם לרכב על אופנוע14,15ילדים בגיל

ומעלה יכולים גם לנהוג ברכב16אנשים בני

תוכנית: קולט גיל, מדפיס אופציות הפתוחותלאותו אדם

45

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 1310: Console.WriteLine("Only bike")11: ' Alternative way of showing this12: ' Case Is < 1413: ' Console.WriteLine("Only bike")14: Case Is < 1615: Console.WriteLine("Only bike or motorcycle")16: Case Else17: Console.WriteLine(“Even a Car")18: End Select

46

Select FormatFormat:Select Case <ביטוי לבדיקה> [Case <רשימה להשוואה> פקודות] ……………………… [Case Else פקודות]End Select

47

Select Format - Explanation ביטוי לבדיקה)test expression : (1 4 מתוך

אפשרויות

1 ביטוי אריתמטי אם ערך שלם או דצימלי. אם החלק .

), רשימת 4/3העשרוני חוזר על עצמו ( למשל

ההשוואה צריכה להכיל טווח ולא ערך מדויק.

2 ביטוי בוליאני .

3) או יותר מחרוזות מחוברות 1. ביטוי מסוג מחרוזת

על ידי אופרטורים המתאימים למחרוזות)

4תאריך .48

-Select Formatהסבר האפשרויות דלהלן, מופרדות 3 או יותר מ-1רשימה להשוואה

על ידי פסיקים:

), למשל אריתמטי עם ערך שלם או דצימלי, Expression. ביטוי (1

מסוג מחרוזת, תאריך, או בוליאני

2 .Expression1 TO expression2 אם מדובר על ביטוי מסוג .

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

expression1-ו expression2“ למשל .black” to “green כולל ”

"brown"

3. IS <operator> expression כאשר operator :הוא אחד מתוך

<>,=,=<,=>,<,>

49

הסבר התוכנית הביטוי האריתמטי מכיל רק משתנה 4שורה :

Ageאחד,

ביטוי אריתמטי המורכב ממספר אחד5שורה :

ביטויים אריתמטיים חד-ערכיים 7שורה :

מופרדים על ידי פסיקים

7: כולל אופציית הטווח: 9שורה To 1350

הסבר התוכנית שימוש בפורמט: 12שורה :IS

<operator<

מתבצעת (12: אם שורה 14שורה Age ) , לא מבצעים שורה זו, על אף 14 >

Age < 16שעדיין:

מתבצעת אם לא נבחר אופציה 16שורה :

אחרת

51

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

חילוק

פלוט את התוצאה

הביטוי לבדיקה ורשימת ההשוואה הםמחרוזות

52

קוד לדוגמת מחשבון 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. 53

קוד לדוגמת מחשבון - המשך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

54

If עם Selectדוגמא של :כללי תשלום לשעות נוספות150% שעות עבודה8 אחרי 1-5: ימים 200% שעות עובדה5: יום שישי, אחרי 300%מוצאי שבת, לכל שעות עבודה :

:קלטRate, Hours, Day :פלטSalary(שכר לאותו יום)

55

(קוד)If עם Selectדוגמא של Dim Day As IntegerDim Taut As BooleanDim Rate, Hours, Salary As DecimalConsole.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()

56

(קוד - המשך)If עם Selectדוגמא של 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 * Hours Else Salary = Rate * 5 + Rate * 2 * (Hours - 5) End If Case 7 Salary = Rate * 3 * Hours Case Else Taut = True End Select

57

(קוד - המשך)If עם Selectדוגמא של If Taut Then Console.WriteLine("Day of the week - between 1 and 7

only")Else Console.WriteLine("Your salary is: " & Format(Salary,

"$#.00"))End IfAlternative Method: Declare Day as StringInstead 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” 58

Selectמגבלות של Selectיכול לטפל בביטוי לבדיקה אחד בלבד

עדיף להשתמש ב-2אם יש לנו ,ElseIf

דוגמא: במקרה הקודם, ילדים משפיעים על שכר

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

5 יותר אם יש לך ילדים למטה מגיל 25%מקבלים

). Children(משתנה בוליאני שנקרא 59

הרחבת הדוגמא של שעות נוספות 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

If Hours <= 8 Then

Salary = Rate * Hours

Else

Salary = Rate * 8 + Rate * 1.75 * (Hours - 8)

End If60

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

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

If Hours <= 5 Then

Salary = Rate * Hours

Else

Salary = Rate * 5 + Rate * 2.25 * (Hours - 5)

End If61

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

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 If62

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

))60,>31-50,50-59, 18-30בקבוצת הגיל

קלט: תאריך לידה

פלט: ההודעה המתאימה

:דרוש

1 עריכה – כדי להיות בטוח שתאריך הקלט הוא .

תאריך תקין

2 חישוב הגיל, מבוסס על תאריך הנוכחי ותאריך .

הלידה.

63

עריכת תאריך הלידה וקביעת הגיל

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

Else

Age = Now.Year - Birthdate.Year - 1

End If

Console.WriteLine(Age)

הדפסת ההודעה הנכונה על רישיון הנהיגה

65

Select case age

Case 18 to 30

Case 31 to 50

Case 51 to 60

Case Is > 60

End select, שאלות 9תרגיל

אי-זוגיות

- Ex2.19יצירת מספרים מקריים נתכנת משחק שנקרא: נחש את המספר

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

ומספרים לו כמה ניחושים נדרשו 5 אם ניחש לא נכון, אומרים לו אם הניחוש היה גבוה .

.3או נמוך, ומחזירים אותו לצעד 66

– 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 If67

– 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 68

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 If69

Ex2.19 –Random NumbersGuesscount += 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.")70

Ex2.19 –Random NumbersProgramהסבר התוכנית

ליצור מספרים מקריים, מתחילים על ידי כתיבת

Dim RandomObject As Random = New Random()

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

התוכנית

:יצירת מספרים מקריים בין הגבולות הרצוייםTarget Number =

RandomObject.Next(LowerBound, UpperBound + 1)

71

top related