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

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

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

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

http://pastebin.com/8dsu3esN

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

Тагове:
0
Programming Basics
dilqna9 avatar dilqna9 44 Точки

Ето ти моето решение

 

using System;

namespace PointInTheFigure
{
    class Program
    {
        static void Main()
        {
            var h = int.Parse(Console.ReadLine());
            var x = int.Parse(Console.ReadLine());
            var y = int.Parse(Console.ReadLine());
            string result = "";

            if ((x > 0 && x < (3 * h) && y > 0 && y < h))
            {
                result = "inside";
            }
            else if ((x > h && x < (2 * h) && y >= h && y < (4 * h)))
            {
                result = "inside";
            }
            else if (!(x >= 0 && x <= (3 * h) && y >= 0 && y <= h) && !(x >= h && x <= (2 * h) && y >= h && y <= (4 * h)))
            {
                result = "outside";
            }
            else
            {
                result = "border";
            }
            Console.WriteLine(result);
        }
    }
}

0
bepcho avatar bepcho 1 Точки

Значително по-чисто и прегледно, благодаря, но защо моето не сработва на 100 не мога да го измисля :(

0
dilqna9 avatar dilqna9 44 Точки
  1. Едната грешка е тук

  2. if (x > 0 && y > 0 && x < 3 *h && y < h || x > h && x < 2 *h && y > =h && y < 4 * h)

  3.         {

  4.             Console.WriteLine("inside");

  5.         }

0
bepcho avatar bepcho 1 Точки

Всъщност ти си добавила едно равно да и има логика защото там съ вътре все още

0
07/07/2016 23:12:15
Tanina80 avatar Tanina80 11 Точки

Не ти ли изписва точно за кое ти взима 5 точки?

От това, което виждам впечатление ми прави, че в проверката всичко ти е записано едно след друго ...едно след друго ... Пробвай да ги отделиш със скоби ...примерно:

 ((условията, при които точката се пада на лявата страна) || (условията, при които точката се пада на дясната страна) || ... и т.н.)

 

А и май никъде не правиш проверка за общата им граница на двата правоъгълника ... за участъка между ( h < x < 2*h) && y == h. Там ти отпечатва, че е "outside", трябва да имаш изход "inside"

 

Пробвай да добавиш между първи и втория if това:

else if(x>h&&x<2*h&&y==h) Console.WriteLine("inside");

0
07/07/2016 23:32:41
borislav9212 avatar borislav9212 745 Точки

Четири проверки не ти влизат във втория "if", очаква се изхода да е border, а при теб е outside. Успях да ги докарам до 97 -> http://pastebin.com/LqgxWLLw оставт още две проверки -> 10,4,10 и 10,27,10

0
07/07/2016 23:19:08
Plamen27 avatar Plamen27 599 Точки

Здравей,

ето фикса на твоя код:

http://pastebin.com/gsfzgeqe

На 2 вместа имаш грешки:

1/ условието на inside направо го пренаписах

2/ в border имаше случайно написано && вместо ||

Сложил съм коменти където има фиксове в кода.

2
07/07/2016 23:18:28
bepcho avatar bepcho 1 Точки

Тъкмо и аз това загледах сега, и се замислих защо съм го сложил "и". Вече е 100/100.

Благодаря на всички за помощта :)

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