Loading...
lyubamarinova avatar lyubamarinova 14 Точки

Проблем със задача Point on Rectangle Border

Здравейте,

Имам следния проблем с тази задача:

Напишете програма, която проверява дали точка {x, y} се намира върху някоя от страните на правоъгълник {x1, y1} – {x2, y2}. Входните данни се четат от конзолата и се състоят от 6 реда: десетичните числа x1, y1, x2, y2, x и y (като се гарантира, че x1 < x2 и y1 < y2). Да се отпечата “Border” (точката лежи на някоя от страните) или “Inside / Outside” (в противен случай).

Моето решение е следното , но системата ми дава 83 точки само ?!

РЕШЕНИЕ

Mъчих се какво ли не да правя , но не мога да открия какъв е проблемът. :(

1
Programming Basics 14/05/2016 10:04:10
Filkolev avatar Filkolev 4482 Точки

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

1
lyubamarinova avatar lyubamarinova 14 Точки

Пробвах с ето това , то не е също изцяло вярно , дава ми 94/100.

КОД

0
14/05/2016 10:02:15
Filkolev avatar Filkolev 4482 Точки

Пак опираме до въпроса какво се случва ако точката е в ъгъл. Ще влезеш ли в някой от иф-овете? Няма как, понеже твоите проверки са дали си точно и само на една от четирите рамки, но ако си в ъгъл (върху две едновременно) няма проверка, която да го хване това.

0
life_84 avatar life_84 5 Точки

Здравей.Аз също пробвах,на  Visual Studio работи ,но judge не дава 100%.Ето линк и сам сравни къде грешиш http://pastebin.com/2EHz7uDu.

0
14/05/2016 10:00:47
fiherLuci avatar fiherLuci 225 Точки

http://pastebin.com/NZHZxtpy

Ето го решението ,но за вбъдеще натискаш Details и ако не е изпит можеш да видиш входните данни и изхода (на изпит не можеш) и  после си въвеждаш входните данни и почваш да дебъгваш да видиш къде ти се чупи кода .

1
14/05/2016 09:59:50
borislav9212 avatar borislav9212 745 Точки

Незнам защо почвате да търсите първо “Border” ,Като е дадено да се намери “Border” , това не означава,че от него трябва да се започне. Лично на мен ми е много по лесни да намеря дали точката е “Inside / Outside” , ако не значи е “Border”.

 if ((x > x1 && x < x2 && y > y1 && y < y2) || ((x < x1 || y < y1 || x >x2 || y > y2)))

  Console.WriteLine("Inside / Outside");
  else
  Console.WriteLine("Border");

5
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

Оригинално. Бях стигнал до 94%, но с твоята идея достигнах 100%.

1
sis44o avatar sis44o 5 Точки

Много чисто и лесно решение, Borislav9212.
Благодаря!
И аз бях зациклила на тази задача... но твоята гледна точка ми отвори очите...

1
svetlyoek avatar svetlyoek 20 Точки

Добре де,как на мен ми дава 27/100 с това решение?

0
Perss avatar Perss 7 Точки

Грешката ти е ,че вместо else if си вложил if и за това не ти изписва бордер, тъй като за вложени ифове трябва условията да бъдат true. Другото което е ,че на вместо по-голямо или равно си написал само по-голямо/ по-малко там където казваш y да е между y1 и y2. Ето фискнах ти кода :

using System;

class program
{
    static void Main()
    {

        double x1 = double.Parse(Console.ReadLine());
        double y1 = double.Parse(Console.ReadLine());
        double x2 = double.Parse(Console.ReadLine());
        double y2 = double.Parse(Console.ReadLine());
        double x = double.Parse(Console.ReadLine());
        double y = double.Parse(Console.ReadLine());

        if (((x == x1) && (y >= y1 && y <= y2)) || ((x == x2) && (y >= y1 && y <= y2))) {
            Console.WriteLine ("Border");
        } else if (((y == y1) && (x > x1 && x < x2)) || ((y == y2) && (x > x1 && x < x2))) {
            Console.WriteLine ("Border");
        }
        else
        {
            Console.WriteLine("Inside / Outside");
        }
    }
}

 

Това пък е моят код:

using System;

class program
{
    static void Main()
        {
            double x1 = double.Parse (Console.ReadLine ());
            double y1 = double.Parse (Console.ReadLine ());
            double x2 = double.Parse (Console.ReadLine ());
            double y2 = double.Parse (Console.ReadLine ());

            //user
            double x = double.Parse (Console.ReadLine ());
            double y = double.Parse (Console.ReadLine ());

            if (x1<x2 && y1<y2) {
                if ((x == x1  || x == x2) && (y <= y2 && y >= y1) || (y == y1 || y == y2) && (x < x2 && x > x1)) {
                    Console.WriteLine("Border");
                }
                else {
                    Console.WriteLine("Inside / Outside");
                }
            }
        }
    }

 

0
16/06/2016 17:04:20
nikolayy avatar nikolayy 0 Точки

Здравейте, темата е малко стара, но съвпада с моя проблем и затова реших да пиша тук.

Ето го и моят код https://pastebin.com/XaH5wkeJ, дава ми 77т. в Judge, това е максимума който постигнах. Вече 1ч го гледам и немога да си открия грешката. Помощ!!!  

 

0
27/05/2017 18:00:09
spzvtbg avatar spzvtbg 581 Точки

ето заповядаи https://pastebin.com/8SCGwNmD

0
RosenDobrev avatar RosenDobrev 0 Точки

https://pastebin.com/xCKsDapK Ето с една проверка и с много логически операции как се решава, ако някой има затруднения.

0
krum_43 avatar krum_43 756 Точки

Както е коментирал колегата при вторите проверки ти липсва знакът "=".

Интересното е ,че при първата проверка си сложил ""="",а при втората не си.

Задачата е малко или много е математическа,а в математиката има симетрия.

Не е логично на едното место да има "=",а на другото да няма.

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