שאלה קטנה בJAVA

shayke 0 0 7

New member
שאלה קטנה בJAVA

שאלה שהיתה לי במבחן לפני כמה חדשים ומעלה בי תהיות.. נתונים 2 מערכים לא ממויינים. עליך לבדוק אם יש פרמוטציה, ז"א כל ערך במערך קיים-לא משנה באיזה סדר- במערך השני. הפתרון צריך להיות רקורסיבי, ובלי למיין. מותר לשנות סדר במערך, סבוכיות זמן ריצה\מקום לא חשובים. הפתרון שלי מחולק ל3 שיטות: שיטה ראשונה מחפשת ערך במערך, אם נמצא אז הוא יוחלף עם ערך מאינדקס נתון(הוא רץ בשיטה השניה מתחילת המערך, היתרון בכך הוא להבטיח שלא יימצא ערך יותר מפעם אחת ע"י חלוקה בתוך המערך הנבדק של "נבדקו ולא נבדקו") שיטה שניה היא שקוראת לשיטה הראשונה ורצה על המערך השני, היא פשוט שולחת לשיטה הראשונה ערכים מהמערך השני, ואת המערך הראשון כפרמטרים. זו שיטה שדורסת את ה- שיטה שלישית היא סתם שיטה שקוראת לשיטה השניה עם פרמטרים התחלתיים. מה דעתכם על הקוד הבא?(אני מקווה שיצא כמו במקור- עם הזחות וצבעוני..נו..) אני מניח שאפשר היה לרשום קוד יותר קצר בשימוש עם מערך עזר, מה דעתכם על הקוד הבא:
public static boolean isExist(int[] a, int val, int i, int place, boolean found) { if(i==a.length) return false; if(val==a) { int tmp=a; a=a[place]; a[place]=tmp; return true; } else return isExist(a, val, i+1, place, found); } public static boolean isM(int[] a, int[] b, int i) { if(i==b.length) return true; if(!isExist(a, b, i, i, false)) return false; return isM(a, b, i+1); }

אם ישנן שאלות, אשמח לענות.
 

shayke 0 0 7

New member
אוי זו הגרסה הלא נכונה, זו הגרסה התקינה:

בלי הFOUND הזה.
public static boolean isExist(int[] a, int val, int i, int place) { if(i==a.length) return false; if(val==a) { int tmp=a; a=a[place]; a[place]=tmp; return true; } else return isExist(a, val, i+1, place); } public static boolean isM(int[] a, int[] b, int i) { if(i==b.length) return true; if(!isExist(a, b, i, i)) return false; return isM(a, b, i+1); }
 

שםכלשהו

New member
נראה נכון

אם אני זוכר את השאלה נכון (מבוא למדמ"ח באו"פ מועד ב' לא?) לא היה נתון ששני המערכים באורך זהה וצריך לבדוק את זה קודם.
 

shayke 0 0 7

New member
אז הוספנו השוואה קטנה בין אורכי המערכים בשיטה

המקורית, נשווה ביניהם ובמקרה והם לא באורכים שווים אז יוחזר FALSE וזהו.. זה לא העניין. העניין הוא שבטעות חשבתי שגם צריך לבדוק שאין כפילויות איברים בכלל, אז הוספתי פרמטר found כדי למנוע כפילויות במערך א'(זה מספיק כי אני גם בודק שכל איבר בא' קיים בב', אז גם בב' לא יהיו כפילויות). זה לא משנה מהותית את הפתרון ובקלות ניתן "לקלף" בחזרה לפתרון הנכון. השוני הוא רק בשיטה isExist:
public static boolean isExist(int[] a, int val, int i, int place, boolean found) { if(i==a.length) return found; if(val==a) if(!found) { int tmp=a; a=a[place]; a[place]=tmp; return isExist(a, val, i+1, place, true); } else return false; else return isExist(a, val, i+1, place, found); }

על חוסר הנחיצות בFOUND הבוחן עלה והוריד לי 2 נקודות על כך, אך הבעיה היא שאת השיטה isPermutation פסלו לי מכיוון ש"אני לא מבין מה השיטה עושה- הכוונה למצא את כל האיברים של b בתוך a?כי אם כן ובכל אופן השיטה לא ממומשת נכון" סה"כ מתוך 30 נקודות קיבלתי 10. זה הגיוני?
 

shayke 0 0 7

New member
isPermutation זה isM שרשמתי מקודם

וכנראה שראיתי כפול כשרשמתי דריסה במקום העמסה
 

שםכלשהו

New member
10 נקודות מתוך 30??

