Купить Matlab  |  Mathematica  |  Mathcad  |  Maple  |  Statistica  |  Другие пакеты Поиск по сайту
Internet-класс  |  Примеры  |  Методики  |  Форум  |  Download
https://hub.exponenta.ru/


Программирование в среде Maple


В начало книги

 

Предметный указатель

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

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

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

Для оперирования параметрами процедуры в Maple введены специальные функции:

args[i] или args[i..j] - последовательность фактических параметров (аргументов), передаваемых процедуре

и nargs - число параметров, передаваемых процедуре.

При помощи функции args[i] можно выделить часть последовательности параметров, передаваемых процедуре, что очень удобно при программировании некоторых процедур, например, в следующей процедуре определяется максимальное из последовательности чисел

> maximum := proc () local r, i;
r := evalf(args[1]);
for i from 2 to nargs do if evalf(args[i]) > r then r := evalf(args[i]) fi od;
r
end;maximum(Pi,exp(1),3);

[Maple Math]
[Maple Math] [Maple Math]

[Maple Math]

Формальные параметры процедуры можно также применить для передачи внутрь процедуры имени, с целью присвоения результата выполнения процедуры. Запишем процедуру

> Square:=proc(x::anything, y::name)
y:=x^2;
end;

[Maple Math]

В этой процедуре результат присваивается второму параметру. Пусть, например этот параметр ans

> Square(d,ans);ans;

[Maple Math]

[Maple Math]

Однако при таком использовании параметра нужно соблюдать осторожность. Если мы не отменим присвоение, то Maple сообщит ошибку при повторном вызове процедуры.

> Square(d,ans);ans;

Error, Square expects its 2nd argument, y, to be of type name, but received d^2

[Maple Math]

Ошибка связана с тем, что Maple внутри процедуры не перевычисляет параметр y и пытается присвоить одно выражение другому. Чтобы этого не происходило нужно имя фактического параметра, в данном случае ans заключать в прямые кавычки, то есть писать 'ans`.

А теперь запишем первым параметром процедуры переменную а , которой произведено двухуровневое присвоение

> a:=b:
b:=c:
Square(a,'ans');ans;

[Maple Math]

[Maple Math]

Мы видим, что в этом случае выполняется вычисление до последнего уровня присвоения. Это объясняется тем, что передаваемый внутрь процедуры фактический параметр вычисляется на интерактивном уровне еще до передачи внутрь процедуры.

В начало страницы К предыдущему разделуК следующему разделу

Предметный указатель

| На первую страницу | Поиск | Купить Matlab

Исправляем ошибки: Нашли опечатку? Выделите ее мышкой и нажмите Ctrl+Enter


Copyright © 1993-2024. Компания Softline. Все права защищены.

Дата последнего обновления информации на сайте: 04.03.17
Сайт начал работу 01.09.00