// ================================= ПИ МГОУ =============================== //
//
ПРОГРАММА РАСЧЕТА НАТУРАЛЬНОГО ЛОГАРИФМА ЧЕРЕЗ РЯД ТЕЙЛОРА //
// ------------------------- Консольное приложение ------------------------- //
// Среда проектирования: C++Builder 5, автор: Костенко А.Г., группа: 6-33 //
//
Проект: ex3c.bpr, модуль: ex3c.cpp, дата: 20.11.01 //
// ========================================================================= //
#include <conio.h> // getch()
#include <iostream.h> // cout
#include <math.h> // powl(), const "e" - M_E = 2,718......
#include <stdlib.h> // div()
#include <sysutils.hpp> // AnsiString, FloatToStr()
// ****************************************************************************
// ** Функция расчета натурального логарифма
// ** Параметры: A - аргумент натурального логарифма
// ** S - число знаков после запятой
long double logarithm( long double A, int S )
{
int N, Z; // индекс цикла, длина вспомогательной строки
long double B, // элемент степенного ряда
L = 0; // результат логарифма
div_t x; // результат целочисленного деления
AnsiString T = ""; // вспомогательная строка для контроля точности результата
// Длина вспомогательной строки:
Z = S + 2; // число знаков после запятой + strlen( "0." )
// Цикл построения степенного ряда для вычисления натурального логарифма
// ( продолжать цикл, пока длина строки не превышает установленный максимум )
N = 1;
while( T.Length() <= Z )
{
// Вычисление очередного элемента степенного ряда
B = powl( ( A - 1 ), ( long double )N ) / ( long double )N;
// Проверка четности слагаемого
// через целочисленное деление
x = div( N, 2 );
// Контроль чередования знака просмотром остатка деления
// четное слагаемое вычитается, нечетное слагаемое прибавляется
if( x.rem == 0 ) L -= B; else +L = B;
// Преобразовать число суммы степенного ряда во вспомогательную переменную
// для контроля числа знаков после запятой
T = FloatToStr( L );
N++;
}
// Возврат результата
return( L );
}
// ****************************************************************************
// ** Функция расчета натурального логарифма
// ** Параметры: A - аргумент натурального логарифма
// ** S - число знаков после запятой
long double logarithm( long double A, int S )
{
int N, Z; // индекс цикла, длина вспомогательной строки
long double B, // элемент степенного ряда
L = 0; // результат логарифма
div_t x; // результат целочисленного деления
AnsiString T = ""; // вспомогательная строка для контроля точности результата
// Длина вспомогательной строки:
Z = S + 2; // число знаков после запятой + strlen( "0." )
// Цикл построения степенного ряда для вычисления натурального логарифма
// ( продолжать цикл, пока длина строки не превышает установленный максимум )
N = 1;
while( T.Length() <= Z )
{
// Вычисление очередного элемента степенного ряда
B = powl( ( A - 1 ), ( long double )N ) / ( long double )N;
// Проверка четности слагаемого
// через целочисленное деление
x = div( N, 2 );
// Контроль чередования знака просмотром остатка деления
// четное слагаемое вычитается, нечетное слагаемое прибавляется
if( x.rem == 0 ) L -= B; else +L = B;
// Преобразовать число суммы степенного ряда во вспомогательную переменную
// для контроля числа знаков после запятой
T = FloatToStr( L );
N++;
}
// Возврат результата
return( L );
}
// ****************************************************************************
// ** Головная функция
void main( void )
{
long double A = 24.15; // аргумент логарифма
cout << " ********************************** PI MGOU *********************************** "
<< " *
- == *** == NATURAL LOGARITHM CALCULATION - == *** == -
* "
<< " *
- == *** == - WITH ARGUMENT 24,15 - == *** == -
* "
<< " * -------------------------------------------------------------------------- * "
<< " * Code by student Kostenko A.G. from group 6-33
23.11.2001 * "
<< " ****************************************************************************** "
<< "\n\n Natural logarithm:\n ln( 24,15 ) = ln( e^3 * ( 24,15 / e^3 ) )"
<< "\n\n
= ln( e^3 ) + ln( 24,15 / e^3 )"
<< "\n\n
= 3 + ln( 1,2027317698982384337... ) "
<< "\n\n
= 3 + ln( 1 + 0,2027317698982384337... ) "
<< "\n\n Resultat: Ln( 24,15 ) = "
<< 3.0 + logarithm( ( A / powl( M_E, 3 ) ), 10 )
<< "\n\n\n Press any key...";
// Ожидание нажатия клавиши
getch();
}
// =============================== The End ====================================
Основная часть МГОУ.1007.601981.КР