180 likes | 370 Views
הרצאה 8. מבוא למדעי המחשב לתעשייה וניהול. החלפת ערכים - תזכורת. תוכנית מחשב למשחק קלפים " טאקי " ... הניחו קלף "החלף": יש להחליף את מספר הקלפים שיש לכל שחקן. ראינו: Module Module1 Sub Main() Dim a, b As Integer a = 8 b = 2
E N D
הרצאה 8 מבוא למדעי המחשב לתעשייה וניהול
החלפת ערכים - תזכורת • תוכנית מחשב למשחק קלפים "טאקי" ... • הניחו קלף "החלף": יש להחליף את מספר הקלפים שיש לכל שחקן. ראינו: ModuleModule1 Sub Main() Dim a, b AsInteger a = 8 b = 2 Console.WriteLine("a is {0} and b is {1} ", a, b) Dim temp AsInteger temp = a a = b b = temp Console.WriteLine("a is {0} and b is {1} ", a, b) EndSub EndModule
פונקציה Swap – הצעה 1 ModuleModule1 Sub Swap(ByVal first AsInteger, ByVal second AsInteger) Dim temp AsInteger temp = first first = second second = temp Console.WriteLine("The first variable is now " & first) Console.WriteLine("The second variable is now " & second) EndSub Sub Main() Dim x AsInteger = 4 Dim y AsInteger = 5 Swap(x, y) Console.WriteLine("x is now " & x) Console.WriteLine("y is now " & y) EndSub EndModule
פונקציה Swap – הצעה 2 משתנים גלובליים ModuleModule1 Dim x AsInteger = 4 Dim y AsInteger = 5 Sub Swap() Dim temp AsInteger temp = x x = y y = temp Console.WriteLine("The first variable is now " & x) Console.WriteLine("The second variable is now " & y) EndSub Sub Main() Swap() Console.WriteLine("X is now " & x) Console.WriteLine("y is now " & y) Console.ReadKey() EndSub EndModule
פונקציה Swap – הצעה 3 byRef ModuleModule1 Sub Swap(ByRef first AsInteger, ByRef second AsInteger) Dim temp AsInteger temp = first first = second second = temp Console.WriteLine("The first variable is now " & first) Console.WriteLine("The second variable is now " & second) EndSub Sub Main() Dim x AsInteger = 4 Dim y AsInteger = 5 Swap(x, y) Console.WriteLine("X is now " & x) Console.WriteLine("y is now " & y) Console.ReadKey() EndSub EndModule
פונקציה - Function • "פונקציה" (Function) היא אוסף של פקודות המבצעות מטלה ומחזירות ערך • השגרה מתחילה ב Function nameOfSub() As returnType • ומסתיימת ב End Function • באמצע יופיעו הפקודות המרכיבות את השגרה. • והחזרה של ערך, באחד משני הדרכם: • return xxxx • nameOfSub = xxxx • נשתמש ב Function כאשר יש צורך באיגוד של מספר פקודות ביחד ויש צורך במתן משוב לאחר ביצוע הפקודות
פונקציה עם החזרת ערך ModuleModule1 FunctionAskAddTwo() AsInteger Dim x AsInteger x = Console.ReadLine() Return x + 2 EndFunction Sub Main() Dim x AsInteger x = AskAddTwo() Console.WriteLine("X is now " & x) Console.ReadKey() EndSub EndModule
פונקציה עם החזרת ערךוהעברת פרמטר ModuleModule1 FunctionPlusTwo(ByVal first AsInteger) AsInteger Return first + 2 EndFunction Sub Main() Dim x AsInteger x = PlusTwo(5) Console.WriteLine("X is now " & x) Dim y AsInteger y = PlusTwo(2) + PlusTwo(7) Console.WriteLine("Y is " & y) Console.ReadKey() EndSub EndModule
פונקציה עם החזרת ערךוהעברת כמה פרמטרים ModuleModule1 Functionmult(ByValfirst AsInteger, ByVal second AsInteger, ByVal third AsInteger) AsInteger Return first * second + third * first EndFunction Sub Main() Dim x, y, z AsInteger z = 3 x = 4 y = 5 Console.WriteLine("What??? " & mult(z, x, y)) Console.WriteLine("What??? " & mult(x, y, z)) Console.ReadKey() EndSub EndModule
סברוטינהadd – משיעור קודם ModuleModule1 Sub Add(ByVal x AsInteger, ByVal y AsInteger) Dim sum AsInteger sum = x + y Console.WriteLine("The sum is " & sum) EndSub Sub Main() Dima AsInteger = 20, b AsInteger = 15 Add(a, b) 'Console.WriteLine("The sum is " & sum)אי אפשר לעשות את זה. Console.ReadKey() EndSub EndModule
פונקציה add – שיפור ModuleModule1 Function Add(ByVal x AsInteger, ByVal y AsInteger) AsInteger Dim sum AsInteger sum = x + y Return sum EndFunction Sub Main() Dim res AsInteger Dima AsInteger = 20, b AsInteger = 15 res = Add(a, b) Console.WriteLine("The sum of {0} and {1} is {2}" ,a,b,res) res = Add(a, b) + 20 Console.WriteLine("The sum of {0},{1} and 20 is {2}", a,b,res) Console.ReadKey() EndSub EndModule
דוגמא נוספת – החזרת ערך ללא שימוש ב return ModuleModule1 PublicFunction print(ByVal x AsInteger, ByVal y AsInteger) AsString print = "Good morning " & x + y EndFunction Sub Main() DimiAsInteger, j AsInteger, stAsString Fori = 1 To 10 j = 2 st = print(i, j) Console.WriteLine(st) 'Console.WriteLine(print(i, j)) Next Console.ReadKey() EndSub EndModule
פונקציה המקבלת מספרn ומחזירה n! ModuleModule1 FunctionAtzeret(ByVal first AsInteger) AsInteger Dim product AsInteger = 1 DimiAsInteger Fori = 2 To first product *= i Next Return product EndFunction Sub Main() Console.WriteLine("What??? " & Atzeret(5)) Console.ReadKey() EndSub EndModule
פונקציה המקבלת שני מספרים ומחזירה את הראשון בחזקת השני ModuleModule1 FunctionChezkat(ByVal first AsInteger, ByVal second AsInteger) AsInteger Dim product AsInteger = 1 DimiAsInteger Fori = 1 To second product *= first Next Return product EndFunction Sub Main() Console.WriteLine("What??? " & Chezkat(2, 3)) Console.WriteLine("What??? " & Chezkat(4, 2)) Console.WriteLine("What??? " & Chezkat(10, 3)) Console.ReadKey() EndSub EndModule
פונקציה המקבלת ציון מספרי ומחזירה ציון במחרוזת ModuleModule1 Function Grade(ByVal first AsDecimal) AsString Dim answer AsString = "Better next time" If (first < 100 And first > 90) Then Return"Meule" ElseIf (first <= 90 And first > 80) Then Return"Tov Meod" EndIf Return answer EndFunction Sub Main() Dim x AsString x = Grade(85) Console.WriteLine("x is now " & x) Console.WriteLine("x is now " & Grade(40)) EndSub EndModule
סיכום המושגים "מקבלת" "מחזירה" • כאשר נאמר שפונקציה או סברוטינה "מקבלת" – הכוונה לפרמטר (ארגומנט) • אין הכוונה שיבוצע קלט בתוך הסברוטינה/ פונקציה . • יש לבצע קלט בתוך סברוטינה/ פונקציה אך ורק אם נאמר בפירוש. • כאשר נאמר שפונקציה "מחזירה" – הכוונה להחזרה באמצעות ארגומנט • אין הכוונה שיבוצע פלט בתוך הפרוצדורה. • יש לבצע פלט בתוך הפרוצדורה אך ורק אם נאמר בפירוש.