Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 תרגול 3 - מערכים מבוא למדעי המחשב – סמסטר א' תשע"א.

Similar presentations


Presentation on theme: "1 תרגול 3 - מערכים מבוא למדעי המחשב – סמסטר א' תשע"א."— Presentation transcript:

1 1 תרגול 3 - מערכים מבוא למדעי המחשב – סמסטר א' תשע"א

2 2 היום בתרגול 1. מערך חד-מימדי: –מה זה מערך ולמה צריך אותו? –איך מגדירים? איך זה נראה בזכרון? –דוגמאות לשימוש במערך חד-מימדי. –השוואה בין משתנה פרימיטיבי למשתנה שאינו פרימיטיבי. 2. מערך דו-מימדי: –למה צריך? איך מגדירים? איך זה נראה בזכרון? –דוגמאות לשימוש במערך דו-מימדי.

3 3 מערך חד-מימדי מערך הינו מבנה זיכרון המכיל מספר ערכים מאותו טיפוס, גודל המערך נקבע כאשר הוא נוצר (בזמן ריצה) ולאחר מכן הוא קבוע. אילו טיפוסים אנו מכירים? 3426781

4 4 מערך - מאפיינים משתנה שאינו פרימיטיבי מבנה מסודר של ערכים. לכל ערך יש מקום. כל איברי המערך הם מאותו סוג. מערך יכול להכיל כל טיפוס פרימיטיבי וכן טיפוסים שאינם פרימיטיביים כפי שנלמד בהמשך 3426781

5 5 הצורך במערך יש צורך לשמור מספר גדול של משתנים מאותו סוג. זהו מבנה מאורגן המאגד בתוכו קבוצה גדולה של ערכים שניתן לעבור עליהם באופן שיטתי.

6 6 הגדרת מערך כמו כל משתנה, גם מערך צריך הגדרה והשמה. //declares an array of integers int[] myArray; ההגדרה מורכבת מטיפוס המערך ומשם המערך. הסוגריים המרובעים לאחר הטיפוס מציינים שהמשתנה המוגדר הוא מסוג מערך.

7 7 הקצאת זכרון ההגדרה עצמה אינה מקצה זיכרון עבור המערך, אלא רק מכריזה על קיומו ויש ליצור (על ידי הקצאת זיכרון) את המערך. // create an array of integers myArray = new int[5]; myArray 00000 טבלת משתנים

8 8 הקצאת זכרון באמצעות משתנה int size = 5; int[] myArray; myArray = new int[size];

