חוזה בין ספק ללקוח חוזה בין ספק ללקוח מגדיר עבור כל שרות: תנאי ללקוח - "תנאי קדם" - precondition תנאי לספק - "תנאי אחר".postcondition תוכנה 1 תרגול מס

מסמכים קשורים
PowerPoint Presentation

PowerPoint Presentation

מהוא לתכנות ב- JAVA מעבדה 3

מבוא למדעי המחשב

מבוא למדעי המחשב

PowerPoint Presentation

אוניברסיטת בן גוריון בנגב תאריך המבחן: שקולניק אלכסנדר שם המרצה: מר בשפת JAVA מבוא לתכנות מבחן ב: מס' הקורס : הנדסת תעשיה וניהול מ

PowerPoint Presentation

מבוא למדעי המחשב

אוניברסיטת בן גוריון בנגב תאריך המבחן: שם המרצה: מר אלכסנדר שקולניק, בשפת JAVA מבחן ב: מבוא לתכנות מס' הקורס : מיועד לתלמידי : הנד

מבוא לתכנות ב- JAVA תרגול 11

תרגול 1

Microsoft PowerPoint - rec3.ppt

PowerPoint Presentation

PowerPoint Presentation

תורת הקומפילציה

Slide 1

מבוא לתכנות ב- JAVA תרגול 7

Slide 1

מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי

פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.

תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש

אוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב מועד א' סמסטר ב', תשע"ג, משך המבחן: שעתיים וחצי חומר עזר: אסור הנחיות: וודאו כי יש בידיכם

סדנת תכנות ב C/C++

מבוא למדעי המחשב

מבוא למדעי המחשב

Slide 1

משימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות תכנות מתק

תרגול 3 - מערכים

תרגול 1

מספר מחברת: עמוד 1 מתוך 11 ת"ז: תשע"א מועד ב סמסטר א' תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי ה

Microsoft Word - Ass1Bgu2019b_java docx

הגשה תוך שבוע בשעת התרגול

Slide 1

מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו

Microsoft Word - c_SimA_MoedB2005.doc

Tutorial 11

תרגול 1

PowerPoint Presentation

מבוא למדעי המחשב

מבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. ב

שאלהIgal : מערכים דו מימדיים רקורסיה:

אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי

PowerPoint Presentation

Microsoft PowerPoint - rec1.ppt

מצגת של PowerPoint

תוכנה 1 בשפת Java שיעור מספר 3: "חתיכת טיפוס"

Slide 1

שאלהIgal : מערכים דו מימדיים רקורסיה:

Microsoft Word - pitaron222Java_2007.doc

PowerPoint Presentation

מבוא למדעי המחשב - חובלים

אוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבו

תרגול 1

עוצמת ההורשה מה הופך את ההורשה לכלי כל כך עוצמתי? מעבר לכך שהוא מקל בהגדרת מחלקות חדשות על סמך מחלקות קיימות, יש לנו אפשרות להתייחס לאובייקט מסויים בכ

תרגול מס' 7: תרגילים מתקדמים ברקורסיה

Slide 1

פייתון

PowerPoint Presentation

אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי

Microsoft PowerPoint - lec2.ppt

Slide 1

מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי

שקופית 1

תשע"דד אביב תוכנה 1 תרגיל מספר 4 עיבוד מחרוזות וקריאה מקבצים הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס..(

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

Microsoft PowerPoint - T-10.ppt [Compatibility Mode]

תרגול מס' 1

Microsoft PowerPoint - Lecture1

PowerPoint Presentation

מקביליות

Slide 1

Microsoft Word B

1

שבוע 4 סינטקס של HACK ASSEMBLY ניתן להשתמש בשלושה אוגרים בלבד:,A,D,M כולם בעלי 16 ביטים. M אינו אוגר ישיר- הוא מסמן את האוגר של ה RAM שאנחנו מצביעים ע

מבוא למדעי המחשב

