"C# Fundamentals 2011/2012 Part 1 / Problem 1 - Math Expression


0
Решавам задача Problem 1 - Math Expression , дава ми 20 / 100,
къде бъркам ?
 
using System;
 
class Program
{
    static void Main()
    {
        double n = double.Parse(Console.ReadLine());
        double m = double.Parse(Console.ReadLine());
        double p = double.Parse(Console.ReadLine());
 
        double firstLine = n * n +(1 / (m * p)) + 1337;
        double secondLine = (n - (128.523123123 * p));
        double result = ((firstLine / secondLine) + (Math.Sin((int)m) % 180));
 
        Console.WriteLine("{0:F6}",result);
 
    }
}
 



Отговори



0
using System;
class Program { static void Main() { double m, n, p; double sinus; double result; int mod;
n = double.Parse(Console.ReadLine()); m = double.Parse(Console.ReadLine()); p = double.Parse(Console.ReadLine());
result = (n * n + (1.0 /(m * p)) + 1337.0); result /= n - (128.523123123 * p);
mod = (int)m % 180;
sinus = Math.Sin(mod);
result += sinus; Console.WriteLine("{0:F6}",result); } }

от sirjordan (67 точки)


0

Като че ли е заради многото скоби. 

        double firstLine = n * n +1 / (m * p) + 1337;
        double secondLine = n - (128.523123123 * p);
        double result = firstLine / secondLine + (Math.Sin((int)m % 180));
Така изкарва 100/100

от l_filipov (0 точки)


0
И аз стигнах до същото заключение.

от toshkin (433 точки)

0
Благодаря много !!!

от koko_9898 (208 точки)



0
Грешката ти е, че смяташ целия синус в int. Първо се прави делението в int и после се смята синуса в double. Ето така:
int modvalue = ((int)m) % 180;
double sin = Math.Sin(modvalue);
И хора стига копирахте така код!

от wooden_jesus (2128 точки)


3

Обикновено в такива задачи грешките по-лесно се откриват, ако изчисленията се разбият на няколко отделни изрази.

Ето аз как съм го направила например (имам 100/100):

using System;
using System.Globalization;
using System.Threading;
 
class MathExpression
{
    static void Main()
    {
        Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
        double n = double.Parse(Console.ReadLine());
        double m = double.Parse(Console.ReadLine());
        double p = double.Parse(Console.ReadLine());
 
        double nSquare = n * n;
        double intermediateExpression = 1 / (m * p);
        int constant1 = 1337;
        double constant2 = 128.523123123;
        double result;
        double div1 = nSquare + intermediateExpression + constant1;
        double div2 = n - (constant2 * p);
        int mod = (int)(m % 180);
 
        result = div1 / div2 + Math.Sin(mod);
 
        Console.WriteLine("{0:F6}", result);
    }
}

от ilina (310 точки)


0
А може ли някой да ми обясни защо кастваме стойността на синуса в int??
(int)(Math.Sin(m%180))

от MarVel (93 точки)


0
това е грешно. Виж отговора на wooden_jesus два коментара по-горе. Добре е да четете преди да питате :)

от wnvko (3123 точки)

0
Както вече споменаха, cast-ването към целочислена стойност се извършва не върху целия израз, а само върху числото M. Нужно е и двата операнда да са с целочислена стойност, за да получим цяло число като резултат, а по условие се изисква именно това. Ето какво гласи и самото условие:
Here are some examples for how the mod operator should work: • 5 mod 2 = 1 • 5.99 mod 3 = 2 • 6 mod 3 = 0
В случай, че поне едно от числата е с дробна(десетична) част, то и резултатът ще е дробно число.

от zhulien (785 точки)