Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Процедуры и блоки
Как мы уже знаем, процедура – это последовательность выражений 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 в его конец
Примеры. Разберите примеры самостоятельно.
|