> for i in [1,2,5,-1,7,12] while i>0 do print(i) od;

1 2 5

В цикле этого вида управляющая переменная может меняться произвольно.

10.2.3. Вложенные циклы и задание с их помощью матриц

Циклы могут быть вложенными. Это иллюстрирует следующий пример, создающий единичную матрицу на базе заданного массива М:

> M:=array(1..3,1..3);

М:=array(1..3, 1..3, [])

> for i to 3 do for j to 3 do M[i,j]:=0; if i=j then M[i,j]:=1 fi; od od;

> evalm(M);

Однако по образцу этого примера читатель может задавать другие, нужные ему, матрицы.

Этот пример имеет не более чем познавательное значение, поскольку дня создания такой матрицы Maple имеет функции identity, с помощью которой функция array позволяет сразу создать единичную матрицу:

> array(1..3,1..3,identity);

10.2.4. Упрощенная конструкция циклов

В заключение отметим, что возможна упрощенная частная конструкция цикла типа while:

while expr do statseq od;

Здесь выражения statseq выполняются, пока выполняется логическое условие expr. Пример такого цикла:

> n:=1;

n:=1

> while n<16 do n:=2*n od;

n:=2 n:=4 n:=8 n:=16

В этом примере идет удвоение числа n с начальным значением n=1 до тех пор, пока значение n меньше 16.

10.2.5. Операторы пропуска и прерывания циклов

Иногда бывает нужным пропустить определенное значение переменной цикла. Для этого используется оператор next (следующий). Приведенный ниже пример иллюстрирует применение оператора next в составе выражения if-fi для исключения вывода значения i=-2:

> for i in [1,2,3,-2,4] do if i=-2 then next else print(i) fi od;

1 2 3 4

Другой оператор — break — прерывает выполнение фрагмента программы (или цикла) Его действие поясняет слегка модифицированный предшествующий пример:

> for i in [1,2,3,-2,4] do if i=-2 then break else print(i) fi od;

1 2 3

В данном случае при значении i=-2 произошло полное прекращение выполнения цикла. Поэтому следующее значение 4 переменной i присвоено не было и это значение на печать не попало.

Любой из операторов quit, done или stop обеспечивает также прерывание выполнения текущей программы (в частности цикла), но при этом окно текущего документа закрывается.

10.3. Процедуры и процедуры-функции

10.3.1. Простейшие процедуры

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

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

Простейшая форма задания процедуры следующая:

name := proc(Параметры)

Тело процедуры

end;

Параметры процедуры задаются перечислением имен переменных, например proc(х) или proc(x,y,z). С помощью знака :: после имени переменной можно определить ее тип, например в объявлении prog (n::integer) объявляется, что переменная n является целочисленной.

При вызове процедуры выражением вида

name(Фактические_параметры)

фактические параметры подставляются на место формальных. Несоответствие фактических параметров типу заданных переменных ведет к сообщению об ошибке и к отказу от выполнения процедуры.

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату