Организация циклов
Многие задачи в системе 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
}]
1
2
3
Do[Print[i], {i,
5
,
8
}]
5
6
7
8
Do[Print[i], {i,
0
,
1
,
0.25
}]
0
0.25
0.5
0.75
1
.
Нетрудно убедиться в том, что переменная i в теле цикла (итератор) является локальной и по выходе из цикла ее значение остается тем же, что было до входа:
i
=
2
2
Do[Print[i], i,
1
,
5
]
1
2
3
4
5
1
2
Вся программа с циклом является содержанием одной ячейки, и ее листинг охвачен квадратной скобкой. Для иллюстрации вывода здесь использована команда Print в теле цикла. Нетрудно заметить, что управляющая переменная цикла может принимать как целочисленные, так и вещественные значения. Возможность организации цикла в цикле иллюстрируется следующим примером:
Do [Do [Print [i,
" "
, j,
" "
, i
+
j], {j,
1
,
3
}], {i,
1
,
3
}];
1
1
2
1
2
3
1
3
4
2
1
3
2
2
4
2
3
5
3
1
4
3
2
5
3
3
6
Здесь используются два цикла с управляющими переменными i и j. Командой Print выводятся значения переменных i и j, а также их суммы i+j.