1. Вычислить с абсолютной погрешностью не хуже .
В соответствии с
уже применённой схемой,
,
где
–
частичная сумма,
–
остаток суммы
ряда.
содержит чередующиеся
(при вещественных
)
по знаку слагаемые. Если модули этих
слагаемых убывают при
,
то модуль остатка
меньше модуля первого из слагаемых
остатка, то есть
(Теорема Лейбница). Если при
таком убывании
будет найдено число
,
при котором
,
то для нахождения
с требуемой погрешностью достаточно
найти частичную сумму
.
S0 = 1 |
A0 = 1 |
|
S1 = S0 + A1 |
A1 = –A0*B1 |
B1 = (x/2)2/12 |
S2 = S1 + A2 |
A2 = –A1*B2 |
B2 = (x/2)2/22 |
. . . |
. . . |
. . . |
Si = Si–1 + Ai |
Ai = –Ai–1* Bi |
Bi = (x/2)2/i2 |
static double F(double x, double Eps)
{
int i; double x2, S, A, B;
x2 = x * x;
if (Eps <= 0 || Eps >= 1) return;
S = A = B = 1;
x2 = x * x / 4;
i = 0;
do
{
i++;
B = x2 / ((double)i * (double)i);
A *= –B;
S += A;
}
while (Math.Abs(A) > Eps || B >= 1)
return S;
}
Замечание по теме «циклы»
Оператор перехода break применяется в теле цикла для досрочного прекращения цикла. Оператор перехода continue применяется для досрочного перехода на очередную проверку условия продолжения цикла. Циклы, показанные в первом и втором столбцах таблицы, эквивалентны по фактическому результату:
for (…) { … if (…) continue; … if (…) break;
} |
for (…) { … if (…) goto M1; … if (…) goto M2; M1: ; } M2: ; |
Тем не менее, содержимое второго столбца противоречит концепции структурного программирования, а также затрудняет процесс оптимизации исполняемого кода компилятором. Применять операторы перехода на метку не рекомендуется во всех случаях, где можно обойтись без них.
Тип «Перечисляемый»
<Объявление типа «перечисляемый»> ::=
enum <Имя типа>
{
<Имя значения 1> [= <Значение 1>] ,
<Имя значения 2> [= <Значение 2>] ,
…
<Имя значения n> [= <Значение n>]
}
Значение, которое дозволено присваивать переменой типа «перечисляемый», либо с которым дозволяется сравнивать её значение, записывается в виде <Имя типа>.<Имя значения i>.
В памяти переменная
обсуждаемого типа хранится, как переменная
типа int.
По умолчанию <Имя значения i>
соответствует значению
.
Если имени принудительно ставится в
соответствие <Значение i>,
то оно должно входить в диапазон,
предназначенный для типа int.
Если двум разным именам значений будет
поставлено в соответствие одно и то же
фактическое значение, ответственность
за последствия принудительного назначения
ложится на программиста.
Тело конструкции enum внешне похоже на блок, но блоком не является.
Пример объявления типа «перечисляемый»:
enum WeekDays
{
Monday = 1; // По умолчанию было бы: 0, принудительно 1
Tuesday, // По умолчанию было бы: 1, но будет 2 ввиду «Monday = 1»
Wednesday, // 3
Thursday, // 4
Friday, // 5
Saturday = 2, // По умолчанию было бы: 5, принудительно 2
Sunday // По умолчанию было бы: 6, но будет 3 ввиду «Saturday = 2»
}
