33
מבוא לתכנות ב- JAVA תרגול6

JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

JAVA-מבוא לתכנות ב6תרגול

Page 2: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

מה בתרגול

Java(methods)-שיטות ב/פונקציות•

הגדרת פונקציה–

הפעלה/קריאה–

העברת ארגומנטים–

ערכי החזרה–

Page 3: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

3

שימוש חוזר בקוד-מבוא לפונקציות

נדרשתם לחשב את הסכום תוכניתנניח שבמהלך •.[e,f], [c,d], [a,b]של המספרים בקטעים

ל הייתם רושמים את אותה "לצורך החישוב הנ•חתיכת קוד כמה פעמים

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

אחת

for (int i = <start>; i <= <end>; i++){sum += i;

}

Page 4: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

חלוקה לתתי משימות–מבוא לפונקציות

המספרים הראשוניים kחישוב הממוצע של : בעיה•

הגדולים ביותר במערך

:תתי משימות הנדרשות לפתרון•

בדיקת ראשוניות

מיון מערך

חישוב ממוצע

Page 5: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

?Java-מהי פונקציה ב

לא עושה . שיטה היא סדרה של פקודות שמאוגדות ביחד לביצוע פעולה/פונקציה•

כלום עד שלא מפעילים אותה

:דוגמא•

public class MethodExample {

public static double arrayAverage(int[] arr){

double ans = 0;for (int i = 0; i < arr.length; i++){

ans += arr[i];}

return ans / arr.length ;}

public static void main(String[] args){

int[] a = {1,2,3,4,5,6};System.out.println(arrayAverage(a));

}}

הגדרת השיטה

שימוש בשיטה

הפעלה-

Page 6: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

?Java-מהי פונקציה ב

:דוגמא•public class MethodExample {

public static double arrayAverage(int[] arr){

double ans = 0;for (int i = 0; i < arr.length; i++){

ans += arr[i];}

return ans / arr.length ;}

public static void main(String[] args){

int[] a = {1,2,3,4,5,6};int[] b = {5,5,2,6};int[] c = {1,1,1,1};System.out.println(arrayAverage(a));System.out.println(arrayAverage(b));System.out.println(arrayAverage(c));double sum = arrayAverage(b) + arrayAverage(c);

}}

Page 7: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

הגדרת פונקציה

public static <return type> <name>(type1 arg1, type2 arg2…){<Statements>

}

•<return type>טיפוס הערך שיוחזר מהפונקציה

•<name>שם השיטה

עבור כל . י פסיק ביניהם"של השיטה מופרדים עהפורמלייםרשימת הפרמטרים •

פרמטר מוגדר שמו והטיפוס שלו

•<statements>אוסף של פקודות שמהווים את גוף הפונקציה

Page 8: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

לחישוב ממוצע של מערךפונקציה–דוגמא

public static double arrayAverage(int[] arr){

double ans = 0;

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

}

return ans / arr.length ;}

doubleערך ההחזרה הוא •

arrayAverageשם השיטה הוא •

מורכבת מפרמטר אחד מסוג מערך הפורמלייםרשימת הפרמטרים •intשל

Page 9: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

נוסחה מתמטית כלשהיפונקציה –דוגמא

public static int foo(int x, int y){

int xSquared = x*x;

return xSquared + 5 * y + 10;}

intערך ההחזרה הוא •

fooשם השיטה הוא •

שניהם , מורכבת משתי פרמטריםרשימת הפרמטרים הפורמליים •.intמטיפוס

Page 10: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

החזרת ערך בפונקציה

פונקציה יכולה להחזיר ערך או לא להחזיר ערך•

voidהוא <return type>אם הפונקציה לא מחזירה ערך בהגדרה שלה נציין ש •

בגוף הפונקציה כדי returnאם פונקציה מחזירה ערך עליה להשתמש בפקודה •

להחזיר אותו

public static void printFive(){System.out.println("5");

}

public static int five(){return 5;

}

Page 11: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

חתימה של פונקציה

שם הפונקציהשל פונקציה מורכבת מחתימה•

שהפונקציה רשימת טיפוסי הארגומנטיםומ(.סוגי טיפוסים וסדר ,מספר)מקבלת

יכולות )לכל שתי פונקציות בתכנית חתימה שונה •

