Как сделать цикл какой то математической задачи

float x, y, stepen, znam, zna;
Console.Write("Введите данные x=");
x = Convert.ToSingle(Console.ReadLine());
Console.Write("Введите данные y=");
y = Convert.ToSingle(Console.ReadLine());
stepen = 1;
znam = 1;
zna = 2;



while (stepen< 10)
{
    stepen++;
    zna++;
    znam = znam * zna;

    double Z = 1 - Math.Pow(x, stepen) / znam + Math.Pow(y, stepen) / znam - Math.Pow(x, stepen) / znam + Math.Pow(y, stepen) / znam;
    Console.WriteLine(Z);
    Console.ReadKey();

Math.Pow(x, stepen) / znam + Math.Pow(y, stepen) / znam - Math.Pow(x, stepen) / znam + Math.Pow(y, stepen) / znam - чтобы вот эта часть продолжалось пока степень меньше 10, я только начал изучать этот язык, поэтому прошу прощения за возможно очевидные ошибки. а сама фукнция выглядит как на картинке. вариант 6

постановка задачи


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

Автор решения: KennY 3

Вроде так. Для вычисления факториала понадобится дополнительная функция Вариант 6

    static int GetFactorial(int n)
    {
        if (n == 0)
        {
            return 1;
        }
        else
        {
            return n * GetFactorial(n - 1);
        }
    }
    static void Main(string[] args)
    {
        Console.WriteLine("Введите X: ");
        double x = double.Parse(Console.ReadLine());
        Console.WriteLine("Введите Y: ");
        double y = double.Parse(Console.ReadLine());
        Console.WriteLine("Введите длину ряда: ");
        int n = int.Parse(Console.ReadLine());
        double z = 0;

        for (int i = 1; i<=n; i++)
        {
            if (i % 2 == 1)
                z += (Math.Pow(y, i-1)) / GetFactorial(i);
            else
                z -= (Math.Pow(x, i-1)) / GetFactorial(i);
        }
        Console.WriteLine($"Z = {z}");
    }

P.S. Вариант 2 (пусть будет) :)

static void Main(string[] args)
        {
            Console.WriteLine("Введите X: ");
            double x = double.Parse(Console.ReadLine());
            Console.WriteLine("Введите Y: ");
            double y = double.Parse(Console.ReadLine());
            Console.WriteLine("Введите длину ряда: ");
            int n = int.Parse(Console.ReadLine());

            double Z = 0;
            for (int i = 0; i<n; i++)
            {
                if (i % 2 == 0)
                    Z += (Math.Pow(y, i) / ((i + 1) * (i + 3) * (i + 5)));
                else
                    Z += -1*(Math.Pow(x, i) / ((i + 1) * (i + 3) * (i + 5)));
            }
            Console.WriteLine($"Z = {Z}");
        }
→ Ссылка
Автор решения: aepot

Давайте объясню первую формулу.

  1. Начнем с того, что переменные лучше объявлять там, где происходит их первое использование, если возможно. Так код легче читать. А то представьте, что вы объявили все что нужно в первой строчке кода, а потом прокрутили 2 экрана вниз. И попробуй разберись, что там какого типа. Разобраться конечно можно, но это будет значительно легче сделать, если последовать моему совету.

  2. Второе, есть цикл for, и есть условие if. Как они работают, я не буду объяснять, как минимум потому что это очень легко гуглится в огромных количествах. Привыкайте использовать цикл for там, где заранее известно, с чего начинаем, чем заканчиваем, и как изменяется счетчик. while больше подходит для проверки состояния чего то типа while (IsAlive) { ... }, то есть проверка логической переменной без счетчика, или вообще бесконечный цикл while (true). А когда нужен счетчик - там for.

  3. Чтобы узнать четное число или нечетное, можно просто найти остаток от деления на 2, работает это обычно только с целыми числами, ну потому что вещественные числа всегда делятся точно, а не на цело. Вычисляется так int b = a % 2, то есть если остаток от деления 1, число нечетное, ну а что иначе - сами догадайтесь. Следовательно вот такого условия нам будет достаточно if (i % 2 == 0) { ... }, чтобы получить последовательность +-+-+-.

  4. Просто для справки: запись i = i + 2 можно кратко записать как i += 2, то же самое с минусом, умножением и делением, я просто буду писать именно так, не удивляйтесь.

  5. Дело вкуса, но вместо Convert.To...(...) я использую <тип>.Parse(...), ну потому что мне так удобнее. Смысл Convert в том, что он умеет переваривать не только строки, но и объекты другого типа (зависит от типа, в который происходит конвертация), а .Parse - только строки.

  6. Форматирвоание вывода. double и float поддерживают особые правила форматирования, о которых можно почитать здесь. Попробуйте сами разобраться, что значит F3 в коде ниже.

Для разнообразия, я взял первую формулу из вашей таблицы - Вариант 1.

static void Main(string[] args)
{
    Console.Write("Введите x = ");
    double x = double.Parse(Console.ReadLine());
    Console.Write("Введите y = ");
    double y = double.Parse(Console.ReadLine());
    Console.Write("Введите n = ");
    int n = int.Parse(Console.ReadLine());

    double j = 0;
    for (int i = 1; i <= n; i++)
    {
        double k = i * 2 - 1; //1..3..5...7
        if (i % 2 == 0)
        {
            j += Math.Pow(Math.Sin(Math.Pow(x, i)), k + 2) / (k * (k + 2));
        }
        else
        {
            j -= Math.Pow(Math.Sin(Math.Pow(y, i)), k + 2) / (k * (k + 2));
        }
    }
    Console.WriteLine($"j = {j:F3}");
}

Ну и все остальные формулы у вас аналогичные, не сложнее, не легче.

P.S. По-английски "степень" будет "power" (поэтому кстати Math.Pow()), старайтесь избегать транслита в именах переменных, его сложно читать, лучше гуглите как что-то переводится на английский, заодно и слова подучите

→ Ссылка