מהוא לתכנות ב- JAVA מעבדה 3

גודל: px
התחל להופיע מהדף:

Download "מהוא לתכנות ב- JAVA מעבדה 3"

תמליל

1 מבוא לתכנות ב- JAVA מעבדה 3

2 נושאי התרגול לולאות ניפוי שגיאות

3 לולאות - הקדמה כיצד הייתם כותבים תוכנית שתדפיס את המספרים השלמים בין 1 ל- 100 בעזרת הכלים שלמדתם עד עתה? חייבת להיות דרך אחרת מאשר לכתוב 100 שורות של קוד! בנוסף, חישבו איך הייתם כותבים תוכנית שתבדוק האם מספר נתון הוא ראשוני? במקרים מסוג זה בהם נדרש לחזור ולבצע רצף של פקודות מספר פעמים, לולאות נכנסות לתמונה.

4 לולאת While while (<condition>){ <statement> condition איך מתבצעת לולאת?while 1. התנאי <condition> מחושב 2. אם הערך של התנאי הוא :true בצע את גוף הלולאה <statement> וחזור ל -1 אחרת הלולאה הסתיימה. המשך לקוד שבא לאחריה false true Body of loop

5 - דוגמא לולאת While שימוש ב- while לחישוב הסכום public class WhileLoopExample1 { public static void main(string[] args){ int i = 1; int sum = 0; while( i <= 100 ){ sum += i; i++; 1. x+= y is the same as x=x+y 2. i++ is the same as i=i+1

6 לולאת do-while do{ <statement> while(<condition>); Body of loop איך מתבצעת לולאת?do-while 1. בצע את גוף הלולאה <statement> 2. התנאי <condition> מחושב אם הערך של התנאי הוא :true חזור ל -1 אחרת הלולאה הסתיימה. המשך לקוד שבא לאחריה true condition false

7 - דוגמא לולאת do-while שימוש ב- do-while לחישוב הסכום public class DoWhileLoopExample { public static void main(string[] args){ int i = 1; int sum = 0; do{ sum += i; i++; while (i <= 100);

8 לולאת for איך מתבצעת לולאת for (<init>; <condition>; <increment>){ <statement>?for 1. אתחל משתנה לולאה )ניתן ורצוי להגדיר את המשתנה בתוך <init> במקרה זה הוא יוגדר רק עבור הלולאה ולא ניתן יהיה להשתמש בו מבחוץ( 2. חשב את התנאי. אם התנאי מתקיים בצע את גוף הלולאה, קדם את משתנה הלולאה וחזור ל 2 אחרת סיים את הלולאה init condition false true Body of loop and then increment for (int i = 0; i <= ub; i++){ do something

9 לולאת -for דוגמא חישוב בעזרת לולאה public static void main(string[] args){ Scanner sc = new Scanner(System.in); int x = sc.nextint(); int y = sc.nextint();; int res=1; for (int i = 0; i < y; i++){ res = res*x; System.out.println(x + "^" + y + "=" + res);

10 תרגיל כתבו תוכנית שמחשבת את הסכום של 100,000 האיברים הראשונים בטור: הכפילו את הסכום שקיבלתם ב- 4 שקיבלתם?. מה התוצאה

11 פתרון public class PiApprox { public static void main(string[] args){ double sum = 0; double sign = 1; for (int i = 0; i < ; i++){ sum += sign / (2*i + 1); sign = sign *(-1); System.out.println(sum * 4);

12 הוראות קפיצה break כאשר הפקודה break מתבצעת הלולאה תסתיים )ללא קשר לאם תנאי הלולאה מתקיים או לא( continue בביצוע continue הלולאה תמשיך לאיטרציה הבאה מבלי שהפקודות שבאות אחרי הפקודה continue בגוף הלולאה מתבצעות מה יודפס עבור כל אחד מקטעי הקוד הבאים? for (int i=0; i < 1000; i++){ if (i < 100){ continue; System.out.println(i); for (int i=0; i < 1000; i++){ System.out.println(i); if (i > 100){ break;

13 תרגיל כתבו תוכנית שקולטת מהמשתמש מספר x שהוא חזקה של 2 )ניתן להניח כי הקלט תקין( ומחשבת בעזרת לולאה את לדוגמא עבור הקלט 32 התוכנית תדפיס 5 רעיון? נקלוט את x - נשמור אותו במשתנה זמני כדי לא "להרוס אותו" - נתחיל לחלק אותו ב- 2 )הבסיס של הלוג( עד שהוא יהיה כבר - קטן מ- 1 נספור כמה פעמים חילקנו עם משתנה עזר נוסף בתוך הלולאה - כמות הפעמים שספרנו היא תוצאת הלוג. -

14 פתרון public class Log2 { public static void main(string[] args){ Scanner sc = new Scanner(System.in); int x = sc.nextint(); int temp = x; int count = 0; while (temp > 1){ temp = temp / 2; count++; System.out.println("log2(" + x+") = " + count );

15 לולאות מקוננות גוף הלולאה יכול להכיל לולאה. דוגמא: הדפסת לוח הכפל for (int i = 1; i <= 9; i++){ for (int j = 1; j <= 9; j++){ System.out.print(i*j + "\t"); System.out.println();

16 תרגיל כתבו תוכנית שמדפיסה את כל השלשות הפיתגוריות בתחום [1,100] שלשה (a,b,c) נקראת פיתגורית אם הדפיסו רק את השלשות הפיתגוריות מהצורה.a<b<c for(int a = 1 for(int b = a + 1 ){ for(int c = b + 1 if ( ){

17 פתרון public class PythagoreanTriples { public static void main(string[] args){ for(int a = 1; a <= 100; a++){ for(int b = a+1; b <= 100; b++){ for(int c = b + 1; c <= 100; c++){ if (a*a + b*b == c*c){ System.out.println("("+a+","+b+","+c+")");

18 ניפוי שגיאות סוגי שגיאות בכתיבת קוד שגיאות קומפילציה שגיאות זמן ריצה שגיאות לוגיות

19 ניפוי שגיאות public static void main(string[] args){ Scanner sc = new Scanner(System.in); int num = sc.nextint(); if (num % 2 = 0){ System.out.println("even"); else{ System.out.println("odd"); לאיזה קטגוריה נכנסת השגיאה בקוד זה?

20 ניפוי שגיאות public static void main(string[] args){ Scanner sc = new Scanner(System.in); int num = sc.nextint(); if (num % 2 = 0){ System.out.println("even"); else{ System.out.println("odd"); לאיזה קטגוריה נכנסת השגיאה בקוד זה? קומפילציה

21 ניפוי שגיאות public static void main(string[] args){ Scanner sc = new Scanner(System.in); int x = sc.nextint(); int y = sc.nextint(); System.out.println("x / y = " + x/y); האם הקוד תקין?

22 ניפוי שגיאות public static void main(string[] args){ Scanner sc = new Scanner(System.in); int x = sc.nextint(); int y = sc.nextint(); System.out.println("x / y = " + x/y); האם הקוד תקין? יתכנו שגיאות בזמן ריצה!

23 ניפוי שגיאות לפניכם קוד למציאת המקסימום בין 3 מספרים. אולם, במקרים מסוימים מתקבל פלט שלא כמצופה. import java.util.scanner; public class Example { public static void main(string[] args){ Scanner sc = new Scanner(System.in); int x = sc.nextint(); int y = sc.nextint(); int z = sc.nextint(); int max; if (x > y && x > z){ max = x; else if (y > x && y > z){ max = y; else{ max = z; System.out.println("max(x,y,z)=" + max); sc.close(); האם הקוד תקין?

24 ניפוי שגיאות לפניכם קוד למציאת המקסימום בין 3 מספרים. אולם, במקרים מסוימים מתקבל פלט שלא כמצופה. import java.util.scanner; public class Example { 5>5? No! 5>5? Again. No! public static void main(string[] args){ Scanner sc = new Scanner(System.in); int x = sc.nextint(); int y = sc.nextint(); int z = sc.nextint(); int max; if (x > y && x > z){ max = x; else if (y > x && y > z){ max = y; else{ max = z; System.out.println("max(x,y,z)=" + max); sc.close(); האם הקוד תקין? שגיאה לוגית max(5,5,1)=1

25 קביעת breakpoint Debugging within Eclipse

26 Debugging within Eclipse

27 מצב debug

28 קידום בצעד ביצוע צעד

29 טבלת משתנים

30 תרגיל פתחו את הקובץ Calc.java הנמצא ב בeclipse sessions תקנו את התוכנית כך שהתוכנית תציג את הפלטים הנכונים מהם שגיאות הקומפילציה? האם ישנן שגיאות לוגיות בתוכנית? האם ייתכנו שגיאות בזמן ריצה? practical