> traperror(3/4);

3/4

> lasterror;

lasterror

> traperror(5/0);

Error, numeric exeption: division by zero

> lasterror;

'numeric exception: division by zero'

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

10.4.2. Преобразование программных кодов

В пакете расширения CodeGenetarion определены функции преобразования Maple-кодов в коды других языков программирования:

> with(CodeGeneration);

Warning, the protected name Matlab has been redefined and unprotected

[C, Fortran, IntermediateCode, Java, LanguageDefinition, Matlab, Names, Save, Translate, VisualBasic]

Например, преобразовать Maple-коды процедуры mode в коды языка MATLAB можно следующим образом:

> Matlab(mode);

Warning, the function names {Im, Re} are not recognized in the target

language

function modcreturn = modc(z)

 modcreturn = (sqrt(Re(z) ^ 2 + Im(z) ^ 2));

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

10.4.3. Работа с отладчиком программ

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

Допустим, мы составили некоторую процедуру demo, вычисляющую сумму квадратов чисел (1^2+2^2+...+n^2):

> demo:=proc(n::integer) local y,i:

> у:=3:

> for i to n do y:=y+i^2 od

> end;

demo := proc(n::integer) local y,i; y: = 0; for i to n do у:=i^2 end do end proc

> demo(3);

14

Чтобы включить отладчик в работу, надо исполнить команду stopat:

> stopat(demo);

[demo]

> demo(3); demo:

 1* y := 0;

DBG>

Признаком, указывающим на работу отладчика, является изменение приглашения к вводу со знака > на DBG> (как нетрудно догадаться, DBG означает debugger). Теперь, подавая команды next (следующий), step (шаг) и stop (остановка), можно проследить выполнение процедуры:

DBG> next

0

demo:

 2 for i to n do

    ...

   end do

DBG> step

0

demo:

 3 y := y+i^2

DBG> step

1

demo:

 3 y := y+i^2

DB3> step

5

demo:

 3 y := y+i^2

DBG> step

14

В последнем случае процедура по шагам дошла до конца вычислений; на этом работа отладчика завершается сама собой.

Можно также вывести листинг процедуры с помощью команды showstat:

> showstat(demo);

demo := proc(n::integer)

local y, i;

1* y := 0;

2  for i to n do

3   y := y+i^2

   end do

end proc

Обратите внимание, что в этом листинге строки вычисляемых элементов пронумерованы. Это сделано для облегчения разбора работы процедуры.

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату