230 likes | 364 Views
הרצאה 7. מבוא למדעי המחשב לתעשייה וניהול. סברוטינות subroutines. שימוש חוזר בקטעי קוד ומודולריות. מניע 1: נניח שכתבנו קטע קוד המבצע מטלה מסוימת למשל - מציאת מינימום, חישוב ממוצע, הדפסה, קריאת קלט רוצים לחזור על אותה המטלה יותר מפעם אחת (לאו דווקא ברצף) האם חייבים לכתוב שוב את אותו הקוד?
E N D
הרצאה 7 מבוא למדעי המחשב לתעשייה וניהול
שימוש חוזר בקטעי קוד ומודולריות • מניע 1: • נניח שכתבנו קטע קוד המבצע מטלה מסוימת • למשל - מציאת מינימום, חישוב ממוצע, הדפסה, קריאת קלט • רוצים לחזור על אותה המטלה יותר מפעם אחת • (לאו דווקא ברצף) • האם חייבים לכתוב שוב את אותו הקוד? • מניע 2: • רוצים לחלק את הקוד לחלקים בעלי משמעות למען סדר, קריאה נוחה, כתיבה נוחה ?
שגרה - Sub • "שגרה" (subroutine) היא אוסף של פקודות המבצעות מטלה • השגרה מתחילה ב Sub nameOfSub() • ומסתיימת ב End Sub • באמצע יופיעו הפקודות המרכיבות את השגרה. • נשתמש ב Sub כאשר יש צורך באיגוד של מספר פקודות ביחד • ואין צורך במתן משוב לאחר ביצוע הפקודות
דוגמא1 ל Sub ModuleModule1 Sub Print() Console.WriteLine("Im in the sub") EndSub Sub Main() Print() Console.WriteLine("Im in main") Print() Console.ReadKey() EndSub EndModule
דוגמא2 ל Sub ModuleModule1 Sub Print() Console.WriteLine("Im in the sub") EndSub Sub Main() ForiAsInteger = 0 To 9 Print() Next Console.ReadKey() EndSub EndModule
דוגמא3 ל Sub ModuleModule1 SubAddNumbers() Dim first AsInteger Dim second AsInteger Dim answer AsInteger Console.WriteLine("Please type a number") first = Console.ReadLine() Console.WriteLine("Please type another number") second = Console.ReadLine() answer = first + second Console.WriteLine("The total is " & answer) EndSub Sub Main() AddNumbers() Console.ReadKey() EndSub EndModule
דוגמא4 ל Sub- העברת פרמטר ModuleModule1 Sub Print(ByVal x AsInteger) Console.WriteLine("Im in the sub, number " & x) EndSub Sub Main() Dim a AsInteger = 1 Print(a) a = 2 Print(a) Console.ReadKey() EndSub EndModule
דוגמא5 ל Sub- העברת כמה פרמטרים ModuleModule1 Sub Add(ByVal x AsInteger, ByVal y AsInteger) Dim sum AsInteger sum = x + y Console.WriteLine("The sum is " & sum) EndSub Sub Main() Add(2, 3) Dim a AsInteger = 20, b AsInteger = 15 Add(a, b) 'Console.WriteLine("The sum is " & sum)אי אפשר לעשות את זה. Console.ReadKey() EndSub EndModule
תחומי הגדרה של משתנים • ניתן להגדיר משתנים במקומות שונים בקוד • מיקום ההגדרה משפיע על תחום ההגדרה (איפה המשתנה מוכר) • משתנה מקומי (local) • משתנה שמוכר רק בתוך שגרה מסוימת • מגדירים בתוך Sub(או בתוך Function) • משתנה גלובלי (global) • משתנה שמוכר בכל חלקי התוכנית • מגדירים בתוך המודול, לא בתוך Sub (וגם לא בתוך Function)
דוגמא 6 ל Sub תחומי הגדרה ModuleModule1 Dim b AsInteger SubmySub() Dim a AsInteger = 6 a = a + 1 b = 5 'c = 87 EndSub Sub Main() Dim c AsInteger c = c * 2 b = 8 Console.WriteLine(b) mySub() 'a = 4 +2 Console.WriteLine(b) EndSub EndModule
דוגמא 7 ל Sub ModuleModule1 PublicSub print(ByVal j AsInteger) Console.WriteLine("Good morning" & j) EndSub Sub Main() DimiAsInteger Fori = 1 To 10 print(i) Next Console.ReadKey() EndSub EndModule
דוגמא 8 ל Sub- שימו לב לתחומי הגדרה של המשתנים! ModuleModule1 PublicSub print(ByVal j AsInteger, ByVal k AsInteger) Console.WriteLine("Good morning " & j + k) EndSub Sub Main() Dim i AsInteger, j AsInteger Fori = 1 To 10 j = 2 print(i, j) Next Console.ReadKey() EndSub EndModule
הורדת רווחים ממחרוזת: Dim x AsInteger DimIsSpaceAsBoolean = False x = Console.Read() While x <> AscW(vbCr) Ifx = AscW(" ") Then 'If Not (IsSpace) Then IfIsSpace = FalseThen IsSpace = True Console.Write(ChrW(x)) EndIf Else Console.Write(ChrW(x)) IsSpace= False EndIf x = Console.Read() EndWhile
היפוך ספרות: Dim x AsInteger Dimresult, valAsInteger x = Console.Read() val = x - AscW(0) result = result + val * 1 x = Console.Read() val = x - AscW(0) result = result + val * 10 Console.WriteLine("the reversed number is " & result)
קצת מתמטיקה...סדרת פיבונאצ'י: • סדרת פיבונאצ'י היא הסדרה שאיבריה הראשונים 1 ו-1, וכל איבר אחר בה שווה לסכום שני קודמיו
סדרת פיבונאצ'י: Dim a AsInteger = 0, b AsInteger = 1, i AsInteger, n AsInteger Console.WriteLine("Enter a even n") n = Console.ReadLine() Console.WriteLine(a) Console.WriteLine(b) Ifn Mod 2 = 0 Then Fori = 1 To (n - 2) / 2 a = a + b Console.WriteLine(a) b = a + b Console.WriteLine(b) Next Else Console.WriteLine("n has to be even") EndIf
משחק ניחוש: Dimnum, guess AsInteger DimRandomClassAsNewRandom() num= RandomClass.Next(1, 100) Do Console.WriteLine("Please try to guess the number") guess = Console.ReadLine() If(guess > num) Then Console.WriteLine("You guessed too high") ElseIf(guess < num) Then Console.WriteLine("You guessed too low") Else Console.WriteLine("You got it") EndIf LoopWhile (num <> guess)
האם מספר אקראי הוא ראשוני (א): Dim b AsInteger = 2, iAsInteger = 3 האם חיוני לקבוע את ערכי bו i?' Dimdegel_IntAsInteger = 0 Randomize() b = CInt(Rnd() * 60 + 10) Console.WriteLine(b) Fori = 2 To b - 1 If b Modi = 0 Then degel_Int= 1 EndIf Next Ifdegel_Int = 0 Then Console.WriteLine("yes") Else Console.WriteLine("no") EndIf
האם מספר אקראי הוא ראשוני (ב): Dim b AsInteger = 2, i AsInteger = 3 DimdegelAsBoolean = False Randomize() b = CInt(Rnd() * 60 + 10) Console.WriteLine(b) Fori = 2 To b - 1 If b Modi = 0 Then degel = True EndIf Next Ifdegel = FalseThen'using a Boolean degel 'If Not (degel) Then 'this does the same as the line above Console.WriteLine("yes") Else Console.WriteLine("no") EndIf
עצרת של מספר אקראי: Dim a AsInteger = 1, iAsInteger = 0, n AsInteger = 0 Randomize() n = Int(8 * Rnd()) If n > 0 Then Fori = 1 To n a = a * i Next EndIf Console.WriteLine("the factorial of " & n & "is: " & a)