ПРИЕМЫ СОЗДАНИЯ СЛОЖНЫХ СЦЕНАРИЕВ
Создавать и дополнять сценарии следует путем выполнения операции "Создать сценарий" в окне "Сценарий редактирования каталогов и файлов", которое появляется после нажатия клавиши {Сценарий}. Здесь следует указать имя файла и режим создаваемого сценария. Тогда при реальном выполнении в редакторе TeConv любого шага редактирования появляется запрос на возможность включения этого шага в файл сценария. Доступ к сценарию открывается при вызове операции "Выполнить сценарий", загрузке сценария из файла и просмотра его через контекстное меню. После ручного редактирования сценарий сохраняется в файле.
При создании сценария группа макросов, идентифицированных своим номером в сценарии, может быть оформлена как цикл. Для этого следует войти в специальное окно "Проектировщик циклов в сценарии" по кнопке {Организовать цикл …} и вставить в нужные места операции начала и конца цикла:
#ЦИКЛ:<метка цикла>?<имя файла цикла>
#КОНЕЦ: <метка цикла>
Файл цикла должен быть предварительно создан и должен содержать в каждой строке набор заменяемых в цикле параметров, в виде лексем, разделяемых одним или несколькими пробелами. Если параметр содержит пробел, то он должен быть заключен в двойные кавычки, а пустые строки и строки-комментарии, начинающиеся с символа ! , исключаются из цикла. Параметры, подлежащие изменению при очередном проходе цикла (в сценарии и в файле запроса с таблицей контекстов), должны быть вручную заменены на конструкцию подстановки '&n ' или '&n|m ' (n,m >=1), где n – номер параметра (лексемы) замены из строки файла цикла, а m – метка цикла, по которой ищется соответствующий файл цикла. Метки вложенных циклов не должны совпадать. Если метка не задана, то по умолчанию берется файл текущего цикла. Имя файла цикла может быть как с полным путем доступа, так и без пути, но тогда считается, что файл цикла находится в том же каталоге, что и файл текущего сценария.
Создать сложные сценарии, содержащие циклы, чисто механически не удастся в силу того, что в цикл основывается на строках и лексемах этих строк из конкретного файла цикла. Файл цикла может быть написан вручную или создан в процессе работы самого сценария. Рассмотрим для примера создание сценария распаковки zip-файлов, находящихся в подкаталоге d:\wrk.
Сначала создадим сценарий, включающий в себя распаковку в подкаталоге d:\wrk\ файла с именем file1.zip . Этот сценарий создается в режиме "Создать сценарий" при запуске внешнего процесса на странице "Файловые операции", причем путь доступа к имени файла распаковщика pkunzip.exe выбирается с диска C: , а в качестве командной строки задается режим и имя распаковываемого файла (режим -o означает распаковку без запросов). Внешний процесс распаковки выполняется в виде консольного приложения, которое само закроется по истечении заданного времени ( 2,5 сек ):
#[ФАЙЛОВЫЕ ОПЕРАЦИИ] {1}
/1/тип операции (индекс): 4
/2/входной (базовый) каталог:
/3/шаблоны входных файлов: *.*
/4/базировать путь к файлу (признак): 0
/5/выходной каталог: d:\wrk\
/6/шаблоны файлов очистки: *
/7/режим очистки подкаталогов (индекс): 0
/8/создать структуру базы (признак): 0
/9/левый список (признак): 1
/10/правый список (признак): 0
/11/содержимое списка (индекс): 0
[ЗАПУСК ВНЕШНЕГО ПРОЦЕССА]
/1/имя внешнего процесса: c:\exe\pkunzip. exe
/2/источник выбора процесса (индекс): -1
/3/параметры командной строки: - o file1.zip
/4/путь доступа: d:\wrk\
/5/добавить параметр (признак): 0
/6/режим открытия внешнего процесса (индекс): 0
/7/время внешнего процесса: 2500
>ВНЕШНИЙ ПРОЦЕСС
Для организации цикла для распаковки списка файлов необходимо иметь файл цикла d:\wrk\listzip. txt , который содержит список zip-файлов, подлежащих распаковке. Тогда первая лексема каждой строки файла образует параметр подстановки, значение которого будет меняться с каждой итерацией цикла:
#ЦИКЛ:1?d:\wrk\listzip. txt
#[ФАЙЛОВЫЕ ОПЕРАЦИИ] {1}
/1/тип операции (индекс): 4
/2/входной (базовый) каталог:
/3/шаблоны входных файлов: *.*
/4/базировать путь к файлу (признак): 0
/5/выходной каталог: d:\wrk\
/6/шаблоны файлов очистки: *
/7/режим очистки подкаталогов (индекс): 0
/8/создать структуру базы (признак): 0
/9/левый список (признак): 1
/10/правый список (признак): 0
/11/содержимое списка (индекс): 0
[ЗАПУСК ВНЕШНЕГО ПРОЦЕССА]
/1/имя внешнего процесса: c:\exe\pkunzip. exe
/2/источник выбора процесса (индекс): -1
/3/параметры командной строки: - o &1
/4/путь доступа: d:\wrk\
/5/добавить параметр (признак): 0
/6/режим открытия внешнего процесса (индекс): 0
/7/время внешнего процесса: 2500
>ВНЕШНИЙ ПРОЦЕСС
#КОНЕЦ:1
Для создания файла цикла d:\wrk\listzip. txt вставим перед макросом цикла элемент сценария, обеспечивающий создание правого списка zip-файлов из каталога d:\wrk\ и запись этого списка в файл цикла (можно сначала дозаписать этот макрос в сценарий при выполнении указанных действий в режиме "Создать сценарий", а потом переставить макросы местами, скорректировав их номера в фигурных скобках):
#[СОЗДАНИЕ СПИСКОВ] {2}
/1/источник списка (индекс): 0
/2/входной (базовый) каталог: d:\wrk\
/3/шаблоны входных файлов: *.zip
/4/искать в подкаталогах (признак): 1
/5/неполный путь к файлу (признак): 0
/6/левый список (признак): 0
/7/правый список (признак): 1
/8/новый список (признак): 1
/9/добавить в список (признак): 0
/10/содержимое списка (индекс): 0
/11/уровень от базы (режим): >=
/12/уровень от базы (значение): 0
>ПО ВХОДНОМУ КАТАЛОГУ
>ЗАПИСАТЬ СПИСОК: d:\wrk\listzip. txt, fNew, fRight, rAll
Таким образом, полный сценарий включает в себя два макроса:
#[СОЗДАНИЕ СПИСКОВ] {1}
>ЗАПИСАТЬ СПИСОК: d:\wrk\listzip. txt, fNew, fRight, rAll
#ЦИКЛ:1?d:\wrk\listzip. txt
#[ФАЙЛОВЫЕ ОПЕРАЦИИ] {2}
>ВНЕШНИЙ ПРОЦЕСС
#КОНЕЦ:1
ПРИМЕР ИСПОЛЬЗОВАНИЯ СПЕЦИАЛЬНЫХ СРЕДСТВ
Демонстрацию возможностей редактора-программера TeConv рассмотрим на реальном примере. В Библиотеке Численного Анализа НИВЦ МГУ (www. srcc. msu. su/num_anal/) помещены описания библиотечных программ на языке ФОРТРАН. В связи с переводом программ на язык Си, возникла необходимость сделать подобные описания для языка Си, причем исходя из существующего описания на языке ФОРТРАН. Документ, описывающий программу, состоит из нескольких разделов: 'Программа: <имя п/п>', 'Назначение', 'Математическое описание', 'Использование', 'Параметры'. 'Версии', 'Вызываемые программы', 'Замечания по использованию', 'Пример использования', структуру и особенности которых при переводе документации надо учитывать. Кроме этого следует учесть, что документация предназначена для просмотра в Интернете и написана с использованием тегов языка HTML. В результате этих особенностей задача перевода документации включила в себя следующие основные пункты:
- перевод всех идентификаторов (кроме раздела 'Математическое описание') и имен всех встречаемых программ на нижний регистр, причем задача усложняется тем, что часть букв верхнего регистра, совпадающая по написанию с русскими, имеет русскую кодировку;
- добавление к именам программ окончаний для имен версии Си _c ; например, имя AM01R заменяется на имя am01r_c ;
- поиск и замена в разделе 'Использование' первого оператора обращения к программе на языке ФОРТРАН на оператор, который ищется контекстным поиском и выделяется из текста программы на языке Си;
- поиск и замена в разделе 'Пример использования' теста к программе на языке ФОРТРАН на соответствующий тест на языке Си; при этом операторы теста в разделе могут быть обрамлены произвольными пояснительными строками, которые при поиске должны быть разграничены с тестом;
- в тексте может быть приведен вид первого оператора обращения к версии программы или к подпрограмме, приложенной к тесту, на языке ФОРТРАН, который заменяется на соответствующий оператор языка Си, найденный в каталоге программ на Си;
- операторы и тесты программ на языке Си представлены в каталогах в виде заархивированных zip-файлов, поэтому перед началом работы с файлом документации все файлы надо разархивировать;
- в силу особенностей определенных разделов должен существовать механизм, обеспечивающий контекстные преобразования только в указанном разделе или группе разделов.
Для выполнения этой задачи создан сценарий, основные пункты которого описываются ниже с приведением подробных комментариев:
1. Запись в первую ячейку общего архива {{1}} тега <pre>
2. Запись во вторую ячейку общего архива {{2}} тега </pre>
Цикл по основным каталогам поиска (цикл охватывает пункты 3 – 22):
#ЦИКЛ:1?d:\docci\listcat.txt
Вся исходная документация разбита на несколько подкаталогов с именами am, pa, sf и др., определяющих отдельные разделы документации. Имена подкаталогов соответствуют начальным символам имен программ, находящимся в этом подкаталоге. Файл d:\docci\listcat.txt состоит из строк с именами этих подкаталогов и участвует в организации цикла 1. Соответствующие этим подкаталогам программы на языке Си находятся в подкаталогах с именами am_c, pa_c, sf_c и др., а тесты - в подкаталогах с именами tam_c, tpa_c, tsf_c и др.
3. Создание левого списка по файлам каталога цикла (например, из am) c расширением .htm
4. Добавление в левый список файлов из подкаталога Библиотеки d:\num_anal\lib_na\cat\&1 _c\ ( например, из подкаталога am_c ). В этом подкаталоге находятся zip-файлы программ на Си раздела, имя которого формируется после подстановки первой лексемы &1 из текущей строки файла d:\docci\listcat.txt, организующем цикл 1.
5. Добавление в левый список файлов из подкаталога Библиотеки d:\num_anal\lib_na\cat\t&1 _c\ ( например, из подкаталога tam_c ). В этом подкаталоге находятся zip-файлы тестов на Си раздела, имя которого формируется после подстановки первой лексемы &1 из текущей строки файла d:\docci\listcat.txt, организующем цикл 1.
6. Создание рабочего каталога files_&1 . В этот каталог в дальнейшем соберем все распакованные файлы, которые будут использоваться для перекодировки соответствующего раздела документации.
7. Перепись файлов левого списка в каталог files_&1 .
8. Создание правого списка zip-файлов из каталога files_&1 (например, files_am) и запись этого списка в файл d:\docci\tmp\listzip. txt. Этот файл будет использован для организации внутреннего цикла распаковки zip-файлов.
9. Цикл распаковки zip-файлов через запуск внешнего процесса:
#ЦИКЛ:2?d:\docci\tmp\listzip. txt
Создание и структура цикла распаковки рассмотрены в разделе "Приемы создания сложных сценариев".
Завершение цикла 2:
#КОНЕЦ:2
10. Удаление zip-файлов правого списка из каталога files_&1 после распаковки.
11.Создание правого списка htm-файлов из каталога files_&1 и запись списка в файл d:\docci\tmp\listhtm_&1 .txt (например, создали файл listhtm_am. txt, содержащий файлы Am00r. htm, Am01r. htm и др.).
12. Редактирование файла listhtm_&1 .txt, используя таблицу контекстов:
Контекст поиска: | Контекст замены: | Комментарий: |
{?*~[.]}{.htm} | #[{1} & {2} & " " & {1} & "_c. c t" & {1} & "_c. c"//{0}] | Формирование строк вида (f - имя файла): f. htm f_c. c tf_c. c |
Цикл 3 по созданному на предыдущем этапе файлу (.цикл охватывает пункты 13 – 18):
#ЦИКЛ:3?d:\docci\tmp\listhtm_&1|1 .txt
13. Запись в третью ячейку общего архива {{3}} обращения к п/п с параметрами на Си из файла d:\docci\files_&1|1 \&2 . Здесь каталог определяется первой лексемой файла цикла 1, а имя файла - второй лексемой текущего цикла 3. Это действие выполняет контекстное преобразование:
Контекст поиска: | Контекст замены: | Комментарий: |
%%{&1|1 ???_c(}|{&1|1 ????_c(} | Начало блока: имя п/п, начинающееся с имени каталога, плюс 3 или 4 произвольных символа (дополнение до 5 символов исходного имени) плюс стандартное окончание имени _c. | |
${%@{} | Конец блока: { в начале строки. | |
%$ | #[BlockOper(save,{10}, {{3}},1..-2)] | Запись блока без последней строки { в третью ячейку архива. |
14. Запись в четвертую ячейку архива {{4}} теста на языке Си из файла d:\docci\files_&1|1 \&3 . Здесь каталог определяется первой лексемой файла цикла 1, а имя теста - третьей лексемой текущего цикла 3. Это действие выполняет контекстное преобразование:
Контекст поиска: | Контекст замены: | Комментарий: |
%%{main(void)} | Начало блока: заданный контекст. | |
$$ | Конец блока: конец файла. | |
%$ | #[BlockOper(save,{10}, {{4}},1..-1)] | Запись блока в четвертую ячейку архива. |
15. Изменение прописных букв на строчные в именах программ и идентификаторах, включая замену русских букв, одинакового с латинскими написания, на латинские. Контекстные преобразования разделены на блоки, относящиеся к определенным разделам документации (приводится фрагмент):
Контекст поиска: | Контекст замены: | Комментарий: |
|1|%%<hr> | Начало блока 1 | |
|1|{[АВЕКМНОРСТХУ A-Z]+[АВЕКМНОРС ТХУA-Z0-9]*[ |,|.|;|:|&| (|)|=|@+|@-|*|<|!|@}|^]} | #[BlockEdit(selcn, sysfile1, _{1}..{1}_)] | Формирование системного файла sysfile1 с диапазонами имен п/п и идентификаторов, подлежащих переводу (поиск проводится по списку возможных прописных русских букв и диапазону латинских букв), последний перечень символов определяет допустимые символы, ограничивающие имена и идентификаторы. |
|1|${<h3> * Математическое описание} | Конец блока 1 | |
|1|%$ | #[BlockConv({10},0, sysfile1,eneq, dn)] | Функция перевода символов с использованием созданного в блоке системного файла sysfile1 . |
|1|%$ | #[BlockOper(setln)] | Сдвиг по входному файлу на одну строку вверх (чтобы повторить чтение конечной строки этого блока). |
|2|%%{<h3> * Математическое описание} | Начало блока 2 | |
|2|{[АВЕКМНОРСТХ A-Z][АВЕКМНОРСТХ A-Z][АВЕКМНОРСТХ A-Z0-9][АВЕКМНОРС ТХA-Z0-9][СCRD]} | #[BlockEdit(selcn, sysfile1, _{1}..{1}_)] | Формирование системного файла sysfile1 с диапазонами имен п/п. |
|2|${<h3> * Использование} | Конец блока 2. | |
|2|%$ | #[BlockConv({10},0, sysfile1,eneq, dn)] | Функция перевода символов с использованием созданного в блоке системного файла sysfile1 . |
16. Добавление к именам п/п окончания _c . Контекстные преобразования разделены на блоки, относящиеся к определенным разделам документации (приводится фрагмент):
Контекст поиска: | Контекст замены: | Комментарий: |
|1|%%<hr> | Начало блока 1 | |
|1|{[a-z][a-z][a-z0-9] [a-z0-9][rdci][ |.|)|,|(]} | #[{1}|1..-2 & "_c" & {1}|-1..-1 //{1}] | Выделение из найденной группы символов имени п/п (последний символ группы не включается) и присоединение к нему. _c и конечного символа группы (например, из имени am01r формируется имя am01r_c). |
|1|${<h3> * Использование} | Конец блока 1 | |
|1|%$ | #[BlockOper(repl,{10}, {10})] | Запись отредактированного блока в выходной файл. |
|2|%%{<h3> *Параметры} | Начало блока 2 | |
|2|{[a-z][a-z0-9]* }{ *@-$} | Идентификаторы параметров не изменяются. | |
|2|{[a-z][a-z][a-z0-9] [a-z0-9][rdci][ |.|)|,|(]} | #[{1}|1..-2 & "_c" & {1}|-1..-1 //{1}] | Добавление к имени п/п окончания _c . |
|2|${<h3> *Версии} | Конец блока 2. | |
|2|%$ | #[BlockOper(repl,{10}, {10})] | Запись отредактированного блока в выходной файл. |
17. Замена содержимого раздела 'Использование' на обращение к п/п на Си и содержимого раздела 'Пример использования' на тест к п/п на Си. Эти действие выполняются контекстными преобразованиями:
Контекст поиска: | Контекст замены: | Комментарий: |
|1|%%<h3> * Использование | Начало блока 1 | |
|1|${%\0d\0a} | Конец блока 1 (пустая строка - в начале строки стоят коды #13#10). | |
|1|%$ | #[BlockOper(repl,{{3}}, {10},0,2..-2)] | Замещение строки блока редактирования от второй до предпоследней содержимым третьей ячейки общего архива, без записи блока в выходной файл (ключ False). |
|1|%$ | #[BlockOper(insb,{{2}}, {10},0,-1)] | Перед последней строкой блока вставляется содержимое второй ячейки общего архива ( </pre> ) без записи блока в выходной файл (ключ False). |
|1|%$ | #[BlockOper(insb,{{1}}, {10},0,2)] | Перед второй строкой блока вставляется содержимое первой ячейки общего архива ( <pre> ) и блок записывается в файл. |
|2|%%{<h3> *Пример использования} | Начало блока 2 | |
|2|{% +[АВЕКМНОРСТ ХУA-Z][АВЕКМНОРСТ ХУA-Z0-9]* } | #[BlockEdit(selsp, sysfile)] | Формирование системного файла sysfile, содержащего номера min и max строки блока с оператором языка ФОРТРАН (для строк теста, начинающихся с идентификатора). |
|2|{% +[0-9]+ +[АВЕКМН ОРСТХУA-Z]} | #[BlockEdit(selsp, sysfile)] | Формирование системного файла sysfile, содержащего номера min и max строки блока с оператором языка ФОРТРАН (для строк теста, начинающихся с цифровой метки). |
2|${% *Результат} | Конец блока 2. | |
|2|%$ | #[BlockOper(repl,{{4}}, {10},0,&1|sysfile.. &2|sysfile )] | Замена в блоке диапазона строк, взятого из первой и второй лексем системного файла sysfile, на содержимое четвертой ячейки общего архива. |
18. Замена в обращений к первым операторам п/п на языке ФОРТРАН subroutine fname( … ) на их аналог на языке Си (п/п может быть версией исходной п/п и ее следует искать непосредственно в каталоге files_&1|1 под именем fname_c.c, или содержаться в тесте исходной п/п и ее следует искать в том же каталоге под именем &3|3 , которое находится в третьей лексеме файла цикла 3). Эти действия выполняются контекстными преобразованиями:
Контекст поиска: | Контекст замены: | Комментарий: |
|1|%%{subroutine}{[a-z]+ [_a-z0-9]*[ |&|(]}{?*)} | #[{2}|1..-2//{{5}}] | Начало блока 1: имя п/п выделяется из второй группы (без последнего граничного с именем символа) и записывается в ячейку пять общего архива. |
|1|$ | Конец блока 1: строка совпадает с началом блока, т. к. закрывающая скобка списка параметров находится в этой же строке. | |
|1[file=d:\docci\files_&1|1 \{{5}}.c :: file=d:\docci\files_&1|1 \&3|3 ] |%$ | #[BlockFile(extr, sysRcond, {10},"int {{5}}"::"real {{5}}",")","subroutine",")") :: BlockFile(extr, sysRcond, {10},"%int {{5}}_c"::"%real {{5}}_c",")","subroutine",")")] | Системная переменная sysRcond формируется в процессе проверки блокового условия и содержит имя файла, по которому будет производиться поиск контекстов; по номеру выполненного условия выбирается блоковая функция для работы с эти файлом, производится поиск контекста по заданным граничным условиям и запись его в блок. |
|2|%%{subroutine} {[a-z]+[_a-z0-9]*[ |&|(]} | #[{2}|1..-2//{{5}}] | Начало блока 2: имя п/п выделяется из второй группы (без последнего граничного с именем символа) и записывается в ячейку пять общего архива. |
|2|${)} | Конец блока 2: строка не совпадает с началом блока, т. к. закрывающая скобка находится в другой строке. | |
|2[file=d:\docci\files_&1|1 \{{5}}.c :: file=d:\docci\files_&1|1 \&3|3 ]|%$ | #[BlockFile(extr, sysRcond, {10},"int {{5}}"::"real {{5}}",")","subroutine",")") :: BlockFile(extr, sysRcond, {10},"%int {{5}}_c"::"%real {{5}}_c",")","subroutine",")")] | Контекстные преобразования аналогичные преобразования блока 1. |
Завершение цикла 3:
#КОНЕЦ:3
19. Создание левого списка файлов htm-файлов каталога d:\docci\cat\&1|1 \ (например, для подкаталога am).
20. Создание правого абстрактного списка htm-файлов каталога d:\docci\cat\&1|1 \ с добавлением к именам файлов окончания _c .
21. Переименование файлов из левого списка в правый (например, Am00r. htm в Am00r_c. htm).
22. Перевод имен файлов на нижний регистр в каталоге d:\docci\cat\&1|1 \ .
Завершение цикла 1:
#КОНЕЦ:1
Полный текст сценария: www. srcc. msu. su/viz/teconv-h/resurs/docscrpt. html
Для иллюстрации приведем отображение в Интернете исходной и выходной документации (для программ SF60R и sf60r_c), полученной с применением данного сценария:
Подпрограмма: SF60R (версия SF61R)
Назначение
Вычисление функции распределения вероятностей Пуассона.
Математическое описание
SF60R вычисляет вероятности того, что целочисленная случайная величина, распределенная по закону Пуассона с параметром RLАМ, примет значение I
P {x = I} = T(I + 1) = (RLAM) I exp (- RLAM) / I! , I = 0, 1, ..., K
а также вероятность P = P {x £ K} , т. е.
K
P = å T(I + 1)
I=0
M. Abramowitz, I. A.Stegun, Handbook of Mathematical Functions, New York, Dover Publications, Inc., 1965.
Использование
SUBROUTINE SF60R (K, RLAM, T, P)
Параметры
K - | максимальное значение I, для которого вычисляется вероятность P {x = I} (тип: целый); |
RLAM - | заданный параметр распределения вероятностей Пуассона (тип: вещественный); |
T - | вещественный вектоp длины K + 1, содержащий вычисленные значения вероятностей P {x = I} , 0 £ I £ K; |
P - | вещественная переменная, содержащая вычисленное значение вероятности P {x £ K}. |
Версии
SF61R - | вычисление функции распределения вероятностей Пуассона P {x £ K} (см. замечания по использованию). |
Вызываемые подпрограммы: нет
Замечания по использованию
Если P{x = I} меньше наименьшего представимого на данной ЭВМ вещественного числа, то программа полагает T(I)=0. Если RLAM £ 0, то P{x £ K}=1. , T(1)=1., I(J)=0, 2 £ Ј £ K. Подпрограмма SF61R имеет следующий список формальных параметров |
Пример использования
REAL T(2)
K = 1
RLAM = 0.6
CALL SF60R (K, RLAM, T, P)
Результаты:
T(1) = 0.
T(2) = 0.
Подпрограмма: sf60r_c (версия sf61r_c)
Назначение
Вычисление функции распределения вероятностей Пуассона.
Математическое описание
sf60r_c вычисляет вероятности того, что целочисленная случайная величина, распределенная по закону Пуассона с параметром RLАМ, примет значение I
P {x = I} = T(I + 1) = (RLAM) I exp (- RLAM) / I! , I = 0, 1, ..., K
а также вероятность P = P {x £ K} , т. е.
K
P = å T(I + 1)
I=0
M. Abramowitz, I. A.Stegun, Handbook of Mathematical Functions, New York, Dover Publications, Inc., 1965.
Использование
int sf60r_c (integer *k, real *rlam, real *t, real *p)
Параметры
k - | максимальное значение i, для которого вычисляется вероятность p {x = i} (тип: целый); |
rlam - | заданный параметр распределения вероятностей Пуассона (тип: вещественный); |
t - | вещественный вектоp длины k + 1, содержащий вычисленные значения вероятностей p {x = i} , 0 £ i £ k; |
p - | Вещественная переменная, содержащая вычисленное значение вероятности p {x £ k}. |
Версии
sf61r_c - | вычисление функции распределения вероятностей Пуассона p {x £ k} (см. замечания по использованию). |
Вызываемые подпрограммы: нет
Замечания по использованию
Если p {x = i} меньше наименьшего представимого на данной ЭВМ вещественного числа, то программа полагает t(i) = 0. Если rlam £ 0, то p {x £ k} = 1. , t(1) = 1., i(j) = 0, 2 £ j £ k. Подпрограмма sf61r_c имеет следующий список формальных параметров |
Пример использования
int main(void)
{
/* Local variables */
static float rlam;
extern int sf60r_c(int *, float *, float *, float *);
static int k;
static float p, t[2];
k = 1;
rlam = .6f;
sf60r_c(&k, &rlam, t, &p);
printf("\n %16.7e %16.7e \n",t[0],t[1]);
printf("\n %5i %16.7e %16.7e \n",k, rlam, p);
return 0;
} /* main */
Результаты:
t(1) = 0.
t(2) = 0.
ЛИТЕРАТУРА
1. . Delphi4. Учебный курс. М.: Изд-во “Нолидж”, 1999.
2. Том Сван. Delphi 4. Библия разработчика. К.;М.;СПб. : Изд-во “Диалектика”, 1998.
3. Марко Кэнту. Delphi 4 для профессионалов. М.: СПб: Изд-во “Питер”, 1999.
4. . Программирование в Delphi 5. М.: ЗАО “Издательство БИНОМ”, 2000.
4. . Приемы программирования в Delphi. М.: ООО “Бином-Пресс”, 2004.
5. . IBM PC для пользователя. 6-е изд. М.:Изд-во”ИНФРА-М”, 1995.
6. Дж. Фридл. Регулярные выражения. Библиотека программиста. СПб.: Изд-во “Питер”, 2001.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 |