זה נראה כמו חתיכת קטילה בבדיקה... אני לא רואה טעות באלגוריתם (למעשה השתמשתי באלגוריתם כזה בתשובה שלי - לא יכול להתחייב על המימוש - וקיבלתי את מלוא הנקודות)... הדבר היחיד שנראה לי מתאים להערה של הבודק הוא שאולי חתימת השיטה לא הייתה נכונה. isPermutaion צריכה לקבל 2 מערכים בלבד ולא 2 מערכים וint וגם אם זה נכון - להוריד 20 נקודות נראה לי מוגזם...
 

shayke 0 0 7

New member
isPermutation שראית זו פונק' מועמסת, וכן

אני אובד עצות בקשר לציון- התרגיל הזה ממש הרס לי את המבחן. אני ערערתי והערעור נדחה(כנראה "התחשבות" ו"הגינות" אלו מילים גסות עבור אנשים מסויימים, לא רק שציפיתי שיבדקו מחדש, אלא גם שילכו טיפה לקראתי.. מצחיק שכמוני..), מה היית עושה במקומי, כשאתה יודע שאתה צודק ומגיע לך יותר? פשוט בא לבכות......
 

שםכלשהו

New member
לא יודע מה הייתי עושה...

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

shayke 0 0 7

New member
כתבתי להם בעיקר מילות תחינה, וכנראה שביום

ראשון אני אפנה למרכזת לדבר איתה, הפעם בלי לבקש ולהתחנן אלא רק להטיח עובדות. הטעות שלי באלגוריתם היא שהוספתי לו חלק לא נחוץ וזה הכל, אלא לפי מה שרשמו לי כבר חשבתי שהפתרון הוא לגמרי לא נכון ולפי מס' הנקודות שקיבלתי חשבתי שהוא אפילו נותן שגיאת זמן ריצה, אלא שבדקתי והוא לא, ולאחר שקילפתי את החלק עם הFOUND שאמור למנוע כפילויות והוספתי בדיקה שמוודאת ש2 המערכים שווים בגודלם, הפתרון עובד עם כל קלט אפשרי(ניסיתי לפני פחות משעה המון צרופים של קלטים). מודה לך על העזרה, שםכלשהו, ומקווה לקבל עוד חוות דעת.
 

שםכלשהו

New member
הממ אז אולי עוד יש לך סיכוי...

http://www.openu.ac.il/academic/Finals/ziunim.html#a2 אם אתה שם לב, הם כתבו מנומק היטב בהדגשה, ולא נראה לי שמילות תחינה הן נימוק מספק :) וד"א לא הייתי מייעץ לך ל"הטיח" שום דבר בתמר וילנר... הרושם שקיבלתי מהתשובות שלה בפורום הקורס שהיא לא האדם הכי סימפטי ומבין בעולם
, ולפי דעתי תוקפנות רק תגרום לה "לעשות דווקא". במקומך, למרות התחושות הקשות (וככל הנראה מוצדקות) שלך, הייתי מנסה להשאר ענייני וממוקד. תשאל אם הערעור אפילו נבדק או נדחה מיידית בגלל חוסר בנימוקים (רלוונטיים), ואם זה המצב - תסביר שזה אחד הקורסים/הערעורים הראשונים שלך ולא היית מודע לאיך בדיוק יש להגיש ערעור.
 

h a j b i

New member
מבין אותך

במועד א פסלו לי את השאלה לגמרי ובמועד ב קבלתי רק 15 נקודות. שיהיה לך בהלחה אבל עם הרכזת הזאת לא נראה לי שיש לך הרבה סיכוי. אותה אחת שמחבאת ממני"ם שהקשר בינהם למבחן כמעט אפסי, מסרבת לפרסם פתרונות לממני"ם ומבחנים משנים קודמות כי זה "ייאלץ אותם לכתוב מבחנים וממנים שונים כל פעם" (מוזר שבקורסים אחרים זה לא מפריע). אני את הממ"מים סיימתי בממוצע של 96 אבל את הקורס עם 75. לצערי הלימוד שלי למבחן נפגע קשות כי כל תשובה הייתי צריך לבדוק במחשב, לדאוג שתעבור קומפילצייה ולהריץ מקרים שונים לוודא שאכן התשובה שלי נכונה. שלא לדבר על כמות הטעויות העצומה בחוברת הקורס, היעדר ספר קורס מקביל להרצאות (הקשר בינהם לספר הכחול די מקרי וגם לשאלות בספר אין תשובות). אני אישית הרגשתי שפשוט לא ממש רוצים שנצליח בקורס אולי בגלל שמשתמשים בו כמעין קורס מסנן במדמ"ח.
 

