java-ב תונכתל אובמ 6 לוגרת - bguipc162/wiki.files/ps6.pdf?java -ב היצקנופ...
TRANSCRIPT
![Page 1: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/1.jpg)
JAVA-מבוא לתכנות ב6תרגול
![Page 2: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/2.jpg)
מה בתרגול
Java(methods)-שיטות ב/פונקציות•
הגדרת פונקציה–
הפעלה/קריאה–
העברת ארגומנטים–
ערכי החזרה–
![Page 3: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/3.jpg)
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/4.jpg)
חלוקה לתתי משימות–מבוא לפונקציות
המספרים הראשוניים kחישוב הממוצע של : בעיה•
הגדולים ביותר במערך
:תתי משימות הנדרשות לפתרון•
בדיקת ראשוניות
מיון מערך
חישוב ממוצע
![Page 5: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/5.jpg)
?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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/6.jpg)
?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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/7.jpg)
הגדרת פונקציה
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/8.jpg)
לחישוב ממוצע של מערךפונקציה–דוגמא
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/9.jpg)
נוסחה מתמטית כלשהיפונקציה –דוגמא
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/10.jpg)
החזרת ערך בפונקציה
פונקציה יכולה להחזיר ערך או לא להחזיר ערך•
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/11.jpg)
חתימה של פונקציה
שם הפונקציהשל פונקציה מורכבת מחתימה•
שהפונקציה רשימת טיפוסי הארגומנטיםומ(.סוגי טיפוסים וסדר ,מספר)מקבלת
יכולות )לכל שתי פונקציות בתכנית חתימה שונה •
להיות לנו כמה פונקציות עם אותו שם אך עם
(חתימה שונה
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/12.jpg)
קריאה לפונקציה
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/13.jpg)
?מה קורה בזמן קריאה לפונקציה
השליטה של התכנית שומרת את המיקום הנוכחי שלה •
.ועוברת לפונקציה
חדשה שבה מוגדרים ( טבלת משתנים)נפתחת סביבה •
הפרמטרים של הפונקציה והמשתנים שמוגדרים בתוך .הפונקציה
( voidאו סיום הפונקציה במקרה של )returnההוראה •
סוגרת את הסביבה ומחזירה את השליטה למקום בו היינו
.לפני הקריאה לפונקציה
![Page 14: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/14.jpg)
קריאה לפונקציה
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/15.jpg)
קריאה לפונקציה
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/16.jpg)
קריאה לפונקציה
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/17.jpg)
קריאה לפונקציה
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/18.jpg)
קריאה לפונקציה
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/19.jpg)
קריאה לפונקציה
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/20.jpg)
ת מערךת–תרגיל
השלימו את הקוד כך שהפונקציה תחזיר תת •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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/21.jpg)
פתרון
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/22.jpg)
העברת פרמטרים לפונקציה
?מה יודפס: שאלה•
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/23.jpg)
העברת פרמטרים לפונקציה
כדי להבין את הדרך שבה משתנים עוברים לפונקציה עלינו להבין קצת יותר •
טוב את תמונת הזיכרון
כאשר המשתנה הוא פרימיטיבי הוא מחזיק את הערך עצמו•
ערכו הוא כתובת בזיכרון שבו ( משתנה הפנייה)כאשר משתנה אינו פרימיטיבי •:נמצא התוכן
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/24.jpg)
העברת פרמטרים לפונקציה
כלומר הערך 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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/25.jpg)
העברת פרמטרים לפונקציה
?למה השינוי כן התבצע על המערך•
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/26.jpg)
העברת פרמטרים לפונקציה
?מה יודפס•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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/27.jpg)
העברת פרמטרים
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/28.jpg)
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/29.jpg)
שונים במערךאיברים–תרגיל
כתבו פונקציה שמקבלת מערך של מספרים •
. שלמים ובודקת האם כל האיברים בו שוניםהפונקציה תחזיר ערך בוליאני בהתאם
public static boolean allDiff(int[] arr){
}
![Page 30: JAVA-ב תונכתל אובמ 6 לוגרת - BGUipc162/wiki.files/PS6.pdf?Java -ב היצקנופ יהמ:אמגוד • public class MethodExample {public static double arrayAverage(int[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/30.jpg)
פתרון
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/31.jpg)
פתרון נוסף
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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/32.jpg)
השתלת תת מחרוזת בתוך מחרוזת-תרגיל
ומחרוזת 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[]](https://reader035.vdocuments.site/reader035/viewer/2022071501/6120d9b0fa9046244432b6bf/html5/thumbnails/33.jpg)
פתרון
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;
}