24
1 ללללל3 – לללל לל ללללל, לללללללל תתתת תתתתתת תתתתתת

תרגול 3 – מערך דו מימדי, פונקציות

  • Upload
    thisbe

  • View
    83

  • Download
    16

Embed Size (px)

DESCRIPTION

תרגול 3 – מערך דו מימדי, פונקציות. מבוא לתכנות מערכות. היום בתרגול. מערך דו-מימדי: למה צריך? איך מגדירים? איך זה נראה בזכרון? דוגמאות לשימוש במערך דו-מימדי. העמסה של פונקציות. 2. מערך דו-מימדי. מערך שבו כל איבר הוא גם מערך,כלומר מערך של מערכים. 3. מערך דו-מימדי. - PowerPoint PPT Presentation

Citation preview

Page 1: תרגול 3 – מערך דו מימדי, פונקציות

1

– מערך דו מימדי, 3תרגול פונקציות

מבוא לתכנות מערכות

Page 2: תרגול 3 – מערך דו מימדי, פונקציות

2

היום בתרגול

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

העמסה של פונקציות•

Page 3: תרגול 3 – מערך דו מימדי, פונקציות

3

מערך דו-מימדי

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

Page 4: תרגול 3 – מערך דו מימדי, פונקציות

4

מערך דו-מימדי

int[][] array1 = new int [3][2];

array1

0 0

0 0

0 0

Page 5: תרגול 3 – מערך דו מימדי, פונקציות

5

מערך דו-מימדי

int[][] array2 ={{1,3},{5,6,7},{4}};

7

1

5

array2

3

6

4

Page 6: תרגול 3 – מערך דו מימדי, פונקציות

6

length – אורך של מערך

• array1.length • array1[0].length • array2.length • array2[2].length • array2[1].length • array2[3].length

array1

32

Run time Error

13

3

5

array2

3

6

4

1

7

Page 7: תרגול 3 – מערך דו מימדי, פונקציות

7

פנייה לאיבר

System.out.println(array2[1][0]);

array2[2][0] = 9;

5

array2

3

6

4

7

1

9

// prints 5

Page 8: תרגול 3 – מערך דו מימדי, פונקציות

8

class ArrayRef{public static void main(String []args){

int[][] arr; arr = new int[3][]; arr[0] = new int[3]; arr[1] = arr[0]; arr[0][1] = 7;//prints the 2D arrayfor (int i = 0 ; i < arr.length ; i= i+1){

for(int j=0 ; j<arr[i].length; j = j+1){

System.out.print(arr[i][j]+” ”);}System.out.println();

}}

}

0 7 00 7 0NullPointerException

Page 9: תרגול 3 – מערך דו מימדי, פונקציות

9

שאלה

מה יקרה אם נוסיף את השורה הבאה?•

arr[2]= arr; מבדילה בין מערך של מספרים javaתשובה: •

ובין מערך של מערכים של מספרים ולכן השורה הזאת לא תעבור קומפילציה )שכן

איברי המערך צריכים להיות מאותו טיפוס(.

Page 10: תרגול 3 – מערך דו מימדי, פונקציות

10

העתקת מערךclass Copy2dArray{

public static void main(String[] args){ int[][] iA = {{1,3},{5,6,7},{4}}; int[][] iC;

//Create the 2dArray row by row iC = new int[iA.length][]; int i,j; for ( i=0 ; i < iC.length; i = i+1) iC[i] = new int[iA[i].length]; for ( i=0; i < iC.length; i = i+1) for (j=0 ; j < iC[i].length ; j = j+1) iC[i][j] = iA[i][j];

} //main}

Page 11: תרגול 3 – מערך דו מימדי, פונקציות

משולש פסקל

11

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]

Page 12: תרגול 3 – מערך דו מימדי, פונקציות

12

הדפסת לוח הכפלclass MultiplicationTable {

public static void main(String[] arg) {

final int iROW = 13;

final int iCOLUMN = 13;

int[][] mat = new int[iROW][iCOLUMN];

for (int i=0; i < iROW; i=i+1)

for (int j=0; j < iCOLUMN; j=j+1)

mat[i][j] = i*j;

//prints the matrix

for (int i=0; i < iROW; i=i+1) {

for (int j=0; j < iCOLUMN; j=j+1)

System.out.print(mat[i][j]+"\t");

System.out.println();

}

} //main

} //class

Page 13: תרגול 3 – מערך דו מימדי, פונקציות

13

(Overloading ) העמסה

שתי פונקציות בעלות שם זהה )אבל חתימה שונה!(.

לדוגמא: Math.min)int,int( -ו Math.min)double,double(

או System.out.println)int(ו -System.out.println)char(

.אופרטורים אריתמטיים הם דוגמאות נוספות להעמסה, כמו כן או int יכול לקבל שני ארגומנטים מסוג אופרטור החלוקה, למשל-

.doubleמסוג איזה עוד דוגמאות לאופרטורים מועמסים ישנם?-

•‘+’ with strings

Page 14: תרגול 3 – מערך דו מימדי, פונקציות

14

:דוגמא להעמסה

public static int foo(int num){…} √public static int foo(double num){…} √public static double foo(int num){…} X

אם היינו מחליפים את טיפוס הארגומנט בטיפוס

int?מה היה קורה

public class Max{// returns the larger between the argumentspublic static double max(double d1, double d2){

double ans;

if(d1 < d2) ans = d2;

else ans = d1;

return ans;}

public static int max(int i, double d){int ans;

if(i < d) ans = (int)d;

else ans = i;

return ans;}

Page 15: תרגול 3 – מערך דו מימדי, פונקציות

15

/* output/* output 2.02.0 22 22*/*/

public static void main(String[] args){

int i1 = 1, i2 = 2 ;

double d1 = 2, d2 = 0 ;

System.out.println(max(d1,d2));

System.out.println(max(i1,d1));

System.out.println(max(i1,i2)); // example for casting

}

Page 16: תרגול 3 – מערך דו מימדי, פונקציות

שאלות משנים קודמות

Page 17: תרגול 3 – מערך דו מימדי, פונקציות
Page 18: תרגול 3 – מערך דו מימדי, פונקציות

18

נקודות(20 )2002 מבוחן 1שאלה

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

checkMatrix)int[][] m( ,אשר בודקת אם מערך דו-מימדי ,m היינו ,אם קוראים לשיטה עם הערה: מטריצה ומחזירה ערך בוליאני בהתאם.

.false, על השיטה להחזיר את הערך nullפרמטר שערכו .)";"כלומר לא יופיע בו (בכל ריבוע ריק יש להשלים הוראה יחידה

[דוגמא]

&&

Page 19: תרגול 3 – מערך דו מימדי, פונקציות

19

main :לשם הבהרה, השיטה

:תדפיס truefalsefalsefalsefalsefalsefalse

public static void main (String[] args){

int[] line1 = {1,2,3,4}; int[] line2 = {5,6,7,8}; int[] line3 = {9}; int[] line4 = new int[0];

int[][] m1 = {line1,line2};int[][] m2 = {line1,line2,line3}; int[][] m3 = null;

int[][] m4 = {null,null}; int[][] m5 = {line4,line4};int[][] m6 = {line2,null};int[][] m7 = new int[0][0];System.out.println(checkMatrix(m1));

System.out.println(checkMatrix(m2));System.out.println(checkMatrix(m3)); System.out.println(checkMatrix(m4));

System.out.println(checkMatrix(m5));System.out.println(checkMatrix(m6));System.out.println(checkMatrix(m7));

}

Page 20: תרגול 3 – מערך דו מימדי, פונקציות

20

Page 21: תרגול 3 – מערך דו מימדי, פונקציות

21

נק'(20)2002 מבוחן 2שאלה

(. 1נאמר ששני מספרים טבעיים חיוביים הם זרים אם אין להם מחלק משותף )פרט ל- אשר מחזירה את המחלק )public static int gcd )int m, int n נתונה לכם שיטה סטטית