shayke 0 0 7

New member
ונשאלת השאלה, האם זה חוקי בכלל?

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

h a j b i

New member
הטענה שלי היא פחות לבדיקה

שקלתי לערער אבל אפילו אני לא הייתי מוסיף לעצמי יותר מ 7-8 נקודות אז ויתרתי. הטענות שלי הן על כל מבנה הקורס. על זה שהקורס עם החומר הנוכחי יכול להיות קל יותר ומקשים על התלמידים בכוונה. לא יכול להיות שאני כל הקורס בתחושה שאני מוציא מעל 90 וכשאני מתחיל להתכונן למבחנים אני מגלה שאין לי פתרונות אליהם, אין כמעט קשר לממני"ם (שגם להם לא מפרסמים פתרונות) ובסוף אני מסיים עם ציון בינוני ביותר בקורס שהרגשתי לכל אורך הסמסטר שהצטיינתי בו ושלטתי בחומר. שלא תבין לא נכון, הקורס היה מעניין, הממני"ם היו מעניינים והיה לי כיף לעשות אותם אבל הם לא הכינו אותי למבחן ולדעתי זה מה שלא צודק. אגב, שמעתי מהמנחה שלי שכמות הסטודנטים הפעילים בקורס (אלה שלא פרשו) קטנה כמעט בחצי אחרי ממ"ן 16? שהשאלות בממ"ן הזה פורסמו בפורומים אחרים חשבו שמדובר בשאלות מ"מבני נתונים" או "אלגורתמים"? לזה אני מתכוון כשאני אומר שנראה לי שהם משתמשים בקורס כקורס מסנן. תנסה, אולי תצליח. אני את הציון הזה כנראה אשפר בסוף התואר בעוד 4 שנים כשאני אוכל לפתור שאלות כאלה כבר מתוך שינה...
 

שםכלשהו

New member
לא ממש מסכים...

אני מסכים שמבנה הקורס יכול להיות יותר טוב, למשל: - להעיף לעזאזל את כל החלק של הרובוטים בתור התחלה - אם מלמדים לפי ההרצאות צריך לספק/לחבר מעין סיכומים שלהן עם שאלות לחזרה ותרגול (כלומר ספר קורס אמיתי במקום לזרוק לחבילה ספר כלשהו שכתוב עליו JAVA ולא להתייחס אליו אף פעם) או לחילופין ללמד לפי הספר (הזה או אחר.. לא משנה) - אם מתעקשים לא לתת בחינות/ממ"נים פתורים אפשר ואולי אפילו צריך במקום זה לחבר שאלוני "בחן את עצמך" באתר, במבנה של ממ"חים אבל ללא השפעה על הציון כדי לחדד נקודות "חשוכות" בחומר אני מסכים שיחסי האנוש של הרכזת צריכים להיות הרבה יותר טובים (למרות שאישית, אם הייתי בתפקיד שלה והייתי צריך להתמודד עם נחשולים של סטודנטים...
) אני מסכים שהניסוח של הממ"נים היה לא פחות מזוועתי - אם מנסחים ממ"ן כך שאפשר להבין ממנו 10 דברים שונים, אי אפשר להוריד נקודות על 8 מהדברים האלה... אבל, וזה אבל יחסית גדול - לפי דעתי המבחנים היו הוגנים. א1 היה הוגן עם נטייה קלה לקשה, וב היה הוגן עם נטייה לקל. מהמקרה הזה (ומהמקרה השני שכתבתי עליו) ברור שהיו כשלים נקודתיים בבדיקת המבחנים, אבל לא הייתי מסיק מזה על חוסר הגינות בבדיקה או הכשלה מלאכותית למטרות סינון.
 

h a j b i

New member
הדבר היחיד שאתה לא מסכים איתו זה הדבר

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

בידי82

New member
גם לא מסכים :)

