420 likes | 680 Views
הודעות: http://www.jct.ac.il/~richards/intro-program.htm או דרך moodle – ושם לפנות ל: אתר מכון טל החומר המועלה ל moodle ישירות נועד למכון לב. יש להגיש תרגילים רק למייל הרשום בתרגיל ולא דרך המודל מועד ההגשה של כל תרגיל הוא יום שני לאחר קבלת הרגיל עד חצות (אלא אם כן נאמר אחרת ).
E N D
הודעות: http://www.jct.ac.il/~richards/intro-program.htm או דרך moodle – ושם לפנות ל: אתר מכון טל החומר המועלה לmoodle ישירות נועד למכון לב. יש להגיש תרגילים רק למייל הרשום בתרגיל ולא דרך המודל מועד ההגשה של כל תרגיל הוא יום שני לאחר קבלת הרגיל עד חצות (אלא אם כן נאמר אחרת ). מועדי הגשה המפורטים ב moodle אינם רלונטיםלמכון טל מבוא למדעי המחשב לתעשייה וניהול הרצאה 3
מפעל השעווה - לוגיקה ומשפטי תנאי • עד עכשיו טיפלנו בייצור נרות מסוג אחד, במחיר אחיד • המערכת הוגדרה באופן סדרתי (יש מסלול בודד) • המחיר חושב באופן אחיד לכל הזמנה: מספר נרות * מחיר לנר • נניח שרוצים לתת הנחה במקרה שההזמנה גדולה ?
זרימת הבקרה • בהעדר הוראה אחרת התוכנית זורמת לפי סדר, • פקודה אחר פקודה • יש פקודות שמאפשרות לנו להחליט • אם לבצע פקודה או לא • לבצע פקודות שוב ושוב • ההחלטה מתבצעת על סמך ביטויים או תנאים בוליאניים שערכם אמת (true) או שקר (false) • סדר ביצוע הפקודות נקרא זרימת הבקרה(flow of control)
זרימת הבקרה ללא פיצולים התחלת התוכנית הצהרה (statement) הצהרה (statement) הצהרה (statement) הצהרה (statement) סוף התוכנית
הביטוי (condition)חייב להיות ביטוי בוליאני – כלומר ערכו אמת - true או שקר - false If, Then, End If מילים שמורות אם הביטוי (condition)אמת (true)מבוצעת ההצהרה (statement) אם הביטוי (condition)שקר (false) מדלגים על ההצהרה (statement) פקודת If • פקודת Ifנכתבת באופן הבא: If condition Then statement End If
הביטוי נבדק False שקר הלוגיקה של פקודת If true אמת הצהרה מבוצעת (statement)
ההצהרה - statement הביטוי - condition דוגמאות לשימוש בIf ModuleModule1 Sub Main() Dim age AsInteger Console.WriteLine("Please enter your age") age = Console.ReadLine() Ifage > 18 Then Console.WriteLine("You are an adult") EndIf Console.ReadKey() EndSub EndModule
ביטויים בוליאניים • בביטוי שבפקודת if משתמשים הרבה פעמים באופרטורים של השוואה המחזירים ערך בוליאני = equal to (שווה) <> not equal to (לא שווה) < less than (קטן מ) > greater than (גדול מ) <= less than or equal to (קטן או שווה ל) >= greater than or equal to (גדול או שווה ל)
הביטוי - condition דוגמאות 2 לשימוש בIf ModuleModule1 Sub Main() Dim lamp AsBoolean = True If lamp Then Console.WriteLine("The lamp is on") EndIf Console.ReadKey() EndSub EndModule
הזחה - אינדנטציה • הקשר בין ההצרה של פקודת ifלהצהרה יש לבצע אינדנטציה • אינדנטציהמסייעת לקריאות של התוכנית Iflamp Then Console.WriteLine("The lamp is on") Console.WriteLine(“blabla") EndIf • אינדנטציה היא חסרת משמעות לקומפיילר אך קריטית למתכנת If lamp Then Console.WriteLine("The lamp is on") EndIf Console.WriteLine(“blabla")
מפעל השעווה - לוגיקה ומשפטי תנאי • נניח שרוצים להודיע שתינתן הנחה במקרה שההזמנה גדולה. ModuleModule1 Sub Main() DimnumCandles AsInteger = 4400 Console.WriteLine("Please enter the amount of candles") numCandles = Console.ReadLine() IfnumCandles > 100 Then Console.WriteLine("you get a discount") EndIf Console.ReadKey() EndSub EndModule
הביטוי נבדק (condition) הלוגיקה של פקודת If, Else If condition Then statement1 Else statement2 End If true אמת false שקר הצהרה מבוצעת (statement 1) הצהרה מבוצעת (statement 2)
דוגמא לפקודת Else ModuleModule1 SubMain() DimnumCandles AsInteger = 4400 Console.WriteLine("Please enter the amount of candles") numCandles= Console.ReadLine() IfnumCandles > 100 Then Console.WriteLine("You get a discount") Else Console.WriteLine("No discount for you...") EndIf Console.ReadKey() EndSub EndModule
שימוש בתיבת הודעה - InputBox • ראינו שימוש בתיבת MsgBox לפלט • ישנו גם InputBox המשמש לקלט ModuleModule1 Sub Main() DimnumAsInteger num = InputBox("please enter a number") Ifnum > 10 Then MsgBox("number is bigger than 10") Else MsgBox("number is smaller than 10") EndIf EndSub EndModule
מפעל השעווה – "גם" "או" "היפוך" • שילוב מספר תנאים יחד? • הזמנה קטנה של נרות אדומים • קטן וגם אדום • הזמנה שאין בה נרות פשוטים • היפוך של פשוט • הזמנה שיש בה כמות גדולה של נרות או נרות מדגם מיוחד • גדול או מיוחד ....
אופרטורים לוגיים • לכל ביטוי בוליאני יש ערך אמת -TRUE או שקר - FALSE • ביטוי אמת מחזיר את הערך 1 וביטוי שקר מחזיר 0 • נשלב שני ביטויים בוליאניים בעזרת "וגם" And "או" Or "היפוך" Not • למשל אם A ו B הם ביטויים בוליאניים הביטוי A And B גם כן בוליאני. • ערך הביטוי המשולב תלוי בחלקים ובאופרטור השילוב • דוגמא: • A הוא הביטוי age < 18 • B הוא הביטוי age > 6 • משמעות הביטוי A And B היא שהגיל קטן מ 18 וגדול מ 6.
"וגם" - AND True False False False
דוגמא לשימוש ב And ModuleModule1 SubMain() Dim age AsInteger Console.WriteLine("Please enter your age") age = Console.ReadLine() If age > 6 And age < 18 Then Console.WriteLine("Go to school") EndIf Console.ReadKey() EndSub EndModule
"או" - OR True True True False
דוגמא לשימוש ב Or ModuleModule1 SubMain() Dim age AsInteger Console.WriteLine("Please enter your age") age = Console.ReadLine() If age < 6 Or age > 18 Then Console.WriteLine("no school for you!") EndIf Console.ReadKey() EndSub EndModule
"היפוך" - NOT False True
דוגמא לשימוש ב Not ModuleModule1 SubMain() Dim age AsInteger Console.WriteLine("Please enter your age") age = Console.ReadLine() IfNot (age = 100) Then Console.WriteLine("very young...") EndIf Console.ReadKey() EndSub EndModule
וכמובן שאפשר להרכיב.... ModuleModule1 SubMain() Dim numCandles, x AsInteger x = 5 Console.WriteLine("Please enter the amount of candles") numCandles = Console.ReadLine() IfnumCandles > 100 AndnumCandles < 500 And x = 2 Then Console.WriteLine("You get a discount") Else Console.WriteLine("No discount for you...") EndIf Console.ReadKey() EndSub EndModule
אופרטורים לוגיים - סיכום • בביטויים בוליאניים אפשר להשתמש גם באופרטורים לוגיים. And, Or, Not • אופרטור וגם ( AND) מחזיר אמת אם שני הביטויים משני הצדדים של האופרטור אמת • אופרטור או ( OR ) מחזיר אמת אם אחד מהביטויים משני הצדדים של האופרטור אמת • אופרטור שלילה הלוגי ( NOT ) הופך את ערכו הלוגי של ביטוי הלוגי מימינו.
פקודת ElseIf • פיצול ליותר משני מקרים עושים בעזרת ElseIf If condition Then statement1 ElseIfcondition statement2 ElseIfcondition statement3 . . . Else statement-n End If
ניחוש צבעים – מה יקרה פה? מה רוצים שיקרה פה? ModuleModule1 SubMain() Dimcolor AsString = "red" 'Dim color As String = "purple" If color = "red"Then Console.WriteLine("The color is red") EndIf If color = "green"Then Console.WriteLine("The color is green") EndIf Console.WriteLine("I dont know this color") EndSub EndModule
ניחוש צבעים – הצעה לשיפור ModuleModule1 SubMain() Dimcolor AsString = "red" 'Dim color As String = "purple" If color = "red"Then Console.WriteLine("The color is red") ElseIf color = "green"Then Console.WriteLine("The color is green") Else Console.WriteLine("I dont know this color") EndIf EndSub EndModule
ציונים – צריך עזרה? ModuleModule1 SubMain() Dimgrade AsInteger grade = Console.ReadLine() If (grade >= 90) Then Console.WriteLine("you got an A") EndIf If (grade >= 80) Then Console.WriteLine("you got an B") EndIf If (grade >= 70) Then Console.WriteLine("you got an C") EndIf If (grade >= 60) Then Console.WriteLine("you got an D") EndIf If (grade < 60) Then Console.WriteLine("you failed") EndIf EndSub EndModule
ציונים – פתרון אפשרי ModuleModule1 SubMain() Dim grade AsInteger grade = Console.ReadLine() If (grade >= 90 And grade <= 100) Then Console.WriteLine("you got an A") EndIf If (grade >= 80 And grade < 90) Then Console.WriteLine("you got an B") EndIf If (grade >= 70 And grade < 80) Then Console.WriteLine("you got an C") EndIf If (grade >= 60 And grade < 70) Then Console.WriteLine("you got an D") EndIf If (grade < 60) Then Console.WriteLine("you failed") EndIf EndSub EndModule
ציונים – פתרון משופר ModuleModule1 SubMain() Dim grade AsInteger grade = Console.ReadLine() If (grade >= 90) Then Console.WriteLine("you got an A") ElseIf (grade >= 80) Then Console.WriteLine("you got an B") ElseIf (grade >= 70) Then Console.WriteLine("you got an C") ElseIf (grade >= 60) Then Console.WriteLine("you got an D") Else Console.WriteLine("you failed") EndIf EndSub EndModule
שימוש ב if בתוך if Dimnum1, num2, num3, min AsSingle min = 0 Console.WriteLine("Enter three numbers: ") num1 = Console.ReadLine() num2 = Console.ReadLine() num3 = Console.ReadLine() If num1 < num2 Then If num1 < num3 Then min = num1 Else min = num3 EndIf Else If (num2 < num3) Then min = num2 Else min = num3 EndIf EndIf Console.WriteLine("Minimum value: " & min)
מה קורה כאן? Dimx, y AsString x = Console.ReadLine() If(x = "A") Then Console.WriteLine("Now enter something else") y = Console.ReadLine If (y = "B") Then Console.WriteLine("Good") Else Console.WriteLine("Bad") EndIf Else Console.WriteLine("Not Defined") EndIf
פונקציות מתמטיות • על מנת להשתמש בפונקציות מתמטיות אפשר להשתמש בחבילה בה מוגדרות פונקציות אלו. • יש לכתוב בתחילת התוכנית (לפני Module Module1) Imports System.Math • הפונקציות הקיימות הן: • Abs – ערך מוחלט • Pi – הערך של π • Sqrt – שורש ריבועי • Pow – מעלה בחזקה • Sgn– הסימן של המספר • Cos, Exp, Log, Sin, Tan • אפשר גם לא לעשות Imports System.Math, ואז לקרוא לפונקציות • Math.Pi, Math.Sqrt וכו'
דוגמא - פונקציות מתמטיות 'Imports System.Math ModuleModule1 Sub Main() Dim x AsDecimal = Math.Abs(-10.4) Dim y AsDecimal Console.WriteLine("I will find the square root of a number") y = Console.ReadLine() Console.WriteLine("The absolute value is " & x) Console.WriteLine("The value of PI is " & Math.PI) Console.WriteLine("The square root of " & y & " is " & Math.Sqrt(y)) Console.WriteLine("2 to the 4.5 power is " & Math.Pow(2, 4.5)) Console.ReadKey() EndSub EndModule
Select Case – לבחירה בין מספר ערכים Dimletter AsChar Console.WriteLine("Please enter a letter:") letter = Console.ReadLine() SelectCase letter Case"a" Console.WriteLine("you selected the first letter") Case"b" Console.WriteLine("you selected the second letter") Case"c" Console.WriteLine("you selected the third letter") Case"z" Console.WriteLine("you selected the last letter") Case Else Console.WriteLine("you selected a regular letter") EndSelect
Select Case – דוגמא Dim number AsInteger = 8 SelectCase number Case 1 To 5 Console.WriteLine("Between 1 and 5, inclusive") Case6, 7, 8 Console.WriteLine("Between 6 and 8, inclusive") Case9 To 10 Console.WriteLine("Equal to 9 or 10") Case Else Console.WriteLine("Not between 1 and 10, inclusive") EndSelect