|
(******************************************************************************)
(**) ОТДЕЛ ПроФункц+;
(******************************************************************************
* НАЗНАЧЕНИЕ: проверка точности вычислений специальных функций
*
* ПРИМЕЧАНИЯ:
* Вычисленные значения сравниваются с табличными значениями из
* файла 'ПроФункц.дан'.
******************************************************************************)
ИСПОЛЬЗУЕТ
Матем ИЗ "...\Отделы\Числа\",
Функц ИЗ "...\Отделы\Числа\",
Читать ИЗ "...\Отделы\Обмен\",
Вывод ИЗ "...\Отделы\Обмен\";
ВИД
Вещ = Матем.Вещ;
(******************************************************************************)
ЗАДАЧА Значений(метка-:ЦЕПЬ; п+:Читать.Поток):ЦЕЛ;
(* Цель: 1) открыть поток, содержащий проверочные данные
* 2) найти в нём данные для заданной функции
* 3) прочитать число проверочных значений этой функции
* До: <метка> - строка-метка с названием функции
* После: <п> - поток, открытый и установленный в начало данных
* для этой функции
* Ответ: число проверочных значений этой функции *)
ПЕР
строка:ЦЕПЬ[100];
значений:ЦЕЛ;
УКАЗ
п:=Читать.Открыть('ПроФункц.дан');
ЕСЛИ п = ПУСТО ТО
Вывод.Цепь('^Файл "ПроФункц.дан" не найден.^');
СТОП(1)
КОН;
п.видЗнаков:=Читать.знУни;
ПОКА НЕ Читать.Конец(п) ВЫП
Читать.Строка(п,строка);
ЕСЛИ строка = метка ТО
значений:=Читать.Цел(п);
Читать.ПропуститьСтроку(п);
ВОЗВРАТ значений
КОН
КОН;
Вывод.Цепь('^В файле "ПроФункц.дан" не найдена метка: "');
Вывод.Цепь(метка);
Вывод.Цепь('".^');
СТОП(1)
КОН Значений;
(******************************************************************************)
ЗАДАЧА Факториал;
ПЕР
п:Читать.Поток; (* поток, содержащий проверочные данные *)
i,n:ЦЕЛ; (* счётчик значений и значений всего *)
F,Ft,оо:Вещ; (* вычисленная функция, её таблич.значение и относ.ошибка *)
x:Вещ; (* аргумент функции *)
УКАЗ
n:=Значений('Факториал',п);
Вывод.Цепь('^x, Факториал(x), Таблица(x), относ.ошибка^');
ОТ i:=1 ДО n ВЫП
x:=Читать.ШирВещ(п);
Ft:=Читать.ШирВещ(п);
F:=Функц.Факториал(x);
оо:=(F-Ft)/Ft;
Вывод.ЧВещ('%8.4f %23e %23e %9.1e^',x,F,Ft,оо)
КОН;
Читать.Закрыть(п)
КОН Факториал;
(******************************************************************************)
ЗАДАЧА БиномКоэф;
ПЕР
п:Читать.Поток;
i,n:ЦЕЛ; F,Ft,оо:Вещ;
m,k:Вещ;
УКАЗ
n:=Значений('Биномиальные коэффициенты',п);
Вывод.Цепь('^m, k, БиномКоэф(m,k), Таблица(m,k), относ.ошибка^');
ОТ i:=1 ДО n ВЫП
m:=Читать.ШирВещ(п);
k:=Читать.ШирВещ(п);
Ft:=Читать.ШирВещ(п);
F:=Функц.БиномКоэф(m,k);
оо:=(F-Ft)/Ft;
Вывод.ЧВещ('%5d %5d %10f %10f',m,k,F,Ft);
Вывод.ЧВещ('%9.1e^',оо,0,0,0)
КОН;
Читать.Закрыть(п)
КОН БиномКоэф;
(******************************************************************************)
ЗАДАЧА Г;
ПЕР
п:Читать.Поток;
i,n:ЦЕЛ; F,Ft,оо:Вещ;
x:Вещ;
УКАЗ
n:=Значений('Г функция',п);
Вывод.Цепь('^x, Г(x), Таблица(x), относ.ошибка^');
ОТ i:=1 ДО n ВЫП
x:=Читать.ШирВещ(п);
Ft:=Читать.ШирВещ(п);
F:=Функц.Г(x);
оо:=(F-Ft)/Ft;
Вывод.ЧВещ('%8.4f %23e %23e %9.1e^',x,F,Ft,оо)
КОН;
Читать.Закрыть(п)
КОН Г;
(******************************************************************************)
ЗАДАЧА НепГ;
ПЕР
п:Читать.Поток;
i,n:ЦЕЛ; F,Ft,оо:Вещ;
a,x:Вещ;
УКАЗ
n:=Значений('Неполная Г функция',п);
Вывод.Цепь('^a, x, НепГ(a,x), Таблица(a,x), относ.ошибка^');
ОТ i:=1 ДО n ВЫП
a:=Читать.ШирВещ(п);
x:=Читать.ШирВещ(п);
Ft:=Читать.ШирВещ(п);
F:=Функц.НепГ(a,x);
оо:=(F-Ft)/Ft;
Вывод.ЧВещ('%5f %15.4e %23e %23e ',a,x,F,Ft);
Вывод.ЧВещ('%9.1e^',оо,0,0,0)
КОН;
Читать.Закрыть(п)
КОН НепГ;
(******************************************************************************)
ЗАДАЧА Бета;
ПЕР
п:Читать.Поток;
i,n:ЦЕЛ; F,Ft,оо:Вещ;
x,y:Вещ;
УКАЗ
n:=Значений('Бета функция',п);
Вывод.Цепь('^x, y, Бета(x,y), Таблица(x,y), относ.ошибка^');
ОТ i:=1 ДО n ВЫП
x:=Читать.ШирВещ(п);
y:=Читать.ШирВещ(п);
Ft:=Читать.ШирВещ(п);
F:=Функц.Бета(x,y);
оо:=(F-Ft)/Ft;
Вывод.ЧВещ('%5f %5f %23e %23e ',x,y,F,Ft);
Вывод.ЧВещ('%9.1e^',оо,0,0,0)
КОН;
Читать.Закрыть(п)
КОН Бета;
(******************************************************************************)
ЗАДАЧА НепБета;
ПЕР
п:Читать.Поток;
i,n:ЦЕЛ; F,Ft,оо:Вещ;
a,b,x:Вещ;
УКАЗ
n:=Значений('Неполная Бета функция',п);
Вывод.Цепь('^a, b, x, НепБета(a,b,x), Таблица(a,b,x), относ.ошибка^');
ОТ i:=1 ДО n ВЫП
a:=Читать.ШирВещ(п);
b:=Читать.ШирВещ(п);
x:=Читать.ШирВещ(п);
Ft:=Читать.ШирВещ(п);
F:=Функц.НепБета(a,b,x);
оо:=(F-Ft)/Ft;
Вывод.ЧВещ('%5f %5f %5f %23e ',a,b,x,F);
Вывод.ЧВещ('%23e %9.1e^',Ft,оо,0,0)
КОН;
Читать.Закрыть(п)
КОН НепБета;
(******************************************************************************)
ЗАДАЧА erf;
ПЕР
п:Читать.Поток; i,n:ЦЕЛ; F,Ft,оо:Вещ;
x:Вещ;
УКАЗ
n:=Значений('erf функция',п);
Вывод.Цепь('^x, erf(x), Таблица(x), относ.ошибка^');
ОТ i:=1 ДО n ВЫП
x:=Читать.ШирВещ(п);
Ft:=Читать.ШирВещ(п);
F:=Функц.erf(x);
оо:=(F-Ft)/Ft;
Вывод.ЧВещ('%8.4f %23e %23e %9.1e^',x,F,Ft,оо)
КОН;
Читать.Закрыть(п)
КОН erf;
(******************************************************************************)
УКАЗ
Факториал;
БиномКоэф;
Г; НепГ;
Бета; НепБета;
erf
КОН ПроФункц.
▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
|
|