השלימו את השיטה המשותף הגדול ביותר של שני מספרים טבעיים חיוביים.checkGCD)int[] a( אשר מחזירה ערך בוליאני המציין האם מערך a מקיים אחת משתי

התכונות הבאות: זרים.a ב- מספרים שוניםא. כל שני אינם זרים.a ב-מספרים שוניםב. כל שני

 

למשל: מקיים את תכונה א' 4,7,25 האוסף -המחלק את 1למרות שאין שום מספר גדול מ- מקיים את תכונה ב', 6,10,15 האוסף -

שלושת המספרים. שונים והם זרים.20 ו- 7 מקיים את תכונה א' כי רק 20,7,20 האוסף- אינו מקיים אף אחת משתי התכונות. 4,7,28 האוסף-

false. ואילו על הרביעי true על שלושת המערכים הראשונים מחזירה checkGCDהפעלת-.

יש להניח שבמערך יש לפחות שני מספרים שונים זה מזה. תוכלו גם להניח שכל .המספרים הנתונים הם חיוביים, אך שימו לב שיתכן ואינם שונים זה מזה

Page 22: תרגול 3 – מערך דו מימדי, פונקציות

22

פתרון:

public static boolean checkGCD(int[] a){

boolean aliens = true; // each 2 are aliens boolean notAliens = true; // each 2 are not aliens for (int i = 0; i < a.length – 1 && (aliens || notAliens); i=i+1){ for (int j = i+1; j < a.length && (aliens || notAliens); j=j+1){ if (a[i] != a[j]) {

if (gcd(a[i], a[j]) == 1) notAliens = false;

else aliens = false;

} } }

return aliens || notAliens;}

Page 23: תרגול 3 – מערך דו מימדי, פונקציות

23

נקודות(2004 ( 17מבוחן 5 שאלה

)public static int oddGCD)int m, int nנתונה הפונקציה של שני מספרים ( gcd )לחישוב המחלק המשותף המקסימלי

.שיטה זו פועלת נכון רק במקרה ולפחות אחד n ו- mשלמים .זוגי-המספרים הינו אי

תוך שימוש בשיטה , השלימו את הגדרת השיטה הבאהoddGCD כך שתחשב את המחלק המשותף , הנתונה

שליליים )הניחו כי לפחות -המקסימאלי עבור כל שני שלמים אי.)אחד המספרים אינו אפס

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

- ו n- ניתן להניח שהקלט הינו חוקי )כלומר ש .)!, &, |(לוגיות כמו m שליליים ולפחות אחד מהם חיובי ממש(-אי.

 public static int generalGCD(int m, int n) {השלימו // } 

:רמזgcd)x y,∙ x z) = ∙ x gcd(y,z)∙

Page 24: תרגול 3 – מערך דו מימדי, פונקציות

24

פתרון:

public static int generalGCD)int m, int n( {

int multiply = 1;

while( (m % 2 == 0) && (n % 2 == 0) {

multiply = multiply * 2;

m = m / 2;

n = n / 2;

}

return multiply * oddGCD(m, n);

}