אוניברסיטת בן גוריון בנגב תאריך המבחן: 26.07.17 אלכסנדר שקולניק מר שם המרצה: בשפת JAVA מבוא לתכנות מבחן ב: 202.1.9031 מס' הקורס : הנדסת תעשיה וניהול מיועד לתלמידי : א' מועד א' סמ' שנה תשע"ד 3 שעות משך הבחינה : דף פוליו אחד לא מודפס חומר עזר : ולא מצולם. אין להשתמש במחשבון. במבחן זה 5 שאלות. עליך לבחור בארבע שאלות בלבד, המאפשרות לצבור 100 נקודות. רשמו תשובותיכם במחברת התשובות בלבד. מותר להגדיר פעולות עזר בכל השאלות, אלא אם נאמר אחרת. כתבו קוד קריא והקפידו על אינדנטציה והערות )אפשר בעברית(. ב ה צ ל ח ה!
שאלה )25 1 נק'( נתונה התכנית הבאה : public static int max(int a, int b) if (a >b) return a; else return b; } // max public static int what1(int num1, int num2) int limit = max(num1,num2)/2; for (int i=2; i<= limit; i++) if (num1 % i == 0 && num2 % i == 0) return i * what1 (num1 / i, num2 / i); return num1 * num2; } // what1 public static void main(string[ ] args) int arr1[ ]= 10, 7, 11, 8,50 }; int arr2[ ]= 6, 9, 7, 5,30 }; for(int i=0; i<5; i++) System.out.println( what1(arr1[i], arr2[i])); } // main א. מהו הפלט של התכנית הנ"ל? ) 10 נק' ) ב. מה יעודה של הפעולה? what1 )15 נק' ) )25 נק'( שאלה 2 public static boolean lexcomp(string s1, String s2) כתוב פעולה רקורסיבית אשר מחזירה true אם מחרוזת s1 קודמת למחרוזת s2 בסדר המילוני )לקסיקוגרפי( אחרת פעולה מחזירה.false לדוגמא :המחרוזת" "abc קודמת למחרוזת" "quarsbecy אך לא למחרוזת "aabc." המחרוזת" "abbc קודמת למחרוזת" "abbec אך לא למחרוזת "abbac.". המחרוזת" "ab קודמת למחרוזת "abbec.". הנחיות נוספות: מחרוזת לא קודמת לעצמה. - מחרוזת ריקה קודמת לכל מחרוזת שאינה ריקה. - אינן null ומכילות אותיות קטנות באנגלית בלבד. ניתן להניח כי המחרוזות s1 וs2 -
ניתן להשתמש בכל פעולות String שנלמדו מלבד compareto או.compare אסור להשתמש בלולאות ובפעולות עזר נוספות ואין לשנות חתימת הפונקציה הנדרשת. - - )25 נק'( שאלה 3 נתונה התכנית הבאה : public static void what3(int[ ] arr) int oidx = what31(arr, 0, true); int eidx = what31(arr, 0, false); while (oidx < eidx) oidx = what31(arr, oidx + 1, true); while (oidx < arr.length && eidx < arr.length) what32(arr, eidx, oidx); oidx=what31(arr,oidx+1,true); eidx++; } } // what3 private static int what31(int[ ] arr, int idx, boolean isodd) while (idx < arr.length && (arr[idx] % 2 == 0) == isodd) idx = idx + 1; return idx; } // what31 private static void what32(int[ ] arr, int left, int right) int t = arr[right]; for (int i = right; i > left; i = i - 1) arr[i] = arr[i - 1]; arr[left] = t; } // what32 private static void print(int[ ] arr) for (int i = 0; i < arr.length; ++i) System.out.print(" " + arr[i]); System.out.println(); } // print public static void main(string[ ] args) int[ ] arr = 1, 3, 4, 6, 7, 8, 9, 11, 12 }; what3(arr); print(arr); } // main ) 10 נק' ) 15( נק' )? א. מהו הפלט של התכנית הנ"ל? ב. מה יעודה של הפעולה what3
שאלה )25 4 נק'( א. ( 15 נק' ) מערך באורך n נקרא מושלם אם הוא מכיל את כל המספרים n 1. למשל, כל אחד מהמערכים הבאים הוא מושלם: 3 2 1 } 2 1 3 } 1 2 3 } 4 3 5 1 2 } 2 7 5 6 3 1 4 } דוגמא למערך לא מושלם: }1,2,2 ללא שימוש במערכי עזר ופעולות עזר כתוב פעולה לא רקורסיבית public static boolean isarrayperfect (int [ ] arr) שמקבלת מערך arr ובודקת האם הוא מושלם. הערה: אסור להשתמש בפעולות עזר נוספות. ב. ( 10 נק' ) אין קשר עם הסעיף א'. כתוב פעולה לא רקורסיבית public static boolean isinclude(int arr[ ], int x) הפעולה מקבלת מערך arr ממוין בסדר עולה ומספר x שלם ולא שלילי וקובעת האם המערך מכיל את סדרת המספרים הבאה המאוחסנת מתחילת המערך: 1 2 + 2 2 + 3 2 +... + x 2 לדוגמה, עבור המערך הבא בגודל 10 תאים ומספר שלם = 4 x הפעולה מחזירה.true 0 1 1 4 2 9 3 16 4 21 5 30 6 34 7 53 8 67 9 93 אינדקס ערך
שאלה )25 5 נק'( לפניך מחלקה : Point public class Point private int x; private int y; } // Point כל עצם במחלקה Point מוגדר ע''י שתי קואורדינאטות x ו y ממדי. ומתאר מיקום במרחב דו כמו כן נתונה הגדרה של מחלקה : Circle public class Circle private int radius; private Point center; private String color; } // Circle - כל עצם במחלקה Circle מוגדר ע"י התכונות : radius רדיוס של מעגל, center מיקום מרכז המעגל במרחב דו ממדי, color צבע המעגל. other במחלקה Circle המקבלת כפרמטר הפנייה א. ( 10 נק' ) כתוב פעולה issamex לעצם מטיפוס Circle ומחזירה ערך true אם שני מעגלים בעלי קואורדינטה x זהה, אחרת פעלה מחזירה ערך.false
ב. )15 נק' ) כתוב פעולה public static List<Circle> Test5( Circle [ ] arr, String col, int y ) אשר מקבלת כפרמטר מערך של מעגלים arr,מחרוזת col ומספר שלם y. הפעולה מחזירה רשימה של כל המעגלים בעלי צבע col וקואורדינטה y זהה בלבד. הערה 1 : אפשר להשתמש בכל הפעולות של המחלקות List<T> String, Node<T>, ) GET - ו SET Point וגם בפעולות של המחלקות Circle ו - )פעולה בונה, פעולות לממש בלי אותן. הערה 2 : אין להשתמש בפעולות עזר נוספות.