פורסם 2012 ביולי 2613 שנים יש לי שאלה שאני מנסה לפתור ואני לא בטוח בדרך פעולה שלי השאלה : וזה מה שאני עשיתי: static void Main() { } static void Sum2Biggest(int n) { int Fmax = 0; int Smax = 0; int sum; Console.WriteLine("Enter Val numbers:"); n = int.Parse(Console.ReadLine()); for (int i = 0; i <= n; i++) { Console.WriteLine("Enter Number:"); int val = int.Parse(Console.ReadLine()); if (Math.Max(Fmax, val)) Fmax = val; else if (Math.Max(Smax, val)) Smax = val; } sum = Fmax + Smax; }
פורסם 2012 ביולי 2613 שנים אכן זה מה שאתה אמור לעשות. Math.Max זו פונקציה שמחזירה מספר, ולא ערך אמת/שקר.שים לב לכמה טעויות קטנות:א. אתה קורא n+1 מספרים, לא n.ב. אתה לא מתייחס למקרה שבו הקלט מכיל מספרים שליליים (בזה שהגדרת Fmax=0 ו-Smax=0 הנחת שכל המספרים לא קטנים מ-0).ג. הבדיקה שלך לא מדוייקת. תחשוב מה קורה כשאתה קורא את המספרים 2,3,7 (בסדר הזה, משמאל לימין). מה יהיה Fmax ומה יהיה Smax?ד. הפונקציה שלך לא מחזירה שום דבר, בניגוד לדרישות בשאלה.ה. טיפ קטן: אחרי if/else/for/while תמיד תמיד תמיד תשתמש בסוגריים מסולסלים, גם כשזה לא חובה. דהיינו, במקום ככה:if (val > Fmax) Fmax = val;תכתוב ככה:if (val > Fmax){ Fmax = val;}זה הופך את הקוד ליותר קריא ומונע טעויות בעתיד.
פורסם 2012 ביולי 2613 שנים מחבר לגבי מספרים שליליים, אם יכניסו לדוגמא -8 אז הוא לא יכנס ל=FMAX וגם לא ל-SMAX ואז הוא פשוט ימשיך להריץ את הלולאה עד סופה לא ?לגבי אם המספרים יוכנסו ככה: 2,3,7 באמת כולם יכנסו רק ל-FMAX וכלום לא יגיע ל-SMAX....יש לך הצעות איך לסדר את זה ?
פורסם 2012 ביולי 2613 שנים לגבי מספרים שליליים, אם יכניסו לדוגמא -8 אז הוא לא יכנס ל=FMAX וגם לא ל-SMAX ואז הוא פשוט ימשיך להריץ את הלולאה עד סופה לא ? כן, הוא ימשיך להריץ את הלולאה. אבל מה אם הקלט מכיל רק מספרים שליליים? מה הפונקציה תחזיר במקרה הזה? לגבי אם המספרים יוכנסו ככה: 2,3,7 באמת כולם יכנסו רק ל-FMAX וכלום לא יגיע ל-SMAX....יש לך הצעות איך לסדר את זה ? תחשוב על זה בעצמך זה הקטע בתרגיל. אתה פשוט צריך לשים קצת יותר ifים.
פורסם 2012 ביולי 2613 שנים מחבר בעצם עכשיו שאני חושב על זה במקרה של 2,3,7 Math.MAX אמור לפתור לי את הבעיה הזאת לא ??
פורסם 2012 ביולי 2613 שנים איך בדיוק? אל תנחש, תנסה לפתור בעצמך. תחשוב מה קורה אחרי שקראת את 2 ו-3, ואתה עכשיו קורא את 7. מה מכילים Fmax ו-Smax? מה הם צריכים להכיל אחרי שקראת את 7? איזה ifים אתה יכול לעשות כדי לדאוג לזה?
פורסם 2012 ביולי 2613 שנים מחבר אז זהו זאת בידיוק הבעיה...השתמשתי כבר בעבר ב- MATH.MAX וזה נתן לי את המספר הגדול יותר, ועכשיו כשאני מציבif (Math.Max(val,Fmax)) זה נותן לי שגיאה על BOOL שלא יכול להמיר INT ל-BOOL...אני לא זוכר שהייתי צריך להתנות את MATH.MAX ב-BOOL...
פורסם 2012 ביולי 2613 שנים כבר אמרתי לך קודם כל שימוש בהשוואה במקום ב-Max:אכן זה מה שאתה אמור לעשות. Math.Max זו פונקציה שמחזירה מספר, ולא ערך אמת/שקר.כמו שניסיתי לרמוז לך, אתה צריך פשוט יותר מתנאי if אחד. כל פעם שאתה קורא מספר, תחשוב איזה מקרים יכולים להיות לך, ואיזה תנאי if (כאמור, יותר מאחד) אתה צריך לכתוב בשביל זה.נ.ב. כשאתה רוצה להוסיף משהו להודעה אתה יכול פשוט לערוך אותה. לא צריך תגובה נוספת.
פורסם 2012 ביולי 2613 שנים מחבר טוב זה מה שעשיתי, פשוט הוספתי חלק קטן בלי IF בלי כלום:if (val > Fmax) { Smax = Fmax; - זה מה שהוספתי Fmax = val; } else if (val > Smax) Smax = val;עשיתי לזה סימולציות נראה לי שזה מסדר את העיניין אלא אם פספסתי פה משהו...?ככה אם לדוגמא יש את הרצף 2,5,3...זה עובד חלק
פורסם 2012 ביולי 2613 שנים יותר טוב עכשיו תחשוב על המקרה שבו יש אותו מספר פעמיים (זה דורש תיקון קטנטן לקוד שלך). נ.ב. כדאי לך לתקן את ההזחה שלך, לפי הכללים הבאים: א. הסוגריים המסולסלים צריכים להיות באותה רמת הזחה כמו ה-if שלהם. ב. ה-else גם צריך להיות באותה רמת הזחה. ג. כשיש else if שמים אותם באותה שורה. ד. כמו שאמרתי קודם - אחרי כל if שמים סוגריים מסולסלים, גם אם הוא מכיל רק פקודה אחת.
פורסם 2012 ביולי 2713 שנים מחבר יש לי עוד שאלה קטנהhttp://www.fastup.co.il/images/64584325.jpgואני תקוע באיך לעשות שהמערך החדש לא יכיל העתקים של מספרים זהים... static int[] OddsDividedByNum(int[] arr, int num) { int count = 0; for (int i = 0; i < arr.Length; i++) { if (IsNotZogi(arr[i]) && (DividedByNum(arr[i],num))) { count++; } } int[] arr2 = new int[count]; for (int i = 0,j=0; i < arr.Length; i++) { if (IsNotZogi(arr[i]) && (DividedByNum(arr[i], num))) { arr2[j] = arr[i]; j++; } } static bool IsNotZogi(int num) { if (num % 2 != 0) return true; else return false; } static bool DividedByNum(int num1, int num2) { if ((num1 % num2) == 0) return true; else return false; }
פורסם 2012 ביולי 2713 שנים הדרך הכי פשוטה היא לפני שאתה מכניס איבר למערך, תבדוק אם הוא כבר קיים בו ואם כן אז אל תוסיף אותו.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.