Софтуерно Инженерство
Loading...
+ Нов въпрос
Tanina80 avatar Tanina80 11 Точки

Домашно C# - 4.06. "По-сложни проверки" - Point on Rectangle Border

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

Тази задача нещо явно не мога да я проумея ... дава ми постоянно грешки в джъдж ... и освен тикчета и кръстчета дава даже и звездички:

Това е кода:

http://pastebin.com/fRFJq48E

Тагове:
borislav9212 avatar borislav9212 745 Точки

Първо трябва да си направиш входните данни на "double". След това правиш една " if " проверка за "Inside / Outside" -> else -> "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");

0
Tanina80 avatar Tanina80 11 Точки

Мерси за отговора. Не знаех, че може така да се декларират два if-a в един. Пробвах и нещо подобно... Явно, че днес цял ден ще цикля на тази задача. 

0
t_zhelev avatar t_zhelev 26 Точки

Здравей,

След като прегледах кода, ще се опитам да дам максимално добро обяснение къде са ти грешките :)

1. като се гарантира, че x1 < x2 и y1 < y2 - това означава, че входа е задължително такъв и няма нужда да правиш тази проверка

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

3. Проверките за по-голямо и по-малко, трябва да включват и равно, понеже може точката да е на върха на правоъгълника, което пак изпълнява условието да е на някоя от страните

4. Ако точката е вътре в правоъгълника винаги ти се изпълнява единия от иф-овете които проверява дали е на страна от него, следователно ако точката е вътре никога не стига до else който да го отпечата. Според мен най-лесно е да комбинираш двата иф-а които проверяват дали е на страна в един тоест - ((y == y1 || y == y2) && (x >= x1 && x <= x2))  проверява дали е на някоя от страничните страни :)

0
Tanina80 avatar Tanina80 11 Точки

Най-накрая успях по обикновенния начин ... само с if else без сложни if- ове. Лошото на този метод май е че задължително трябва да знаеш от къде трябва да започнеш. Ако не ми беше наблегнал на това, че изпълнието на първата проверка ми спира проверките дали точката е вътре в правоъгълника, нямаше да се сетя да тръгна от там, за да изпише всички варианти. 

http://pastebin.com/MPmXRtmX

0
t_zhelev avatar t_zhelev 26 Точки

Сега изглежда добре. Принципно може да съкратиш кода, като обединиш някой от проверките

x >= x1 && x <= x2 && y == y1 и x >= x1 && x <= x2 && y == y2 може да стане x >= x1 && x <= x2 && (y == y1 || y == y2)

И все пак и ти както си го записала е добре, понеже не е хубаво да се правят чак толкова сложни условни оператори, за да спестим има няма 2 реда :)

0
29/06/2016 10:28:49