Консультация № 161190
23.02.2009, 14:31
0.00 руб.
23.02.2009, 14:43
0 7 3
Программирования на C#
Даны натуральное n, действительное x. Вычислить sin x+ sin x^2+ sin x^3 +...+ sin x^n.
Не могу найти ошибку, помогите.

private void button1_Click(object sender, EventArgs e)
{
int n, i;
double s, x, cur;
double power, res;
x = Convert.ToDouble(textBox1.Text);
n = Convert.ToInt32(textBox2.Text);
s = 0;
res = x;
for (i = 2; i < n; i++)
{
res = res * x;
}
power = res;

for (i = 1; i < n; i++)
{
cur = Math.Asin(power(x, i));
}
s = s + cur;

label1.Text = Convert.ToString(s);
}

Обсуждение

Неизвестный
23.02.2009, 14:51
общий
23.02.2009, 14:59
это ответ
Здравствуйте, Newnata89!

Если power в строчке
cur = Math.Asin(power(x, i));
вырешивает х в i-той степени, то надо бы поставить s = s + cur; в тело for(;;), т.е. так:
for (i = 1; i <= n; i++)
{
cur = Math.Asin(power(x, i));
s = s + cur;
}
иначе вы после окончания for присвоили s последний элемент cur, который равняяется sin x^n;
давно
Посетитель
7438
7205
23.02.2009, 14:52
общий
это ответ
Здравствуйте, Newnata89!
Посмотрите решение в приложении. Все значительно проще...

Приложение:
private void button1_Click(object sender, EventArgs e)
{
int n, i;
double s, x;
double power, res;
x = Convert.ToDouble(textBox1.Text);
n = Convert.ToInt32(textBox2.Text);
s = 0;
res = 1;

for (i = 0; i < n; i++)
{
res = res * x;
s = s + Math.Asin(res);
}

label1.Text = Convert.ToString(s);
}
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
23.02.2009, 14:58
общий
Лысков Игорь Витальевич, но он тогда не правильно ведь считает?
давно
Посетитель
7438
7205
23.02.2009, 15:02
общий
Что именно неправильно? В отладчике смотрели?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
23.02.2009, 15:11
общий
Лысков Игорь Витальевич, спасибо большое. Я нашла ошибку в своих подсчетах.
Неизвестный
23.02.2009, 18:53
общий
А почему Math.Asin??? Почему-то я наивно думал, что синус в C# - это Math.Sin...

PS
Согласитесь, что
res *= x;

вместо
res = res * x;

и аналогично, что
s += Math.Asin(res);

вместо
s = s + Math.Asin(res);

выглядят красивее

PPS
... а так может даже еще красивее (хотя, "как посмотреть..."):
s += Math.Asin(res *= x);
Неизвестный
23.02.2009, 19:45
общий
это ответ
Здравствуйте, Newnata89!
В C# я не знаток, но фрагмент собственно вычисления должен выглядеть примерно так (код в приложении).
Вместо SIN и POWER подставьте вызовы функций вычисления синуса и степени соответственно из вашей библиотеки.


Приложение:
res = 0; // результат
for( i=1; i<=n; i++ ) // для каждого слагаемого от 1 по n включительно
res += SIN( POWER ( x, i ) ); // добавляем очередное слагаемое
Форма ответа