אני בהחלט מסכים לכך שיש בעיות בקורס. אבל אני לא רואה אפשרות יותר טובה לקשר בין הממנים למבחן הסופי. רוב הלימוד בקורס הזה נעשה על ידי פתירת הממנים. אם בממנים היו שאלות של מבחן, זאת אומרת שאלות ברמה שאפשר לפתור בפחות משעה בעזרת עיפרון ונייר בלבד אז פחות או יותר יהרס האלמנט הלימודי הכי חשוב בקורס הזה. במצב האופטימלי המבחן בקורס הזה היה פרויקט כלשהו בהיקף 20-30 שעות עבודה. שהיה שווה את רוב הציון. אבל מה שיש זה מבחן שצריך להיות מסוגלים לפתור אותו ב3 שעות (ולכן החלק האמריקאי). שתי השאלות הראשונות (רקורסיה ורשימות מקושרות) קשורות ישירות לחומר הנלמד בקורס (אך ברמה נמוכה מהממנים). החלק האמריקאי אכן שונה מהממנים אבל יש בחירה ויש דוגמאות ממבחנים ישנים באתר. "נכון שאפשר לכתוב כל פיתרון המחשב ולהריץ אבל לאחד כמוני למשל שעובד במשרה מעל למאלה וזמנו קצת מוגבל קשה לעבור על כמות גדולה של מבחנים" אני לחלוטין מזדהה אתך, סמסטר שעבר עשיתי גם את מבוא למדעי המחשב וגם את דיסקרטית(+80% משרה) והדרך היחידה להתכונן כמו שצריך למבחנים (בשניהם) הייתה לקחת שבועים חופש מהעבודה לתקופת המבחנים. הסמסטר אני לוקח לינארית, מבוא למבני נתונים/אלגוריתמים וספרתיות ולמרות שצימצמתי עוד בהיקף המשרה קיים בהחלט לחץ זמן. אבל שיקולי לחץ הזמן שלי או שלך הם אינם הצדקה לפירסום פתרונות, יותר מכך אי פרסום פתרונות למבחנים לדוגמה תורם יותר ללימוד לבחינה (בסך הכל רמת השאלות לא גבוהה ובדיקה של נכונות הפתרון במחשב מלמדת יותר מקריאת פתרון מוכן מהאתר). * אני מסכים שעדיף לפרסם פתרונות לממנים. בקיצר יש מקום לשיפור אבל המבחן הספציפי הזה הוא פשוט פונקציה של הזמן שהסטודנט יכול להשקיע בלימוד לבחינה.
 

h a j b i

New member
אז ככה

ניתן היה לשלב בממני"ם גם שאלות שדומות לכאלה במבחן (רק עם יותר סעיפים) וגם שאלות שדורשות עבודה בעיקר על המחשב. בפועל היו מספר שאלות שאפשר לשספור על כף יד אחת בכל הממני"ם שהכינו למבחן. תפקיד הממני"ם הוא לסייע בתהליך הלמידה ולהכין אותך בהדרגה למבחן. בסופו של דבר כל הקטע באו"פ הוא הלמידה עצמית ובקורס הזה בניגוד לאחרים בעצם אין לך שום דוגמא פתורה של תרגילים כמו במבחן בשום מקום, לא בממנ"ים, לא בספר הכחול, לא באתר הקורס ולא בהרצאות. בהרצאות תוך כדי ניסו לדחוף קצת תוספות של תרגילים אבל גם זה נפסק אחרי כמה יחידות (נראה כאילו הם פשוט התעייפו) ואני אתייחס לשורה האחרונה. אני מסגים וזה מה שרע פה. אני אישית מאמין שמי שלומד היטב לאורך כל הסמסטר אז לקראת המבחן הוא לא נדרש להשקיע הרבה זמן בלימוד לבחינה לעומת כאלה שלא השקיעו במהלך הסמסטר. אני מודע לזה שעם יותר השקעה כל אחד (כולל אני) יכול היה להוציא ציון טוב במבחן. לצערי לא היה לי את הזמן הזה ובטח לא היתה לי אפשרות לקחת שבועיים חופש לפני. כמו שאמרתי, את הציון הזה בקורס הספציפי הזה אני אשפר לקראת התואר כי הוא פשוט מציק לי ויושב לי על הלב. השינוי בממוצע של התואר רוב הסיכויים יהיה מינורי אבל השיפור בהרגשה יהיה שווה לי את זה.
 
יש לי כמה תהיות לגבי ניסוח השאלה..

האם בהכרח 2 המערכים באותו גודל? ואמרת שכל ערך במערך הראשון חייב להיות קיים גם בשני. האם זה אומר שלדוגמה אם במערך הראשון יש לי 2 ערכים שהם 4,6. במערך השני יש לי 5 ערכים שהם: 4,6,6,4,4. כעיקרון יש את אותם איברים ב2 המערכים, אך זה עדיין לא אומר שהמערכים זהים בתכולתם.
 

h a j b i

New member
הוא ניסח פה בקיצור, במבחן השאלה נוסחה היטב

המערכים לא בהכרח באותו הגודל וכל איבר שמופיע פעמיים או יותר למשל במערך אחד חייב להופיע באותה כמות גם במערך השני. סדר האיברים במערכים כמובן יכול להיות שונה.
 

shayke 0 0 7

New member
לפי מה שהבנתי(ותקנו אותי אם אני טועה),

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