![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Программисту посвящается...
Дан числовой ряд и некоторые числа E и N. Найти сумму тех членов ряда, модуль которых больше или равен заданному E . Общий член ряда имеет вид ( см.рисунок ), где n=1,2,3...∞ . Консольное приложение. Спасибо всем кто поможет !!! |
|
#2
|
|||
|
|||
|
А "x" чему равен для каждого члена ряда?
|
|
#3
|
|||
|
|||
|
В общем, для фиксированного значения "X" вот примерно так:
Код:
program SqSum_01;
{$APPTYPE CONSOLE}
uses
SysUtils, Math;
const
X_ARG = 1.3; // Это "x" в формуле
//------------------------------------------------------------------------------
// Функция вычисляет значение факториала N
//------------------------------------------------------------------------------
function Factorial(N: Integer): Cardinal;
begin
if N = 1 then Result := 1
else Result := Factorial(N - 1) * N;
end;
//------------------------------------------------------------------------------
// Функция вычисляет значение очередного члена ряда с номером N
//------------------------------------------------------------------------------
function SqTerm(N: Integer; X: Double): Double;
begin
Result := Power(-1, N) * Power(X, 2 * N) / Factorial(2 * N);
end;
//------------------------------------------------------------------------------
// Функция вычисляет сумму членов последовательности,
// удовлетворяющих условию задачи
//------------------------------------------------------------------------------
function SumTerms(N: Integer; E: Double): Double;
var
Term: Double;
begin
Result := 0.0; // Сюда будем суммировать
while N > 0 do begin
Term := SqTerm(N, X_ARG); // Вычисляем очередной член ряда
if Abs(Term) >= E then // Проверяем условие
Result := Result + Term; // Если модуль больше либо равен E - суммируем
Dec(N); // Переходим к следующему члену ряда
end;
end;
begin
Writeln('X = ', X_ARG:6:2);
Writeln('E = 2, N = 10: ', SumTerms(10, 2):10:2);
Writeln('E = 1, N = 10: ', SumTerms(10, 1):10:2);
Writeln('E = 0, N = 10: ', SumTerms(10, 0):10:2);
{ Чтобы пользователь смог насладиться результатом, ожидаем нажатия Enter}
Writeln;
Writeln('Press [Enter].');
Readln;
end. |
|
#4
|
|||
|
|||
|
А если X вводится пользователем ?
|
|
#5
|
|||
|
|||
|
например X:byte;
|
|
#6
|
|||
|
|||
|
Код:
program SqSum_01;
{$APPTYPE CONSOLE}
uses
SysUtils, Math;
var
X_ARG: Double;
//------------------------------------------------------------------------------
// Функция вычисляет значение факториала N
//------------------------------------------------------------------------------
function Factorial(N: Integer): Cardinal;
begin
if N = 1 then Result := 1
else Result := Factorial(N - 1) * N;
end;
//------------------------------------------------------------------------------
// Функция вычисляет значение очередного члена ряда с номером N
//------------------------------------------------------------------------------
function SqTerm(N: Integer; X: Double): Double;
begin
Result := Power(-1, N) * Power(X, 2 * N) / Factorial(2 * N);
end;
//------------------------------------------------------------------------------
// Функция вычисляет сумму членов последовательности,
// удовлетворяющих условию задачи
//------------------------------------------------------------------------------
function SumTerms(N: Integer; E: Double): Double;
var
Term: Double;
begin
Result := 0.0; // Сюда будем суммировать
while N > 0 do begin
Term := SqTerm(N, X_ARG); // Вычисляем очередной член ряда
if Abs(Term) >= E then // Проверяем условие
Result := Result + Term; // Если модуль больше либо равен E - суммируем
Dec(N); // Переходим к следующему члену ряда
end;
end;
begin
Write('X: ');
Readln(X_ARG);
Writeln;
Writeln('X = ', X_ARG:6:2);
Writeln('E = 2, N = 10: ', SumTerms(10, 2):10:2);
Writeln('E = 1, N = 10: ', SumTerms(10, 1):10:2);
Writeln('E = 0, N = 10: ', SumTerms(10, 0):10:2);
{ Чтобы пользователь смог насладиться результатом, ожидаем нажатия Enter}
Writeln;
Writeln('Press [Enter].');
Readln;
end. |