תרגול מס' 3 עבודה עם מחרוזות (Strings) מתודות (Methods)

Slides:



Advertisements
Similar presentations
ממיבחניםC שאלות ++.
Advertisements

תוכנה 1 סמסטר א ' תשע " ב תרגול מס ' 7 * מנשקים, דיאגרמות וביטים * לא בהכרח בסדר הזה.
מבוא למדעי המחשב לתעשייה וניהול
Java Programming Strings Chapter 7.
האוניברסיטה העברית בירושלים
1 תוכנה 1 תרגול 14 – סיכום. 2 קצת על מנשקים מנשק יכול להרחיב יותר ממנשק אחד שירותים במנשק הם תמיד מופשטים וציבוריים public interface MyInterface { public.
מבוא כללי למדעי המחשב תרגול 1. כתיבת התוכנה כתיבת התוכנית עצמה נעשית ע " י כתיבת קובץ טקסט רגיל אשר תוכנו מקיים את כללי שפת C כתיבת התוכנית עצמה נעשית.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
תכנות תרגול 9 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
תכנות תרגול 2 שבוע : שבוע שעבר כתבו תוכנית המגדירה שלושה משתנים מאתחלת אותם ל 1 2 ו 3 ומדפיסה את המכפלה שלהם את ההפרש שלהם ואת הסכום שלהם.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
11 Introduction to Programming in C תרגול
מבוא למדעי המחשב תרגול 8 - מחרוזות שעת קבלה : יום שני 11:00-12:00 דוא " ל :
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
חלון הפקודות מיועד לבצע פעולה אחת בכל פעם. כיצד אפשר לבצע רשימת פקודות או אפליקציות מורכבות ?
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
תכנות תרגול 10 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
1 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
Sscanf example #include int main () { char sentence []="Rudolph is 12 years old"; char str [20]; int i; sscanf (sentence,"%s %*s %d",str,&i); printf ("%s.
תכנות תרגול 1 שבוע : צור קשר מתרגל – ליעם רודיטי, ביה " ס למדעי המחשב. מתרגל – ליעם רודיטי, ביה " ס למדעי המחשב. דואר אלקטרוני :
תוכנה 1 תרגול מס ' 3 מערכים ומבני בקרה. 2 מערכים Array: A fixed-length data structure for storing multiple values of the same type Example: An array of.
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
1 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים עוברים לג ' אווה.
Using Java Class Library
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
1 BUILDING JAVA PROGRAMS CHAPTER 3 THE STRING CLASS.
Chapter 3A Strings. Using Predefined Classes & Methods in a Program To use a method you must know: 1.Name of class containing method (Math) 2.Name of.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 12. ספריות.
תוכנה 1 תרגול מס ' 4 שימוש במחלקות קיימות : קלט / פלט (IO)
Java String 1. String String is basically an object that represents sequence of char values. An array of characters works same as java string. For example:
Spring 2009 Programming Fundamentals I Java Programming XuanTung Hoang Lecture No. 8.
1 מבוא למדעי המחשב הרצאה 5: פונקציות. 2 מבוא לפונקציות חלוקה של אלגוריתם לתת משימות: משימה - פונקציה: דוגמאות מציאת המקסימלי מבין שני איברים האינדקס של.
1 תרגול 11: Design Patterns ומחלקות פנימיות אסף זריצקי ומתי שמרת 1 תוכנה 1.
תוכנה 1 תרגול 2: מערכים, לולאות והתמודדות עם שגיאות.
1 נתבונן בפונקציה הבאה public static int min(int[] a,int n) { int min = a[0]; for (int i = 1; (i < n ) && (i < a.length) ; i++) if (min > a[i]) min = a[i];
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site:
עקרונות תכנות מונחה עצמים תרגול 11: OOP in C++. Outline  Where do the objects live ?  Inheritance  Slicing  Overriding vs Shadowing.
מחרוזות – הטיפוס String
String and StringBuffer classes
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
מבוא למדעי המחשב לתעשייה וניהול
Lecture 8: The String class
Tirgul 12 Trees 1.
Building Java Programs
Building Java Programs
Formal Specifications for Complex Systems (236368) Tutorial #1
Strings string: An object storing a sequence of text characters.
Programming in Java Text Books :
String Handling in JAVA
Topic 13 procedural design and Strings
תרגול מס' 3 עבודה עם מחרוזות (Strings) מתודות (Methods) העברת פרמטרים
מבוא כללי למדעי המחשב פונקציות
בניית מחסנית סטטית Static Stack Implementation מורים מובילים תשע"ה
Building Java Programs
מחרוזות קרן כליף.
תוכנה 1 תרגול 13 – סיכום.
תוכנה 1 תרגול 13 – סיכום.
Engineering Programming A
מבוא לתכנות ב- Java תרגול 10 - רשימות מקושרות.
Building Java Programs
Building Java Programs
Strings string: An object storing a sequence of text characters.
In Java, strings are objects that belong to class java.lang.String .
Presentation transcript:

תרגול מס' 3 עבודה עם מחרוזות (Strings) מתודות (Methods) תוכנה 1 תרגול מס' 3 עבודה עם מחרוזות (Strings) מתודות (Methods)

שלבי הפיתוח - חזרה קצרה ישנם שני שלבים נפרדים: שלב פיתוח התוכנית בשלב זה אנו משתמשים במהדר (קומפיילר) כדי להמיר קבצי .java (קבצי טקסט הקריאים למתכנת) לקבצי .class שנועדו עבור המפרש (אינטרפרטר). קומפילציה תכנות מתקדם בשפת Java אוניברסיטת תל אביב

שלבי הפיתוח - חזרה קצרה ישנם שני שלבים נפרדים: שלב הרצת התוכנית בשלב זה אנו משתמשים במפרש כדי להריץ את קבצי ה-class שיצרנו. ב-Java אותו קובץ class יכול לרוץ בסביבות שונות אם קיים עבורן מפרש. הרצה תכנות מתקדם בשפת Java אוניברסיטת תל אביב

שלבי הפיתוח – חזרה קצרה ה-JDK (Java Development Kit) נדרש לתהליך הפיתוח קומפיילר ה-JRE (Jave Runtime Environment) נדרש להרצת תוכניות JVM (Java Virtual Machine) הספריות הסטנדרטיות תכנות מתקדם בשפת Java אוניברסיטת תל אביב

Java Virtual Machine ה-JVM היא "מכונה וירטואלית" המריצה תוכניות Java יודעת לטעון תוכניות יודעת לוודא את תקינות הקבצים הנטענים מכילה את המפרש (Interpreter) תכנות מתקדם בשפת Java אוניברסיטת תל אביב

מחרוזות (Strings) תכנות מתקדם בשפת Java אוניברסיטת תל אביב

מחרוזות - חזרה מחרוזות הן אובייקטים המכילים רצף של תווים. String s = “Hello”; כל אלמנט במחרוזת הוא מסוג char. האינדקס של התו הראשון הוא 0. אורך המחרוזת מוחזר ע"י הפונקציה length() שרשור מחרוזות נעשה ע"י האופרטור + String s2 = s + “ World” + 5 // “Hello World5” index 1 2 3 4 character H e l o לשים לב שאפשר לשרשר גם int, ה-casting נעשה באופן לא מפורש

מחרוזות - השוואה נניח ונרצה להשוות שתי מחרוזות (לבדוק האם הן שוות). public static void main(String[] args) { String s1 = new String("hello"); String s2 = new String ("hello"); System.out.println(s1.equals(s2)); System.out.println(s1 == s2); } מה יודפס למסך? למה? true false ההשוואה הראשונה בודקת האם התוכן שווה, ההשוואה הראשונה משווה כתובות בין אובייקטים כדי להשוות שתי מחרוזות מבחינת תוכנן יש להשמש בפונקצייה equals() ולא באופרטור == שבודק אם מדובר באותו אובייקט

מחרוזות – פונקציות בדיקה Method Description equals(str) whether two strings contain the same characters equalsIgnoreCase(str) whether two strings contain the same characters, ignoring upper vs. lower case startsWith(str) whether one contains other's characters at start endsWith(str) whether one contains other's characters at end contains(str) whether the given string is found within this one

מחרוזות – פונקציות שימושיות Method name Description indexOf(str) index where the start of the given string appears in this string (-1 if not found) substring(index1, index2) or substring(index1) the characters in this string from index1 (inclusive) to index2 (exclusive); if index2 is omitted, grabs till end of string toLowerCase() a new string with all lowercase letters toUpperCase() a new string with all uppercase letters המימוש של הפונקציות לעיבוד מחרוזות יחזיר תמיד מחרוזת חדשה ולא יבצע שינויים על המחרוזת המקורית שעליה נקראה הפונקציה (Strings are immutable in Java)!!.

מחרוזות – פיצול לחלקים Method name Description split(DelimiterString) Splits the string into tokens using the given delimiter string. Returns an array of Strings. String str= “Another useful example"; String[] tokens = str.split(“ ”); //tokens = {“Another”,”useful”,”example”}

הדפסת מחרוזות ומספרים int a=1805; double d=123.456789; System.out.println ("a=" + a); //"a=1805"; System.out.format ("a=%d\n",a); //"a=1805"; System.out.format ("d=%.2f%n",d); //"d=123.46" System.out.format ("d=%20.10f%n",d); //"d= 123.4567890000" %n - platform-specific line separator %d – decimanl %f – float http://docs.oracle.com/javase/tutorial/java/data/numberformat.html

מתודות Methods)) בניית תוכנית תוך שימוש ראוי במתודות הנושא יועבר על ידי דוגמא: maxSpan תכנות מתקדם בשפת Java אוניברסיטת תל אביב

