Професионална програма
Loading...
+ Нов въпрос
TeodoraL.Kostadinova avatar TeodoraL.Kostadinova 2 Точки

13. Point in the Figure -задача със звездичка

Здравейте,

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

https://pastebin.com/QvqczffD

Тагове:
0
Programming Basics
fbinnzhivko avatar fbinnzhivko 1585 Точки

using System;

class PointFigure
{
    static void Main()
    {
        var h = int.Parse(Console.ReadLine());
        var x = int.Parse(Console.ReadLine());
        var y = int.Parse(Console.ReadLine());

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

    }
}

Пробвай да реализираш този код на Java.
Пробвай 10 17 20 като входни данни ще разбереш къде ти се чупи логиката.

0
01/04/2017 00:19:24
spzvtbg avatar spzvtbg 581 Точки

https://pastebin.com/Z9x2M8DY така изглежда моето решение на c# но проверките са същите .

първо страна по страна разписах  условието за - "border"

след това в елсиф можеш да направиш проверка за - "outside"

и накрая в елса остава да е -"inside" - дори няма нужда от проверки 

0
aggeorgiev avatar aggeorgiev 326 Точки

Ако искаш да си поправиш собственото решение, първо погледни подробностите за теста, който не минава.

Най-вероятно на границата между двете фигури извеждаш "border" а трябва да бъде "inside", т.е. ако приемем,

че стъпката е 2 линията x2y2-x4y2. Успех.

 

65

0
borkins avatar borkins 47 Точки

За да се улесниш малко, може да подобриш четимостта на кода, като запишеш булевите стойности (true или false) директно в съответните булеви променливи.
Излишно е да се ползва if конструкция, където единствено ще се запише булевия резултат от проверката в променлива.

boolean isInHorizontal = (x > 0 && x < h * 3) && (y > 0 && y < h); // true or false
boolean isInVertical = (x > h && x < h * 2) && (y > 0 && y < h * 4); // true or false

boolean isOutOfHorizontal = (x < 0 || x > h * 3) && y <= h;
boolean isOutOfVertical = ((x < h || x > h * 2) && y > h) || (y < 0 || y > h * 4);

if (isInHorizontal || isInVertical){
    System.out.println("inside");
} else if (isOutOfHorizontal || isOutOfVertical) {
    System.out.println("outside");
} else {
    System.out.println("border");
}

Ето и моя код, който не е много четим, понеже съм прекалил с обединяването на проверките. 

0
01/04/2017 19:50:54
Miroslav_Kisov avatar Miroslav_Kisov 60 Точки

Решение: https://pastebin.com/ZdbNStMz

0
janco76 avatar janco76 1 Точки

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

namespace Point in the Figure 
{
    class Program
    {
        static void Main(string[] args)
        {

            int h = int.Parse(Console.ReadLine());
            int x = int.Parse(Console.ReadLine());
            int y = int.Parse(Console.ReadLine());

            int x1 = 0;
            int y1 = 0;
            int x2 = 3 * h;
            int y2 = h;

            int x3 = h;
            int y3 = h;
            int x4 = 2 * h;
            int y4 = 4 * h;

            bool in_firsFigure = (x > x1) && (x < x2) && (y > y1) && (y < y2);

            bool in_secondFigure = (x > x3) && (x < x4) && (y > y3) && (y < y4);

            bool border = ((x == x1 && y >= y1 && y <= y2) || (x == x2 && y >= y1 && y <= y2)
                        || (x == x3 && y >= y2 && y <= y4) || (x == x4 && y >= y2 && y <= y4)) 
                        || ((y==y1 && x>=x1 && x<=x2) || (y == y2 && x >= x4 && x <= x2) 
                        || (y == y3 && x >= x1 && x <= x3) || (y == y4 && x >= x3 && x <= x4));

            bool obchta_strana = (x >= x3 && x <= x4 && y == y2);

            if (in_firsFigure || in_secondFigure || obchta_strana && !border)

                Console.WriteLine("inside");

            else if (border)

                Console.WriteLine("Border");
                   
            
            else if (!border && !in_firsFigure && !in_secondFigure && !obchta_strana)

                Console.WriteLine("outside");
           
        }
    }
}

0
17/06/2018 17:26:09