Upload
others
View
10
Download
0
Embed Size (px)
Citation preview
JAVA-מבוא לתכנות ב6תרגול
מה בתרגול
Java(methods)-שיטות ב/פונקציות•
הגדרת פונקציה–
הפעלה/קריאה–
העברת ארגומנטים–
ערכי החזרה–
3
שימוש חוזר בקוד-מבוא לפונקציות
נדרשתם לחשב את הסכום תוכניתנניח שבמהלך •.[e,f], [c,d], [a,b]של המספרים בקטעים
ל הייתם רושמים את אותה "לצורך החישוב הנ•חתיכת קוד כמה פעמים
היום נלמד כיצד ניתן לקרוא לסדרה של פקודות •עם פרמטרים שונים כאשר קוד זה ייכתב פעם
אחת
for (int i = <start>; i <= <end>; i++){sum += i;
}
חלוקה לתתי משימות–מבוא לפונקציות
המספרים הראשוניים kחישוב הממוצע של : בעיה•
הגדולים ביותר במערך
:תתי משימות הנדרשות לפתרון•
בדיקת ראשוניות
מיון מערך
חישוב ממוצע
?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));
}}
הגדרת השיטה
שימוש בשיטה
הפעלה-
?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);
}}
הגדרת פונקציה
public static <return type> <name>(type1 arg1, type2 arg2…){<Statements>
}
•<return type>טיפוס הערך שיוחזר מהפונקציה
•<name>שם השיטה
עבור כל . י פסיק ביניהם"של השיטה מופרדים עהפורמלייםרשימת הפרמטרים •
פרמטר מוגדר שמו והטיפוס שלו
•<statements>אוסף של פקודות שמהווים את גוף הפונקציה
לחישוב ממוצע של מערךפונקציה–דוגמא
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של
נוסחה מתמטית כלשהיפונקציה –דוגמא
public static int foo(int x, int y){
int xSquared = x*x;
return xSquared + 5 * y + 10;}
intערך ההחזרה הוא •
fooשם השיטה הוא •
שניהם , מורכבת משתי פרמטריםרשימת הפרמטרים הפורמליים •.intמטיפוס
החזרת ערך בפונקציה
פונקציה יכולה להחזיר ערך או לא להחזיר ערך•
voidהוא <return type>אם הפונקציה לא מחזירה ערך בהגדרה שלה נציין ש •
בגוף הפונקציה כדי returnאם פונקציה מחזירה ערך עליה להשתמש בפקודה •
להחזיר אותו
public static void printFive(){System.out.println("5");
}
public static int five(){return 5;
}
חתימה של פונקציה
שם הפונקציהשל פונקציה מורכבת מחתימה•
שהפונקציה רשימת טיפוסי הארגומנטיםומ(.סוגי טיפוסים וסדר ,מספר)מקבלת
יכולות )לכל שתי פונקציות בתכנית חתימה שונה •
להיות לנו כמה פונקציות עם אותו שם אך עם
(חתימה שונה
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){…}
קריאה לפונקציה
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);
}}
נדגים מה קורה כאשר קוראים פונקציה•
?מה קורה בזמן קריאה לפונקציה
השליטה של התכנית שומרת את המיקום הנוכחי שלה •
.ועוברת לפונקציה
חדשה שבה מוגדרים ( טבלת משתנים)נפתחת סביבה •
הפרמטרים של הפונקציה והמשתנים שמוגדרים בתוך .הפונקציה
( voidאו סיום הפונקציה במקרה של )returnההוראה •
סוגרת את הסביבה ומחזירה את השליטה למקום בו היינו
.לפני הקריאה לפונקציה
קריאה לפונקציה
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
קריאה לפונקציה
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
קריאה לפונקציה
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
קריאה לפונקציה
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
קריאה לפונקציה
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
קריאה לפונקציה
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
ת מערךת–תרגיל
השלימו את הקוד כך שהפונקציה תחזיר תת •end-ומסתיים בstart–המערך המתחיל ב
public static int[] subArray(int[] arr, int start, int end){//assume that arr.length > end > start > -1
}
פתרון
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;
}
העברת פרמטרים לפונקציה
?מה יודפס: שאלה•
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: פלט
העברת פרמטרים לפונקציה
כדי להבין את הדרך שבה משתנים עוברים לפונקציה עלינו להבין קצת יותר •
טוב את תמונת הזיכרון
כאשר המשתנה הוא פרימיטיבי הוא מחזיק את הערך עצמו•
ערכו הוא כתובת בזיכרון שבו ( משתנה הפנייה)כאשר משתנה אינו פרימיטיבי •:נמצא התוכן
int x = 17;int[] arr = new int[5]
17x
0 0 0 0 0#41 #41arr
העברת פרמטרים לפונקציה
כלומר הערך 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: פלט
העברת פרמטרים לפונקציה
?למה השינוי כן התבצע על המערך•
0 0#411
main
#411arr
ones
#411a
i
העברת פרמטרים לפונקציה
?מה יודפס•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 : פלט
העברת פרמטרים
0 0 0#411
main
#411arr
arrayOfTenElements
#725arr
#725 0 0 0 0 0 0 0 0 0 0
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);
}
שונים במערךאיברים–תרגיל
כתבו פונקציה שמקבלת מערך של מספרים •
. שלמים ובודקת האם כל האיברים בו שוניםהפונקציה תחזיר ערך בוליאני בהתאם
public static boolean allDiff(int[] arr){
}
פתרון
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;
}
פתרון נוסף
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;
}
השתלת תת מחרוזת בתוך מחרוזת-תרגיל
ומחרוזת iמספר שלם sכתבו פונקציה המקבלת מחרוזת •
sub . מושתלת"הפונקציה תחזיר מחרוזת שבה "
שימו לב יש )i-החל מהאינדקס הsבתוך subהמחרוזת
(לבדוק נכונות קלט
public static String insertSubString(String s, int i, String sub){
}
פתרון
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;
}