Loading...
RifatCholakov avatar RifatCholakov 53 Точки

Помощ за задача

Може ли помощ с тази задача, че немога да я реша?

http://i.imgur.com/Kttw90D.png

Това е моето решение:

 

import java.util.Scanner;

/**
 * Created by WinOfficially on 11/10/2016.
 */
public class p13_PointInTheFigure {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);

        double h  = Integer.parseInt(console.nextLine());
        double x = Integer.parseInt(console.nextLine());
        double y = Integer.parseInt(console.nextLine());

        boolean inside1 = (x > 0) && (x < (3 * h)) && (y > 0) && (y < h);
        boolean inside2 = (y > 0) && (y < (4 * h)) && (x > h) && (x < (2 * h));
        boolean outside1 = (x < 0) && (x > (3 * h)) && (y > h) && (y < 0);
        boolean outside2 = (x < h) && (x > (2 * h)) && (y < h) && (y > (4 * h));

        if (inside1 && inside2) {
            System.out.println("inside");
        } else if (outside1 && outside2) {
            System.out.println("outside");
        } else {
            System.out.println("border");
        }

    }
}
Тагове:
0
Programming Basics 11/11/2016 20:32:32
g_todorov avatar g_todorov 106 Точки
Best Answer

Здравей,

сигурно има и по-оптимални решения, но моето работи на 100/100 и сега ще го обясня:

1. Разделяш фигурата на 2 правоъгълника с обща страна

     тоест 3 важни обекта - 2 правоъгълника + 1 общата вътрешна страна и им изчисляваш координатите

за x и y още в самото начало на сорс-кода веднага след конзолните изчитания. Ползваш взаимозависимостта на h, за да получиш координатите на правоъгълниците и вътрешната страна.

2. Внимателно по фигурата чрез координатите очертаваш външните за 2-та правоъгълника страни без 

общата вътрешна част.

3. Тези координати от точка 2 ги поместваш в променливи за по-лесно осмисляне (това са условията за принадлежност на точката xy към страните на правоъгълниците без вътрешната (borders))

4. За всеки от 2-та правоъгълника и за вътрешната гранична страна описваш чрез координатите условията  за принадлежността им към вътрешността на 2-те фигури. Тези условия както и описанието на

вътрешната граничта страна също ги поместваш във пременливи.

5. Правиш If - else конструкция и в нея чрез логически оператори "||" поместваш променливите очертаващи страните на фигурата ако една от тези променливи е вярна Console.WriteLine("border");

ако не else if - за променливите отразяващи всички вътрешни точки на фигурата - съответно Console.WriteLine("inside");

else

Console.WriteLine("outside");

Изчети още веднъж това, което написах и после виж кода ми по-долу, като ще се ориентираш по коментарчетата: И още нещо - пред очите ти трябва да е чертежа иначе трудно ще стане.

Успех :)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

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

            //First Rectangle's Coordinates:
            var x1 = 0;
            var y1 = 0;
            var x2 = 3 * h;
            var y2 = 1 * h;

            //Second Rectangle's Coordinates:
            var x3 = 1 * h;
            var y3 = 1 * h;
            var x4 = 2 * h;
            var y4 = 4 * h;

            //Internal Border's Coordinates For The Rectangles:
            var x5 = 1 * h;
            var y5 = 1 * h;
            var x6 = 2 * h;
            //Borders of The Lower Rectangle:
            var onLeftSide1 = ((x == x1) && (y >= y1 && y <= y2));
            var onRightSide1 = ((x == x2) && (y >= y1 && y <= y2));
            var onBottom1 = ((y == y1) && (x >= x1 && x <= x2));
            var onTopLeft1 = ((y == y2) && (x >= x1 && x <= x3));
            var onTopRight1 = ((y == y2) && (x >= x4 && x <= x2));

            //Borders of The Upper Rectangle Without Internal Border:
            var onLeftSide2 = ((x == x3) && (y >= y3 && y <= y4));
            var onRightSide2 = ((x == x4) && (y >= y3 && y <= y4));
            var onTop2 = ((y == y4) && (x >= x3 && x <= x4));

 

            var internalBorder = ((y == y5) && (x > x5) && (x < x6));

            var insideRectang1 = ((x > x1) && (x < x2) && (y > y1) && (y < y2));

            var insideRectang2 = ((x > x3) && (x < x4) && (y > y3) && (y < y4));

            if (internalBorder || insideRectang1 || insideRectang2)
            {
                Console.WriteLine("inside");
            }
            else if (onLeftSide1 || onRightSide1 || onBottom1 || onTopLeft1 || onTopRight1 || onLeftSide2 || onRightSide2 || onTop2)
            {
                Console.WriteLine("border");
            }
            else
            {
                Console.WriteLine("outside");
            }
        }
    }
}

 

 

0
RifatCholakov avatar RifatCholakov 53 Точки

Благодаря ти много, ама много, ако можех да гласувам бих ти дал вот, но все още нямам 15 точки за да гласувам.

0
g_todorov avatar g_todorov 106 Точки

Много се радвам, че съм помогнал.

Тъй като идвам от друга сфера, където не е прието да се споделят знания, идей (дори се смята за признак на голяма недалновидност кой знае защо) в началото на тоя курс

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

най-яркият пример за това. Признателност на Наков и колектив за създаването на тая атмосфера на обучение, създаваща корелационни връзки между обучаемите и цялостна мотивация.

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