Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Процедуры и блоки






Как мы уже знаем, процедура – это последовательность выражений MATHEMATICA, заданных подряд в одной строке и разделенных знаком "; " (точка с запятой). Выражения в процедуре вычисляются по порядку, и окончательный результат – это значение последнего выражения.

При задании процедур иногда приходится использовать " временные" переменные для хранения промежуточных результатов. Можно сделать так, чтобы переменные в двух разных процедурах были локальными, т. е. независимыми, даже если они обозначены одинаково. Для этого предназначена встроенная конструкция Block.

 

Block[{x, y, …}, proc ] объявляет, что переменные списка { x, y, …}

будут локальными в процедуре proc;

Block[{x=х0, y=у0, …}, proc ] задает локальные переменные

в процедуре с присвоением им начальных

значений.

Каждый раз, когда процедура, содержащаяся внутри блока, выполняется, оригинальное значение переменной (то, что было до выполнения процедуры) сохраняется и восстанавливается, когда выполнение процедуры закончено. Это позволяет одну процедуру помещать внутри другой.

Пусть в некоторой программе переменной t было присвоено значение 5 (или это значение получено в результате каких-либо вычислений)

В процедуре (приведена ниже) (в блоке) переменная t локальна.

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

 

Петли (циклы)

В таблице приведены конструкции циклов системы MATHEMATICA,

 

Do[ expr, {n}] вычисляет expr п раз;

Do[ expr, {i, imax}] вычисляет выражение expr с переменной i,

последовательно принимающей значения

от 1 до i max с шагом 1;

Do[ expr, {i, imax, imin}] то же самое, но стартует со значения i min ;

Do[ expr, {i, imax, imin, di}] то же, но с шагом di;

Do[ expr, {i, imax, imin}, {j, jmax, jmin}, …] вычисляет expr, пробегая

все возможные значения j, … для каждого i,

т. е. организует ряд вложенных циклов;

While[ test, expr ] вычисляет expr повторно до тех пор, пока test

принимает значение True;

For[ start, test, step, expr ] вычисляет start, потом, повторяясь, вычисляет

step и expr, пока test не примет значение False.

 

Операторы While и For – это операторы условных циклов.

Циклы можно организовать и при вычислении функций с помощью операторов Nest и FixedPoint (см. в предыдущей лекции).

Здесь вычислены и выведены на экран (оператор Print) значения факториалов чисел щт 1 до 6, включительно.

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

В этом примере построена конечная непрерывная дробь.

Здесь в цикле i меняется от 1 до 4 и для каждого значения i организован цикл по j, в котором j меняется от 1 до i –1.

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

Пример условного цикла.

Здесь оператор While действует так: сначала проверяется тест х > 1, затем, если условие выполняется, вычисляется выражение, представленное процедурой Print[x]; x=x–6, т. е. печатается значение х и переменной х присваивается новое значение, уменьшенное на 6 по сравнению с предыдущим.

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

Здесь первый аргумент (start) представлен как процедура (i=1; t=x). То же самое можно сказать и относительно последнего аргумента (expr); i++ – короткая запись присвоения i=i+1.


 

Важно: переменные цикла For не локализованы. Проверим:

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

 

Module[{x, y, …}, expr ] локализует переменные х, у, … при исполнении

программы expr

Теперь все в порядке.

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

 

i++ увеличивает i на 1;

i -- уменьшает значения i на 1;

++i значение i после добавления 1;

--i значение i после вычитания 1;

i+=di прибавление di к значению i;

i–=di вычитание di из i;

х*=c умножение х на с;

х/=c деление х на с;

{x, y}={y, x} замена местами значений х и у;

PrependTo[ list, elem ] список list с дописанным элементом elem в его

начало;

АрpendTo[ list, elem ] список list с дописанным элементом elem в его

конец

 

Примеры.

Разберите примеры самостоятельно.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.