להיות לנו כמה פונקציות עם אותו שם אך עם

(חתימה שונה

public static int foo(int num){…}public static int foo(int num1, double num2){…}public static int foo(double num){…}

public static double foo(double num){…}

Page 12: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

קריאה לפונקציה

public class MethodExample {

public static int sumBetween(int a, int b){

int sum = 0;for (int i = a; i <= b; i++){

sum += i;}return sum;

}

public static void main(String[] args){

int x = 15;int y = 30;int sum = sumBetween(x, y);System.out.println("The sum of 15 + 16 + ... + 30 =" + sum);

}}

נדגים מה קורה כאשר קוראים פונקציה•

Page 13: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

?מה קורה בזמן קריאה לפונקציה

השליטה של התכנית שומרת את המיקום הנוכחי שלה •

.ועוברת לפונקציה

חדשה שבה מוגדרים ( טבלת משתנים)נפתחת סביבה •

הפרמטרים של הפונקציה והמשתנים שמוגדרים בתוך .הפונקציה

( voidאו סיום הפונקציה במקרה של )returnההוראה •

סוגרת את הסביבה ומחזירה את השליטה למקום בו היינו

.לפני הקריאה לפונקציה

Page 14: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

קריאה לפונקציה

public class MethodExample {

public static int sumBetween(int a, int b){

int sum = 0;for (int i = a; i <= b; i++){

sum += i;}return sum;

}

public static void main(String[] args){

int x = 15;int y = 30;int sum = sumBetween(x, y);System.out.println("The sum of 15 + 16 + ... + 30 =" + sum);

}}

main

15

30

x

y

Page 15: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

קריאה לפונקציה

public class MethodExample {

public static int sumBetween(int a, int b){

int sum = 0;for (int i = a; i <= b; i++){

sum += i;}return sum;

}

public static void main(String[] args){

int x = 15;int y = 30;int sum = sumBetween(x, y);System.out.println("The sum of 15 + 16 + ... + 30 =" + sum);

}}

main

15

30

x

y

sumBetween

15

30

a

b

?sum

Page 16: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

קריאה לפונקציה

public class MethodExample {

public static int sumBetween(int a, int b){

int sum = 0;for (int i = a; i <= b; i++){

sum += i;}return sum;

}

public static void main(String[] args){

int x = 15;int y = 30;int sum = sumBetween(x, y);System.out.println("The sum of 15 + 16 + ... + 30 =" + sum);

}}

main

15

30

x

y

sumBetween

15

30

a

b

0sum

?sum

Page 17: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

קריאה לפונקציה

public class MethodExample {

public static int sumBetween(int a, int b){

int sum = 0;for (int i = a; i <= b; i++){

sum += i;}return sum;

}

public static void main(String[] args){

int x = 15;int y = 30;int sum = sumBetween(x, y);System.out.println("The sum of 15 + 16 + ... + 30 =" + sum);

}}

main

15

30

x

y

sumBetween

15

30

a

b

360sum

?sum

Page 18: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

קריאה לפונקציה

public class MethodExample {

public static int sumBetween(int a, int b){

int sum = 0;for (int i = a; i <= b; i++){

sum += i;}return sum;

}

public static void main(String[] args){

int x = 15;int y = 30;int sum = sumBetween(x, y);System.out.println("The sum of 15 + 16 + ... + 30 =" + sum);

}}

main

15

30

x

y

360sum

sumBetween

15

30

a

b

360sum

Page 19: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

קריאה לפונקציה

public class MethodExample {

public static int sumBetween(int a, int b){

int sum = 0;for (int i = a; i <= b; i++){

sum += i;}return sum;

}

public static void main(String[] args){

int x = 15;int y = 30;int sum = sumBetween(x, y);System.out.println("The sum of 15 + 16 + ... + 30 =" + sum);

}}

main

15

30

x

y

360sum

Page 20: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

ת מערךת–תרגיל

השלימו את הקוד כך שהפונקציה תחזיר תת •end-ומסתיים בstart–המערך המתחיל ב

public static int[] subArray(int[] arr, int start, int end){//assume that arr.length > end > start > -1

}

Page 21: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

פתרון

public static int[] subArray(int[] arr, int start, int end){//assume that arr.length > end > start > -1int[] subArray = new int[end-start + 1];int j = 0;for (int i = start; i <= end; i++){

subArray[j] = arr[i];j++;

}return subArray;

}

