לולאות- loops שני סוגי לולאות:
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