|
Программируем по-русски
|
Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку. Издатель Глагола
|
(******************************************************************************) (**) ОТДЕЛ ЧислоЕ+; (******************************************************************************) (* НАЗНАЧЕНИЕ: вычисление 'ЗНАКОВ'=1024 числа "e" после запятой *) (* АЛГОРИТМ: *) (* E = 1 + X1 + X2 + ... + Xi + ... , где Xi = 1/1/2/3/.../i *) (* ОБОЗНАЧЕНИЯ: *) (* р - значение десятичного разряда *) (* п - позиция разряда *) (* п0 - число ведущих 0-х разрядов в Xi *) (******************************************************************************) ИСПОЛЬЗУЕТ Вывод ИЗ "...\Отделы\Обмен\"; ПОСТ ЗНАКОВ=1024; ЦИФР=ЗНАКОВ + (ЗНАКОВ+31) ДЕЛИТЬ 32; (* цифр для расчёта *) ВИД Число=РЯД ЦИФР ИЗ ЯЧЦЕЛ; (* [0] - единицы * [1] - десятые * [2] - сотые * и т.д. *) (******************************************************************************) ЗАДАЧА Разделить(X+:Число; i,п0+:ЦЕЛ); (* X:=X/i *) ПЕР п,р:ЦЕЛ; УКАЗ р:=0; ОТ п:=п0 ДО ЦИФР-1 ВЫП р:=10*р+X[п]; X[п]:=УЗК(УЗК(р ДЕЛИТЬ i)); р:=р ОСТАТОК i КОН; (* продвигаем п0 *) ПОКА (п0 < ЦИФР) И (X[п0] = 0) ВЫП УВЕЛИЧИТЬ(п0) КОН КОН Разделить; (******************************************************************************) ЗАДАЧА Добавить(E+,X-:Число; п0:ЦЕЛ); (* E:=E+X *) ПЕР п:ЦЕЛ; р:ЯЧЦЕЛ; УКАЗ р:=0; ОТ п:=ЦИФР-1 ДО п0 ПО -1 ВЫП УВЕЛИЧИТЬ(р,E[п]+X[п]); ЕСЛИ р >= 10 ТО E[п]:=р-10; р:=1 ИНАЧЕ E[п]:=р; р:=0 КОН КОН; ПОКА р # 0 ВЫП УВЕЛИЧИТЬ(р,E[п]); ЕСЛИ р >= 10 ТО E[п]:=р-10; р:=1 ИНАЧЕ E[п]:=р; р:=0 КОН; УМЕНЬШИТЬ(п) КОН КОН Добавить; (******************************************************************************) ЗАДАЧА ВыводЧисла(E-:Число); (* Вывод на экран числа E *) ПЕР п:ЦЕЛ; УКАЗ Вывод.ЧЦел("^ e = %d.%d",E[0],E[1],0,0); ОТ п:=2 ДО ЗНАКОВ ВЫП ЕСЛИ п ОСТАТОК 64 = 1 ТО Вывод.ЧЦел("^%5d: ",п,0,0,0); КОН; Вывод.ЧЦел("%d",E[п],0,0,0) КОН КОН ВыводЧисла; (******************************************************************************) ЗАДАЧА Расчёт; (* Распределение памяти, расчёт по алгоритму и вывод ответа на экран *) ПЕР E,X:ДОСТУП К Число; п0,i:ЦЕЛ; УКАЗ Вывод.Цепь("^Расчёт числа 'e': 1 + 1/1 + 1/1/2 + 1/1/2/3 + ... ."); СОЗДАТЬ(E); СОЗДАТЬ(X); X[0]:=1; (* X:=1.0 *) E[0]:=1; (* E:=1.0 *) п0:=0; i:=1; ПОВТОРЯТЬ Разделить(X^,i,п0); Добавить(E^,X^,п0); УВЕЛИЧИТЬ(i) ДО п0 = ЦИФР; Вывод.ЧЦел("^Всего: %d слагаемых, %d знака после запятой, %d цифр для расчёта.^", i, ЗНАКОВ, ЦИФР, 0); ВыводЧисла(E^) КОН Расчёт; УКАЗ Расчёт КОН ЧислоЕ. ▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
|
|