אבני היסוד של תוכנית בJAVA - קרן כליף ?למה חשוב ללמוד מחשבים http://i728.photobucket.com/albums/ww282/vistamike_bucket/mouse-3.jpg 2 © Keren Kalif תיאום ציפיות http://www.1stwebdesigner.com/wp-content/uploads/2011/10/tan_lines_of_a_programmer2.jpg 3 © Keren Kalif ביחידה זו נלמד: בסיסי מספרים: בינארי ( ,)2אוקטאלי ( ,)8הקסה-דצימאלי ()16 הדפסה למסך קבלת נתונים מהמשתמש קבועים מבנה זיכרון התוכנית הגדרת משתנים טיפוסי משתנים השמת ערך למשתנים קימפול והרצת תוכניות בקונסול הצגת נתונים בחלון 4 © Keren Kalif בסיס עשרוני (דצימלי) בסיס הינו שיטת ספירה בבסיס בייצוג עשרוני (השיטה הטבעית לנו) קיימות 10ספרות 0 :עד 9 לכן אנו אומרים שהן מיוצגות בבסיס 10 נקרא גם בסיס דצימלי כל מספר שלם ניתן לייצג כסכום של ערכים בחזקות של 10 דוגמא: 2857= 2*103 + 8* 102 + 5*101 + 7* 100 5 © Keren Kalif ייצוג מספרים בבסיס בינארי -הגדרות בבסיס הבינארי קיימות 2ספרות בלבד :הספרות 0ו1- לכן גם נקרא בסיס 2 דוגמאות למספרים בבסיס בינארי1110010 ,1010 : נמספר את מיקום הספרות מימין לשמאל מספר הספרה הימנית ביותר יהיה 0 מספר הספרה השמאלית ביותר במספר בן nספרות יהיה n-1 5 4 3 2 1 0 דוגמא101011 : הספרות במיקום 0,1,3,5הן 1והספרות במיקום 2,4הן 0 6 © Keren Kalif ייצוג מספרים בבסיס בינארי – חישוב ערך עשרוני של מספר בינארי (מבסיס 2ל)10 - ערכו של מספר המיוצג בבסיס עשרוני הוא סכום חזקות של :10 102 101 100 1 7 3 = 1*102 + 7*101 + 3*100 = 173 הספרה dבמיקום ה k-מוסיפה לסכום( d*10k :כלומר אם ערכה של ספרה הוא 0היא אינה תורמת לסכום) ובדומה ,ערכו של מספר המיוצג בבסיס בינארי הינו סכום של חזקות של ( 2הספרה dבמיקום ה k-מוסיפה לסכום )d*2k דוגמא: הביט הכי שמאלי נקרא MSBמשום שהוא הכי משמעותי לסכום 24 23 22 2 1 20 11001 = 1*24 + 1*23 + 0*22 + 0*21 + 1*20 =25 הביט הכי ימני נקרא LSBמשום שהוא הכי פחות משמעותי לסכום 7 © Keren Kalif ייצוג מספרים בבסיס בינארי – חישוב ערך בינארי של מספר עשרוני (מבסיס 10ל)2 - ראינו כיצד בהינתן מספר בייצוג בינארי ניתן להמירו לייצוגו העשרוני כעת נראה כיצד בהינתן מספר בייצוג עשרוני ניתן להמירו לייצוגו הבינרי (כפי שהמחשב מכיר) כל עוד המספר אינו 0נחלקו ב 2 -ואת השארית נשרשר לתוצאה משמאל: דוגמא עבור :23 1 0 1 1 1 בקרה: 24 23 22 21 20 =1 0 1 1 1 1*24 + 0*23 + 1*22 + 1*21 + 1*20 =23 8 © Keren Kalif )23/2 = 11 (1 )11/2 = 5 (1 )5/2 = 2 (1 )2/2 = 1 (0 )1/2 = 0 (1 ייצוג מספרים בבסיס בינארי – חישוב ערך בינארי של מספר עשרוני ()2 דוגמא עבור :26 1 1 0 1 0 בקרה: 24 23 22 21 20 =1 1 0 1 0 1*24 + 1*23 + 0*22 + 1*21 + 0*20 =26 9 © Keren Kalif )26/2 = 13 (0 )13/2 = 6 (1 )6/2 = 3 (0 )3/2 = 1 (1 )1/2 = 0 (1 טווח המספרים שניתן לייצג ע"י ספרות בינאריות – מספרים חיוביים ע"י מספר עשרוני בעל 3ספרות ניתן לייצג )103=( 1000מספרים שונים ()999...0 ובאופן כללי ,מספר עשרוני בעל kספרות יכול לייצג 10kמספרים שונים ()10k-1...0 ובדומה ,ע"י מספר בינארי בעל kספרות ניתן לייצג 2kמספרים שונים )(2k-1…0 למשל עבור :k=3 000 = 0*22 + 0*21 + 0*20 = 0 = 0*22 + 0*21 + 1*20 = 1 = 0*22 + 1*21 + 0*20 = 2 = 0*22 + 1*21 + 1*20 = 3 = 1*22 + 0*21 + 0*20 = 4 = 1*22 + 0*21 + 1*20 = 5 = 1*22 + 1*21 + 0*20 = 6 = 1*22 + 1*21 + 1*20 = 7 10 © Keren Kalif 001 010 011 100 101 110 111 טווח המספרים שניתן לייצג ע"י ספרות בינאריות – מספרים שליליים ניתן לייצג 2kמספרים ע"י Kספרות בינאריות בייצוג מספרים שלמים חיוביים ייוצגו המספרים 0…2k-1 בייצוג מספרים שלמים חיוביים ושליליים ייוצגו המספרים -2k-1….2k-1-1 למשל עבור :k=3 סה"כ (23) 8מספרים 11 © Keren Kalif -23-1…23-1-1 -22…22-1 -4…3 טווח המספרים שניתן לייצג ע"י ספרות בינאריות – מספרים שליליים מאחר והמחשב מכיר רק 0ו ,1-ואינו מכיר את הסימן ,-צריך אינדיקציה לכך שהמספר שלילי .אינדיקציה זו היא שהספרה הכי שמאלית תהייה תמיד ,1ואז נותרו לנו k-1ספרות לייצוג המספר דוגמא :עבור ייצוג מספר עם 4סיביות: 12 © Keren Kalif 3בבינארית זה 0011 -3בבינארית זה 1101 יצוג מספר שלילי בבינארי נשתמש בשיטת המשלים ל:2- נמצא את יצוגו הבינארי של המספר החיובי נוסיף 0מוביל משמאלו נהפוך כל סיבית ( 0ל ,1 -ו 1 -ל)0 - נוסיף 1לתוצאה לבסוף נוסיף את הסיבית 1משמאל למספר דוגמא :המספר -7 7 בבינארי 0 +מוביל : לאחר הפיכת הסיביות: הוספת 1לתוצאה: הוספת הסיבית 1משמאל למספר: 13 © Keren Kalif 0111 1000 + 1 11001 סיכום בסיס בינארי http://rlv.zcache.com/binary_joke_stickerr52fa63b95dac463787549589a29f5366_v9waf_8byvr_324.jpg 14 © Keren Kalif ייצוג מספרים בבסיס - 8הגדרות בבסיס ( 8אוקטאלי) משתמשים ב 8 -ספרות כדי לספור: הספרות 0-7 דוגמאות למספרים בבסיס 7502 ,25361 :8 נמספר את מיקום הספרות מימין לשמאל מספר הספרה הימנית ביותר יהיה 0 מספר הספרה השמאלית ביותר במספר בן nספרות יהיה n-1 5 4 3 2 1 0 דוגמא401621 : 15 © Keren Kalif ייצוג מספרים בבסיס – 8חישוב ערך עשרוני של מספר אוקטאלי (מ 8 -ל)10 - ראינו כי ערכו של מספר המיוצג בבסיס עשרוני הוא סכום חזקות של 10 10 10 :10 1 7 3 = 1*102 + 7*101 + 3*100 = 173 הספרה dבמיקום ה k-מוסיפה לסכום( d*10k :כלומר אם d=0 הספרה לא תורמת לסכום) ובדומה ,ערכו של מספר המיוצג בבסיס 8הינו סכום של חזקות של 8 (הספרה dבמיקום ה k-מוסיפה לסכום )d*8k 8 8 8 8 דוגמא: 0 0 1 1 2 2 3 4 2 5 6 = 4*83 + 2*82 + 5*81 + 6*80 =2222 16 © Keren Kalif ייצוג מספרים בבסיס – 8חישוב ערך אוקטאלי של מספר עשרוני (מ 10 -ל)8 - ראינו כיצד בהינתן מספר בייצוג אוקטאלי ניתן להמירו לייצוגו העשרוני כעת נראה כיצד בהינתן מספר בייצוג עשרוני ניתן להמירו לייצוגו בבסיס האוקטלי כל עוד המספר אינו 0נחלקו ב 8 -ואת השארית נשרשר לתוצאה משמאל: דוגמא עבור :123 7 3 1 )123/8 = 15 (3 ) 15/8 = 1 (7 )1/8 = 0 (1 בקרה: 82 81 80 1 7 3 = 1*82 + 7*81 + 3*80= 123 17 © Keren Kalif ייצוג מספרים בבסיס - 16הגדרות בבסיס ( 16הקסה-דצימלי) משתמשים ב 16 -תווים כדי לספור: הספרות 0-9והאותיות F-A דוגמאות למספרים בבסיס ABCDEF ,2510DE1 :16 נמספר את מיקום הספרות מימין לשמאל מספר הספרה הימנית ביותר יהיה 0 מספר הספרה השמאלית ביותר במספר בן nספרות יהיה n-1 5 4 3 2 1 0 דוגמא4F19B1 : 18 © Keren Kalif ייצוג מספרים בבסיס – 16חישוב ערך עשרוני של מספר הקסה-דצימאלי (מ 16 -ל)10 - ראינו כי ,ערכו של מספר המיוצג בבסיס עשרוני הוא סכום חזקות של 10 10 10 :10 1 7 3 = 1*102 + 7*101 + 3*100 = 173 הספרה dבמיקום ה k-מוסיפה לסכום( d*10k :כלומר אם d=0 הספרה לא תורמת לסכום) ובדומה ,ערכו של מספר המיוצג בבסיס 16הינו סכום של חזקות של ( 16הספרה dבמיקום ה k-מוסיפה לסכום )d*16k 16 16 16 16 דוגמא: 0 0 1 1 2 2 3 4 D 5 E = 4*163 + 13*162 + 5*161 + 14*160 =19806 19 © Keren Kalif ייצוג מספרים בבסיס – 16חישוב ערך הקסה- דצימאלי של מספר עשרוני (מ 10 -ל)16 - ראינו כיצד בהינתן מספר בייצוג הקסה-דצימאלי ניתן להמירו לייצוגו העשרוני כעת נראה כיצד בהינתן מספר בייצוג עשרוני ניתן להמירו לייצוגו בבסיס הקסה-דצימאלי כל עוד המספר אינו 0נחלקו ב 16 -ואת השארית נשרשר לתוצאה משמאל: דוגמא עבור :123 7 B )123/16 = 7 (11 ) 7/16 = 0 (7 בקרה: 161 160 7 B = 7*161 + 11*160 = 123 20 © Keren Kalif 7DA = 2010 http://bokov.net/pics/img/programmer_calendar.png לוח שנה של מתכנתים 21 © Keren Kalif ובאופן כללי :מעבר מבסיס Nלבסיס 10 מעבר מבסיס ( 2בינארי) לבסיס ( 10עשרוני): 11012 = 1*23 + 1*22 + 0*21 + 1*20 = 1310 מעבר מבסיס ( 8אוקטאלי) לבסיס ( 10עשרוני): 2538=2*82 + 5*81 + 3*80 = 17110 מעבר מבסיס ( 16הקסה-דצימלי) לבסיס (10עשרוני): 1FA16 = 1*162 + 15*161 + 10*160 = 50610 22 © Keren Kalif ובאופן כללי :מעבר מבסיס 10לבסיס N יהיה Xמספר עשרוני. יהיה nהבסיס אליו רוצים להעביר את .X .1 כל עוד Xאינו :0 (a 23 © Keren Kalif חלק את Xב nושרשר את השארית משמאל לתוצאה המרה מבסיס 2ל16 - כל 4סיביות (מה LSB -ל )MSB -ייצגו ספרה בבסיס :16 למשל ,עבור0 1 1 0 1 0 1 1 0 1 0 : A 5 3 בקרה011010110102 = 85810 : 35A16 = 85810 המעבר מבסיס 2ל 8 -זהה ,רק כל 3סיביות ייצגו ספרה 24 © Keren Kalif המרה מבסיס 16ל2 - כל ספרה תיוצג ע"י 4סיביות: 3 5 A למשל ,עבור: 0011 0101 1010 בקרה011010110102 = 85810 : 35A16 = 85810 המעבר מבסיס 8ל 2 -זהה ,רק כל ספרה תיוצג ע"י 3סיביות 25 © Keren Kalif השוואה בין ערכים בבסיסים שונים 30E16 = 78210 = 14168 = 11000011102 ניתן לראות שככל שיש יותר ספרות בבסיס ,כך צריך פחות ספרות על-מנת לייצג ערך של מספר מסויים הסיבה היא כי כל מיקום תורם יותר לסכום 26 © Keren Kalif כתיבת תוכנית ראשונה בשפת JAVA כל תוכנית ב java -תראה כך: Programהיא מחלקה אשר מכילה את פונקציית ה main -להרצה במקום 3נקודות נשים את אוסף הפקודות שנרצה שהתוכנית תבצע main היא פונקציה המורצת עם הרצת התוכנית בכל תוכנית תהייה פונקצית mainאחת בדיוק 27 © Keren Kalif הדפסה למסך אחת הפקודות שהמחשב מכיר היא הדפסה למסך הרצה של התוכנית הזו תדפיס למסך את המחרוזת !Hello World 28 © Keren Kalif קבלת קלט מהמשתמש היינו רוצים שהתוכנית שלנו תהייה אינטראקטיבית ותדע גם לקלוט נתונים מהמשתמש לשם כך עלינו ללמוד את הדברים הבאים: כיצד מקבלים מידע מהמשתמש היכן מאחסנים מידע זה כיצד מדפיסים מידע זה 29 © Keren Kalif קבלת קלט מהמשתמש ()2 פקודה נוספת שהמחשב מכיר היא קריאת נתון מהשתמש יבוא ספריה המכילה את הטיפוס Scanner ;import java.util.Scanner { public class Program { )public static void main(String[] args ;)Scanner s = new Scanner(System.in ;)(int num = s.nextInt ;)System.out.println("Your number is " + num מה זה ?Scanner אובייקט שתפקידו לקלוט נתונים מהמקלדת יש לו פעולה nextIntאשר יודעת לקלוט מספר שלם מה זה ?num num הוא השם של המקום שבו נאכסן את הערך המתקבל מהמשתמש כדי להקצות עבורנו מקום זה עלינו להגדיר משתנה מה זה ?intבקשת הקצאת המקום ,נראה פירוט בהמשך 30 © Keren Kalif } } אחסון ערכים כאשר מריצים תוכנית נרצה לשמור ערכים מסוימים כדי שישמשו אותנו בפקודות בהמשך כאשר התוכנית רצה ,היא מקבלת שטח בזיכרון בו היא יכולה לאחסן ערכים אלו .שטח זה נקרא מחסנית ()stack המחסנית מורכבת מתאים ,ולכל תא יש כתובת כל תא נקרא ( byteבייט) יש משתנים שערכם מאוחסן בבייט אחד ,ויש 1000 משתנים שערכם מאוחסן ביותר (נראה בהמשך) 1001 1002 1003 1004 31 © Keren Kalif 1005 אחסון ערכים ()2 1000 1004 1008 1012 1016 1020 4 int:x { )public static void main(String[] args ;int x ;)Scanner s = new Scanner(System.in ;)(x = s.nextInt } בתוכנית זו הגדרנו את המשתנה ,xולכן התוכנית מקצה תא במחסנית למשתנה זה כאשר המשתמש יקליד מספר ,המספר יכנס לתוך התא המוקצה עבור x 32 © Keren Kalif הדפסת ערכו של משתנה public static void main(String[] args) { Scanner s = new Scanner(System.in); int x; int:x 4 1000 1004 1008 System.out.println(“Please enter a number: “); 4 לאחר הקלדת x = s.nextInt(); System.out.println(“The number is ” + x); } 1012 1016 1020 פקודת ההדפסה מדפיסה את התוכן של התא המוקצה עבור The number is 4 ולכן יודפס למסךx המשתנה כדי שהתוכנית שלנו תהייה ידידותית נציג הודעה מתאימה 33 © Keren Kalif ייצוג בינארי אבל מחשב מכיר רק את 0ו( 1 -יש חשמל או אין חשמל) .לכן הזיכרון לא באמת נראה כך.. בכל תא זיכרון יש קומבינציה של 0ו 1-המייצגות את הערך הנמצא בתוך התא כל byteמורכב מ 8-יחידות בסיסיות הנקראות ( bitסיבית) bit מכיל 0או 1 כל intמורכב מ'byte 4 -ים 1000 00000100 00000000 4 00000000 00000000 1004 00011000 00000000 24 00000000 00000000 1008 10101011 11111111 -85 11111111 11111111 1012 34 © Keren Kalif int: n1 int: n2 int : n3 אז כאשר המחשב רואה 111איך הוא יודע אם הכוונה ל 7 -או ל?-8 - בשפת JAVAטיפוסי המספרים יחזיקו תמיד בסיבית הראשונה אינדיקציה האם המספר חיובי או שלילי :מספר שלילי יתחיל בסיבית 1 ומספר חיובי בסיבית 0 טווח המספרים ש int -יכול להכיל הוא בין -2-31 - 231-1 -2147483648 … 0 … 2147483647 לכן כאשר המחשב רואה ( 111בהנחה ששאר הסיביות משמאל הן )0 הוא מתייחס למספר כאל .7 35 © Keren Kalif תוכנית ב –JAVA -סיכום ביניים כפי שראינו ,קוד ב JAVA -הוא קובץ טקסט הכתוב מאוסף מילים מסוימות באנגלית יש מילים מסוימות שהן פקודות מוכרות למחשב המחשב אינו יודע אנגלית ,אלא רק מכיר את הספרות 0ו( 1-בינארית) ולכן עלינו לתרגם עבורו את הקוד שלנו ל ,byte code -בתהליך הנקרא קומפילציה תהליך הקומפילציה מייצר קובץ בינארי עם סיומת classשאותו המחשב יכול להריץ אם מותקן לו (Java Virtual Machine) JVM 36 © Keren Kalif הגדרת קבועים public static Scanner double double void main(String[] args) { s = new Scanner(System.in); price; totalPrice; System.out.println("Please enter the product’s price: "); price = s.nextDouble(); totalPrice = price + (price*0.17); System.out.println("Total price including “ + 17 + “% taxes is “ + totalPrice); } 37 © Keren Kalif )2( הגדרת קבועים public static Scanner double double double void main(String[] args) { s = new Scanner(System.in); price; ע"י שימוש במשתנה התוכנית יותר totalPrice; ברורה מה משמעות המספר גם,קריאה TAXES = 17; למי שאינו יודע מהו ערכו של המע"מ System.out.println("Please enter the product’s price: "); price = s.nextDouble(); totalPrice = price + (price*TAXES/100); System.out.println("Total price including “ + TAXES + “% taxes is “ + totalPrice); } ,שינוי בערך המע"מ יגרור שינוי במקום אחד בלבד בתוכנית )..מה שחוסך עבודה ובעיות בעתיד (אם שכחנו לתקן במקום כלשהו 38 © Keren Kalif קבועים קבוע הוא משתנה שלא ניתן לשנות את ערכו .הערך נכתב ע"י המתכנת בשורה בה מוגדר הקבוע לא ניתן לשנות את ערכו במהלך ריצת התוכנית רק המתכנת יכול לשנות את הערך (שינוי בזמן כתיבת התוכנית) ולקמפל מחדש עם הערך החדש יתרונות: תוכנית קריאה יותר תחזוקה 39 © Keren Kalif FINAL הגדרת קבועים ע"י public static void main(String[] args) { Scanner s = new Scanner(System.in); double price; ניתן להגדיר משתנה כקבוע באמצעות double totalPrice; וכך לא ניתןfinal המילה השמורה final double TAXES = 17; לשנות את ערכו בהמשך התוכנית System.out.println("Please enter the product’s price: "); price = s.nextDouble(); totalPrice = price + (price*TAXES/100); System.out.println("Total price including “ + TAXES + “% taxes is “ + totalPrice); TAXES = 16.5; } :שגיאת קומפילציה The final local variable can not be assigned 40 © Keren Kalif שמות משתנים שמות המשתנים יכולים להכיל אותיות גדולות וקטנות ,מספרים וקו תחתון בלבד לא ניתן להתחיל שם משתנה במספר יש לתת שמות משמעותיים!!! שם משתנה לא יכיל רווחים יש הבדל בין אותיות גדולות לקטנות אין להשתמש המילים שמורות של השפה דוגמאות: ;int x, _y, _average, avg, x1,x2 !int 5, 1x, #x, !!2; // error 41 © Keren Kalif טיפוסי משתנים בתוכניות הקודמות ראינו כיצד קולטים מהמשתמש מספר שלם ומספר עשרוני ניתן לקלוט סוגים נוספים של נתונים ,למשל תו ,מחרוזת או בוליאני אבל צריך לידע את המחשב עם איזה סוג של נתונים אנחנו רוצים לעבוד בתוכנית הגדרנו: { )public static void main(String[] args ;)Scanner s = new Scanner(System.in ;int x ;)(x = s.nextInt } כאשר כתבנו את השורה ; int xהגדרנו משתנה שמכיל מספרים שלמים 42 © Keren Kalif טיפוסי משתנים בסיסיים DATA TYPES ישנם סוגים שונים של משתנים הנבדלים ב 2-דברים: בתוכן אותו הם יכולים להכיל (שלם ,עשרוני ,תו ,בוליאני) במספר ה byte -שהמשתנה תופס בזיכרון ,ומכאן טווח הערכים שמשתנה מהטיפוס יכול להכיל Range Size Example Definition -27…27-1 1 byte תו (’!’)‘a’, ‘A’, ‘6’, char -231…231-1 4 bytes מספר שלם ()-3,7,8234 int 8 bytes מספר ממשי ()5.2 ,-89 ,3.6 double 1 byte בוליאני )(true / false boolean )(-128..127 true / false 43 © Keren Kalif טיפוסי נתונים בסיסיים נוספים Size Example Definition Range 4 byte מספר ממשי ()5.2 ,-89 ,3.6 float -215…215-1 2 bytes מספר שלם ()-3,7,8234 short -263…263-1 8 bytes מספר שלם ()-3,7,8234 long -27…27-1 1 byte מספר שלם ()-3,7,82 byte נשתמש בטיפוסים אלו רק כאשר נרצה לחסוך במקום גדול 44 © Keren Kalif http://www.ynet.co.il/articles/0,7340,L-4599213,00.html :לקוח מתוך 45 © Keren Kalif הגדרת משתנים בתוכנית byte 4 - מורכב מint public static void main(String[] args) { int n1 = 4; double n2 = 5.2; char ch = ‘f’; short n3 = 7, n4 = 77; int n6 = -11; } byte1 - מורכב מchar 4 1000 5.2 1004 char: ch ‘f’ 1012 short: n3 7 1013 short: n4 77 1015 int: n6 -11 1017 int: n1 double: n2 ?למה ההפרש בין הכתובות שונה כי כל סוג משתנה תופס כמות שונה של בתים :הגדרת משתנים באופן כללי <type> <var name>[=init value][,<var name2>…]; 46 © Keren Kalif אתחול והשמת משתנים פעולת השמה היא מתן ערך למשתנה: ><variable> = <expression L-Value = R-Value נקרא גם: ראשית מתבצע חישוב הביטוי שמימין ואז ערכו מושם לתוך המשתנה שמשמאל { )public static void main(String[] args int: a 17 5 ?? 1000 ;int a, b, c int: b ?? 15 1004 17 ;int d = 9 int: c ?? 1008 ;a = 5 int: d 9 1012 ; b = a*3 ;a = b = 17 בשפת JAVAלא ניתן להשתמש במשתנה a=c ללא אתחולו ,ולכן תתקבל שגיאת קומפילציה } 47 © Keren Kalif הדפסת וקליטת משתנים מטיפוסים שונים : עד כה ראינו הגדרת משתנים מטיפוסים שונים double - וint הדפסה וקליטה של משתנים מטיפוס עבור כל טיפוס יש פקודה שונה לקליטתו Scanner הוא משתנה מטיפוסs כאשרs.nextInt הפקודה היאint עבור public static void main(String[] args) { Scanner s = new Scanner(System.in); int x; System.out.println(“Please enter a number: “); x = s.nextInt(); System.out.println(“number is ” + x); } 48 © Keren Kalif פורמט קליטה והדפסה לטיפוסים השונים Data Type Format int s.nextInt() short s.nextShort() long s.nextLong() char s.next().charAt(0) float s.nextFloat() double s.nextDouble() byte s.nextByte() boolean s.nextBoolean() 49 © Keren Kalif הדפסת וקליטת משתנים מטיפוסים שונים 50 © Keren Kalif הדפסת תווים מיוחדים ירידת שורה \n " "\ tab \t \ \\ 51 © Keren Kalif טבלת ASCII http://www.asciitable.com/ עד כה ראינו ייצוג של מספרים ,אבל איך מייצגים אותיות ע"י קומבינציה של 0ו?1 - לכל תו יש קוד מספרי הנקרא "קוד "ASCII ניתן לראות את הקוד של כל תו ב"טבלת :"ASCII 52 © Keren Kalif ייצוג תווים טבלאת :ASCII American Standard for Code Information Interchange כאשר מאחסנים את ערכו של משתנה מטיפוס charלמעשה שומרים את ערך ה ASCII -שלו מאחר וגודלו של charהוא ,1byteכלומר ,8bitניתן לאחסן במשתנה זה (28) 256ערכים שונים בטבלת ה ASCII -הבסיסית יש רק 127ערכים 53 © Keren Kalif טבלת - ASCIIדגשים http://www.asciitable.com/ ערכי ה ASCII -של האותיות הגדולות נמצאים ברצף ערכי ה ASCII -של הספרות נמצאים ברצף. שימו לב כי ערכה ה- ASCIIשל ספרה אינו זהה לערכה המספרי! 54 © Keren Kalif ערכי ה ASCII -של האותיות הקטנות נמצאים ברצף הגדרת משתנים מטיפוס CHAR משתנה מטיפוס charנועד כדי לאכסן תו ,ולכן ניתן לשים בו תו או מספר כאשר שמים מספר הכוונה לתו שמספר זה מייצג בטבלת הASCII - בדוגמא זו ,הערך בשני תאי הזיכרון זהה (משום שערך הASCII - של ’ ‘aהוא )97 01100001 char: ch1 1000 01100001 1001 1002 55 © Keren Kalif char: ch2 { )static public void main(String[] args ;’char ch1 = ‘a ;char ch2 = 97 } הגדרת משתנים מטיפוס )2( CHAR ערכו של ch1הוא ' - '8התו ולא המספר (בגלל שהוא בתוך ' ') לכן הערך שנשמר בזכרון הוא ערך ה ASCII -של התו ')56( '8 לעומתו ,ערכו של ch2הוא המספר 8 { )public static void main(String[] args ;’char ch1 = ‘8 ;char ch2 = 8 } 01010110 char: ch1 1000 00001000 1001 1002 56 © Keren Kalif char: ch2 וההיפךINT - כCHAR הצגת ניתן להדפיסו או כתו או, מאחר ותו מיוצג כמספר :כמספר public static void main(String[] args) { char ch = ‘Z’; int num = 97; הוראה לקומפיילר:המרה להתייחס לתו כאל מספר System.out.println(“int=“ + (int)ch + “ char=” + ch); System.out.println(“int=“ + num + “ char=” + (char)num); } הוראה לקומפיילר להתייחס למספר כאל תו:המרה 57 © Keren Kalif מעבר תו המייצג ספרה למספר בהינתן תו המכיל ספרה ,יש למצוא את ערך הספרה דוגמא :עבור התו ’ ,‘8שערך האסקיי שלו הוא ,56יש לשמור את הערך 8ב- int כל הספרות נמצאות בטבלת האסקיי ברצף החל ממספר ( 48ערך האסקיי של התו ')'0 החסרת הערך 48מתו המכיל ספרה יביא לנו את ערך המספר 58 © Keren Kalif { )public static void main(String[] args ;'char ch = '8 ;'int num = ch - '0 ;)System.out.println("ch as char: " + ch + ", as int: " + (int)ch ;)System.out.println("num is “ + num } STRING הטיפוס String ישנו טיפוס נתונים שיכול להכיל בתוכו מחרוזת והוא נקרא מכיל תו אחד בלבד בעודchar - הוא שString - לchar ההבדל בין שמחרוזת יכולה מספר תווים ללא הגבלה ) ובהמשך נלמד אילוScanner הוא אובייקט (למשל כמוString פעולות אובייקט מטיפוס זה יודע לבצע public static void main(String[] args) { String str = "Hello World!"; System.out.println("The text is: " + str); Scanner s = new Scanner(System.in); System.out.print("Enter a num: "); int num = s.nextInt(); str = "Your number is " + num; System.out.println(str); } 59 © Keren Kalif קליטת מחרוזות s.nextקורא מילה עד רווח 60 © Keren Kalif קליטת מחרוזת עם רווחים קליטת מחרוזת עד אנטר (כולל רווחים) 61 © Keren Kalif BUFFER קליטת נתונים לתוך public static void main(String[] args) { Scanner s = new Scanner(System.in); int n1, n2; System.out.println("Enter a number --> "); n1 = s.nextInt(); System.out.println("Enter another number --> "); n2 = s.nextInt(); System.out.println("n1=“ + n1 + “ n2=“ + n2); } .ENTER ניתן להקליד נתונים עד אשר מקלידים . ומחכים לפעולת הקליטה הבאהbuffer -נתונים אלו נמצאים ב . פקודת הקליטה תיקח ממנו נתוניםbuffer -כל עוד יש נתונים ב . ריק פקודת הקליטה תמתין לקלט מהמשתמשbuffer -רק כאשר ה 62 © Keren Kalif קליטת מחרוזת עם רווחים ניתן לראות כי הקומפיילר "דילג" על שורה זו. זאת משום שהוא לקח את האנטר שהיה בbuffer - מהקליטה הקודמת. 63 © Keren Kalif הפתרון נבצע קליטת שורה "סתם" כדי לנקות את האנטר מהbuffer - 64 © Keren Kalif דוגמאת עבודה דרך הקונסול כתיבת והרצת תוכניות בקונסול סביבת העבודה שלנו מהווה מעטפת ויזואלים לכלים הבאים: עורך קומפיילר דיבגר ניתן לכתוב קובץ ב notepad -ולקמפל ולהריץ אותו דרך הקונסול 66 © Keren Kalif קומפילציה דרך הקונסול הרצת פקודת הקומפליציה javac תוצר הקומפילציה הרצת התוצר 67 © Keren Kalif פלט התוכנית פלט בGUI - הטקסט משמע התיבה תופיע במרכז המסך 68 © Keren Kalif פלט ב)2( GUI - כותרת התיבה סוג האייקון 69 © Keren Kalif GUI -קלט מחרוזת ב public static void main(String[] args) { String name = JOptionPane.showInputDialog("Enter your name:"); JOptionPane.showMessageDialog(null, "Hi " + name + "!"); } 70 © Keren Kalif GUI - בINT קלט public static void main(String[] args) { String temp = JOptionPane.showInputDialog("Enter your age:"); -המרת נתון מ int - לString int age = Integer.parseInt(temp); JOptionPane.showMessageDialog(null, “You are “ + age + “years old"); } תמיד קולט מחרוזותJOptionPane public static void main(String[] args) { String temp = JOptionPane.showInputDialog("Enter your height:"); double height = Double.parseDouble(temp); JOptionPane.showMessageDialog(null, “Your height is“ + height + “m”); } 71 © Keren Kalif ביחידה זו למדנו: בסיסי מספרים: בינארי ( ,)2אוקטאלי ( ,)8הקסה-דצימאלי ()16 הדפסה למסך קבלת נתונים מהמשתמש קבועים מבנה זיכרון התוכנית הגדרת משתנים טיפוסי משתנים השמת ערך למשתנים קימפול והרצת תוכניות בקונסול הצגת נתונים בחלון 72 © Keren Kalif תרגיל :1קלט מסוגים שונים כתוב תוכנית המקבלת מהמשתמש את שנת הלידה שלו ,ת.ז ,.גובה ותו המייצג האם המשתמש זכר או נקבה ()M/F התוכנית תדפיס את פרטי המשתמש ,אך במקום שנת הלידה תדפיס את גילו יש לראות בדיבגר את ערכי המשתנים עדכנו את התוכנית כך שסוג הטיפוס השומר את מין המשתמש יהיה בוליאני (במקום תו) 73 © Keren Kalif תרגיל :2עבודה עם תווים שהם ספרות כתוב תוכנית הקוראת מהמשתמש 3תווים (מטיפוס )charשהם ספרות התוכנית תייצר משתנה מטיפוס intשיכיל את הספרות שהתקבלו כמספר לבסוף התוכנית תדפיס את המספר דוגמה :אם הוכנסו התווים ' '7' '3' '1יווצר ויודפס המספר .731 74 © Keren Kalif תרגיל :3טבלאת האסקיי כתוב תוכנית (קצרצרה!) המדפיסה את מספר האותיות ABבאנגלית (בהנחה שאינך יודע כמה יש ) 75 © Keren Kalif תרגיל :4מחיר נסיעה במונית מחיר נסיעה במונית משוקלל מהרכיבים הבאים: מחיר התחלתי 10.20 :ש"ח מחיר עבור כל ק"מ 1.30 :ש"ח מחיר עבור כל מזוודה 2.00 :ש"ח יש לבקש מהמשתמש את הנתונים הדרושים ולהציג את הסכום לתשלום 76 © Keren Kalif תרגיל :5זמן נסיעה במעלית נרצה לחשב את הזמן מהרגע שזימנו את המעלית עד אשר נגיע לקומת היעד בכל קומה בה המעלית עוצרת היא מתעכבת 5שניות זמן הנסיעה בין קומה לקומה הינו 3שניות ניתן להניח שהמעלית נוסעת ללא עצירות ,פרט לעצירה בקומה ממנה נאסף הנוסע לצורך הפשטות ,ניתן להניח כי קומת המקור נמוכה מקומת היעד בפתרון אראה כיצד ניתן לוותר על הנחה זו 77 © Keren Kalif
© Copyright 2024