Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Операторы пропуска и прерывания

Иногда бывает нужным пропустить определенный цикл или вообще прекратить выполнение цикла. Для этого совместно с оператором условия if используются операторы:

next - обеспечивает пропуск определенной итерации цикла
break - прерывает выполнение фрагмента программы (или цикла), как только он встречается в ходе её выполнения

Любой из операторов quit, done, stop - прерывает выполнение текущей программы, но при этом окно текущего документа закрывается и все имеющиеся в нем определения исчезают.

Процедуры. Средства отладки процедур, их сохранение и использование (подключение)

Процедуры

Процедурами называют модули программы, имеющие самостоятельное значение.

Определение процедуры Maple имеет следующий общий синтаксис:

proc (|список формальных параметров|)

| local список локальных параметров |
| global список глобальных параметров|
| option список опций|
| description строка описания|
последовательность операторов

end proc;

При объявлении процедуры единственным обязательным параметром является последовательность операторов,формирующих тело процедуры. Остальные параметры, определяющие локальные и глобальные переменные, список формальных параметров, задающие специальные опции режима выполнения процедуры и строку описания, могут полностью отсутствовать.

В предыдущих версиях Maple заверщающим процедуру оператором был end; или end:. Последовательность ключевых слов end proc; в предыдущих версиях недопустима.

Простейшая форма задания процедуры следующая:

 

name:= proc (Параметры)

Тело процедуры

end;

Процедуры имеют имя и список параметров (даже если он пустой).

Процедуры вызываются указанием их имени со списком фактических параметров.

name (Фактические параметры);

Параметры процедуры задаются перечислением имен переменных proc(x,n,a); с помощью знака:: после имени переменной можно определить ее тип proc(n::integer). При вызове процедуры фактические параметры подставляются на место формальных.

Несоответствие фактических параметров типу заданных переменных ведет к сообщению об ошибке и к отказу от выполнения процедуры.
Переменные, указанные в списке формальных параметров, являются локальными, т.е. их изменение происходит только в теле процедуры.

Количество фактических параметров не обязательно должно быть равно количеству формальных параметров процедуры. Если их меньше, то ошибка при выполнении процедуры возникнет только тогда, когда при вычислении тела процедуры действительно потребуется значение этого отсутствующего параметра. Если фактических параметров больше, чем формальных, то никакой ошибки не будет сгенерировано - дополнительные параметры будут просто проигнорированы.

Для явного определения переменных в теле процедуры локальными служит ключевое слово 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
system - определяет процедуру как системную
operator, arrow - определяет процедуру в нотации функционального оператора
trace - задает в процедуре вывод отладочной информации
package - используется для придания процедуре статуса пакетной
copyright - защищает процедуру от просмотра (запрещает отображать рператоры тела процедуры.)

Опция builtin применяется для идентификации всроенных процедур Maple, находящихся в его ядре и реализующих разнообразные команды и функции. При полном вычислении подобных функций командой eval() опция builtin информирует пользователя о том, что команда является встроенной, а отображаемый уникальный номер служит для ее быстрой идентификации и выполнения.

Обычно при объявлении процедуры Maple автоматически производит некоторые упрощения в ее теле. Опция operator предписывает дальнейшие упрощения в теле процедуры, рассматривая ее как математический оператор.

 

Используемая совместно с опцией operator опция arrow предписывает отображать процедуру как функциональный оператор с использованием "стрелочной" нотации и эквивалентна заданию процедуры в области вывода с помощью стрелки.

 

Опция remember. При вычислениях может оказаться так, что при реализации некоторого алгоритма необходимо много раз вызывать процедуру с одним и тем же набором фактических параметров. Для ускорения процесса ее вычисления она может быть сконструирована так, что результаты ее вычисления с заданными параметрами автоматически записываются в специальную таблицу значений. При последующем обращении к процедуре с этим набором фактических параметров ее значение не вычисляется вновь, а берется из таблицы значений. Для конструирования процедуры, записывающей результаты своего вычисления в таблицу, достаточно задать в ее теле опцию remember.

 

Использование этой опции особенно полезно при определении рекурсивных процедур (в теле которых имеется обращение к самой себе). На рисунке слева вычисляется 2000 число Фибоначи с помощью процедуры F предыдущего примера (она переименована в FR), в которую вставлена опция remember. Сначала вычисляется FR(1000), а затем вычислено значение FR(2000). Обратный слэш в области вывода указывает на перенос строки. Представляете, что это за число!

Таблица значений процедуры представлена четвертым операндом типа procedure, т.е. ее можно отобразить, выполнив команду op(4, eval(F)), где F - имя процедуры.

Для удаления записи из таблицы значений достаточно соответствующему элементу присвоить его же собственное имя с помощью команды evaln(). Удалить полностью всю таблицу значений процедуры можно, подставив значение NULL в четвертый операнд ее типа procedure.

Опция system используется совместно с опцией remember и идентифицирует процедуру как "системную функцию", для которой таблица значений удаляется во время процедуры сборки мусора, которая автоматически запускаеся системой Maple. Если для какой-либо пользовательской процедуры эта опция не указана, то при сборке мусора ее таблица значений не удаляется из памяти. Самостоятельно инициировать процедуру сборки мусора можно, выполнив команду gc() (garbage cjllection) без параметров.

Любая строка в списке опций, начинающаяся со слова "Copyright", трактуется Maple как опция Copyright, которая запрещает отображать операторы тела процедуры, если только значение переменной интерфейса verboseproc, отвечающей за отображение на рабочем листе текста процедуры, не установлено равным 2 или больше. Последним в заголовке процедуры может быть задана строка описания в операторе description. Она не влияет на выполнение процедуры и единственное ее предназначение предоставить строку комментария, которая отображается в области вывода при объявлении процедуры или ее чтения из файла или библиотеки. Дело в том, что при распечатке процедуры из ее тела удаляются все комментарии и только эта строка может дать пользователю информацию о предназначении процедуры. Более того, если процедура определена с опцией Copyright, то эта строка является единственной отображаемой из всех операторов тела процедуры.

Опция trace задает в прцедуре вывод кроме результатов вычислений и отладочной информации при обращении к процедуре.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...