9 9 length –גודל המערך int size = 5; int[] myArray; myArray = new int[size]; System.out.println(myArray.length(; // prints 5 size = 6; מה לדעתכם תדפיס כעת השורה הבאה? System.out.println(myArray.length);

10 10 null – ערך מיוחד משתנים המצביעים על מערכים יכולים גם לקבל השמה לערך המיוחד null: myArray = null; בטבלת המשתנים ערכו של המשתנה myArray הוא המיוחד הקבוע null. myArray null

11 11 שאלה מה נקבל כאשר נבקש myArray.length לפני שהקצינו את המערך? int[] myArray; System.out.println(myArray.length); תשובה: שגיאת קומפילציה, הקומפיילר מזהה את השגיאה ועוצר את תהליך הקומפילציה.

12 12 שאלה ואם נבקש myArray.length כאשר נעשתה לו השמה ?null int[] myArray = null; System.out.println(myArray.length); תשובה: שגיאת זמן ריצה (מסוג NullPointerException ) המציינת שניסינו לפנות למשתנה שערכו הוא null, הקומפיילר אינו מזהה את השגיאה.

13 13 שאלה ובמקרה: int[] myArray = new int[0]; System.out.println(myArray.length); מה יודפס למסך? תשובה: 0

14 14 הגדרה והקצאה בשורה אחת int[] myArray = new int[5]; int[] smallPrimes ={2,3,5,7,11}; myArray 00000 smallPrimes 235711

15 15 מספור תאים במערך אם במערך יש n תאים המערכת מתייחסת אליהם ע"י המספרים 0…n-1

16 16 פנייה לאיבר (תא) במערך int[] smallPrimes = {2,3,5,7,11}; קריאת ערך מתא במערך : int num = smallPrimes[3] * 2; // num = 7*2 = 14 index01234 value235711

17 17 פנייה לאיבר במערך smallPrimes[3] = 13; num נשאר ללא שינוי index01234 value2351311

18 18 פנייה לאיבר במערך smallPrimes[5] = 17; num = smallPrimes[-1]; Run Time Error index01234 value2351311

19 19 פנייה לאיבר במערך int i = 5; myArray[i] = 3; myArray [i/2] = 1; בתוך ה-[] יכול להיות ביטוי מתמטי,קריאה לפונקציה וכו', כל עוד התוצאה הינה מטיפוס שלם.

20 20 פעולות על מערך //Demonstrates basic array operations class BasicArray { public static void main(String[] arg) { int[] smallPrimes = {2,3,5,7,11}; System.out.println(smallPrimes[0]); 2 smallPrimes[0] = 13; System.out.println(smallPrimes[0]); 13 System.out.println(smallPrimes.length); 5 for(int i=0;i<smallPrimes.length;i=i+1) System.out.print(smallPrimes[i]+", "); 13, 3, 5, 7, 11, } //main } //class BasicArray

21 21 איתחול מערך ע"י לולאה //Demonstrate array init with a loop class IntArray { public static void main(String[] arg) { int[] intArray = new int[5]; System.out.println(); for(int i=0;i < intArray.length ;i=i+1) intArray [i] = i*3; for(int i=0;i<intArray.length;i=i+1) System.out.print(intArray[i]+", "); } //main } //class IntArray 0, 3, 6, 9, 12,

22 22 משתנה פרימיטיבי int x = 3; int y = x; x=7; y נשאר ללא שינוי. טיפוסשם משתנהערך intx y 3 3 7

23 23 משתנה שאינו פרימיטיבי int[] xArray = new int[5]; int[] yArray = xArray; xArray[1] = 6; xArray 00000 yArray 6

24 24 שאלה מה יקרה בזכרון בזמן הרצת הקוד הבא? int[] myArray; myArray = new int[5]; myArray = new int[10]; myArray 00000 0000000000

25 25 אינו פרימיטיבי vs. פרימיטיבי משתנה שאינו פרימיטיבי משתנה פרימיטיבי הכתובתהערך עצמומה נמצא בטבלת המשתנים הכתובת מועתקתהערך מועתקהשמה השוואה בין כתובותהשוואה בין ערכים (==) השוואה

26 26 null כתובת int[] arr1 = null; int[] arr2 = null; System.out.println(arr1==arr2); true

27 27 מערך דו-מימדי מערך שבו כל איבר הוא גם מערך,כלומר מערך של מערכים.

28 28 מערך דו-מימדי int[][] array1 = new int [3][2]; array1 0

29 29 מערך דו-מימדי int[][] array2 ={{1,3},{5,6,7},{4}}; 7 1 5 array2 3 6 4

30 30 length – אורך של מערך array1.length  array1[0].length  array2.length  array2[2].length  array2[1].length  array2[3].length  array1 3 2 Run time Error 1 3 3 5 array2 3 6 4 1 7

31 31 פנייה לאיבר System.out.println(array2[1][0]); array2[2][0] = 9; 5 array2 3 6 4 7 1 9 // prints 5

32 32 class ArrayRef{ public static void main(String []args){ int[][] x; x = new int[3][]; x[0] = new int[3]; x[1] = x[0]; x[0][1] = 7; //prints the 2D array for (int i = 0 ; i < x.length ; i= i+1){ for(int j=0 ; j < x[i].length; j = j+1){ System.out.print(x[i][j]+” ”); } System.out.println(); } } } 0 7 0 NullPointerException

33 33 שאלה מה יקרה אם נוסיף את השורה הבאה? x[2]= x; תשובה: java מבדילה בין מערך של מספרים ובין מערך של מערכים של מספרים ולכן השורה הזאת לא תעבור קומפילציה (שכן איברי המערך צריכים להיות מאותו טיפוס).

34 34 העתקת מערך class Copy2dArray{ public static void main(String[] args){ int[][] a = {{1,3},{5,6,7},{4}}; int[][] c; //Create the 2dArray row by row c = new int[a.length][]; int i,j; for ( i=0 ; i < c.length; i = i+1) c[i] = new int[a[i].length]; for ( i=0; i < c.length; i = i+1) for (j=0 ; j < c[i].length ; j = j+1) c[i][j] = a[i][j]; } //main }

35 משולש פסקל 35 Wikipedia http://en.wikipedia.org/wiki/Pascal%27s_triangle מה החוקים לחישוב משולש פסקל 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 Pascal[j][0] = Pascal[j][j]=1 Pascal[j][i] = Pascal[j-1][i] + Pascal[j-1][i-1]

36 36 הדפסת לוח הכפל class MultiplicationTable { public static void main(String[] arg) { final int ROW = 13; final int COLUMN = 13; int[][] mat = new int[ROW][COLUMN]; for (int i=0; i < ROW; i=i+1) for (int j=0; j < COLUMN; j=j+1) mat[i][j] = i*j; //prints the matrix for (int i=0; i < ROW; i=i+1) { for (int j=0; j < COLUMN; j=j+1) System.out.print(mat[i][j]+"\t"); System.out.println(); } } //main } //class

37 37 חיבור מטריצות // Adds two matrices public class Add{ public static void main(String[] args){ int[][] a = { /* insert data here */ }; int[][] b = { /* insert data here */ }; int[][] c; c = new int[a.length][a[0].length]; for (int i = 0 ;i<a.length;i=i+1) for (int j =0;j< a[i].length;j= j+1) c[i][j] = a[i][j] + b[i][j]; } //main } //class Add

38 38 הכפלת מטריצות*

39 39 //Multiplies two matrices pbulic class Mul{ public static void main(String[] args){ int[][] a = { /* insert data here */ }; int[][] b = { /* insert data here */ }; int[][]c; //Create the matrix row by row c = new int[a.length][]; for (int i = 0 ; i < c.length ; i = i+1) c[i] = new int[b[0].length]; //For each element in the matrix for (int i=0; i<a.length ; i=i+1) for(int j=0; j<b[0].length; j=j+1){ //NOTICE that b.length is equal to a[i].length //Calculate the sum c[i][j] = 0; for (int k=0; k<a[i].length ; k= k+1) c[i][j] = c[i][j] + (a[i][k] * b[k][j]); } //for } //main } //class Mul


Download ppt "1 תרגול 3 - מערכים מבוא למדעי המחשב – סמסטר א' תשע"א."

Similar presentations


Ads by Google