שאלה ב JAVA דחוף !!!!

BravoMan

Active member
צר לי, אבל גם זו הנחה שגויה!

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

סתם בתור דוגמה, אני לא יודע איך בנוי מחולל מספרים פסודו-אקראיים של Java ואם שינו בו משהו בין גרסאות JDK, אבל אם נניח שכמו רוב מחוללים כאלה הוא משתמש בשעה או ב-uptime של המחשב בתור seed, הרי שסדרת המספרים שתצא אצלך ואצל השואל יהיו בוודאות שונות, כלומר, כמעת ואין סיכוי שבדקת על אותו קלט.
 

פונציק

New member
גם בתוכנה כזאת פשוטה?

המספרים הרנדומליים נעים בין 0 ל4 וחוץ מזה זה כמה לולאות ואיפים.
 

BravoMan

Active member
תתפלא...

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

ואני יכול לספר לך על מקרה פשוט (אומנם לא ב-Java אלא ב-C) שבו למרצה ולתkמיד היו מערכות הפעלה בגרסה טיפה שונות ולכן למרות שהתרגיל היה נכון הוא נכשל בבדיקה.

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

BravoMan

Active member
ועוד נקודה קטנה:

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

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

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

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

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

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

אם אתה רוצה עולם וורוד ותומך, תשאיר את התכנות בתור תחביב
 

פונציק

New member
למקרה שכן עובד

שכחתי להוסיף else break. כי אם יש שורה שלא עומדת בתנאים, הלולאה צריכה להפסיק ולהציג את המונה.
 

nocgod

New member
אחי - פייר, פיתרון כזה מקבל אצלי 0

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

פונציק

New member
מה נסגר עם אנשים פה היום?

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

לא קשה נכון? התגובות כאן מוציאות לי את כל החשק לנסות לפתור כאן בעיות.
 

nocgod

New member
תראה גבר - בתור סטודנט ומי שלומד...

לדעת לקבל ריג'קטים על הקוד שלך ובכללי על כל עבודה שאי פעם תבצע זה משהו הכרחי. לקבל ביקורת זה חשוב.
הביקורת שקיבלת ממני - בתור מי שלימד קצת C ו++C ותרגל java ועובד על פרוייקט ג'וואי גדול בתחום NLP - הפיתרון שלך פשוט לא טוב.
לא בדקתי אם מבחינת פיתרון הוא יציב, כלומר בהתנן קלט X הוא בהכרח יחזיר את התשובה הנכונה, ברגע שראיתי איך הקוד נראה גם לא היה לי אכפת.
הפיתרון הזה לא טוב, לא בנוי היטב, חסר אלמנטים אלגוריתמיים, לא מראה על חשיבה עמוקה והבנה של הבעיה, לא מראה על ניסיון לפרק את הבעיה לגורמים
אלא מראה על ניסיון לפתור את הבעיה כbrute force, פיתרון כזה אולי יתקבל במכללת קמצ'טקה - לדעתי הפיתרון הזה לא קביל.

זכותך לקבל את הfeedback הזה וללמוד ממנו. וזכותך להעלב - כמו שזכותי להגיד את אשר על ליבי ואני לא מהסס להגיד אותו.
 

פונציק

New member
למקרה שלא שמת לב, התגובה שלי הייתה גם

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

nocgod

New member
אוקי - ספר את זה למרצים שמציירים לך 0

על הפיתרון של השאלה במבחן ורושמים "לא נכון עקרונית"
זה גם סוג של feedback בונה...
 

nocgod

New member
איפשהו איבדת אותי

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

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

bla agin

New member
bla

public static int square(int[][] mat,int n)
{
int size=n/2;
for(int i=0;i<size;i++)
{
if(mat[n-1-i][n-1-i]!=1)
return 0;
}
for(int i=n-1;i>size;i--)
{
for(int j=n-1;j>size;j--)
{
if(i!=j && mat[j]!=0)
return 0;
}
}
return size;
}
 

bla agin

New member
אתה רציני?

אתה לא יודע איך לקרוא לפונקציה או לאתחל מערך?

זה לא פיתרון סופי יש בעיה קטנה שאתה צריך לפתור
מקווה ש 99% פתרון יעזור לך

ולבדיקה :
public static void main(String[] args) {
// TODO code application logic here
int n = 5;
//int mat[][] = new int[n][n];
//int mat[][]={{1,0,2,0,0},{0,1,0,0,0},{2,3,4,5,6},{1,2,3,4,5},{0,1,0,2,5}};
int mat[][]={{0,0,1,2,3},{0,0,2,0,3},{1,5,3,0,0},{0,1,2,1,0},{0,1,0,0,1}};

System.out.println(square(mat, n));
}
public static int square(int[][] mat,int n)
{
int size=n/2;
for(int i=0;i<size;i++)
{
if(mat[n-1-i][n-1-i]!=1)
return 0;
}
for(int i=n-1;i>size;i--)
{
for(int j=n-1;j>size;j--)
{
if(i!=j && mat[j]!=0)
return 0;
}
}
return size;
}
 

tomer1801

New member
תודה רבה

אני יודע לאתחל מערך אבל כנראה יש לי בעיה בתוכנה.
התקנתי שוב את ה- BLUEJ.

בכל מקרה, תודה על הפתרון.
 
למעלה