Обращение к функции может иметь следующие форматы:
[var1, var2 ,…, vark ]=ИмяФункции(СписокВходныхФактическихПараметров);
var=ИмяФункции(СписокВходныхФактическихПараметров)
ИмяФункции(СписокВходныхФактическихПараметров)
Первый формат предусматривает необходимость вычисления в теле функции kзначений, которые в результате выполнения функции присваиваются kвыходным параметрам и выводятся на экран (или только сохраняются под их именами в случае, если после обращения к функции стоит точка с запятой, которая гасит их вывод).
Второй формат используется, если функция имеет только один выходной параметр. Формат практически идентичен первому, но здесь имя выходного параметра можно не заключать в квадратные скобки.
Третий формат обращения к функции используется в двух случаях. В первом случае функция имеет один выходной параметр, но он не используется в выражениях (в этом случае значение выходного параметра записывается в переменную ans). Во втором случае функция не имеет выходных параметров, а, например, предназначена для вывода результатов расчета (построение графика, таблицы значений и т.п.).
По умолчанию все переменные, описанные в теле функции, являются
локальными.
Простейшим случаем использования внутренних встроенных функций является сценарий, состоящий из одной функции. Рассмотрим пример создания сценария с описанной внутри него одной функцией f un ( x )= ax 2 + x /2 и одним входным параметром, сохранения этого сценария в sce-файле, загрузки и обращения к нему из Командного окна.
Для этого необходимо выполнить следующие шаги:
1) Загрузить текстовый редактор SciNotes.
2) Описать сценарий со встроенной функцией f un ( x )в редакторе.
3) Сохранить сценарий в sce-файл под именем РИС1526.
4) Загрузить сценарий в Командном окне командой exec.
5) Выполнить (вызвать) функцию f un ( x ).
На рис. 1.5.2-6 показаны окно редактора SciNotesпосле написания сценария, содержащего функцию f un ( x ), записанного в файл РИС1526. sce . Ниже приведено содержимое Командного окн а, из которого происходит загрузка файла-сценария РИС1526, двукратное обращение к встроенной функции f un ( x )и в котором отображаются результаты ее вы выполнения.
При выполнении команды fun ( x ), функция принимает один фактический входной параметр x=5 (переменная xдолжна быть предварительно определена), вычисляет с использованием встроенной в сценарий функции значение по соответствующей формуле и возвращает его через выходной параметр ans. Второе обращение в функции показывает возможность использования функции f unв операторе присваивания. Здесь в качестве параметра xиспользовано числовое значение, а результат выполнения присваивается переменной y.
--> // Загрузка файла РИС15206. sce и выполнение функции fun -->exec('РИС15206.sce',0); --> -->clear -->x = 5; // Определение значения параметра х -->fun(х) // Вычисление функции fun ( x ) при х = 5 ans = 27.5 --> -->y = fun(4) // Использование функции в операторе присваивания y = 18. |
Рис. 1.5.2-6 Окно SciNotesи Командное окно
Тело функции может включать в себя любые выражения Scilab, функции ввода/вывода, операторы управления, комментарии, пустые строки и вложенные функции и многое другое.
Обратите внимание, что любые переменные, которые определены в функциях, хранятся в своих локальных Рабочих областях данных каждой функции, то есть отдельно от Рабочей области Обозревателя переменных, в которой хранятся только переменные, определенные в Командном окне и сценариях.
В следующем примере, приведенном на рис. 1.5.2-7, представлено описание сценария, включающего одну встроенную функцию с несколькими выходными параметрами. Заметим, что список выходных параметры в заголовке функции заключен в квадратные скобки, а сами параметры отделены друг от друга запятыми. Загрузим файл-сценарий РИС1527.sceи вызовем функцию quadeq, которая должна по заданным коэффициентам квадратного уравнения вычислить его корни.
--> // Загрузка файла РИС15207. sce и выполнение функции quadeq -->exec('РИС1527.sce', 0); --> -->clear --> // Матрицы с заданными коэффициентами трех уравнений -->A = [1 3 5]; B = [2 4 6]; C = [1 2 4]; --> [X1, X2] = quadeq (A, B, C) // Обращение к функции quadeq X2 = -1. -0.6666667 - 0.4714045i -0.6 - 0.663325i X1 = -1. -0.6666667 + 0.4714045i -0.6 + 0.663325i |
Рис. 1.5.2-7 Содержимое окна SciNotesи Командного окна после загрузки сценария РИС1527 и выполнения функции quadeq
В двух рассмотренных выше примерах сценарии РИС1526 и РИС1527 были созданы в редакторе SciNotes,загружены и вызваны на выполнение из Командного окна, куда и были выведены результаты.
Чтобы запустить на выполнение сценарий из окна редактора SciNotes, достаточно нажать кнопку (Выполнить) или выбрать команду Выполнить в одноименном элементе меню. В результате в строке Командного окна появится команда execc указанием полного пути к файлу, а курсор устанавливается в начале следующей строки.
Следует помнить, что переменные, созданные внутри функции, являются локальными и действуют только в пределах этой функции. Переменные, созданные в пространстве вне функций, являются глобальными и доступны во всех функциях данного файла и текущей рабочей сессии.
В одном файле, созданном в редакторе, который является, по сути дела, всегда сценарием, может быть описано сразу несколько функций. Эти функции могут общаться между собой посредством имен функций, а также входных и выходных параметров.
Общая структура сценария, содержащего несколько встроенных внутренних функций сценария, может быть следующей:
// Имя Сценария и его назначение
Тело сценария
...
functionf1
ТелоФункции f1
End
…
functionfm
ТелоФункции fm
End
// end сценария
Эта структура и некоторые другие вопросы, касающиеся области видимости данных при использовании нескольких функций, будут рассмотрены подробно в п.1.5.3.
1.5.3. Общая структура функций и сценариев.
Области видимости переменных
Общая структура кода сценария
В предыдущем разделе были даны правила описания сценариев и внутренних встроенных в них функций, а также приведены соответствующие примеры их описания, где в каждом sce -файле содержалось по одной функции. Однако в каждом сохраненном sce -файле могут находиться описания более чем одной независимой функции, причем в каждую из них может быть вложена другая функция (рис 1.5.3-1).
--> // Загрузка и выполнение вложенных функцией -->exec('РИС15301.sce', 0); -->clear --> x = 2; --> r = mvf(x) r = 2. |
Рис. 1.5.3-1 Пример реализации вложенных функцией
Как уже отмечалось, в сценарии программные коды независимых функций должны располагаться одна за другой, когда как вложенные функции располагаются внутри функций.
На рис 1.5.3-2 показано сначала обращение из Командного окна к
функции vstfun, использующей функции vfun 1 и vfun 2, расположенные в сценарии, а затем отдельно к функции vfun 2. Этот пример показывает, что все остальные функции, при подключении сценария командой exec становятся доступными для использования в Командном окне.
--> // Загрузка сценария РИС15302 и обращения к vstfun , vfun 1 и vfun 2 -->exec('РИС15302.sce', 0); --> -->clear -->y = vstfun(2) //Обращение к v st fun2(2), а из нее к vfun 1(2) и vfun 2(2) y = 2. --> -->f=vfun1(2), f = vfun2(2) //Независимое обращение к vfun 1(2) и v fun 2(2) f = 0. f = 2. |
Рис. 1.5.3-2 Пример обращения к функциям сценария
Дата: 2019-11-01, просмотров: 385.