יוםראשון, 02 ליולי 2014 סמסטר סוף מבחן )236703( עצמים מונחה תכנות - א' מועד 2014, אביב סמסטר קמחי יחיאל ד"ר מרצה: מסינג מיטל עבדאלקאדר, כרם גלעד, ערן

Overview of new Office 365 plans for SMBs

Homework Dry 3

תורת החישוביות תרגול הכנה לוגיקה ותורת הקבוצות מה יש כאן? בקורס תורת החישוביות נניח ידע בסיסי בתורת הקבוצות ובלוגיקה, והכרות עם מושגים בסיסיים כמו א"ב

מקביליות

PRESENTATION NAME

לנץ קרן מרצה: תכנותמונחהעצמים) ( יוםשישי 15 אוקטובר 0202 ב מועד 0202, אביב סמסטר סמסטר סוף מבחן גוטמן אייל רביב, אריאל משנה, אלון מתרגלים: הנחי

מבוא למדעי המחשב - חובלים

תוכן העניינים: פרק צמצומים ומימושים של פונקציות בוליאניות... 2 צמצומים של פונקציות באמצעות מפת קרנו:...2 שאלות:... 2 תשובות סופיות:... 4 צמצום

2013/14 אוניברסיטת חיפה מבוא למדעי מחשב, מעבדה מטרת המעבדה: לתרגל את המעבר מאלגוריתם לקוד C כמה שיותר. הוראות:.1.2 ניתן לעבוד ביחידים או בזוגות. (יש מ

Slide 1

הגשה תוך שבוע בשעת התרגול

המשימה תרגול מס' 5: קלט-פלט במערכות הפעלה שונות יש סימונים שונים עבור ירידת שורה :)newline( ב- UNIX/Linux )Line Feed( \n ב- Windows )Carriage Return +

Microsoft PowerPoint - 07_tdd.ppt

תמליל:

חוזה בין ספק ללקוח חוזה בין ספק ללקוח מגדיר עבור כל שרות: תנאי ללקוח - "תנאי קדם" - precondition תנאי לספק - "תנאי אחר".postcondition תוכנה 1 תרגול מס' 3 מתודות ותיכון לפי חוזים לקוח ספק 2 תנאי קדם (preconditions) תנאי אחר (postconditions) מגדיר את המחוייבות של הספק אם תנאי הקדם מתקיים, הספק חייב לקיים את תנאי האחר ואם תנאי קדם אינו מתקיים? לא ניתן להניח דבר: אולי השרות יסתיים ללא בעיה אולי השרות יתקע בלולאה אינסופית אולי התוכנית תעוף מייד אולי יוחזר ערך שגוי אולי השרות יסתיים ללא בעיה אך והתוכנית תעוף / תתקע לאחר מכן... ובכתיב לוגי: תנאי קדם תנאי אחר, (תנאי קדם)!? 4 3 מגדירים את הנחות הספק ברוב המקרים, ההנחות הללו מתארות מצבים של התוכנית שבהם מותר לקרוא לספק במקרים פשוטים (ונפוצים), ההנחות הללו נוגעות רק לקלט שמועבר לשירות. במקרה הכללי ההנחות הללו מתייחסות גם למצב התוכנית, כגון משתנים גלובליים. תנאי הקדם יכול להיות מורכב ממספר תנאים שעל כולם להתקיים (AND) דוגמא 2 (אותו קוד, חוזה שונה) דוגמא 1 6 precondition: 1) arr!= null 2) arr.length > 0 3) arr contains only numbers (no NaN or infinity) postcondition: Returns the minimal element in arr / public static double min1(double[] arr) { מה יקרה אם בקריאה ל- min1 לא יקויימו כל התנאים בתנאי הקדם??arr==null?arr.length == 0?NaN מכיל arr for (double x : arr) מכיל Infinity או? Infinity 5 arr המימוש אינו בודק את קיומם של תנאי הקדם בהשוואה לחוזה מדוגמא :1 חוזה מתירני יותר מבחינת הלקוח precondition: arr!= null postcondition: If ((arr.length==0) (arr contains only NaNs)) returns Infinity. Otherwise, returns the minimal value in arr. / public static double min2(double[] arr) { for (double x : arr) 1

דוגמא 4 (ללא (precondition תנאי אחר המגדיר תגובה לכל מוכן לכל מקרה קלט אפשרי מסבך את הקוד. precondition: true postcondition: If ((arr==null) (arr.length==0)) returns NaN Otherwise, if arr contains only NaN returns Infinity. Otherwise, returns the minimal value in arr, ignoring any NaN. / public static double min4(double[] arr) { if (arr == null arr.length == 0) return Double.NaN; for (double x : arr) 8 דוגמא 3 (טיפול שונה ב- (NaN precondition: arr!= null postcondition: If (arr.length=0) returns Infinity. Otherwise, if arr contains NaN returns NaN. Otherwise, returns the minimal value in arr. / public static double min3(double[] arr) { for (double x : arr) { if (Double.isNaN(x)) return x; השוואה לחוזה מדוגמא 2: טיפול שונה במקרה קצה (קיום ערכי (NaN 7 Compilation vs. Runtime Errors דוגמא 5 (ללא (precondition Syntax error on token "Class", class expected שגיאות קומפילציה (הידור): שגיאות שניתן "לתפוס" בעת קריאת הקובץ והפיכתו ל- bytecode ע"י המהדר Class MyClass { void f() { int n=10; void g() { int m = 20; Syntax error, insert "" to complete MethodBody Type mismatch: cannot short x = 5; convert from int to short short y = 10; short z = x y; The local variable i may not have been initialized int i; System.out.println(i); 10 precondition: true postcondition: If ((arr!= null) && (arr.length> 0) && (arr contains only numbers)) returns the minimal value in arr. Else, the return value is undefined. / public static double min5(double[] arr) { if (arr == null) return 0; for (double x: arr) תנאי אחר המגדיר תגובה רק לקלט פשוט. עבור קלטים אחרים - מתחייב להחזיר ערך כלשהו לא מוגדר בדרך כלל קשורות ל: תחביר, תאימות טיפוסים, הגדרה לפני שימוש (כלומר לסיים קריאה באופן תקין) 9 Compilation vs. Runtime Errors האם יש עוד סוג של טעויות? כן, הכי גרועות, טעויות לוגיות בתוכנית public class T { calculate x! / public static int factorial(int x) { int f = 0; for (int i = 2; i <= x; i++) f = f i; return f; Compilation vs. Runtime Errors שגיאות זמן ריצה: לא ניתן לדעת שתהיה שגיאה במקום ספציפי בזמן ההידור (קומפילציה) int a[] = new int[10]; a[15] = 10; String s = null; System.out.println(s.length()); a = new int[20]; 12 מתקשר למנגנון החריגים,(exceptions) עליו נלמד בהמשך 11 2

Max Span Max-Span יהיה ה span המקסימלי על פני כל הערכים במערך מסוים נרצה לממש פונקציה שבהינתן מערך של מספרים שלמים תחזיר את ה Max-Span שלו המערך [1,2,1,1,3] ה maxspan- הוא 4 המערך [1,4,2,1,1,4,1,4] ה maxspan- הוא 7 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 14 13 נתחיל לעבוד תכנית בדיקה נגדיר מחלקה חדשה עבור הבדיקות il.ac.tau.cs.sw1.maxspan.tests.testmaxspan החלק הראשון - חבילה (package) http://en.wikipedia.org/wiki/java_package כעת נכתוב את המקרים שנרצה לבדוק: נפתח פרויקט חדש בשם MaxSpan נתחיל לכתוב תכנית בדיקה לפתרון שלנו 16 15 תכנית בדיקה למה המהדר כועס? לא מכיר את?Arrays import java.util.arrays; לא מכיר את?MaxSpan import il.ac.tau.cs.sw1.maxspan.maxspan; אבל לא מוגדרת מחלקה כזו...מה לעשות? בואו נקשיב להמלצה של אקליפס (QuickFix) קיצור מקשים: Ctrl+1 18 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; maxspan = MaxSpan.maxSpan(array); if (maxspan!= 7) { System.out.println(Arrays.toString(array) + " expected: 7, result: " + maxspan); else { System.out.println(Arrays.toString(array) + " correct!"); 17 3

ועכשיו לפתרון בדיקה, Refactor ושדרוג הקוד (?) נבדוק שתכנית הבדיקה עובדת בואו נכתוב את הפונקציה בצורה יותר "נכונה" ראשית נשנה את שם המחלקה, נשתמש ב- Refactor דיון: כתיבת הפונקציה בצורה "נכונה" יעילות מודולריות, פתרון Top-down הבנת הקוד אפשרות לשינויים עתידיים 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; 20 return max; 19 תכנון "top-down" הפונקציה הראשית int maxspan(int[]){ public static int maxspan(int[] nums) { int max = 0; For each value in the array Compute its span in the array Return the largest span found for (int value: values(nums)) { int[] values(int[]){ int span(int, int[]){ return max; max = Math.max(max, span(value, nums)); 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 int lastindexof (int, int[]){ Find the last occurrence of value int firstindexof (int, int[]){ Span = last - first +1 22 boolean contains(int[], int, int) void add(int[], int, int){ We also need to adjust the output array size 21 וחלק מפונקציות העזר והשאר 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++) { if (nums[i] == value) { index = i; break; 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 index; 24 return Arrays.copyOf(values, nextindex); 23 4

The Debugger והשאר Some programs may compile correctly, yet not produce the desirable results These programs are valid and correct Java programs, yet not the programs we meant to write! The debugger can be used to follow the program step by step and may help detecting bugs in an already compiled program 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; 25 Debugger Start Debugging Debugger Add Breakpoint debug (F11) Right click on the desired line Toggle Breakpoint breakpoint Debugger Debugging Debugger Debug Perspective Current state Back to Java perspective Current location 5

Using the Debugger: Video Tutorial Debugger Debugging תוכלו למצוא מצגות וידאו מצוינות המדריכות כיצד להשתמש ב debugger באתר: http://eclipsetutorial.sourceforge.net/debugger.html מומלץ לצפות לפחות בארבעת הסרטונים הראשונים הקישור מופיע גם באתר הקורס בחלק על סביבת הפיתוח 32 6