[Homework] Programming basics-May - C# AdvancedTopics - Problem{10} -Inside the Building
Здравейте,
първо се извинявам ако повтарям темата, но от дълго ровене не намерих нищо за тази задача.
Задачата е привидно проста, но не ми дава 100 точки.
Въпросът ми е къде според вас бъркам в кода, че джъдж системата да ми дава само 68 точки?
Примерите ги изпълнява вярно, но в системата дава грешки на някои тестове. Погледнах и авторското решение, но изобщо не го разбрах. Изглежда ми като нещо от още по-адвансд материя.
http://pastebin.com/YMS48Zgt
Ето я и в системата задача 1 - https://judge.softuni.bg/Contests/9/CSharp-Basics-Exam-14-April-2014-Evening
Ми според мен това условие е изпълнено защото инпута е на първият ред "h" и след това 10 координати, които трупа в масив. Първо пробвах "хамалската" т.е. без масив, а с 11 int-а, но понеже ми даде 68 точки реших, че е заради това и пробвах с масив, но резултата е същият засега.
Прав си не е от това.Грешката е на този ред за Y-ка:
bool b1 = (coordinates[i] >= h) && (coordinates[i] <= (2 * h)) && (coordinates[i + 1] >= h) && (coordinates[i + 1] <= (3 * h));
А трябва да е:
bool b1 = (coordinates[i] >= h) && (coordinates[i] <= (2 * h)) && (coordinates[i + 1] >= h) && (coordinates[i + 1] <= (4 * h));
За втората част от фигурата височината трябва да е по 4
Вадиш 100 точки :)
Боже, колко елементарна грешка съм доопуснал :) Отидоха ми два часа нерви ! Благодаря много за помощта!
Здравей,
Би ли да споделиш "хамалското" решение с мен, защото аз някъде там греша и не мога да разбера къде.
Просто за ориентир.
Не намерих из форума, други дискусии за тази задача, а авторското решение не го разбрах напълно.
Здравей,
за съжаление съм го изтрил първоначалното ми решение. Но мога да ти кажа горе долу какво беше. Принципно е същото като това по-горе, но с тази разлика, че тук координатите се събират в масив от 10 елемента.(int[] coordinates = new int[10];) По-прегледно, по-удобно и сбито е. В първоначалното ми решение координатите се събираха в десет отделни int променливи.(int x1, int x2, int y1 ....) От там нататък логическите операции са или с отделните променливи или с елементите от масива. Когато са десет отделни променливи обаче кодът е доста по-дълъг затова го нарекох "хамалски" . С масив и фор цикъл става кратък, а иначе трябва логически операции за всяка променлива по отделно. Дано съм бил полезен !
Ако пуснеш кода, който смяташ за грешен в pastebin.com и дадеш линк може да помогнем с колегите.
Благодаря,
Знам, че греша нещо фундаментално......http://pastebin.com/TmYZ0KsE
Едната грешка, която забелязах е, че на всякъде си сложил логически оператор И, а по средата трябва да е ИЛИ. if ((x1 >= 0 && x1 <= 3*h) && (y1 >= 0 && y1 <= h) || (x1 <= 2*h && x1 >= h) && (y1 >=h && y1 <= 4*h)) Защото точката не може да е хем в едната част хем в другата. Тя е или в едната част от фигурата или в другата. Друга грешка, която би ти отнела малко точки е ouside липсва ти t. Ще огледам още малко и пак ще ти пиша.
Всъщност имаш и изначална принципна грешка в избора на условната конструкция. Така както си направил ще проверява първият if и ако той е изпълнен ще приключи. т.е. не използвай if - else if, а if-else за всяка точка поотделно.
Ето го малко пооправен кода, но дава 50 / 100 точки значи има още нещо за оправяне. Засега не виждам какво е.
http://pastebin.com/mfvmiVtk
Както каза колегата трябва да ползваш оператора ||, защото няма как точката да е в двете фигури едновременно. Другото което е за всяка точка трябва в отделен за нея else блок да сложиш варианта тя да не е вътре т.е да отпечатваш "outside" (при теб е написано "ouside" между другото и така judge дава 0т.). Ето как трябва да излежда твоя вариант написан правилно.
https://github.com/KostaKanev/SomeCodes/blob/master/Tester/InsideTtheBuilding.cs
П.С. Това мисля е най дългото решение което се сещам :)
MiDimitrow
На 3-тата точка си изпуснал else блока :) затова дава 50т.
Здравей,
Предварително проверих дали получавам резултатите на изхода и всичко си беше ОК.
Сега коригирах outside, промених и логическия оператара по средата на || (или), копирам целия код ( от 1 до 53 ред в моя случай) и така го paste-вам в Judge, но продължава да не ми дава точки.
Според мен имам някаква много генерална грешка, но не мога да я открия...
Обърни внимание ,че след всеки if следва един else за всяка една точка. За следващата пак имаш If и след него един else и т.н. Погледни по горния ми пост съм написал твоя вариант, но с else-овете където трябва.
Kosta.Kanev Благодаря, ще спя спокойно :)
anieze1 кодът от моя линк дава 50 точки, а на колегата - 100 виж ги би трябвало всичко да е наред вече. Единственото, което ми минава през главата е, че в пейстбин си пейстнал само съдържанието в Main, а не целият код от using system нататък. Да не би така да го пускаш в джъджа ?
Много благодаря!! Вече ми стана съвсем ясно :-) и да решението така става наистина дълго.
Масивите,съвсем бегло съм ги погледнала и няма как да ги използвам за момента.