1 / 46

השתלמות מדעי המחשב בשפות חדשות 7/03/07

השתלמות מדעי המחשב בשפות חדשות 7/03/07. שימוש במחלקה Math מערכים ב- JAVA. מחלקה Math. כל הפעלות במחלקה הן פעולות סטטיות – אין צורך ביצירת עצם כדי להשתמש בפעולה יש לציין שם המחלקה אין צורך ב- import. http://java.sun.com/javase/6/docs/api/. קבועים של המחלקה Math.

zubin
Download Presentation

השתלמות מדעי המחשב בשפות חדשות 7/03/07

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. השתלמות מדעי המחשב בשפות חדשות7/03/07 שימוש במחלקה Mathמערכים ב-JAVA ד''ר יבגני קנל

  2. מחלקה Math • כל הפעלות במחלקה הן פעולות סטטיות – אין צורך ביצירת עצם • כדי להשתמש בפעולה יש לציין שם המחלקה • אין צורך ב-import http://java.sun.com/javase/6/docs/api/ ד''ר יבגני קנל

  3. קבועים של המחלקה Math • Math.E – בסיס ללוגריתם טבעי • Math.Pi – מספר ה-πהידוע System.out.println(Math.E); System.out.println(Math.PI); 2.718281828459045 3.141592653589793 ד''ר יבגני קנל

  4. פעולות שימושיות int a=9; int b=Math.sqrt(a); System.out.println(b); Error: possible loss of precision found : double required: int ? ד''ר יבגני קנל

  5. עיגול וקיצוץ int b=Math.round(3.14); Error: possible loss of precision found : long required: int Math.round(3.14) Math.round(3.9); Math.round(-3.14) Math.round(-3.9) 3 4 -3 -4 מעגל ל-long ולא ל-int טיפוס ברירת מחדל למספר ממשי הוא double! ד''ר יבגני קנל

  6. הפלט ידוע. מה היה הקלט? double a=IO.readDouble(); double b=-a; if(Math.round(a) == Math.round(b)) IO.writeln("Yes"); else IO.writeln("No"); Yes -0.5 < a < 0.5 double a=IO.readDouble(); double b=-a; if(Math.abs(Math.round(a))== Math.abs(Math.round(b))) IO.writeln(“Yes"); else IO.writeln("No"); No -3.5 -0.5 1.5 10.5 IO.writeln(Math.round(1.5)); IO.writeln(Math.round(-1.5)); 2 -1 ד''ר יבגני קנל

  7. מי צריך אותו? יש לנו המרה! double a; int b; -1.5 -1.3 -1.8 1.8 1.3 -1 -1 -2 2 1 b= (int) Math.round(a); b=(int) a; -1 -1 -1 1 1 b=(int) (a+0.5); -1 0 -1 2 1 if(a>=0) b=(int)(a+0.5); else b=(int)(a-0.5); -2 -1 -2 2 1 ד''ר יבגני קנל

  8. עיגול וקיצוץ - המשך מחזירה מספר ממשי שווה לשלם הקרוב ביותר ל-a Math.rint(4.5) Math.rint(- 4.5); Math.rint(3.5) Math.rint(-3.5) 4.0 - 4.0 4.0 - 4.0 Math.rint(3.14) Math.rint(3.9); Math.rint(-3.14) Math.rint(-3.9) 3.0 4.0 -3.0 -4.0 אם מספר קרוב לשני שלמים – תוצאה היא מספר שלם זוגי ! ד''ר יבגני קנל

  9. עיגול וקיצוץ - המשך • Math.ceil – עיגול כלפי מעלהמחזירה מספר ממשי שווה לשלם הקרוב ביותר ל-a שהוא לא קטן מ-a (b≥ a) • Math.floor– עיגול כלפי מתה • מחזירה מספר ממשי שווה לשלם הקרוב ביותר ל-a שהוא לא גדול מ-a (b ≤ a) Math.ceil(3.14) Math.ceil(3.9); Math.ceil(-3.14) Math.ceil(-3.9) 4.0 4.0 -3.0 -3.0 Math.floor(4.9) Math.floor(- 4.1); Math.floor(3.5) Math.floor(-3.5) 4.0 - 5.0 3.0 - 4.0 ד''ר יבגני קנל

  10. מספרים אקראיים Math.random() מחזירה מספר אקראי ממשי (double) גדול או שווה ל-0.0 וקטן מ-1.0 ליצירת מספר אקראי בתחום [low..high]: low ≤ num ≤ high double dNum; dNum= low + Math.random()*(high-low+1); ד''ר יבגני קנל

  11. מחירים אקראיים ליצור מחירים אקראים בין 100 ש''ח ל-1000 ש''ח עד שייוצר מחיר הנקלט double price, prSheq, prStop=IO.readDouble(); do{ price=100+Math.random()*900; prSheq=(int)(price*100)/100.0; System.out.println(prSheq); }while(prSheq!=prStop); מהו מחיר אפשרי הגבוה ביותר? 999.99 ש''ח ד''ר יבגני קנל

  12. doubleממשי מספרים אקראיים Math.random() מחזירה מספר אקראי ממשי (double) גדול או שווה ל-0.0 וקטן מ-1.0 ליצירת מספר אקראי שלם (int) בתחום [low..high]: low ≤ num ≤ high int num; num=low + (int)(Math.random()*(high-low+1)); כמות האפשרויות אפשרות הנמוכה ביותר ד''ר יבגני קנל

  13. מחירים אקראיים ליצור מחירים אקראים בין 100 ש''ח ל-1000 ש''ח עד שייוצר מחיר הנקלט int sheq, ag; double prSheq, prStop=IO.readDouble(); do{ sheq=100+(int)(Math.random()*900); ag=(int)(Math.random()*100); prSheq=sheq+ag*0.01; }while(prSheq!=prStop); מהו מחיר אפשרי הגבוה ביותר? ד''ר יבגני קנל

  14. מספרים אקראיים ב-Java יש מחלקה מסוימת ליצירת מספרים אקראיים java.util.Random • ליצירת מספר אקראי שלם בין 0 ל-n-1)) (כולל) nextInt(int n)משתמשים במתודה • ליצירת מספר אקראי שלם (int) בתחום [low..high]: importjava.util.Random; … Random ran=new Random(); int n=low+ran.nextInt(high-low+1); יצירת עצם Random ד''ר יבגני קנל

  15. מספרים אקראיים לפעמים רוצים לחזור לאותה סדרה של מספרים אקראיים פרמטר ליצירת סידרה import java.util.Random; . . . Random gnr = new Random(20); for(int i = 0; i < 10; i++) { System.out.print(gnr.nextInt(100) + "; "); } טווח מספרים 0<=x<100 53; 36; 1; 61; 5; 95; 33; 55; 93; 88; 53; 36; 1; 61; 5; 95; 33; 55; 93; 88; 53; 36; 1; 61; 5; 95; 33; 55; 93; 88 52; 33; 2; 96; 5; 69; 82; 59; 2; 37; 98; 71; 62; 20; 94; 77; 18; 37; 65; 82; 57; 48; 98; 67; 97; 53; 9; 50; 75; 85; Random gnr = new Random(20); Random gnr = new Random(); ד''ר יבגני קנל

  16. פעולות נוספות ד''ר יבגני קנל

  17. פעולות נוספות ד''ר יבגני קנל

  18. מערך חד-ממדי • מערך (array) הוא טיפוס המגדיר אוסף סדור, באורך קבוע, של ערכים מטיפוס זהה. • תאי המערך ממוספרים על פי מיקומם. מיקומו של התא הראשון הוא 0, מיקומו של התא השני הוא 1, ומיקומו של התא האחרון הוא n-1 . ד''ר יבגני קנל

  19. מערך הוא עצם • בג'אווה, כל מערך שאנו יוצרים, הוא עצם. את המערך, כמו כל עצם אחר, מאפיינות תכונות ופעולות. • length – התכונה האחראית על שמירת אורך המערך כלומר, מספר תאיו. תכונה זו מוגדרת כ-public, ולכן נוכל לקבל את ערכה על ידי פנייה אליה באופן הבא: a.length • ערכה של length נקבע בעת יצירת המערך, ואינו ניתן לשינוי לאחר מכן. ד''ר יבגני קנל

  20. מערך הוא עצם • פעולות הממשק של המערך הן: יצירתו, עדכוןואחזור ערכו של תא במערך. • כדי לגשת אל ערך המוצב בתא במערך, נכתוב את שם המערך ואחריו בסוגריים מרובעים את מיקום התא. לדוגמה: גישה לערך המוצב בתא הראשון במערך a: a[0] גישה לערך המוצב בתא האחרון במערך a: a[a.length - 1] ד''ר יבגני קנל

  21. מערך – לזכור! • מערך איננו טיפוס בסיסי בשפת Java. • לא די בהצהרה על מערך, הצהרה אינה יוצרת את תאי הזיכרון המתאימים. • כדי ליצור את תאי המערך יש להשתמש בפעולה new. ד''ר יבגני קנל

  22. הצהרה על מערך שלמים בגודל 10 • מצייני המערך הם בתחום 0 – 9 • פנייה לאברי המערך כרגיל באמצעות אינדקס: arrEx1[3] טיפוס המשתנה הוא מערך שלמים שם המערך int[] arrEx1 = new int[10]; יצירת 10 תאי המערך ד''ר יבגני קנל

  23. חריגה מתחומי המערך • אם ננסה לגשת לתא שאינו קיים במערך, למשל: a[-2] נקבל את "הודעת החריגה" הבאה, המעידה כי ניסינו לגשת למיקום החורג מגבולות המערך: ArrayIndexOutOfBoundException טעות בזמן ריצה! • גם טעות!:a[a.length] ד''ר יבגני קנל

  24. טיפוס של מערך ד''ר יבגני קנל

  25. הגדרה ויצירת מערך • הגדרה: <arrayType>[] <arrayName>; int[] grades; • יצירה: <arrayName> = new <arrayType>[<arraySize>] ; grades = new int[10]; • הגדרה ויצירה: int[] grades = new int[10]; • אחרי היצירה המערך המספרי מאותחל ב- 0 ד''ר יבגני קנל

  26. מערך מאותחל – מה זאת אומרת? int[] a1=new int[10]; System.out.println(Arrays.toString(a1)); מתודה ממחלקה java.util.Arrays [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] double [] a2=new double[10]; System.out.println(Arrays.toString(a2)); [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] boolean [] a3=new boolean[10]; System.out.println(Arrays.toString(a3)); [false, false, false, false, false, false, false, false, false, false] ד''ר יבגני קנל

  27. הצהרה משולבת באתחול • ניתן לבצע הקצאת זיכרון לאברי מערך תוך כדי אתחולם על פי רשימת אתחול. • במקרה הזה יוקצה מערך של תווים ובו 3 תאים(שמצייניהם 0,1,2) וערכיהם בהתאמה כמופיע בסוגרים ה- {} char charArr [ ] = {‘*’, ‘p’, ‘+’ }; ד''ר יבגני קנל

  28. מערך – לזכור! • ניתן להצהיר על מערך בכל מקום בתוכנית • ניתן אף לקלוט גודל של המערך: int size=IO.readInt(); int[] arrEx1 = new int[size]; או int[] arrEx1 = new int[IO.readInt()]; ד''ר יבגני קנל

  29. מעיצוב תוכנה - ליסודות • כתוב תוכנית אשר קולטת מספר תלמידים אשר נגשו לבחינת בגרות ואת ציונם. על התוכנית להדפיס מספר התלמידים שקיבלו ציון מעל הממוצע. double sum=0; int num=IO.readInt(); int grades[]=new int[num]; for(int i=0;i<grades.length;i++){ grades[i]=IO.readInt(); sum+=grades[i];} double avg=sum/num; for(int i=0;i<grades.length;i++){ if(grades[i]>avg)IO.writeln(i+" " +grades[i]);} ד''ר יבגני קנל

  30. מערכים – קצת יותר לעומק אפשר להצהיר על מערך a1 בשתי דרכים: int [] a1; int a1[[; אפשר לשלב בשורה אחת עם הצהרות על משתנים מאותו טיפוס. int numbers [], num1, num2; מהו הבדל? int [] numbers, num1, num2; ד''ר יבגני קנל

  31. מערך הוא עצם • ערך של משתנה מטיפוס מערך אף הוא עצם. • כלומר, ערך של משתנה מטיפוס מערך הוא מצביע. • הקצאת הזיכרון למערך מתבצעת למעשה בשני שלבים עיקריים: • הקצאת מצביע אל המערך. • הקצאת תאי המערך. int[] a1; a1 = new int[10]; או int[] a1 = new int[10]; ד''ר יבגני קנל

  32. a1 a1 a1 a1 מערכים int[] a1; a1= new int[10]; for (int i=0; i<10; i++) a1[i] = i; int[] a2; a2 a2= a1; a2 ד''ר יבגני קנל

  33. מערכים - המשך int[] a1; System.out.println(a1); a1=new int[10]; System.out.println(a1); System.out.println(a1[9]); for(int i=0;i<10;i++)a1[i]=i; System.out.println(a1); System.out.println(a1[9]); int[] a2; a2=a1; System.out.println(a2); System.out.println(a2[9]); Error: variable a1 might not have been initialized // [I@63b2e6 0 [I@63b2e6 9 [I@63b2e6 9 ד''ר יבגני קנל

  34. a1 a1 a1 מערכים Int[] a1= new int[10]; for (int i=0; i<10; i++) a1[i] = i; int[] a2=new int[10]; a2 for (int i=0; i<10; i++) a2[i] =2* i; a2 a2 a2= a1; ד''ר יבגני קנל

  35. מה זה עושה? int[] a1={1,2,3,4,5}; int[] a2={10,20,30,40,50}; int[] a3; a3=a1; a1=a2; a2=a3; for(int i=0; i<a2.length;i++)System.out.print(a2[i]+" "); 1 2 3 4 5 ד''ר יבגני קנל

  36. מערך הוא עצם • בג'אווה, כל מערך שאנו יוצרים, הוא עצם. את המערך, כמו כל עצם אחר, מאפיינות תכונות ופעולות. • length – התכונה האחראית על שמירת אורך המערך כלומר, מספר תאיו. תכונה זו מוגדרת כ-public, ולכן נוכל לקבל את ערכה על ידי פנייה אליה באופן הבא: a.length • ערכה של length נקבע בעת יצירת המערך, ואינו ניתן לשינוי לאחר מכן. ד''ר יבגני קנל

  37. מהי תכונה .length? int[] a; System.out.println(a.length); Error: variable a might not have been initialized int[] a= null; System.out.println(a.length); NullPointerException: int[] a={10,20,30}; System.out.println(a.length); 3 int[] a=new int[3]; System.out.println(a.length); 3 int[]a=new int[0]; System.out.println(a.length); ? 0 ד''ר יבגני קנל

  38. האם זה חריגה? int [] a=new int[5]; a[8]=10; ArrayIndexOutOfBoundException int[] a1=new int[10]; for(int i=0; i<a1.length;i++)a1[i]=i; int[] a2=new int[5]; for(int i=0; i<a2.length;i++)a2[i]=i*10; a2=a1; for(int i=5; i<10;i++)System.out.print(a2[i]+" "); 5 5 6 7 8 9 a2.length ד''ר יבגני קנל

  39. מעיצוב - ליסודות כתוב תוכנית אשר מקבלת מערך ומוחקת ממנו את כל האיברים הא-זוגיים int[] a1={0,1,2,3,4,5,6,7,8,9}; int[] a2=new int[0]; for(int i=0; i<a1.length; i++) if(a1[i]%2==0){ int[] a3=new int[a2.length+1]; for(int j=0; j<a2.length; j++)a3[j]=a2[j]; a3[a2.length]=a1[i]; a2=a3;} a1=a2; for(int i=0;i<a1.length;i++)System.out.print(a1[i]+" "); 0 2 4 6 8 ד''ר יבגני קנל

  40. כאשר טיפוסים שונים... int[] a=new int[10]; char[] ch=a; int a=100; char ch=a; Error: incompatible types found : int[] required: char[] Error: possible loss of precision found : int required: char char[] ch=new char[10]; int[] a=ch; char ch=‘a’; int a=ch; Error: incompatible types found : char[] required: int[] ? int[] a1=null; char[] a2=null; if(a2==a1)System.out.println("Yes"); else System.out.println("No"); Error: incomparable types: char[] and int[] ד''ר יבגני קנל

  41. מערכים ואיבריהם int[] a2={65,66,67,68,69,70,71,72}; char[] a1=new char[8]; for(int i=0;i<a2.length;i++)a1[i]=(char)a2[i]; for(int i=0;i<a1.length;i++)System.out.print(a1[i]+" "); A B C D E F G H ד''ר יבגני קנל

  42. מערכים - ומה עם ההוראה? • באשר ל: הקצאת תאי המערך • לא קרה כלום, כך צריך להגדיר... וזהו. • באשר ל: היות משתנה המערך - מצביע • לשים לב, לא לעשות השמה של מערך אל מערך, כי כך אובד הקשר לכל חלקי הזיכרון שהוקצו למערך אליו משימים. הזיכרון עצמו לא מטריד אותנו..., אבל אין בזה הגיון. ד''ר יבגני קנל

  43. מערכים - ומה עם ההוראה? • טיפ, אם רוצים להעתיק מערך, יש פעולה מתאימה של המערכת, עבור שני מערכים שהוצהרו והוקצו התאים שלהם: System.arraycopy(a1,0,a2,0,10); קרי: העתק מן המערך a1 החל מן המקום 0, אל המערך a2 החל מן המקום 0, 10 תאים בהתאמה. כל הערכים הנומריים יכולים להיות מותאמים כנדרש. ד''ר יבגני קנל

  44. מחלקה java.util.Arrays • String Arrays.toString(int[] a) • boolean Arrays.equals(int[] a, int[] b) • void Arrays.fill(int[] a, int value) • void Arrays.fill(int[] a, int fromIndex, int toIndex, int value); • void Arrays.sort(int[] a) • void Arrays.sort(int[] a, int fromIndex, int toIndex) ד''ר יבגני קנל

  45. מחלקה java.util.Arrays import java.util.*; … int[] a1=new int[10]; for(int i=0;i<10;i++)a1[i]=9-i; System.out.println(a1); System.out.println(Arrays.toString(a1)); Arrays.sort(a1); System.out.println(Arrays.toString(a1)); import java.util.*; … int[] a1=new int[10]; for(int i=0;i<10;i++)a1[i]=10-i; System.out.println(a1); System.out.println(Arrays.toString(a1)); Arrays.sort(a1); System.out.println(Arrays.toString(a1)); [I@63b2e6 [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] ד''ר יבגני קנל

  46. פעולות שימושיות ד''ר יבגני קנל

More Related