Лекция 2. Въпрос към домашно за задача 13


2

using System;

namespace ComparingFloats
{
    class Program
    {


        static void Main()
        {
            Console.WriteLine("Enter number");
            double a = double.Parse(Console.ReadLine());
            Console.WriteLine("Enter second num");
            double b = double.Parse(Console.ReadLine());
            bool equal = Math.Abs(a - b) < 0.000001;
            if (a < b)
            {
                Console.WriteLine(false);
            }


            else if (a == b)
            {
                Console.WriteLine(true);
            }
        }
    }
}

Тъй като стартирам кода във Вижуал Студио и тръгва, а в БГ кодер ми дава 0 точки не мога да разбера къде греша и бихте ли могли да ми помогнете?

    



Отговори



1

Махни Console.WriteLine("Enter number"); и  Console.WriteLine("Enter second num"); .  BgCoder  не разбира от user friendly text. Очаква само и единствено това, което е зададено по условие. Отделно от това в проверката трябва да ти е  

            if (equal == false)
            {
                Console.WriteLine("false");
            }
            else
            {
                Console.WriteLine("true");
            }


от milislavski (886 точки)


1

Даже тук може :

 if (equal ) 
  {
       Console.WriteLine("true");
  }
 else

  {
       Console.WriteLine("false");

  }

Променливите от тип bool са байдефо false, но в слуая е имплиментирана и можем да проверим дали е вярна и по този начин :)


от desislavaaaa (1190 точки)


3

Привет,

Махни Console.WriteLine-ите, тъй като ти изкарва output на конзолата, и от теста не минава.
Също така за условието на if сложи булевата променлива equal. В случая ще стане: 

if (equal)

{

     Console.WriteLine(true);
} else 
     Console.WriteLine(false);

В твоя код не използваш булевата променлива, която си получил

от BoykoBonev (125 точки)


1

Аз имам същият проблем. Махнах всички Console.WriteLine(); но пак Bgcoder ми дава 0 точки. Това е кода ми:

static void Main()
    {
    
        double number1 = double.Parse(Console.ReadLine());
        double number2 = double.Parse(Console.ReadLine());
        double deduction = number1 - number2;
        deduction = Math.Abs(deduction);
        if (deduction < 0.000001)
        {
            Console.WriteLine(true);
        }
        else
        {
            Console.WriteLine(false);
        }

    }

Ако може някои да ми каже къде греша. Благодаря предварително.




1
true и false ги сложи в двойни кавички, и би трябвало да тръгне :)

от milislavski (886 точки)

0
Подаваш true и  false като стрингове, обаче не ги имплементираш като такива.Стринга се пише в кавички както е казал колегата.

от desislavaaaa (1190 точки)


1

Кода ми е доста подобен на твоя, хвърли един поглед. Мисля, че може да се прескочи закръглянето на числата предварително, но съм си го написал така или иначе. И реално в"if" съм сложил това, което ти сложил в"bool". Правилни идеи, просто трябва само до изкусуряване за БГ Кодера-а.

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

namespace hW2ByDido
{
    class t2ndBgCoderSolution
    {
        static void Main(string[] args)
        {
            double double1 = double.Parse(Console.ReadLine());
            double double2 = double.Parse(Console.ReadLine());

            Math.Round(double1, 6);
            Math.Round(double2, 6);
        
          
            if (Math.Abs(double1 - double2) <= 0.000001)

            {
                Console.WriteLine("true");
            }

            else
            {
                Console.WriteLine("false");
            }
            
        }
    }
}


от Dido_Aint (577 точки)


1

Препоръчвам ти да махнеш:

   - всички using-и и да оставиш само using System. Другите не са необходими

    - namespace - са също е излишен

    - закръглянето не е необходимо

Като допълнителен съвет:

    - давай по-смислени имена на променливите. double1 и double2 не са добри имена. По-добре е да напишеш а и b.


от tzigy (15 точки)

1

