Loading...
bepcho avatar bepcho 1 Точки

Малко хелп за PointInTheFigure

Здравейте, колеги

Може ли малко помощ за тази задача... Дава ми 95 точки и колкото и да го гледам ми се струва, че всичко е ок, заменям с числа, зяпам, умувам - нищо!

http://pastebin.com/8dsu3esN

Сигурно е нещо тъпо, но не го виждам. :)

Тагове:
0
Programming Basics
dmaknev avatar dmaknev 49 Точки

Тъй като вече са поправили твоите грешки, ще предложа едно малко по-подробно и ясно(надявам се) решение.

Условно разделяме "обърнатото Т" на 2 правоъгълника и се оказва, че задачата ни вече е решена, макар и на части в задачи 3. и 6.(от там нататък дори не се налага да се мисли, само се пригажда кода[то не че в тях имаше какво да се мисли, след като там пък решенията си бяха дадени...]):

            // легнал правоъгълник {0,0}{3*h,h}
            var x1 = 0;
            var y1 = 0;
            var x2 = 3 * h;
            var y2 = h;

 

            // изправен правоъгълник {h,h}{2*h,4*h}
            var x3 = h;
            var y3 = h;
            var x4 = 2 * h;
            var y4 = 4 * h;

 

            // от задача 3. вече имаме: (x>=x1&&x<=x2&&y>=y1&&y<=y2), но трябва да махнем всяко =
            // добавяме общата им страна (x>x3&&x<x4&&y==y3), защото се пада вътрешна
            // прилагаме 3. и за изправения и получаваме (x>x3&&x<x4&&y>y3&&y<y4)
            if ((x>x1&&x<x2&&y>y1&&y<y2)||(x>x3&&x<x4&&y==y3)||(x>x3&&x<x4&&y>y3&&y<y4)) Console.WriteLine("Inside");

 

            // и стана време да си вземем кодчето и от зад. 6. за страните
            else if ((((x==x1||x==x2)&&y>=y1&&y<=y2)||((y==y1||y==y2)&&x>=x1&&x<=x2))||(((x==x3||x==x4)&&y>=y3&&y<=y4)||((y==y3||y==y4)&&x>=x3&&x<=x4))) Console.WriteLine("Border");

 

            // и във всички останали случаи точката е отвън
            else Console.WriteLine("outside");

А ето го и кода сглобен: http://pastebin.com/Wt4ipv1t

 

Което само с h ще изглежда така:
            if ((x>0&&x<3*h&&y>0&&y<h)||(x>h&&x<2*h&&y==h)||(x>h&&x<2*h&&y>h&&y<4*h)) Console.WriteLine("Inside");
            else if ((((x==0||x==3*h)&&y>=0&&y<=h)||((y==0||y==h)&&x>=0&&x<=3*h))||(((x==h||x==2*h)&&y>=h&&y<=4*h)||((y==h||y==4*h)&&x>=h&&x<=2*h))) Console.WriteLine("Border");
            else Console.WriteLine("outside");

 

Даже ако си спомням правилно правилата на логическите операции, можем ли например да заместим (x>h&&x<2*h&&y==h)||(x>h&&x<2*h&&y>h&&y<4*h) с (x>h&&x<2*h&&(y==h||(y>h&&y<4*h))) и оптимизация ли е това от гледна точка на компилатора?

П.П. (Моля, следващите редове да не се четат от тези, които нямат време за губене :P )До вчера си пишех домашните от телефона, но почнаха да стават тегави откъм дължина, не за друго... и затова сега се мъча от един нетбук, който е дори с по-малка разделителна способност и не особено по-голям екран...(и по-слаби характеристики) но поне мога да ползвам нормална, а не виртуална клавиатура и адекватен копи/пейст, а не да преписвам като главам, понеже е по-бързо от това да маркираш нещо на телефон, където това въобще е възможно... Но на нито едно от двете не мога да ползвам читав компилатор, даже никакъв всъщност... А не знам дали е добре да си бъзикам с джъджа, след крайния срок за съответното домашно(който ако не греше беше вчера до полунощ, а аз както винаги бях готов едва броени минути преди това...), така че последната модификация само с h-ове не съм я проверявал. Въпреки че няма как да не работи, защото само съм замествал. Но ми е интересно дали съм се омотал в преобразуването на логическите операции в последния пример... та някой който има къде да си поиграе, занимава му се и му е интересно, може да сподели резултатите ако желае ;) Или ще взема да си я принтирам, че да я видя все пак на цял "екран" и аз : ] Но и без това ми се струва, че няма какво повече да се направи, за да се намали кода. А вие как мислите?

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