[C#] Домашно Operators-and-Expressions- 10. Point, Circle, Rectangle. double/float


1

Привет!

В BGCoder задачата не минава тест #9, когато използвам double. Смених типът данни на float и този тест #9 минава (други два теста гърмят (тест #1 и тест #5), но най-вероятно заради точността). Интересно ми е какво кара този тест да минава с float, пък с double - не.

Поздрави.




Отговори



3

Аз използвам double и минава всички тестове. И аз мисля, че когато смениш с float, не минаваш другите тестове заради точността. Но според мен проблемът ти с тест 9 не е бил заради типа double, а самото решение. Погледнах го бегло, още не мога да открия къде има пропуск, но решението ти ми се струва ненужно дълго.

Ето моето решение, дано ти е от полза:

using System;

  class PointCircleRectangle
   {
    static void Main(string[] args)
     {
      double x = double.Parse(Console.ReadLine());
      double y = double.Parse(Console.ReadLine());
      double point = Math.Sqrt((x-1) * (x-1) + (y-1) * (y-1));
      bool isInCircle = (point <= 1.5);
      bool isOutsideRectangle = (x < -1 || x > 5 || y > 1 || y < -1);
      if ((isInCircle == true) && (isOutsideRectangle == true))
        {
          Console.WriteLine("{0} {1}", "inside circle", "outside rectangle");
        }
        else
          if ((isInCircle == true) && (isOutsideRectangle == false))
           {
            Console.WriteLine("{0} {1}", "inside circle", "inside rectangle");
           }
         else
          if ((isInCircle == false) && (isOutsideRectangle == true))
           {
            Console.WriteLine("{0} {1}", "outside circle", "outside rectangle");
           }
           else
            {
             Console.WriteLine("{0} {1}", "outside circle", "inside rectangle");
            }
     
        }
    }


от Pepi.Ka (922 точки)


1

Здравей,

при мен си работи с double, но с по-различно решение. Double имат повече знаци след десетичната запетая, предполагам е логично да се увеличи опасността от грешка, но защо пък при мен работи?! Ето го и кода ми (съжалявам, че го споделям така, но още навлизам в github и ми отнема прекалено много време):

using System;

class Program
{
    static void Main()
    {
        double x = double.Parse(Console.ReadLine());
        double y = double.Parse(Console.ReadLine());
        double distance = Math.Sqrt(((x-1) * (x-1)) + ((y-1) * (y-1)));
        bool circle = (1.5 >= distance);
        bool square = ((x >= -1) && (x <= 5)) && ((y >= -1) && (y <= 1));

        if ((circle == true) & (square == true))
        {
            Console.WriteLine("inside circle inside rectangle");
        }
        if ((circle == true) & (square == false))
        {
            Console.WriteLine("inside circle outside rectangle");
        }
        if ((circle == false) & (square == true))
        {
            Console.WriteLine("outside circle inside rectangle");
        }
        if ((circle == false) & (square == false))
        {
            Console.WriteLine("outside circle outside rectangle");
        }
    }
}


от Milen_Tanev (180 точки)


0

здравей,

понеже имам проблеми и аз с тази задача, а твоето решение ми се струва доста разбираемо искам само да попитам защо вадиш от x и y -1?

 double distance = Math.Sqrt(((x-1) * (x-1)) + ((y-1) * (y-1)))


от eeeyore7 (0 точки)

0

в условието е казано, че

the circle K({1, 1}, 1.5), тоест център на окръжността е с координати 1,1 и радиус 1.5, тоест

когато извадиш от х ( това е х на търсената точка) 1, получаваш отместването по х на търсената точка спрямо центъра на окръжността. Същото важи за y. Ако център беше на 3,4 то тогава щеше да напишеш x-3, y-4

успех!


от mitkop (578 точки)



1

хубаво е да е double, защото като BGCoder тества с по-големи числа и ще дава грешка, заради точност.

Освен това може да се опрости

double x = double.Parse(Console.ReadLine());
      double y = double.Parse(Console.ReadLine());
      double point = Math.Sqrt((x-1) * (x-1) + (y-1) * (y-1));
      bool isInCircle = (point <= 1.5);
      bool isInRectangle = (x >= -1 && x =< 5 && y =< 1 && y >= -1);


      if (isInCircle) // когато използваш boolean, не е нужно да я сравняваш - тя е false или true
              Console.Write("inside circle ");
      else // ясно е че ако не е вярно че е вътре - то означава че е вън
              Console.Write("outside circle "); // използвай Console.Write, за да не пренесе на нов ред

      if (isInRectangle)
              Console.WriteLine("inside rectangle");
      else
              Console.WriteLine("outside rectangle");

успех!
        


от mitkop (578 точки)


1
Благодаря за предложението за опростяване. Писах ги толкова подробно, защото не ми хрумна, че с Console.Write ще стане както трябва, ще ми бъде полезно наистина.

от Milen_Tanev (180 точки)