Span - הגדרה בהינתן מערך של מספרים וערך כלשהו נגדיר את ה- span של הערך כמספר האברים (כולל) בין שני המופעים הקיצוניים של הערך במערך. דוגמאות: המערך [1,2,1,1,3] והערך 1 – ה span הוא 4 המערך [1,4,2,1,1,4,1,4] והערך 1 – ה span הוא 7 המערך [1,4,2,1,1,4,1,4] והערך 2 – ה span הוא 1

Max Span Max-Span יהיה ה span המקסימלי על פני כל הערכים במערך מסוים דוגמאות: המערך [1,2,1,1,3] – ה-maxSpan הוא 4 המערך [1,4,2,1,1,4,1,4] – ה-maxSpan הוא 7

נתחיל לעבוד נפתח פרויקט חדש בשם MaxSpan נתחיל לכתוב תכנית בדיקה לפתרון שלנו 16 16

תכנית בדיקה נגדיר מחלקה חדשה עבור הבדיקות il.ac.tau.cs.sw1.maxspan.tests.TestMaxSpan החלק הראשון - חבילה (package) http://en.wikipedia.org/wiki/Java_package כעת נכתוב את המקרים שנרצה לבדוק: 17 17

תכנית בדיקה int[] array = null; int maxSpan; array = new int[]{1, 2, 1, 1, 3}; maxSpan = MaxSpan.maxSpan(array); if (maxSpan != 4) { System.out.println(Arrays.toString(array) + " expected: 4, result: "+ maxSpan); } else { System.out.println(Arrays.toString(array) + " correct!"); } array = new int[]{1, 4, 2, 1, 1, 4, 1, 4}; if (maxSpan != 7) { System.out.println(Arrays.toString(array) + " expected: 7, result: " + maxSpan); זוהי למעשה הפונקציית main 18 18

למה המהדר כועס? לא מכיר את Arrays? לא מכיר את MaxSpan? import java.util.Arrays; לא מכיר את MaxSpan? import il.ac.tau.cs.sw1.maxspan.MaxSpan; אבל לא מוגדרת מחלקה כזו...מה לעשות? בואו נקשיב להמלצה של אקליפס (QuickFix) קיצור מקשים: Ctrl+1 19 19

ועכשיו לפתרון public static int maxSpan(int[] array) { int max = 0; for (int i = 0; i < array.length; i++) { int j = array.length - 1; for ( ; j >= i; j--) { if (array[i] == array[j]) { break; } int span = j - i + 1; if (max < span) { max = span; return max; 20 20

בדיקה, Refactor ושדרוג הקוד (?) נבדוק שתכנית הבדיקה עובדת בואו נכתוב את הפונקציה בצורה יותר "נכונה" ראשית נשנה את שם המחלקה, נשתמש ב-Refactor דיון: כתיבת הפונקציה בצורה "נכונה" יעילות מודולריות, פתרון Top-down הבנת הקוד אפשרות לשינויים עתידיים 21 21

int maxSpan(int[]){…} תכנון "top-down" int maxSpan(int[]){…} For each value in the array Compute its span in the array Return the largest span found int[] values(int[]){…} int span(int, int[]){…} Create an empty output array For every element in the input array If the output array does not already contain the current value, add it to the output array Find the first occurrence of value Find the last occurrence of value Span = last - first +1 int lastIndexOf (int, int[]){…} int firstIndexOf (int, int[]){…} … … boolean contains(int[], int, int) void add(int[], int, int){…} We also need to adjust the output array size… 22 22

הפונקציה הראשית public static int maxSpan(int[] nums) { int max = 0; for (int value: values(nums)) { max = Math.max(max, span(value, nums)); } return max; 23 23

וחלק מפונקציות העזר private static int span(int value, int[] nums) { return lastIndexOf(value, nums) - firstIndexOf(value, nums) + 1; } private static int[] values(int[] nums) { int[] values = new int[nums.length]; int nextIndex = 0; for (int i = 0; i < nums.length; i++) { if (!contains(values, nextIndex, nums[i])) { add(values, nextIndex++, nums[i]); } return Arrays.copyOf(values, nextIndex); 24 24

והשאר private static int lastIndexOf(int value, int[] nums) { for (int i = nums.length - 1; i >=0; i--) { if (nums[i] == value) { return i; } // should never get here return -1; private static int firstIndexOf(int value, int[] nums) { int index = -1; for (int i = 0; i < nums.length; i++) { index = i; break; return index; 25 25

והשאר private static void add(int[] values, int position, int value) { values[position] = value; } private static boolean contains(int[] temp, int tempLength, int value) { for (int i = 0; i < tempLength; i++) { if (temp[i] == value) { return true; return false; 26 26

סיכום מה ההבדל העיקרי בין שני הפתרונות לבעיית ה-maxSpan? מדוע הפיתרון השני, על אף היותו ארוך יותר, הוא עדיף? דרך העבודה על תכנית צריכה להיות top-down. נתחיל מבדיקות: נגדיר מהי התנהגות נכונה של התכנית. רק לאחר מכן נעבור למימוש עצמו. נחלק לפונקציות בצורה בה כל פונקציה אחראית על פעולה אחת בלבד. נבנה תכנית מודולרית ככל הניתן. הפיתרון הראשון הוא למעשה פונקציה אחת שעושה את הכל, אין חלוקה לפונקציות עזר. הפיתרון השני מחלק את הקוד לפונקציות עזר, בצורה כזאת שכל פונקציה אחראית על פעולה אחת בלבד. הפיתרון השני גמיש יותר לשינויים עתידיים, וימנע שיכפול קוד במידה ונצטרך לממש משהו דומה בהמשך. קוד מצורף, אפשר לפתוח באקליפס ולהראות ישירות באקליפס.

הסוף... 28