|
|
Регистрация | << Правила форума >> | 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. |