Как вывести абсолютную погрешность, fabs не работает?

using System;
namespace ConsoleApplication1
{
    class Program
    {

        static void Main(string[] args)
        {
            double a, b, x, y, z, h, d,k;
            Console.Write("a=");
            a = double.Parse(Console.ReadLine());
            Console.Write("b=");
            b = double.Parse(Console.ReadLine());
            Console.Write("h=");
            h = double.Parse(Console.ReadLine());
            Console.Write("d=");
            d = double.Parse(Console.ReadLine());

            for (x = a; x <= b; x += h) ;
            {
                k = 1;
                z = 0;
                do
                {
                    y = k * Math.Pow(x, k);
                    z = z + y;
                    k = k++;
                } while (fabs(y) > d);
            }
            Console.WriteLine("x = %f \t", x);
            Console.WriteLine("z = %f \n", z);
        }  
    }
}

Ответы (1 шт):

Автор решения: 4500zenja

Помимо того, что функции fabs() в C# нет (есть Abs), в коде есть следующие ошибки:

  1. После объявления цикла Вы сразу же ставите точку с запятой, тем самым не давая циклу собственно выполнять код в фигурных скобках;
  2. Ввиду особенностей области видимости переменных переменная z просто так не увидится, особенно если она до этого была не проинициализирована. Я предлагаю, например, в самом начале добавить z=0;
  3. Конструкция k = k++ не сработает, ибо она игнорирует ++ постфиксное и по сути присваивает k саму себя. Просто k++ вполне достаточно;
  4. Функция WriteLine() не работает так, как в C, здесь нужно при подстановке переменных писать что-то типа Console.WriteLine("{0}", a) или Console.WriteLine("{a}");
  5. Я не знаю, с какими именно данными работать, так что у меня всё заработало при смене условия выхода из do-while: while (fabs(y) < d);

Исходя из этого, примерно хоть какая-то да работающая программа ниже. Я не знаю, соответствует ли она условию задачи или нет, ибо его в условии не было прописано, но, если вкратце: дело было далеко не в fabs()...

using System;
namespace ConsoleApplication1
{
    class Program
    {

        static void Main(string[] args)
        {
            double a, b, x, y, z=0, h, d,k;
            Console.Write("a=");
            a = double.Parse(Console.ReadLine());
            Console.Write("b=");
            b = double.Parse(Console.ReadLine());
            Console.Write("h=");
            h = double.Parse(Console.ReadLine());
            Console.Write("d=");
            d = double.Parse(Console.ReadLine());

            for (x = a; x <= b; x += h)
            {
                k = 1;
                do
                {
                    y = k * Math.Pow(x, k);
                    z = z + y;
                    k++;
                } while (Math.Abs(y) < d);
            }
            Console.WriteLine("x = {0} \t", x);
            Console.WriteLine("z = {0} \n", z);
        }  
    }
}
→ Ссылка