Как сделать цикл какой то математической задачи
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 шт):
Вроде так. Для вычисления факториала понадобится дополнительная функция Вариант 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}");
}
Давайте объясню первую формулу.
Начнем с того, что переменные лучше объявлять там, где происходит их первое использование, если возможно. Так код легче читать. А то представьте, что вы объявили все что нужно в первой строчке кода, а потом прокрутили 2 экрана вниз. И попробуй разберись, что там какого типа. Разобраться конечно можно, но это будет значительно легче сделать, если последовать моему совету.
Второе, есть цикл
for, и есть условиеif. Как они работают, я не буду объяснять, как минимум потому что это очень легко гуглится в огромных количествах. Привыкайте использовать циклforтам, где заранее известно, с чего начинаем, чем заканчиваем, и как изменяется счетчик.whileбольше подходит для проверки состояния чего то типаwhile (IsAlive) { ... }, то есть проверка логической переменной без счетчика, или вообще бесконечный циклwhile (true). А когда нужен счетчик - тамfor.Чтобы узнать четное число или нечетное, можно просто найти остаток от деления на 2, работает это обычно только с целыми числами, ну потому что вещественные числа всегда делятся точно, а не на цело. Вычисляется так
int b = a % 2, то есть если остаток от деления1, число нечетное, ну а что иначе - сами догадайтесь. Следовательно вот такого условия нам будет достаточноif (i % 2 == 0) { ... }, чтобы получить последовательность+-+-+-.Просто для справки: запись
i = i + 2можно кратко записать какi += 2, то же самое с минусом, умножением и делением, я просто буду писать именно так, не удивляйтесь.Дело вкуса, но вместо
Convert.To...(...)я использую<тип>.Parse(...), ну потому что мне так удобнее. СмыслConvertв том, что он умеет переваривать не только строки, но и объекты другого типа (зависит от типа, в который происходит конвертация), а.Parse- только строки.Форматирвоание вывода.
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()), старайтесь избегать транслита в именах переменных, его сложно читать, лучше гуглите как что-то переводится на английский, заодно и слова подучите