Page 22: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

העברת פרמטרים לפונקציה

?מה יודפס: שאלה•

public class Example {

public static void increment(int i){i = i + 1;

}

public static void main(String[] args){

int x = 0;increment(x);increment(x);increment(x);System.out.println(x);

}}

0: פלט

Page 23: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

העברת פרמטרים לפונקציה

כדי להבין את הדרך שבה משתנים עוברים לפונקציה עלינו להבין קצת יותר •

טוב את תמונת הזיכרון

כאשר המשתנה הוא פרימיטיבי הוא מחזיק את הערך עצמו•

ערכו הוא כתובת בזיכרון שבו ( משתנה הפנייה)כאשר משתנה אינו פרימיטיבי •:נמצא התוכן

int x = 17;int[] arr = new int[5]

17x

0 0 0 0 0#41 #41arr

Page 24: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

העברת פרמטרים לפונקציה

כלומר הערך by valueהפרמטרים מועברים Java–ב •

שרשום בתוך המשתנה מועבר

?מה יודפס•public class ParamPassExample {

public static void ones(int[] a){for (int i = 0; i < a.length; i++){

a[i] = 1;}

}public static void main(String[] args){

int[] arr = new int[2];ones(arr);System.out.println(arr[0] + "," + arr[1]);

}}

1,1: פלט

Page 25: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

העברת פרמטרים לפונקציה

?למה השינוי כן התבצע על המערך•

0 0#411

main

#411arr

ones

#411a

i

Page 26: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

העברת פרמטרים לפונקציה

?מה יודפס•public class Example {

public static void arrayOfTenElements(int[] arr){arr = new int[10];

}

public static void main(String[] args){

int[] arr = new int[3];arrayOfTenElements(arr);System.out.println(arr.length);

}}

3 : פלט

Page 27: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

העברת פרמטרים

0 0 0#411

main

#411arr

arrayOfTenElements

#725arr

#725 0 0 0 0 0 0 0 0 0 0

Page 28: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

public static void foo(int x2, int[] a2, int[] arr2) {

x2 = 777;

a2[0] = 777;

arr2 = new int[77];

System.out.println("In foo:");

System.out.println(" x2=" + x2);

System.out.println(" a2[0]=" + a2[0]);

System.out.println(" arr2.length=" + arr2.length);

}

public static void main(String[] args) {

int x = 11;

int[] a = new int[2];

a[0] = 11;

int[] arr = new int[2];

System.out.println("Before foo:");

System.out.println(" x=" + x);

System.out.println(" a[0]=" + a[0]);

System.out.println(" arr.length=" + arr.length);

foo(x, a, arr);

System.out.println("After foo:");

System.out.println(" x=" + x);

System.out.println(" a[0]=" + a[0]);

System.out.println(" arr.length=" + arr.length);

}

Page 29: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

שונים במערךאיברים–תרגיל

כתבו פונקציה שמקבלת מערך של מספרים •

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

public static boolean allDiff(int[] arr){

}

Page 30: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

פתרון

public static boolean allDiff(int[] arr) {

boolean ans = true;

for (int i = 0; i < arr.length && ans; i++) {

for (int j = i + 1; j < arr.length && ans; j++)

if (arr[i] == arr[j]) {

ans = false;

}

}

}

return ans;

}

Page 31: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

פתרון נוסף

public static boolean allDiff2(int[] arr) {

for (int i = 0; i < arr.length; i++) {

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

if (arr[i] == arr[j]) {

return false;

}

}

}

return true;

}

Page 32: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

השתלת תת מחרוזת בתוך מחרוזת-תרגיל

ומחרוזת iמספר שלם sכתבו פונקציה המקבלת מחרוזת •

sub . מושתלת"הפונקציה תחזיר מחרוזת שבה "

שימו לב יש )i-החל מהאינדקס הsבתוך subהמחרוזת

(לבדוק נכונות קלט

public static String insertSubString(String s, int i, String sub){

}

Page 33: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]

פתרון

public static String insertSubString(String s, int i, String sub){

if (s == null || sub == null || i < 0 || i >= s.length()){return null;

}String ans = s.substring(0,i) + sub + s.substring(i);return ans;

}