[Homework] C# Basics - Conditional Statements - Problem {13}
Колеги,
При решаването на задача 13. Triangle от домашното за Условни конструкции срещнах една неочаквана трудност. При изчислението на страните на триъгълника се получава закръгление (15-16 знак при double), в следствие на което за определени входни данни се получава некоректен резултат.
Тествах и авторското решение, качено в judge - също връща грешен отговор в някои случаи.
Всеки може да го тества с точки A(0,0), B(2,2) и C(6,6) - това е само един от множеството примери, които дават грешка. Тези три точки са на една линия и не могат да образуват триъгълник. Но програмата казва, че могат. С включването на дебъгера лесно се вижда защо се получава така - от закръгление едното от неравенствата на триъгълника става вярно.
Опитах да го избегна чрез работа с decimal, но Math.Sqrt си иска double, което оттам насетне обезсмисля работата с decimal.
И тъй като всичко това се случва преди да го кача в judge, пробвах няколко други варианта като с още малко геометрия в крайна сметка стана (без да се ползват неравенствата на триъгълника). Не гледайте, че имам качени няколко грешни решения в judge - на друго се дължат.
В коментарите към домашното ми е препоръчано (и съвсем основателно) да ползвам неравенствата на триъгълника, както ни съветва самото условие на задачата. Надявам се това да не се е отразило на оценката, макар и да не смятам, че се е отразило. По никакъв начин не искам да дискредитирам оценката на домашното, колегата е дал добри препоръки и забележката не е насочена към неговата работа.
Но, това, което ме притеснява повече, е следното - възможно ли е в judge системата да не се тестват достатъчно изчерпателно решенията и в крайна сметка да може да се признае невярно решение. Под невярно имам предвид даващо грешен резултат, а не грешно като концепция. Защото тук е точно такъв случаят - аз изгубих около час да се боря със заобикаляне на закръгленията, а се оказва, че това изобщо не е било необходимо. Допускам, че judge системата проверява дали каченото решение дава същите отговори, както авторското, и затова дава 100 точки.
Надявам се някой да вземе предвид този проблем и да се избегнат подобни случаи занапред.
Поздрави,
Пламен Митов
P.S. Ако някой има решение само с неравенствата на триъгълника, което да дава верен отговор с цитираните по-горе входни данни, нека да покаже как го е постигнал.