110 likes | 337 Views
הרצאה 12. מבוא למדעי המחשב לתעשייה וניהול. דוגמאות ותרגול נוסף במערך חד ממדי. תרגיל 1 – הפיכת סדר איברים במערך. נרצה להפוך את סדר הערכים במערך נראה שני פתרונות שימוש במערך עזר הפיכה בתוך המערך עצמו. 0 1 2 3 4. 2. 4. 5. 9. 7. arr. 9. 9. 7. 7. 5. 5. 2. 2. 4.
E N D
הרצאה 12 מבוא למדעי המחשב לתעשייה וניהול דוגמאות ותרגול נוסף במערך חד ממדי
תרגיל 1 – הפיכת סדר איברים במערך • נרצה להפוך את סדר הערכים במערך • נראה שני פתרונות • שימוש במערך עזר • הפיכה בתוך המערך עצמו
0 1 2 3 4 2 4 5 9 7 arr 9 9 7 7 5 5 2 2 4 4 arrhelp arr הפיכת מערך בעזרת מערך עזר המערך לפני: מערך עזר המערך אחרי:
קוד פתרון 1 – מערך עזר SubMain() Dim arr() AsSingle = {1, 2, 3, 4, 5, 6} Dimarrhelp(arr.Length()) AsSingle Fori = 0 Toarr.Length - 1 arrhelp(i) = arr(arr.Length - i - 1) Next Fori = 0 Toarr.Length - 1 arr(i) = arrhelp(i) Next Fori = 0 Toarr.Length - 1 Console.Write(arr(i) & ", ") Next EndSub
2 4 5 9 7 arr 2 4 5 2 7 arr 9 9 9 7 4 4 5 5 5 2 2 2 4 4 7 arr arr arr הפיכת מערך בתוך המערך עצמו(ללא מערך עזר) 9 5 7 temp ההחלפה הסתיימה!
פתרון 2 – הפיכת סדר איברים במערך עצמו Sub Main() Dim arr() AsSingle = {1, 2, 3, 4, 5, 6} Dim temp AsSingle Fori = 0 Toarr.Length \ 2 temp = arr(arr.Length - 1 - i) arr(arr.Length - 1 - i) = arr(i) arr(i) = temp Next Fori = 0 Toarr.Length - 1 Console.Write(arr(i) & ", ") Next EndSub שימו לב לגבולות!
פתרון 3 – פונקציה להפיכת סדר איברים במערך עצמו SubswapArray(ByRefarr() AsSingle) Dim temp AsSingle Fori = 0 Toarr.Length \ 2 temp = arr(arr.Length - 1 - i) arr(arr.Length - 1 - i) = arr(i) arr(i) = temp Next EndSub Sub Main() Dim arr() AsSingle = {1, 2, 3, 4, 5, 6} swapArray(arr) Fori = 0 Toarr.Length - 1 Console.Write(arr(i) & ", ") Next EndSub
ByValByRef עם מערכים – זהירות!!! SubswapArray(ByValarr() AsSingle) Dim temp AsSingle Fori = 0 Toarr.Length \ 2 temp = arr(arr.Length - 1 - i) arr(arr.Length - 1 - i) = arr(i) arr(i) = temp Next EndSub Sub Main() Dim arr() AsSingle = {1, 2, 3, 4, 5, 6} swapArray(arr) Fori = 0 Toarr.Length - 1 Console.Write(arr(i) & ", ") Next EndSub כאשר מעבירים פרמטר של מערך ByVal ומשנים ערכים בתוך המערך , הערכים במערך משתנים גם מחוץ לפונקציה. (כמובן גם כשנעביר byRef)
תרגיל 2 –כתיבת פונקציה המרכיבה שני מערכים • פונקציה addArray מרכיבה מערך למערך • אם הם באורך זהה מחזירה מערך שמכיל את סכום המערכים • אם לא מחזירה מערך שמלא ב 1- FunctionaddArray(ByVal arr1() AsInteger, ByVal arr2() AsInteger) AsInteger()
פתרון תרגיל 2 –כתיבת פונקציה המרכיבה שני מערכים FunctionaddArray(ByVal arr1() AsInteger, ByVal arr2() AsInteger) AsInteger() DimarrBoth(arr1.Length - 1) AsInteger If arr1.Length = arr2.Length Then Fori = 0 To arr1.Length - 1 arrBoth(i) = arr1(i) + arr2(i) Next Else Fori = 0 To arr1.Length - 1 arrBoth(i) = -1 Next EndIf ReturnarrBoth EndFunction
המשך פתרון תרגיל 2 –קריאה לפונקציה Sub Main() Dim arrA() AsInteger = {1, 2, 3, 4, 5, 6} Dim arrB() AsInteger = {10, 20, 30, 40, 50} DimarrC() AsInteger arrC = addArray(arrA, arrB) If (arrC(0) <> -1) Then Fori = 0 ToarrC.Length - 1 Console.Write(arrC(i) & ", ") Next Else Console.WriteLine("error, arrays different length") EndIf EndSub