Loading...
MiDimitrow avatar MiDimitrow 10 Точки

[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

Тагове:
0
Programming Basics 28/06/2015 15:35:07
Kosta.Kanev avatar Kosta.Kanev 27 Точки

Аз си мисля че е заради това условие:

  • At the next 10 lines the numbers x1, y1, x2, y2, x3, y3, x4, y4, x5, y5 are given.
0
28/06/2015 16:09:51
MiDimitrow avatar MiDimitrow 10 Точки

Ми според мен това условие е изпълнено защото инпута е на първият ред "h" и след това 10 координати, които трупа в масив. Първо пробвах "хамалската" т.е. без масив, а с 11 int-а, но понеже ми даде 68 точки реших, че е заради това и пробвах с масив, но резултата е същият засега.

0
Kosta.Kanev avatar Kosta.Kanev 27 Точки

Прав си не е от това.Грешката е на този ред за 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 точки :)

1
28/06/2015 16:02:47
MiDimitrow avatar MiDimitrow 10 Точки

Боже, колко елементарна грешка съм доопуснал :)  Отидоха ми два часа нерви ! Благодаря много за помощта! 

1
anieze1 avatar anieze1 2 Точки

Здравей,

Би ли да споделиш  "хамалското"  решение с мен, защото аз някъде там греша и не мога да разбера къде.

Просто за ориентир.

Не намерих из форума, други дискусии за тази задача, а авторското решение не го разбрах напълно.

0
MiDimitrow avatar MiDimitrow 10 Точки

Здравей, 

за съжаление съм го изтрил първоначалното ми решение. Но мога да ти кажа горе долу какво беше. Принципно е същото като това по-горе, но с тази разлика, че тук координатите се събират в масив от 10 елемента.(int[] coordinates = new int[10];) По-прегледно, по-удобно и сбито е. В първоначалното ми решение координатите се събираха в десет отделни int променливи.(int x1, int x2, int y1 ....) От там нататък  логическите операции са или с отделните променливи или с елементите от масива. Когато са десет отделни променливи обаче кодът е доста по-дълъг затова го нарекох "хамалски" . С масив и фор цикъл става кратък, а иначе трябва логически операции за всяка променлива по отделно. Дано съм бил полезен !

Ако пуснеш кода, който смяташ за грешен в pastebin.com и дадеш линк може да помогнем с колегите. 

0
08/07/2015 11:01:36
anieze1 avatar anieze1 2 Точки

Благодаря,

Знам, че греша нещо фундаментално......http://pastebin.com/TmYZ0KsE

0
MiDimitrow avatar MiDimitrow 10 Точки

Едната грешка, която забелязах е, че на всякъде си сложил логически оператор И, а по средата трябва да е ИЛИ.  if ((x1 >= 0 && x1 <= 3*h) && (y1 >= 0 && y1 <= h) || (x1 <= 2*h && x1 >= h) && (y1 >=h && y1 <= 4*h)) Защото точката не може да е хем в едната част хем в другата. Тя е или в едната част от фигурата или в другата. Друга грешка, която би ти отнела малко точки е ouside липсва ти t. Ще огледам още малко и пак ще ти пиша. 

1
08/07/2015 22:22:58
MiDimitrow avatar MiDimitrow 10 Точки

Всъщност имаш и изначална принципна грешка в избора на условната конструкция. Така както си направил ще проверява първият if и ако той е изпълнен ще приключи. т.е. не използвай if - else if, а if-else за всяка точка поотделно. 

1
MiDimitrow avatar MiDimitrow 10 Точки

Ето го малко пооправен кода, но дава 50 / 100 точки значи има още нещо за оправяне. Засега не виждам какво е.

http://pastebin.com/mfvmiVtk

1
Kosta.Kanev avatar Kosta.Kanev 27 Точки

Както каза колегата трябва да ползваш оператора ||, защото няма как точката да е в двете фигури едновременно. Другото което е за всяка точка трябва в отделен за нея else блок да сложиш варианта тя да не е вътре т.е да отпечатваш "outside" (при теб е написано "ouside" между другото и така judge дава 0т.). Ето как трябва да излежда твоя вариант написан правилно.

 

https://github.com/KostaKanev/SomeCodes/blob/master/Tester/InsideTtheBuilding.cs

 

П.С. Това мисля е най дългото решение което се сещам :)

1
08/07/2015 22:43:39
Kosta.Kanev avatar Kosta.Kanev 27 Точки

MiDimitrow

На 3-тата точка си изпуснал else блока :) затова дава 50т.

1
anieze1 avatar anieze1 2 Точки

Здравей,

Предварително проверих дали получавам резултатите на изхода и всичко  си беше ОК.

Сега коригирах  outside, промених и логическия оператара по средата на || (или), копирам целия код ( от 1 до 53 ред в моя случай) и така го paste-вам в Judge, но продължава да не ми дава точки.

Според мен имам някаква много генерална грешка, но не мога да я открия...

 

0
Kosta.Kanev avatar Kosta.Kanev 27 Точки

Обърни внимание ,че след всеки if следва един else за всяка една точка. За следващата пак имаш If и след него един else и т.н. Погледни по горния ми пост съм написал твоя вариант, но с else-овете където трябва.

1
MiDimitrow avatar MiDimitrow 10 Точки

Kosta.Kanev Благодаря, ще спя спокойно :) 

anieze1 кодът от моя линк дава 50 точки, а на колегата - 100 виж ги би трябвало всичко да е наред вече. Единственото, което ми минава през главата е, че в пейстбин си пейстнал само съдържанието в Main, а не целият код от using system нататък. Да не би така да го пускаш в джъджа ? 

0
anieze1 avatar anieze1 2 Точки

Много благодаря!! Вече ми стана съвсем ясно :-) и да решението така става наистина  дълго.

Масивите,съвсем бегло съм ги погледнала и няма как да ги използвам за момента.

 

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.