מבוא לתכנות ב- JAVA מעבדה 3
נושאי התרגול לולאות ניפוי שגיאות
לולאות - הקדמה כיצד הייתם כותבים תוכנית שתדפיס את המספרים השלמים בין 1 ל- 100 בעזרת הכלים שלמדתם עד עתה? חייבת להיות דרך אחרת מאשר לכתוב 100 שורות של קוד! בנוסף, חישבו איך הייתם כותבים תוכנית שתבדוק האם מספר נתון הוא ראשוני? במקרים מסוג זה בהם נדרש לחזור ולבצע רצף של פקודות מספר פעמים, לולאות נכנסות לתמונה.
לולאת While while (<condition>){ <statement> condition איך מתבצעת לולאת?while 1. התנאי <condition> מחושב 2. אם הערך של התנאי הוא :true בצע את גוף הלולאה <statement> וחזור ל -1 אחרת הלולאה הסתיימה. המשך לקוד שבא לאחריה false true Body of loop
- דוגמא לולאת While. 1+2+ +100 שימוש ב- 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
לולאת do-while do{ <statement> while(<condition>); Body of loop איך מתבצעת לולאת?do-while 1. בצע את גוף הלולאה <statement> 2. התנאי <condition> מחושב אם הערך של התנאי הוא :true חזור ל -1 אחרת הלולאה הסתיימה. המשך לקוד שבא לאחריה true condition false
- דוגמא לולאת do-while. 1+2+ +100 שימוש ב- do-while לחישוב הסכום public class DoWhileLoopExample { public static void main(string[] args){ int i = 1; int sum = 0; do{ sum += i; i++; while (i <= 100);
לולאת 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
לולאת -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);
תרגיל כתבו תוכנית שמחשבת את הסכום של 100000 האיברים הראשונים בטור: הכפילו את הסכום שקיבלתם ב- 4 שקיבלתם?. מה התוצאה
פתרון public class PiApprox { public static void main(string[] args){ double sum = 0; double sign = 1; for (int i = 0; i < 100000; i++){ sum += sign / (2*i + 1); sign = sign *(-1); System.out.println(sum * 4);
הוראות קפיצה 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;
תרגיל כתבו תוכנית שקולטת מהמשתמש מספר x שהוא חזקה של 2 )ניתן להניח כי הקלט תקין( ומחשבת בעזרת לולאה את לדוגמא עבור הקלט 32 התוכנית תדפיס 5
פתרון 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 );
לולאות מקוננות גוף הלולאה יכול להכיל לולאה. דוגמא: הדפסת לוח הכפל for (int i = 1; i <= 9; i++){ for (int j = 1; j <= 9; j++){ System.out.print(i*j + "\t"); System.out.println();
תרגיל כתבו תוכנית שמדפיסה את כל השלשות הפיתגוריות בתחום [1,100] שלשה (a,b,c) נקראת פיתגורית אם הדפיסו רק את השלשות הפיתגוריות מהצורה.a<b<c
פתרון 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+")");
ניפוי שגיאות סוגי שגיאות בכתיבת קוד שגיאות קומפילציה שגיאות זמן ריצה שגיאות לוגיות
ניפוי שגיאות 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"); לאיזה קטגוריה נכנסת השגיאה בקוד זה?
ניפוי שגיאות 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"); לאיזה קטגוריה נכנסת השגיאה בקוד זה? קומפילציה
ניפוי שגיאות 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); האם הקוד תקין?
ניפוי שגיאות 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); האם הקוד תקין? יתכנו שגיאות בזמן ריצה!
ניפוי שגיאות לפניכם קוד למציאת המקסימום בין 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(); האם הקוד תקין?
ניפוי שגיאות לפניכם קוד למציאת המקסימום בין 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
קביעת breakpoint Debugging within Eclipse
Debugging within Eclipse
מצב debug
קידום בצעד ביצוע צעד
טבלת משתנים
תרגיל פתחו את הקובץ Calc.java הנמצא ב בeclipse sessions תקנו את התוכנית כך שהתוכנית תציג את הפלטים הנכונים מהם שגיאות הקומפילציה? האם ישנן שגיאות לוגיות בתוכנית? האם ייתכנו שגיאות בזמן ריצה? practical