מבוא לתכנות ב- JAVA תרגול 14
שאלות נבחרות מ- תאריך המבחן: 07.02.2016 שם המרצה: מר אלכסנדר שקולניק בשפת JAVA מבוא לתכנות מבחן ב: 202.1.9031 מס' הקורס : הנדסת תעשיה וניהול מיועד לתלמידי : מועד א' א' סמ' שנה תשע"ד 3 שעות משך הבחינה : דף פוליו אחד לא מודפס ולא מצולם. חומר עזר : אין להשתמש במחשבון.
)25 נק'( שאלה 2 כתבו פעולה לא רקורסיבית ) arr public static int permutation( int [ ] המקבלת כפרמטר מערך arr של מספרים שלמים בגודל size ומחזירה 1 אם ורק אם אברי המערך הם פרמוטציה )תמורות( של המספרים: 0,1,,size-1 אחרת הפעולה מחזירה 0. לדוגמה, אם המערך הוא }3,1,4,2,0: הפעולה מחזירה 1. אם המערך הוא: 3} 0, 1, 4, 3, הפעולה מחזירה.0 אם המערך הוא: -4} -3, -2, -1, 0, הפעולה מחזירה.0.) הערה: אין להשתמש בלולאות מקוננות ( אין להשתמש בפעולות עזר. לולאה בתוך לולאה
תושבה public static int permutation(int[] arr) int[] checks = new int[arr.length]; for (int i = 0; i < arr.length; i++) if (arr[i] < 0 arr[i] >= arr.length) return 0; checks[arr[i]]++; } for (int i = 0; i < checks.length; i++) if (checks[i]!= 1) return 0; } return 1; } public static void main(string[] args) int[] a = 3,1,4,2,0}, b = 0, 1, 4, 3, 3}, c = 0, -1, -2, -3, -4}; System.out.println("" + permutation(a) + permutation(b) + permutation(c)); } נפתור בצורה דומה לריבוע הקסם בתרגול 5
)25 נק'( שאלה 3 נתונה התכנית הבאה: public static boolean what31(int arr[], int start, int end) int i, j; boolean flag = true; for (i = start, j = end; i < j; i++, j--) if (arr[i]!= arr[j]) flag = false; return flag; } // what31 המשך
)25 נק'( שאלה 3 public static void what32(int arr[], int N) int max = 1, indx = 0, i, j; for (i = 0; i < N - max; i++) for (j = N - 1; j >= i + max; j--) if (what31(arr, i, j)) indx = i; max = j - i + 1; break; } // if for (i = 0; i < max; i++) System.out.print(arr[indx + i] + " "); System.out.println(); } // what32 המשך
)25 נק'( שאלה 3 public static void main(string[] args) int[] arr = 1, 2, 1, 2, 3, -3, 5, -3, 3, -4 }; what32(arr, arr.length); // main } 10( נק' ) 5( נק' ) 10( נק' )?? א. מהו הפלט של התכנית הנ"ל? ב. מה יעודה של הפעולה what31 ג. מה יעודה של הפעולה what32
)25 נק'( שאלה 3 10( נק' ) 3-3 5-3 3? א. מהו הפלט של התכנית הנ"ל )5 נק' )? ב. מה יעודה של הפעולה what31 לבדוק האם בין start ל end נמצא "תת-מערך פולינדרומי". כלומר תת-מערך המכיל אוסף ספרות אשר ניתן לקרוא אותו באופן זהה משתי הכיוונים. ג. מה יעודה של הפעולה? what32 )10 נק' ) למצוא את ה"תת-מערך הפולינדרומי" הגדול ביותר במערך הנתון.
)25 נק'( שאלה 5 public class Term private int coef; private int degree; } // Term : לפניך מחלקה Term שמהווה איבר בפולינום ניתן לייצג פולינום באמצאות רשימה מקושרת באופן הבא : כל איבר ברשימה מטיפוס Term שומר מקדם בשדה coef ומעריך בשדה.degree איברי הפולינום מסודרים בסדר יורד לפי המעריך כאשר המעריך הגדול מופיע בראש הרשימה. כל מעריך מופיע ברשימה לכל היותר פעם אחת. המשך
)25 נק'( שאלה 5 3 5-2 4 10 1 3 0 NULL 3x^5-2x^4 + 10x + 3 לדוגמה, הרשימה: מיצגת את הפולינום: א.) 10 נק' ) כתוב פקודות היוצרות עצמים של המחלקה Term עם ההפניות p1 ו p2 והנתונים הבאים: 5 ו - 4 לשדות,coef 2 ו - 3 לשדות degree בהתאם. כתוב פעולה public static Term multterms(term p1, Term p2) היוצרת עצם חדש עם הפנייה p3 שמהווה מכפלה של עצמים p1 ו- p2. 5x^2 * 4x^3 = 20x^5 לדוגמה: המשך סעיף ב
תושבה לסעיף א public static Term multterms(term p1, Term p2) return new Term(p1.coef * p2.coef, p1.degree + p2.degree); } public static void main(string[] args) Term p1 = new Term(5, 2); Term p2 = new Term(4, 3); Term p3 = multterms(p1, p2); }
)25 נק'( שאלה 5 נק' ) ב.) 15 אין קשר עם סעיף א' : הוא מעריך של איבר, אז כידוע, לכל אחד מאיברי הפולינום אפשר לבצע פעולת נגזרת אם הוא איבר בפולינום,איפה ש a הוא מקדם של איבר ו n כתוב פעולה public static List<Term> derpolynom( List<Term> Lst ) אשר מקבלת כפרמטר הפנייה Lst לרשימה שמייצגת פולינום ומחזירה רשימה חדשה שמייצגת אותו פולינום אחרי ביצוע פעלת הנגזרת. המשך
)25 נק'( שאלה 5 לדוגמה, עבור רשימה 3 5-2 4 10 1 3 0 NULL 15 4-8 3 10 0 NULL נקבל רשימה חדשה : הערה: אפשר להשתמש בכל הפעולות של מחלקות Node, List וגם בפעולות של מחלקה Term )פעולה בונה, פעולות SETו - GET ) בלי לממש אותן.
תושבה לסעיף ב public static List<Term> derpolynom(list<term> lst) List<Term> ans = new List<Term>(); Node<Term> pos = ans.getfirst(); for (Node<Term> p = lst.getfirst(); p!= null; p = p.getnext()) if (p.getdata().getdegree() > 0) Term term = new Term( p.getdata().getcoef() * p.getdata().getdegree(), p.getdata().getdegree() 1 ); pos = ans.insert(pos, term); return ans;
שאלות נבחרות מ- תאריך המבחן: 04.08.2016 שם המרצה: מר אלכסנדר שקולניק בשפת JAVA מבוא לתכנות מבחן ב: 202.1.9031 מס' הקורס : הנדסת תעשיה וניהול מיועד לתלמידי : מועד ב' א' סמ' שנה תשע"ד 3 שעות משך הבחינה : דף פוליו אחד לא מודפס ולא מצולם. חומר עזר : אין להשתמש במחשבון.
)25 נק'( שאלה 2 בשאלה הזאת כל המחרוזות מורכבות מסדרות של אותיות שמסתימות בכוכבית. דוגמה של מחרוזת כזאת : "babac*dab*cabcdf*ccac*" כתבו פעולה length) public static String remstr(string str, int שמקבלת כפרמטרים str מחרוזת כזאת ו- length מספר חיובי. הפעולה יוצרת ומחזירה מחרוזת חדשה ללא תווים מיותרים שהיא אותה מחרוזת כאשר ממנה נמחקו תתי-המחרוזות אשר אורכן גדול או שווה ל-.length המשך
25( המשך שאלה 2 נק'( לדוגמה, עבור המחרוזת "babac*dab*cabcdf*ccac*" str ו- length שווה 5 הפעולה מחזירה את המחרוזת "dab*ccac*" שמתקבלת לאחר מחיקת המחרוזות.str )7 מהמחרוזת )אורך "cabsdf*" )6 ו )אורך "babac*"
תושבה public static String remstr(string str, int length) List<String> splits = split(str, '*'); splits = filter(splits, length); return merge(splits, '*');
תושבה private static List<String> split(string str, char deleimiter) String accumulator = ""; List<String> ans = new List<String>(); Node<String> pos = ans.getfirst(); for (int i = 0; i < str.length(); i++) if (str.charat(i)!= deleimiter) accumulator += str.charat(i); } else pos = ans.insert(pos, accumulator); accumulator = ""; return ans;
תושבה private static List<String> filter(list<string> splits, int length) for (Node<String> pos = splits.getfirst(); pos!= null;) if (pos.getdata().length() >= length) pos = splits.remove(pos); } else pos = pos.getnext(); return splits;
תושבה private static String merge(list<string> splits, char delimiter) // Technically it's better to use StringBuilder for ret and accumulator instead of just String. // It's more efficient, but in the scope of this course this is unnecessary. String ret = ""; for (Node<String> pos = splits.getfirst(); pos!= null; pos = pos.getnext()) ret = ret + pos.getdata() + delimiter; return ret;
)25 נק'( שאלה 5 : - manufacturer - -weight משקל, : לפניך מחלקה.Plane כל מטוס במחלקה Plane מוגדר ע"י שלוש תכונות speed מהירות ו יצרן public class Plane private double weight; private int speed; private String manufacturer ; } // Plane א.) 10 נק' ) כתוב פעולה במחלקה Plane המקבלת כפרמטר הפניה מטיפוס Plane ובודקת האם שני מטוסים הם בעלי אותו יצרן. שם הפעולה compmanufactures והיא מחזירה ערך מטיפוס.boolean המשך
תושבה לסעיף א public boolean compmanufactures(plane other) return this.manufacturer.equals(other.manufacturer);
)25 נק'( שאלה 5 ב. ( 15 נק' ) אין קשר עם סעיף א'. כתוב פעולה: public static List<Plane> Test5(List<Plane> p1, List<Plane> p2) אשר מקבלת כפרמטרים הפניות p1 ו p2 לשתי רשימות של מטוסים ממוינות לפי מהירות בסדר עולה וממזגת אותן לרשימה חדשה, שגם היא ממוינת בסדר עולה. הפעולה Test5 תחזיר את הרשימה החדשה. String הערה 1 : אפשר להשתמש בכל הפעולות של מחלקות List<T>,Node<T>, Plane )פעולה בונה, פעולות SET ו - GET ) בלי לממש אותן. הערה 2 : אין להשתמש בפעולות עזר. וגם בפעולות של מחלקה המשך
תושבה לסעיף ב public static List<Plane> Test5(List<Plane> p1, List<Plane> p2) List<Plane> ans = new List<Plane>(); Node<Plane> posans = ans.getfirst(); Node<Plane> posp1 = p1.getfirst(); Node<Plane> posp2 = p2.getfirst(); while (posp1!= null && posp2!= null) if (posp1.getdata().getspeed() <= posp2.getdata().getspeed()) posans = ans.insert(posans, posp1.getdata()); posp1 = posp1.getnext(); } else posans = ans.insert(posans, posp2.getdata()); posp2 = posp2.getnext();
תושבה לסעיף ב while (posp1!= null) posans = ans.insert(posans, posp1.getdata()); posp1 = posp1.getnext(); while (posp2!= null) posans = ans.insert(posans, posp2.getdata()); posp2 = posp2.getnext(); return ans; }