Говорухин В., Цибулин Б. Компьютер в математическом исследовании (1185927), страница 60
Текст из файла (страница 60)
та=гает Реса(Е): епс: та та = 24 Конечно, описанная функция плохо подходит для вычисления факториала. При повторном запуске цикла получим 576, так как значение переменной РЕй5 сохраняется, пока не завершен сеанс нли не очищено рабочее пространство командой с1еаг.
Каждый и)-файл может вызывать или ссылаться на другой п)-файл, причем допустим рекурсивный вызов. Рекурсивной называется функция, которая вызывается из собственного тела. Приведем стандартный пример вычисления факториала. Для этого подготовим файл Гает йес.)п следующего вида: бюст!оп у-Расе хес(х) пт х==1. у-1; гетогп. е!ае у-х»Еаст вес(х-1); епп Обратимся к этой и)-функции для вычисления факториала: » Гает нес(4) апа- 24 По умолчанию доступны все и)-файлы из текущего рабочего каталога, для указания других директорий имеется команда раг)).
Пути можно задать также при помощи подсистемы РасЬ Вготтзег. Система МАТ) АВ содержит множество п)-файлов, дополняющих базовый комплект. Эти файлы снабжены комментариями, из которых можно узнать их назначение, особенности применения, использованные алгоритмы и литературу. Напомним, что справочная система Екоманда ))е1р) позволяет получить перечень всех файлов и узнать назначение каждого. Ознакомиться с содержимым конкретного файла СОММАМ0 можно, отыскав его в соответствующем каталоге либо просто набрав в строке ввода 'суре СОИИАИ0 Типичный пример оформления файла дает функция пап~ для вычисления ранга матрицы. Файл гап)(.)в располагается в подкаталоге 1соо! Ьох~п)ас(аЬ\п)астып, и после выполнения команды 322 Глава 12. Элементы языка НАТКАВ » Суре гапк на экране появится следующий текст: ГипсС!оп г - гапк(А.СЬ1) ЖИАИК МаСю х гапк.
Ж РАИК(А) ргоч!без ап езС!пвСе от Сие пивпег от 1чпеаг1у Ж !ппереппепС гвчз ог со1ивпз от а васг!х А Ж ЙАИК(АДЬ1) !$ Спе пивЬег от $!при1аг ча1иез от А Ж Спас аге 1агйег Сиап Со1. Ж ЙАИК(А) изез Спе Оетаи1С СЬ1-вах($!се(А))*пега(А)*ерз. Ж Соруг~9ЬС (с) 1984-98 Ьу Тпе МаСЬИогкз, 1пс. Ж Жйеч!$!оп: 5.7 $ $0ате: 1997711721 23:38:49 $ 5 5чо(А). !т патри-1 Со! - вах(юзе(А)') * вах($) * ерз; епо г 5ив(5 > С01).' В то же время при попытке вывести текст команды ((еС получаем: » Суре пес Пес !$ а Ьи~1С-(и типот!Ьп таблица 12.9. Команды работы с параметрами функций Команда Назначение Число входных параметров Число выходных параиетров Список входных параметров Список выходных параметров Сообщение о несоответствии числа входных параметров Имя входного параметра пагр(п пагроиС чагаг9чп чагагроиС пагрсЬК !приспаве При выполнении функции может понадобиться вывести некоторую информацию, предупреждение или сообщение об ошибке.
Для этого можно воспользоваться ко- мандами, приведенными в табл. 12.10. Это означает, что команда беС реализована в виде встроенной функции для повышения скорости ее выполнения, В тексте команды гапк использовано служебное слово паг9! и, означающее число поступивших в функцию параметров. Перечень зарезервированных терминов, обеспечивающих работу с функциями в случае переменного числа входных и выходных параметров, дан в табл. 12.9. Используя эти имена, можно создавать функции, способные обрабатывать обращения к функции с различным числом входных и выходных параметров. Например, из приведенного текста функции гапк следует, что второй параметр — погрешность СЬ1 — является дополнительным.
Если при обращении к функции гапк его нет, то погрешность вычисляется по формуле Со1-пах($!ЖЕ(А) ')*гнх(зчсКА))* ерз, где А — входная матрица, а ерз — наименьшее вещественное число. Элементы програмиирования 323 Таблица 12.10. Команды вывода сообщений Команда Назначение Вывод сообщения на дисплей Предупреждающее сообщение Сообщение об ошибке Сообщение о последней ошибке Игнорировать ошибки о15р нагл!п0 еггог 1азтеггог еггогтгар Строки, передаваемые в качестве параметров, могут быть командами МАТЕАВ, их интерпретация производится при помощи команды ена1.
Текстовая строка анализируется, и далее либо выводится сообщение об ошибке, либо воспринимается введенное выражение, оператор или команда. Например: » з-'2-со!(р~)'; еча1(з) апз- 3 Если при наборе команды еча1 сделана ошибка, то в командном окне появится сообщение о характере ошибки. Например: » еча)("2соз(р1)") ??? 2 1 Н(зз1пй орегасог, соаша, ог зем1-со1оп.
Вертикальная черта указывает на предполагаемое место ошибки, а текстовый комментарий перечисляет возможные причины. В аналогичной ситуации для команды еча1, выполняющейся в ш-функцин, МАТЕАВ выведет сообщение только о строке, в которой обнаружена ошибка.
Для получения диагностики можно запустить команду ена1, указав вторым параметром имя подготовленной ш-функции с вызовом команды 1азгеггог. При численном интегрировании или решении дифференциальных уравнений требуется многократно вычислять значения функции, содержащей интегрируемое выражение или правую часть дифференциального уравнения. Для вычисления внешней функции применяется команда Теча), имеющая следующий формат: теча1("ЕОН",РАРЛН) По атой команде МАТЮКАВ передает параметры РДйдН функции Е()Н и производит требуемое вычисление. Простой пример: » Геча1("з!п".[р1/2 0 р(/6)) апз 1.0000 0 0.5000 В МАТ[.АВ 6 допускается также обращение к функции с префиксом «©», тот же результат будет получен по команде » Геча1(вз(п,[р1/2 0 р1/6)) Для встроенных функций имеется аналогичная команда Ьн!10 ыь 324 Глава 12.
Элементы языка МАТЕАВ Для проверки существования файла, перелтенной и других существует команда е=ех1 51('а ' ), возвращающая целое число, по которому можно определить статус переменной или имени, см. табл. 12.11. Таблица 12.11, Проверка существования объекта при помощи команды ех1зг Результат Аргумент Каталог Р-функция Встроенная функция Функция 5!мп11пп еех-файл и-файл Переменная Не относится ни к одному нз перечисленных типов В новых реализациях МАТ1 АВ появилась возможность введения подфункции вцьгзпст поп. Для этого в один файл объединяются основная функция, дающая имя файлу, и следующие за ней несколько стандартно оформленных функций. Дополнительные функции могут вызываться только из основной функции.
Для каждой функции из одного файла внутренние переменные являются локальными, а для обеспечения общего доступа к какой-нибудь переменной ее следует объявить глобальной. Например, файл 1птегр1.гп из каталога 1оо1Ьох1гпа11аЬ~ро1уГцп содержит основную функцию 1п1егр1 и ряд подфункций: 11пеаг, сць1 с, пез ге51. При отладке бывает необходимо подменить функцию, не удаляя ее из каталога. Для этого создается поддиректория с именем рпча1е, и тогда при совпадении имен функций первой будет обнаружена и соответственно станет использоваться функция из директории рпча1е.
Это удобно для отладки собственных функций, которые вводятся, чтобы заменить стандартные тексты. При этом директорию рпуаге не нужно объявлять в списке имен ратЬ. Работа с функциями происходит следующим образом. Когда МАТ1.АВ встречает новое имя, то сначала проверяет, не совпадает ли зто имя с какой-нибудь переменной. Затем проверяется, не подфункция (впЫппс11оп) ли это. После этого просматривается рпуа1е директория, и только потом имя функции ищется в списке ратЬ.
При первом обращении к функции МАТ1.АВ проводит лексический разбор текста и создает так называемый псевдокод, который хранится в памяти и используется в сеансе для работы. Благодаря этому экономится время расчета. Чтобы удалить из памяти псевдокод функции НАНЕ, нужно использовать команду с1 еаг НАИЕ. При помощи команды рсобе можно сохранить псевдокод нужной функции, чтобы не проводить лексический анализ в последующих сеансах.
Отметим, что в МАТБАВ возможны два способа обращения к командам — обычный, когда имя команды ссптпапб и список аргументов агдипеп1 отделяются пробелами сопеапо агдпеепт Элементы программирования 325 а также вызов функции с тем же именем и параметрами, оформленными в виде строк: соапвпе["агдцмепт') Так, убрать оси на рисунке позволяют команды ах)в[ "отт") иах15 отт (см, главу 14 «Графика МАТ1.АВ»). Использование функции удобнее в том случае, когда имена параметров агднпепт формируются в процессе выполнения программы, например при выводе результатов расчета в файлы с именами, содержащими даты. Эункции 1пИпе В МАТ1.АВ можно определить функцию одной переменной на сеанс при помощи команды тп1)пе.
Например: » тцп=ш1тпе["х"2/2-х 4/4") Гнп = 1п1тпе тцпсттоп: Гоп[к) - х 2/2-х 4/4 С введенной таким образом функцией можно выполнять различные операции. Продемонстрируем использование 1п11пе-функции для построения графика (команда тр101), нахождения корней (ттего) и вычисления интеграла (дпа0). Описания использованных команд даны в главах 14 «Графика МАТ].АВ» и 15 «Численный анализ в МАТ].АВ». Вначале построим график: » тр1ос[[цп,[-1.5 1.5]) 0.2 -О. =т.5 -0.5 0.5 1.5 Рис. 12.2.