Циклы типа 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}] Do[Print[i], {i, 5, 8}] Do[Print[i], {i, 0, 1, 0.25}] 0.25 0.5 0.75 1. Нетрудно убедиться в том, что переменная i в теле цикла (итератор) является локальной и по выходе из цикла ее значение остается тем же, что было до входа: i=2 Do[Print[i], i, 1, 5] Вся программа с циклом является содержанием одной ячейки, и ее листинг охвачен квадратной скобкой. Для иллюстрации вывода здесь использована команда 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. Следующий пример показывает применение цикла Do для задания функции, вычисляющей п-е число Фибоначчи: fibonacci[(n_Integer)?Positive]:= Module[fnl = 1, fn2 =0, Do[fnl, fn2 = fnl + fn2, fnl, n- 1]; fnl] fibonacci[10] fibonacci[100] fibonacci[-10] fibonacci[-10] Обратите внимание на применение в этом примере функции Module. Она создает программный модуль с локальными переменными (в нашем случае fnl и fп2), в котором организовано рекуррентное вычисление чисел Фибоначчи. Наконец, последний пример показывает применение цикла Do для создания цепной дроби: х = у; Do[x = 1/(1 + k х), {k, 2, 8, 2}]; х
|