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

Тагове:
0
Programming Basics
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 24 Точки

Здравей,

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

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 24 Точки

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

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