Как вывести абсолютную погрешность, 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), в коде есть следующие ошибки:
- После объявления цикла Вы сразу же ставите точку с запятой, тем самым не давая циклу собственно выполнять код в фигурных скобках;
- Ввиду особенностей области видимости переменных переменная
zпросто так не увидится, особенно если она до этого была не проинициализирована. Я предлагаю, например, в самом начале добавитьz=0; - Конструкция
k = k++не сработает, ибо она игнорирует++постфиксное и по сути присваиваетkсаму себя. Простоk++вполне достаточно; - Функция
WriteLine()не работает так, как в C, здесь нужно при подстановке переменных писать что-то типаConsole.WriteLine("{0}", a)илиConsole.WriteLine("{a}"); - Я не знаю, с какими именно данными работать, так что у меня всё заработало при смене условия выхода из
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);
}
}
}