1 / 45

מבוא למדעי המחשב תרגול מס' 2

מבוא למדעי המחשב תרגול מס' 2. נושאים משתנים טיפוסים אופרטורים פונקציות מתמטיות מהמחלקה Math המרת טיפוסים תנאים ולולאות. תזכורת משיעור קודם. תזכורת. תכנית מחשב נכתבת כטקסט בקובץ. הטקסט כתוב בשפת תכנות והוא מכיל את ההוראות המהוות את התוכנית.

Download Presentation

מבוא למדעי המחשב תרגול מס' 2

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. מבוא למדעי המחשבתרגול מס' 2 נושאים משתנים טיפוסים אופרטורים פונקציות מתמטיות מהמחלקה Math המרת טיפוסים תנאים ולולאות

  2. תזכורת משיעור קודם

  3. תזכורת... • תכנית מחשב נכתבת כטקסט בקובץ. • הטקסט כתוב בשפת תכנות והוא מכיל את ההוראות המהוות את התוכנית. • התוכנית עוברת תהליך הנקרא הידור(או קומפילציה) ואחריו מקבלים קובץ הניתן להרצה. • בקורס זה נכתוב תוכניות בשפה Java • תוכניות ב Java נשמרות בקבצים בעלי סיומת java.

  4. תוכנית ראשונה הקלידו את התוכנית הבאה בקובץ Hello.java. שימו לב לסימני פיסוק, ואותיות גדולות וקטנות. /* This program prints "Hello World!" on the screen */ publicclass Hello { publicstaticvoid main(String[] args) { System.out.println("Hello World!"); } }

  5. נושא ראשון:משתנים.

  6. משתנים וטיפוסים מהו משתנה? משתנה (variable) הוא שם סימבולי המשוייך למקום בזיכרון אשר יכול להכיל ערכים שונים במהלך ריצת התוכנית. למה צריך משתנים? ניתן להשתמש במשתנים על מנת לשמור ערכים, לשימוש בשלבמאוחר יותר בתוכנית. בJava, לכל משתנה יש טיפוס(type). הטיפוס קובע אילו סוגי ערכים המשתנה יכול להכיל בזמן ריצת התוכנית.

  7. משתנים וטיפוסים טיפוס המשתנה בJava, לכל משתנה יש טיפוס(type) הקובע אילו סוגי ערכים המשתנה יכול להכיל בזמן ריצת התוכנית. למעשה, הטיפוס מגדיר כמה מקום בזיכרון יהיה בשימוש עבור הערכים של המשתנה ואיך נשתמש במקום זה על מנת לייצג את הערכים השונים שיכול לקבל המשתנה. סוגי טיפוסים לJava יש שני סוגים של טיפוסים: primitives ו objects היום נדבר רק על primitives.

  8. הגדרת משתנים • כדי להגדיר משתנה בJava יש להכריז על שמו של המשתנה וטיפוסו. • למשל זוהי הגדרה על משתנה בשם מטיפוס (מספר שלם). intnum; • אפשר להגדיר מספר משתנים מאותו טיפוס בשורה אחת: int num1, num2; Type Identifier

  9. קבועים קבוע(constant)הוא שם סימבולי המשוייך למקום בזיכרון אשר יכול להכיל ערך יחיד במהלך ריצת התוכנית. • קבוע דומה הוא כמו משתנה שמשימים לו ערך פעם אחת בלבד במהלך כל התוכנית. • דוגמה: finalint PASS_GRADE = 56; int grade; grade = PASS_GRADE - 1;

  10. טווח הכרה של משתנה טווח ההכרה של משתנה (scope) הוא האזור בתוכנית שבו המשתנה מוגדר וניתן להשתמש בו. • טווח ההכרה של משתנה תלוי בבלוק בו הוא מוגדר (בלוק מצוין ע"י סוגריים מסולסלים). • טווח ההכרה של המשתנה מתחיל בשורה שבו המשתנה מוגדר ומסתיים בסוף הבלוק שבו נמצאת הגדרת המשתנה.

  11. טווח הכרה של משתנים, תרגילון.

  12. פעולת השמה פעולת השמה(assignment)משימה ערך במקום בזיכרון אליו משוייך המשתנה. לדוגמא:כדי להשים את הערך 3 למשתנה יש לרשום: num = 3 פעולת השמה חייבת להופיע בתוך טווח ההכרה של המשתנה. *ניתן להגדיר את המשתנה ולבצע השמה בשורה אחת: int num1 = 1;

  13. אין להשתמש במשתנה שלא קיבל ערך ! מה ידפיס הקוד הבא?

  14. נושא שני: טיפוסים.

  15. טיפוסים טיפוס של משתנה קובע: • אילו ערכים יכול המשתנה להכיל • מהן הפעולות שניתן לבצע על המשתנה רקע • הזיכרון במחשב הוא זיכרון בינארי (binary) המכיל ביטים. • ביט(bit)- יחידת זיכרון בינארית. ביט יכול להיות 0 או 1. • זיכרון המחשב נמדד ביחידות בסיסיות הנקראות בתים(bytes). 1 byte = 8 bit • ערכים המאוחסנים בזיכרון המחשב נשמרים בבתים. מספר הבתים שדורש אחסון של משתנה תלוי בטיפוסו. • לעוד מידע בנושא ניתן לפנות לBinary - Wikipedia.

  16. זיכרון המחשב • ניתן לחשוב על זיכרון המחשב כשורה ארוכה (מאוד) של נקודות שחורות ולבנות. • המחשב מקודד ערכים שונים באמצעות הצבעים של הנקודות.

  17. זיכרון המחשב • לדוגמא: אם המחשב רוצה לשמור ערך שיכול להיות כל מספר בין 0 ל 3, המחשב יוכל להשתמש ב2 נקודות (או ביטים) כך: • לפי השיטה הנ"ל, כמה ביטים ידרשו למחשב כדי להחזיק ערך שיכול להיות בין 0 ל 7? = 0 = 1 = 2 = 3

  18. טיפוסים פרימיטיביים • טיפוסים נומריים שלמים טיפוסים המייצגים מספרים שלמים: byte, short, int, long למשל: longlongNum, longNum2; bytebyteNum = 125; longNum = 1234567890; 2. טיפוסים ממשיים הטיפוסים הממשיים הם double, float. למשל: doubledoubleNum; doubleNum = 3.75;

  19. טיפוסים פרימיטיביים 3. טיפוסים לוגיים הטיפוס הלוגי נקרא boolean. משתנים מטיפוס זה יכולים לקבל ערך true או false. boolean indicator; indicator = true; 4. תווים תו: char. סימן בודד כגון אות, ספרה, רווח, סימן קריאה וכו'. ערך מסוג char (char literal) תחום בגרשיים בודדות למשל, 'a', 'A'. לפני סימן מיוחד יש תו backslash (למשל, newline '\n', tab '\t' , backspace '\b') charcapitalN; capitalN = 'N';

  20. טבלת סיכום טיפוסים

  21. נושא שלישי: אופרטורים.

  22. אופרטורים אופרטורים: סימנים מיוחדים שמבצעים פעולה ספציפית על 1,2 או 3 אופרנדים. אופרטורים אריתמטיים מבצעים פעולות חשבוניות על אופרנדים אריתמטיים (מספרים או משתנים מטיפוס אריתמטי):

  23. דוגמה 1 /* This program demonstrates addition and multiplication between integers. */ publicclass OperatorsExample1{ publicstaticvoid main(String[] args){ int a = 3, b = 5; int c; c = a + b; System.out.println("c = "+ c); c = c * 2; System.out.println("c = "+ c); } } c = 8 c = 16

  24. דוגמה 2 התוכנית הבאה מדגימה את סדר הפעולות של הפעולות האריתמטיות: publicclass OperatorsExample { publicstaticvoid main(String[] args) { int a = 18; int b = 42; int first = (a + b) * 2; int second = a + b * 2; System.out.println("first number is:" + first); System.out.println("second number is:" + second); } } first number is:120 second number is:102

  25. שאלה בהנתן מספר בין 3 ספרות שונות מ0, כיצד ניתן לחשב את המספר שיתקבל מהפיכת סדר הספרות של המספר הראשון? לדוגמא:בהנתן n=123 לחשב את המספר m=321

  26. פתרון import java.util.Scanner; /* This program accepts a 3-digit number from the user * reverses the digits and prints the result */ publicclass Reverse { publicstaticvoid main(String[] args) { // Read a number from the user. Scanner sc = new Scanner(System.in); System.out.print("Enter a 3-digit number:"); int num = sc.nextInt(); // divide the number into ones, tens and hundreds. int ones = num % 10; int tens = (num % 100) / 10; int hundreds = num / 100; // calculate the reverse number int reverseNum = (ones * 100) + (tens * 10) + hundreds; System.out.println("The reverse number is " + reverseNum); } } Enter a 3-digit number: 951 The reverse number is 159

  27. אופרטורים יחסיים ב Java יש 6 אופרטורים המשווים בין שני מספרים ונותנים תשובה בוליאנית (true או false).

  28. דוגמה import java.util.Scanner; // This program compares two numbers with relational operators publicclass RelationalOperators { publicstaticvoid main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("Enter the first number:"); int x = sc.nextInt(); System.out.print("Enter the second number:"); int y = sc.nextInt(); System.out.println("x<y is " + (x < y)); System.out.println("x>y is " + (x > y)); System.out.println("x<=y is " + (x <= y)); System.out.println("x>=y is " + (x >= y)); System.out.println("x==y is " + (x == y)); System.out.println("x!=y is " + (x != y)); } } Enter the first number:10 Enter the second number:20 x<y is true x>y is false x<=y is true x>=y is false x==y is false x!=y is true

  29. אופרטורים לוגיים אופרטורים לוגיים פועלים על ערכים מטיפוס לוגי (בוליאני) וגם נותנים תשובה בוליאנית (true או false). * הערכת האופרטורים הלוגיים And ו Or מתבצעת משמאל לימין.

  30. דוגמה import java.util.Scanner; // This program demonstrates logical operators. // It reads two integers from the user and checks if // they are larger than 10. publicclass LogicalOperators { publicstaticvoid main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("Enter the first number:"); int x = sc.nextInt(); System.out.print("Enter the second number:"); int y = sc.nextInt(); System.out.println("(y<10)&&(x<10) is " + ((y<10) && (x<10))); System.out.println("(y<10)||(x<10) is " + ((y<10) || (x<10))); boolean state; state = ((y < 10) || (x < 10)); System.out.println("state is " + state); } } Enter the first number:10 Enter the second number:9 (y<10)&&(x<10) is false (y<10)||(x<10) is true state is true

  31. נושא רביעי: Math.

  32. המחלקה Math המחלקה Math מאגדת בתוכה פונקציות מתמטיות שימושיות וקבועים. • Math.abs(x) – ערך מוחלט של x. • Math.max(x1,x2), Math.min(x1, x2) – המינימום והמקסימום (בהתאמה) בין x1 ו x2. • Math.pow(x, y) – מחשב את x בחזקת y (xy). • Math.sqrt(x) – שורש ריבועי של x. • Math.random() – מחזיר מספר אקראי בין 0 ל 1 (לא כולל 1). • Math.PI – קבוע המייצג את הערך  (3.14159...)

  33. דוגמה publicclass UseMath { publicstaticvoid main(String[] args){ // This is an example of using Math methods double x = Math.abs(-3); x = Math.pow(x, 2 ); x = Math.max(x, Math.PI); System.out.println("max( (|-3|)^2 , Pi ) = " + x); x = Math.random(); System.out.println("A random number between 0 and 1: "+ x); } } max( (|-3|)^2 , Pi ) = 9.0 A random number between 0 and 1: 0.9764623048094814 המחלקה Math ומחלקות רבות נוספות כלולות בספריות Java הכלולות בהתקנת הJRE. מידע מפורט על מחלקת Math ומחלקות נוספות הכלולות ב Java ניתן למצוא בקישורhttp://download.oracle.com/javase/6/docs/api/java/lang/Math.html

  34. נושא חמישי: Casting.

  35. שינוי צורת הסתכלות • ניתן לחשוב על Casting של טיפוסים פרימיטיביים כאל שינוי צורת הסתכלות: int: 48 (Narrowing Primitive Conversion) double : 48.84 double: 48.0 (Widening Primitive Conversion) Int : 48 char: ‘0’ Int : 48 WAT!

  36. המרת טיפוס (Casting) לכל משתנה ב Java יש טיפוס ספציפי. • מה קורה כאשר מערבים טיפוסים שונים בביטוי? • במקרים מסוימים Java מטפלת בטיפוסים השונים באופן אוטומטי ובפעמים אחרות אנחנו חייבים לבצע המרה מפורשת של טיפוס נתונים אחד לאחר. • המרות אוטומטיות כאשר מבצעים פעולה אריתמטית הערך המתקבל הינו בעל טיפוס מסוים. אם כך המרכיבים מאותו טיפוס אז הטיפוס המתקבל בפעולה הינו זהה. long y, w; long z = w + y; הערך של הביטוי w+y הינו מטיפוס long.

  37. המרת טיפוס (Casting) • כאשר מרכיבי הביטוי הינם מטיפוסים שונים הביטוי המתקבל יהיה מהטיפוס של המרכיב הכולל ביותר. • הסדר של טיפוסים המספרים מן הפחות כולל לכולל ביותר הינו: byte, short, int, long, float, double. • דוגמה • האופרטור / עובד אחרת בהתאם לטיפוסים עליהם הוא מופעל. • 5.0/2 --> 2.5 • 5.0/2.0 --> 2.5 • 5/2.0 --> 2.5 • 5/2 --> 2

  38. המרת טיפוס (Casting) 2. המרות יזומות ניתן לבצע המרת טיפוס ע"י שימוש בפעולת השמה. הביטוי הימני עובר המרה לטיפוס של המשתנה המופיע בצד שמאל של ההשמה. int i = 5; double d; d = i; // d is 5.0 המרה כזו אפשרית רק כאשר הטיפוס של המשתנה בצד שמאל כללי יותר מהטיפוס של הביטוי בצד ימין.

  39. המרת טיפוס (Casting) • במקרה ההפוך, כאשר הטיפוס של המשתנה בצד שמאל כללי פחות מהטיפוס של הביטוי בצד ימין, נשתמש באופרטור ה type cast : (<type>). double d = 5.3; inti ; i = (int) d; // i is 5 • ניתן להשתמש בtype castגם כאשר רוצים למנוע איבוד של חלק השבר בחלוקה של מספרים שלמים: double d; int x = 5, y = 2 ; d = ((double) x)/y; d = (double) x/y;

  40. נושא שישי: תנאים ולולאות.

  41. משפט if-else משפט if-else הוא מבנה בסיסי בשפה המאפשר לשלוט בזרימת התוכנית. למשפט זה יש שני צורות: • if (<condition>){ <statement>} • if (<condition>){ <statement> }else { <alternative> }

  42. דוגמה ל- if import java.util.Scanner; publicclass Triangle { publicstaticvoid main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("Enter the first number:"); double a = sc.nextInt(); System.out.print("Enter the second number:"); double b = sc.nextInt(); System.out.print("Enter the third number:"); double c = sc.nextInt(); if ((a + b <= c) || (a + c <= b) || (b + c <= a)) { System.out.println("There is no triangle with these sides."); } else{ System.out.println("There is a triangle with these sides."); } } }

  43. לולאות לולאה מאפשרת לחזור על פעולות מספר פעמים כל עוד תנאי כלשהו מתקיים. • לולאת while while ( <condition> ) { <statement> } • לולאת for for( <initial>; <condition> ; <update>) { <statement> } 1 2 1 2 1 2 1 2 … 1 2 1 0 1 3 2 0 1 2 3 1 2 3 1 2 3 … 1 2 3 1

  44. import java.util.Scanner; // compute n! using while and for sentences. publicclass Factorial { publicstaticvoid main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("Enter a non-negative number:"); int n = sc.nextInt(); // 1. using while int fact = 1; int i = 1; while ( i <= n ) { fact = fact * i; i = i + 1; } System.out.println("n!=" + fact); // 2. using for fact = 1; for ( i = 1; i <= n; i = i + 1){ fact = fact * i; } System.out.println("n!=" + fact); } } דוגמה

  45. הערות על כתיבת קוד מכיוון שקטעי הקוד אותם נכתוב בקורס הזה ובכלל נקראים יותר מפעם אחת ישנם מספר כללים עליהם יש לשמור בכדי לדאוג שהקוד יהיה קריא וניתן להבנה מהירה • שמות משתניםכאשר ניתן שמות למשתנים בתוכנית שלנו, יש לדאוג לתת שמות בעלי משמעות. שמות משתנים תמיד יתחילו באות קטנה ובנוסף, במידה ושם המשתנה מכיל יותר ממילה אחת, יש להשתמש באותיות גדולות בכדי לסמן התחלה של כל מילה (מוסכמה זו נקראת CamelCase). • int numberOfStudentsEating; //better then nOSE • הערות בקוד יש חשיבות גדולה לתוספת של הערות על קטע קוד, יש לתאר מה מטרת קטע הקוד בקצרה. • עימוד (אינדנטציה)שימוש בעימוד על ידי הוספת טאבים לאחר פתיחת בלוק של קוד עוזרים להפוך את הקוד לקריא ומובן יותר (ניתן להבין את החלוקה לבלוקים).

More Related