Организация циклов
Многие задачи в системе Mathematica решаются с использованием линейных алгоритмов и программ. Они могут быть представлены непрерывной цепочкой выражений, выполняемых последовательно от начала до конца.
Однако в большинстве случаев серьезные вычисления базируются на использовании циклических и разветвленных алгоритмов и программ. При этом, в зависимости от промежуточных или исходных данных, вычисления могут идти по разным ветвям программы, циклически повторяться и т. д. Для реализации разветвленных программ язык программирования должен содержать управляющие структуры, то есть специальные конструкции языка, реализующие в программах ветвление. Они используются при различных методах программирования, в том числе при процедурном и функциональном программировании.
Циклы типа Do
К важнейшим управляющим структурам в языках программирования относятся циклы. С их помощью осуществляется циклическое исполнение некоторого выражения ехрr заданное число раз. Это число нередко определяется значением некоторой управляющей переменной (например, i, j и т. д.), меняющейся либо с шагом +1, либо от начального значения imin до конечного значения imax с шагом di. Циклы могут быть одинарными или множественными – вложенными друг в друга. Последние используют ряд управляющих переменных. Такого рода циклы организуются с помощью функции Do:
- Do [expr, {imax} ] – выполняет imax раз вычисление ехрг;
- Do [expr, {i, imax}] – вычисляет ехрг с переменной i, последовательно принимающей значения от 1 до imax (с шагом 1);
- Do [expr, {i, imin, imax} ]– вычисляет ехрr с переменной i, последовательно принимающей значения от imin до imax с шагом 1;
- Do [expr, {i, imin, imax, di}] – вычисляет ехрг с переменной i, последовательно принимающей значения от 1 до imax с шагом di;
- Do [expr, {i, imin, imax}, {j, jmin, j max},…] – вычисляет expr, организуя ряд вложенных циклов с управляющими переменными j, i и т. д.
Примеры организации цикла Do и его исполнения представлены ниже:
Do[Print["hello"], {5}] hello hello hello hello hello Do[Print[i], {i, 3}] 123 Do[Print[i], {i, 5, 8}] 5678 Do[Print[i], {i, 0, 1, 0.25}] 00.250.50.751.Нетрудно убедиться в том, что переменная i в теле цикла (итератор) является локальной и по выходе из цикла ее значение остается тем же, что было до входа:
i=22 Do[Print[i], i, 1, 5] 1234512Вся программа с циклом является содержанием одной ячейки, и ее листинг охвачен квадратной скобкой. Для иллюстрации вывода здесь использована команда Print в теле цикла. Нетрудно заметить, что управляющая переменная цикла может принимать как целочисленные, так и вещественные значения. Возможность организации цикла в цикле иллюстрируется следующим примером:
Do [Do [Print [i, " ", j, " ", i + j], {j, 1, 3}], {i, 1, 3}]; 1 1 21 2 31 3 42 1 32 2 42 3 53 1 43 2 53 3 6Здесь используются два цикла с управляющими переменными i и j. Командой Print выводятся значения переменных i и j, а также их суммы i+j.
