Операторы пропуска и прерывания
Иногда бывает нужным пропустить определенный цикл или вообще прекратить выполнение цикла. Для этого совместно с оператором условия if используются операторы: next - обеспечивает пропуск определенной итерации цикла Любой из операторов quit, done, stop - прерывает выполнение текущей программы, но при этом окно текущего документа закрывается и все имеющиеся в нем определения исчезают. Процедуры. Средства отладки процедур, их сохранение и использование (подключение) Процедуры Процедурами называют модули программы, имеющие самостоятельное значение. Определение процедуры Maple имеет следующий общий синтаксис: proc (|список формальных параметров|) | local список локальных параметров | end proc; При объявлении процедуры единственным обязательным параметром является последовательность операторов,формирующих тело процедуры. Остальные параметры, определяющие локальные и глобальные переменные, список формальных параметров, задающие специальные опции режима выполнения процедуры и строку описания, могут полностью отсутствовать. В предыдущих версиях Maple заверщающим процедуру оператором был end; или end:. Последовательность ключевых слов end proc; в предыдущих версиях недопустима. Простейшая форма задания процедуры следующая:
name:= proc (Параметры) Тело процедуры end; Процедуры имеют имя и список параметров (даже если он пустой). Процедуры вызываются указанием их имени со списком фактических параметров.
name (Фактические параметры);
Несоответствие фактических параметров типу заданных переменных ведет к сообщению об ошибке и к отказу от выполнения процедуры.
Для явного определения переменных в теле процедуры локальными служит ключевое слово local, а глобальными - ключевое слово global. > m:=0; m:= 0 > modc:=proc(z) > m:=evalf(sqrt(Re(z)^2+Im(z)^2)) > ### WARNING: `m` is implicitly declared local > end; Warning, `m` is implicitly declared local modc:= proc(z) local m; m:= evalf(sqrt(Re(z)^2 + Im(z)^2)) end В данном примере Maple выводит сообщение о том, что переменная m должна быть объявлена локальной, и сам же это делает в строке вывода. Иногда бывает необходимо, чтобы некоторые переменные после выполнения процедуры приняли значения, полученные в ходе ее выполнения. Тогда в процедуре эти переменные надо объявить глобальными.Это иллюстрирует следующий пример: > a:=1;b:=1; a:= 1 b:= 1 > fg:=proc(x,y) global a,b; > a:=x^2;b:=y^2; > return(sqrt(a+b)); > end; fg:= proc(x, y) global a, b; a:= x^2; b:= y^2; return(sqrt(a + b)) End > fg(3,4); 5 > a;b; 9 16 Обычно процедура возвращает значение последнего выраженияв ее теле. Для вывода какого-либо другого значения используют оператор возврата return
> modc:=proc(z) > evalf(sqrt(Re(z)^2+Im(z)^2)); > return(Re(z)); > end; modc:= proc(z) evalf(sqrt(Re(z)^2 + Im(z)^2)); return(Re(z)) end > modc(3.+I*4.); 3. При профессиональной подготовке процедур пользователь должен предусмотреть поведение процедуры при возможных ошибках и выдачу соответствующего сообщения. Для этого используется оператор error: error строка сообщения |, сприсок параметров|, где строка сообщения - это строка, которая участвует в формировании общего сообщения об ошибке в процедуре после ее завершения оператором error . Если в ней заданы специальные переменные, начинающиеся с символа процента (%), за которым следует целое число без знака или со знаком минус, то вместо нее в строку сообщений подставляется значение переменной из списка параметров, причем абсолютное значение целого числа соответствует порядковому номеру параменной в списке. В случае целого числа со знаком минус значение соответствующего параметра преобразуется в порядковое числительное (с точки зрения английского языка) и подставляется в строку сообщений. Специальный параметр %0 будет отображать через запятую и пробел все значения переменных из списка параметров. Наиболее часто этот оператор просто выводит сообщение об ошибке в виде: error ('string'), где string - строковое сообщение.
> f:= proc (x) if x<0 then error(`invalid x`, x) else x^(1/2) fi end: > f(-3); Error, (in f) invalid x, -3 В объявлении процедуры можно определить опции, включаемые словами: option (список опций через запятую) remember - определяет таблицу памяти для процедуры Опция builtin применяется для идентификации всроенных процедур Maple, находящихся в его ядре и реализующих разнообразные команды и функции. При полном вычислении подобных функций командой eval() опция builtin информирует пользователя о том, что команда является встроенной, а отображаемый уникальный номер служит для ее быстрой идентификации и выполнения.
Таблица значений процедуры представлена четвертым операндом типа procedure, т.е. ее можно отобразить, выполнив команду op(4, eval(F)), где F - имя процедуры. Для удаления записи из таблицы значений достаточно соответствующему элементу присвоить его же собственное имя с помощью команды evaln(). Удалить полностью всю таблицу значений процедуры можно, подставив значение NULL в четвертый операнд ее типа procedure. Опция system используется совместно с опцией remember и идентифицирует процедуру как "системную функцию", для которой таблица значений удаляется во время процедуры сборки мусора, которая автоматически запускаеся системой Maple. Если для какой-либо пользовательской процедуры эта опция не указана, то при сборке мусора ее таблица значений не удаляется из памяти. Самостоятельно инициировать процедуру сборки мусора можно, выполнив команду gc() (garbage cjllection) без параметров.
Опция trace задает в прцедуре вывод кроме результатов вычислений и отладочной информации при обращении к процедуре.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|