Здравейте, аз имам също проблем при тази задача, но моята мисля, че е правилна. Проблема ми е с БГ Кодер.

Това е моят код:

        

using System;

class CompareFloatingPointNumbers
{
    static void Main()
    {

        double fn = double.Parse(Console.ReadLine());
        double sn = double.Parse(Console.ReadLine());
        float cons = 0.000001f;
        bool check = (Math.Abs(fn - sn) < cons);
        Console.WriteLine(check);

    }
}

Доколкото разбирам кода е верен, но не мога да разбера следното - 

Въпрос ми е как мога да променя T/F (True/False) да излизат с малко t/f (true/false), така че да ми го зачете в БГ кодера ?


от Sv3tki6 (55 точки)



1

Полудях 2 дена само на тази задача стоя и не мога да я подкарам в БГкодера. Реших задачата по 100 начина, че дори и повече. За тези които още не могат да я пуснат в БГкодер и да им даде 100 точки това е решението което прие при мен:

using System;

namespace ComparingFloats
{
    class Program
    {
        static void Main()
        {

            double a = double.Parse(Console.ReadLine());
            double b = double.Parse(Console.ReadLine());
            double deduction = a - b;
            deduction = Math.Abs(deduction);
            if (deduction < 0.000001)
            {
                Console.WriteLine("true");
            }
            else
            {
                Console.WriteLine("false");
            }
        }
    }
}




1
Олее, сърдечно благодаря! Чудех се какво да променя.



1

Привет, 

ето един вариант за решаване на тази задача. Тук правя кънвъртвам числата на стрингове и ги форматирам и после отново ги парсвам на double. След което ги сравнявам. От кода ще се разбере по-добре.

using System; using System.Globalization; using System.Threading; class ComparingFloats { static void Main() { Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; double a = double.Parse(Console.ReadLine()); double b = double.Parse(Console.ReadLine()); a = double.Parse(a.ToString("F6")); b = double.Parse(b.ToString("F6")); if (a == b) { Console.WriteLine("true"); } else { Console.WriteLine("false"); } } }


от IvanAngelov (140 точки)


1

Ето и от мен едно малко по-дълго, но все пак работещо решение :). Първоначално го бях направил с double, но нещо не ми излизаха сметките (така и не разбрах защо) и като сложих decimal всичко си излезе както трябва.

using System;

class ComparingFloats
{
    static void Main()
    {
        decimal firstNumber = decimal.Parse(Console.ReadLine());
        decimal secondNumber = decimal.Parse(Console.ReadLine());
        decimal eps = 0.000001M;
        decimal numbers;
        if (firstNumber > secondNumber)
        {
            numbers = firstNumber - secondNumber;
        }
        else
        {
            numbers = secondNumber - firstNumber;
        }
        if (numbers > eps || numbers == eps)
        {
            Console.WriteLine("false");
        }
        else
        {
            Console.WriteLine("true");
        }
    }
}


от petropavlov (70 точки)


0
Прецизноста на decimal е по-голяма(28-29) от double(15-16), при взимане на число с точност след десетичната запетая.

от desislavaaaa (1190 точки)

1
Това ми е ясно, но гледам, че колегите са се справили и с double :) затова ми е чудно.

от petropavlov (70 точки)


1
Колеги, аз пък имам още по-различен проблем. След дълго мислене върху тази задача в крайна сметка я реших и  в BGCoder  ми даде точките, но във Visual Studio на конзолата не ми излиза нито true , нито false. Откъде може да е проблема според вас ?

от cosmic (267 точки)


2
Дай кода, ако обичаш

от orlindraganov (120 точки)

0

using System;

class Program
{
static void Main()
{

double a = (double.Parse(Console.ReadLine()));
double b = (double.Parse(Console.ReadLine()));

double eps = 0.000001;

double difference = Math.Abs(a - b);

if (difference < eps)

{

Console.WriteLine("true");

}

else

{

Console.WriteLine("false");

}

}

}


от cosmic (267 точки)