Автор: Пользователь скрыл имя, 17 Марта 2011 в 11:57, реферат
Пожалуй, одно из наиболее впечатляющих свойств программы Maple - превосходная графика. Команды построения графиков и анимации Maple позволяют удовлетворить большинство научных и инженерных потребностей, могут служить прекрасной иллюстрацией в учебном процессе.
> f:=proc()
local a,b;
print(`Вначале ["] имеет значение`,[%]);
a:=b;
b:=c;
a+1;
print(`Теперь ["] имеет значение`,[%]);
end;
> f();
Глобальные переменные доступны изнутри любой процедуры и на интерактивном уровне. Таким образом глобальные переменные внутри процедуры вычисляются также, как в интерактивном режиме, то есть до последнего уровня присвоения, кроме тех случаев, когда глобальная переменная является таблицей, массивом или процедурой. В этих последних трех случаях переменная вычисляется до последнего присвоенного имени (last name evaluation).
Процедурное программирование.
Параметры процедуры
В строке определения
процедуры стоят формальные параметры.
Их имена могут быть произвольными
(при вызове процедуры используются
фактические имена параметров), однако
важно их количество и определение
типа. Параметров может не быть вовсе,
однако и в этом случае в определении
процедуры и при вызове ее нужно обязательно
записывать пустые скобки. В общем случае,
при вызове процедуры число фактических
параметров не обязательно должно совпадать
с числом формальных параметров. 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);
Формальные параметры
процедуры можно также
> Square:=proc(x::anything, y::name)
y:=x^2;
end;
В этой процедуре
результат присваивается
> Square(d,ans);ans;
Однако при таком
использовании параметра нужно
соблюдать осторожность. Если мы не
отменим присвоение, то Maple сообщит
ошибку при повторном вызове процедуры.
> Square(d,ans);ans;
Error, Square expects its 2nd argument,
y, to be of type name, but received d^2
Ошибка связана
с тем, что Maple внутри процедуры не
перевычисляет параметр y и пытается присвоить
одно выражение другому. Чтобы этого не
происходило нужно имя фактического параметра,
в данном случае ans заключать в прямые
кавычки, то есть писать 'ans`.
А теперь запишем
первым параметром процедуры переменную
а , которой произведено двухуровневое
присвоение
> a:=b:
b:=c:
Square(a,'ans');ans;
Мы видим, что в
этом случае выполняется вычисление
до последнего уровня присвоения. Это
объясняется тем, что передаваемый
внутрь процедуры фактический параметр
вычисляется на интерактивном уровне
еще до передачи внутрь процедуры.
Процедурное программирование.
Переменные операционной среды
Эти переменные могут
использоваться в качестве переменных
для простых присваиваний внутри
процедур. Эти присваивания автоматически
отменяются при выходе из процедуры.
Значение такой переменной не изменяется
внутри всех подпрограмм, вызываемых из
данной процедуры, если оно не замещено
локально. Другими словами, если в
подпрограммах их значения изменились,
то нет необходимости их восстанавливать,
это произойдет автоматически.
Помимо уже упомянутого Ditto -оператора ( ", "", """ ) Maple содержит следующие встроенные переменные операционной среды:
Digits - задает число десятичных
знаков в числах с плавающей запятой
Normalizer - используется
в степенных рядах для упрощения коэффициентов
Testzero - используется
в степенных для выявления деления на
нуль
mod - используется в арифметике
по модулю m
printlevel - используется
для задания уровня вложенных подпрограмм,
выводимых на дисплей
при распечатке программы
Введем, например процедуру:
> t := proc() Digits := Digits +
5; end:
Выполнение процедуры
дает увеличение нормального значения
переменной Digits на 5:
> t();
Однако, на интерактивном
уровне значение этой переменной автоматически
возвращается к исходному нормальному
значению:
> print(Digits);
Пользователь также
может вводить переменные операционной
среды. Их имя должно начинаться с
лексемы _Env, за которой может следовать
любая последовательность разрешенных
для имени символов.
Теперь определим
пользовательскую переменную операционной
среды _EnvX и присвоим ей некоторое значение
> _EnvX := x^2+1;
Напишем процедуру,
переопределяющую _EnvX
> p := proc() _EnvX := `polynom` end:
p();
Однако на интерактивном
уровне значение переменной _EnvX не изменилось:
> _EnvX;
роцедурное программирование.
Команда прерывания ERROR
С целью прерывания
процедуры и вывода соответствующей
ошибки, например, при неправильном
вводе типа параметра, в процедуре
используется команда ERROR(`строка сообщения`).
> SUM:=proc(n)
local i,total;
if not type(n,integer) then
ERROR(`Вводить можно только целое число`);
fi;
total:=0;
for i from 1 to n do
total:=total+i;
od;
total;
end;
> SUM(a);
Error, (in SUM) Вводить можно
только целое число
роцедурное программирование.
Команда прерывания ERROR
С целью прерывания
процедуры и вывода соответствующей
ошибки, например, при неправильном
вводе типа параметра, в процедуре
используется команда ERROR(`строка сообщения`).
> SUM:=proc(n)
local i,total;
if not type(n,integer) then
ERROR(`Вводить можно только целое число`);
fi;
total:=0;
for i from 1 to n do
total:=total+i;
od;
total;
end;
> SUM(a);
Error, (in SUM) Вводить можно
только целое число