Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Scilab / introscilab-v1.3-ru.pdf
Скачиваний:
57
Добавлен:
31.12.2018
Размер:
1.43 Mб
Скачать

pause приостановить выполнение функции и ожидать команд пользователя

resume продолжить выполнение функции abort завершить выполнение функции

Таблица 22. Отладочные инструкции Scilab.

function y = mysum (

istart , iend )

if

(

istart

< 0 )

then

 

y

= 0

 

 

 

 

return

 

 

 

end

 

 

 

 

if

(

iend

<

istart

) then

 

y

= 0

 

 

 

 

return

 

 

 

end

 

 

 

 

y

=

sum (

istart : iend )

endfunction

 

 

 

Следующий фрагмент позволяет убедиться, что функция mysum работает именно так, как задумано:

--> mysum ( 1 , 5 ) ans =

15.

--> mysum ( -1 , 5 ) ans =

0.

--> mysum ( 2 , 1 ) ans =

0.

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

6.7 Отладка функций. Инструкция pause

Вданном разделе мы рассмотрим основной метод отладки, позволяющий устранить большую часть простых ошибок. Этот метод основан на использовании инструкций pause, resume и abort, назначение которых раскрывает табл. 22.

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

Пусть требуется вычислить сумму целых чисел от istart до iend. Для этого определим функцию mysum, текст которой (приведен ниже) содержит ошибки.

Вчастности, второй аргумент, "foo", передаваемый функции sum, избыточен.

67

function

y =

mysum ( istart

, iend

)

y = sum

(

iend : istart ,

" foo "

)

endfunction

 

 

 

Следующий фрагмент отражает результат выполнения функции mysum:

--> mysum ( 1

,

10

)

!-- error 44

 

 

 

Wrong argument

2.

 

at line

 

2 of

function mysum called by :

mysum ( 1 ,

10

)

 

Для того чтобы обнаружить проблему, поместим инструкцию pause в тело функции mysum:

function y = mysum ( istart , iend ) pause

y = sum ( iend : istart , " foo " ) endfunction

Снова обратимся к функции mysum, передав ей те же самые аргументы:

--> mysum ( 1 , 10 )

Type ’resume ’ or ’abort ’ to return to standard level prompt .

-1->

Вданный момент мы находимся внутри тела функции mysum. Приглашение ”-1->” указывает, что текущему положению соответствует уровень -1 стека вызовов. Теперь мы можем проверить значения переменных istart и iend, введя их имена в консоли:

-1-> istart istart = 1.

-1-> iend iend =

10.

Чтобы увидеть, к какому результату приведет выполнение той или иной инструкции при текущих значениях переменных, скопируем эту инструкцию в консоль:

-1-

>y =

sum (

iend : istart , " foo " )

y =

sum

( iend

: istart , " foo " )

 

 

 

!-- error 44

Wrong argument 2.

Теперь легко видеть, что источником проблемы является именно введенная строка. Наличие второго аргумента функции sum является в данном случае ошибкой, поэтому удалим его:

-1->y = sum ( iend : istart )

y=

0.

После этой модификации выполнение функции mysum больше не приводит к ошибкам, однако результат по-прежнему неверен. Можно заметить, что переменные istart и iend перепутаны местами. Проверим результат выполнения более корректного, на наш взгляд, вызова и убедимся, что он совпадает с ожидаемым:

68

Соседние файлы в папке Scilab
  • #
    31.12.2018398 б373_tema.sce
  • #
    31.12.20183.02 Кб356 tema.sce
  • #
    31.12.20181.07 Кб34ChemDifur6II.sce
  • #
    31.12.20181.43 Mб57introscilab-v1.3-ru.pdf
  • #
    31.12.2018753 б39Neyavnayashema.sci
  • #
    31.12.20181.94 Кб37Partialderivative.sci
  • #
    31.12.20184.38 Mб109SciLab.pdf
  • #
    31.12.2018709 б37syst333.sci
  • #
    31.12.2018266 б34tema2.sce