Оператор цикла в mathcad

Оператор цикла в mathcad thumbnail

Во втором уроке по программированию в Mathcad мы рассмотрим циклы – различные повторяющиеся вычисления. Помимо циклов мы рассмотрим, как можно находить ошибки в программах.

В этом уроке мы изучим три новые команды:

  1. for – для циклов for.
  2. while – для циклов while.
  3. return – как команду для отслеживания ошибок.

Остановка вычислений

Операции Mathcad, которые мы рассматривали ранее, достаточно безвредны – они не заставят Ваш компьютер «зависнуть». Но с циклами это не так. Поэтому для начала следует изучить команды в меню Вычисления –> Элементы управления:

Здесь находятся четыре кнопки:

  1. Автоматический расчет.
  2. Остановить все расчеты.
  3. Рассчитать.
  4. Отключить область.

Кнопка «Автоматический расчет» обычно включена. Она отключается при нажатии на кнопку «Остановить все расчеты». Зеленый индикатор в левом нижнем углу становится серым. «Остановить все расчеты» служит для прекращения всех расчетов в документе на случай, если что-то пошло не так. При автоматическом расчете вычисления производятся лишь в том случае, когда происходят какие-либо изменения. С помощью кнопки «Рассчитать» можно сделать пересчет всего документа. Кнопка «Отключить область» прекращает вычисления в тех математических областях, которые Вы выбрали.

На рисунке ниже видно, что область серая – значит, она отключена:

mathcad_12_02

Нажмите на нее, затем на кнопку «Отключить область». Тем самым Вы запустите расчет в области. Вычисление займет некоторое время:

mathcad_12_03

Его можно прекратить, нажав на кнопку «Остановить все расчеты», затем отключив область и снова включив автоматический расчет.

Циклы

for

Циклы forприменяются, когда заранее известно число повторений вычислений. Программа ниже формирует вектор из n+1 элементов. Значения начинаются с нуля и имеют шаг 1.

mathcad_12_04

Цикл forначинается со второй строки. Он включает в себя счетчик (здесь – i), который является локальной переменной-диапазоном. Эту строку можно прочитать как: «Для диапазона целых чисел от 0 до nвключительно сделать: …». Затем следуют выполняемые действия – в нашем случае это простое присваивание. Когда цикл завершается, программа выполняет действия на следующей строке – здесь это оператор return.

Составим программу.

Задайте имя программы-функции, вставьте программную структуру (вертикальная линия) и определение цикла forиз меню Математика –> Операторы и символы –> Программирование или с помощью сочетания клавиш [Ctrl+Shift+”]:

mathcad_12_05

Определите имя переменной-счетчика:

mathcad_12_06

Определите диапазон счетчика:

mathcad_12_07

Введите команды тела цикла и оператор return:

mathcad_12_08

Проверим программу:

mathcad_12_09

Как видно, использование дробных или отрицательных чисел – не лучшая идея. Вы можете изменить точку начала, но этого лучше избегать:

mathcad_12_10

Видите нули, которые появились в начале вектора? Причиной появления этих нулей является то, что если не определить некоторые элементы вектора, то им автоматически присвоится значение 0:

Циклы

while

На рисунке ниже – простейший цикл while, который делает то же самое, что и предыдущий цикл for:

mathcad_12_12

До цикла необходимо создать строку, содержащую определение начального значения счетчика. Следующую строку можно прочитать как «Выполнять цикл, пока соблюдается условие i?n». После определения элемента вектора нужно задать команду на увеличение переменной-счетчика, так как в цикле while это не происходит автоматически.

Другой, более «реалистичный», пример цикла while вычисляет экспоненту отрицательного числа, используя разложения в ряд:

Суммирование будем производить с помощью цикла while. Будем проверять, насколько изменяется общая сумма S при каждом увеличении k. Если абсолютное значение этого изменения достаточно мало, цикл завершится. Чтобы начать цикл, необходимо определить первые два элемента вектора:

Кроме того, мы определили начальное значение суммы S и счетчика k. Дальнейшие вычисления производятся в цикле:

mathcad_12_15

Проверка:

mathcad_12_16

С положительными числами программа работает хорошо, но для работы с отрицательными она не предназначена.

Отладка

Одна из простых технологий отладки программ – вывод промежуточных результатов вычислений и их сравнение с тем, какие значения должны быть. Пример на цикле while:

mathcad_12_17

Число элементов вектора верное, но второй элемент неправильный. Похоже, что последние элементы нашего вектора получили правильный индекс, а второй элемент (с индексом 1) – нет. Мы можем проверить, какой индекс получил второй элемент, вставив «returni» в первую строку цикла while. Программа остановит вычисление и вернет значение i:

mathcad_12_18

Вероятно, Вы уже поняли, что ошибка в первой строке. Замените 2 на 1, удалите дополнительную строку return, и Вы получите верный результат.

Читайте также:  Темные выделения с неприятным запахом в середине цикла причины

Можно получить выходное значение итерации цикла, отличной от первой. Для этого требуется применить оператор условия if. В программе ниже выводится элемент вектора после третьей итерации цикла:

mathcad_12_19

После отладки всегда следует удалять дополнительные строки, которые Вы вводите, так как программа всегда прекращает работу после первого оператора return.

Подпрограммы

Примеры программ в этом уроке малы. Настоящие программы могут быть намного больше. В других языках программирования они обычно составляются как основная программа и следующие за ней подпрограммы и процедуры. Эти более малые программы можно составлять сами по себе и затем вызывать их в основной программе. Также могут быть подподпрограммы и так далее.

Ваша собственная программа

Когда Вы начинаете составлять свою собственную программу, может показаться, что Вы находитесь в замкнутом круге: чтобы начать, нужен опыт; чтобы получить опыт, нужно начать.

Начать необходимо, но не следует начинать с набора команд в Mathcad! Для начала следует подготовиться.

Прежде всего, нужно решить, что делает Ваша программа. Для больших, сложных программ это, как правило, нетривиальная задача. Какие выходные данные нужны, и какие входные для этого необходимы?

Возможно, самая сложная часть – это представление того, как будет получен желаемый результат. Будьте готовы потратить несколько листов бумаги. Нарисуйте различные структурные диаграммы и детализируйте их. Вы знаете следующие элементы:

  1. Ввод (input)
  2. Действие (или определение)
  3. Вывод (output)
  4. Одиночное ответвление (if..elseили if..if)
  5. Многократное ответвление (if..if..if)
  6. Цикл for
  7. Цикл while

mathcad_12_20

Решите, какие вспомогательные переменные (например, счетчики) необходимы, и какие имена Вы собираетесь им дать. Постарайтесь предусмотреть, где и что может пойти не так и как это можно проверить.

Только когда Вы поняли, что улучшить программу на бумаге больше нельзя, открывайте Mathcad. Остановите все вычисления, затем вводите код. Возможно, это самая простая часть написания программы.

После написания кода программы сохраните файл. Затем нажмите кнопку «Автоматический расчет», чтобы запустить вычисления. Будьте готовы увидеть неверный результат или ошибку – тогда программу придется отлаживать. Сохраняйте файл каждый раз, когда делаете большие изменения.

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

Резюме

  1. Отключайте вычисления при написании или редактировании программы (Вычисления –> Остановить все расчеты).
  2. Цикл for – повторяет вычисления определенное количество раз. Цикл forобязательно включает в себя счетчик и число повторений.
  3. Цикл while – выполняется, пока соблюдается определенное условие. Начальное значение счетчика следует задавать до цикла. В теле цикла изменение счетчика задается вручную.
  4. Программы почти всегда требуют отладки. Полезная команда для этого – return, с помощью которой можно вывести промежуточное значение.
  5. Важно подготовиться к написанию программы, например, составив структурную диаграмму до написания непосредственно кода.

Источник

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

  • Если заранее точно известно необходимое число
    выполнений цикла, то целесообразно использовать
    цикл типа for.
  • Если цикл должен завершиться по выполнении
    некоторого условия, причем момент выполнения
    этого условия заранее не известен, то
    целесообразно использовать цикл типа while.

Циклы “while”

Цикл типа while управляется истинностью
некоторого условия, вследствие чего нет
необходимости знать заранее число выполнений
цикла. Важно только, чтобы где-нибудь внутри
цикла или в другом выполняемом участке программы
присутствовал оператор, делающий условие цикла
ложным. В противном случае цикл будет
выполняться бесконечно. Если выполняемая
программа зациклилась, то ее можно
остановить нажатием клавиши [Esc].

Читайте также:  Из чего состоит цикл стирки

Чтобы записать цикл типа while, нужно:

  • Щёлкнуть по кнопке “while” в панели
     программирования.
  • Напечатать условие выполнения в верхнем поле
    ввода. Обычно это — логическое выражение,
    подобное показанному.
  • Записать в оставшемся поле ввода выражение,
    подлежащее повторяющемуся вычислению. Введение
    дополнительных полей ввода осуществляется путем
    нажатия кнопки “Add Line” на панели
    программирования.

На Рисунке 5 показана чуть более объемная
программа, включающая цикл типа while. Обнаружив
заголовок цикла типа while, Mathcad проверяет
условие цикла. Если оно истинно, то Mathcad выполняет
тело цикла и снова проверяет условие. Если оно
ложно, то Mathcad заканчивает выполнение цикла.

Рисунок 5: Использование цикла типа “while” для
отыскания первого вхождения заданного числа в
матрицу.

Оператор “break”

Часто удобно выйти из цикла или остановить
исполнение программы при выполнении некоторого
условия. Например, для программы на Рисунке 5
существует возможность зацикливания. Если
каждый элемент из v меньше, чем thresh, то
условие никогда не станет ложным и поиск выйдет
за пределы вектора, что приведет к сообщению об
ошибке “индекс вне границ”. Чтобы это не
случилось, можно использовать оператор break,
как показано на Рисунке 6.

Программа на Рисунке 6 возвратит 0 в случае, если
не будет найдено ни одного элемента,
превосходящего thresh. В противном случае она
возвращает индекс и значение первого элемента,
превосходящего thresh.

Чтобы ввести оператор break, нужно щёлкнуть по
кнопке “break” на панели программирования.
Подчеркнем, что в примере на Рисунке 6 нужно
сначала щёлкнуть по кнопке “break” и только потом
по кнопке “if”.

Рисунок 6: Пример из Рисунка 5, измененный таким
образом, чтобы возвращались индекс и значение
элемента массива. Оператор “break” использован
для предотвращения ошибки в тех случаях, когда
величина thresh оказывается слишком большой.

Циклы “for”

Цикл типа for является циклом, число
выполнений которого определено заранее. Число
выполнений определятся переменной цикла,
задаваемой в его начале.
Для создания цикла типа for:looping;for loopfor loop

  • Щёлкните по кнопке “for” на панели
     программирования.
  • Напечатайте в поле ввода слева от знака О  имя переменной цикла.
  • Введите в поле справа от знака О
    диапазон значений, в котором должна
     изменяться переменная цикла. Форма задания
     диапазона в точности такая же, как и для
    дискретного аргумента. Подробности см. в Главе “Дискретные аргументы”
  • В оставшееся поле ввода впечатайте выражение,
    подлежащее повторяющимся вычислениям. Обычно
    оно включает в себя переменную цикла.
    Дополнительные поля ввода можно создать щелчком
    по кнопке “Add Line” в панели программирования.

В верхней половине Рисунка 7 показан цикл типа for,
используемый для сложения последовательности
целых чисел. Неопределенная переменная на
Рисунке 7 напоминает о том, что определение
переменной цикла является локальным для
программы, ее содержащей, и не видно нигде вне
программы.

В нижней половине рисунка приведен пример, в
котором переменная цикла определена не с помощью
диапазона, а через элементы вектора. Хотя
выражение справа от символа О  является
обычно диапазоном, оно может быть также вектором
или списком скаляров, диапазонов и векторов,
разделенных запятыми.

Рисунок 7: Использование цикла типа “for” с
переменными цикла двух различных видов.

 

Источник

В системе Mathcad можно реализовать расчеты по сложным разветвленным алгоритмам или с циклическими процессами.
Это реализуется использованием встроенных программных операторов, похожих на используемые в различных языках
программирования (рис. 1.17). Как видно на рис. 1.18 и 1.19, где вычисляется факториал, программный модуль в системе Malhcad
превратился в самостоятельный блок, причем при необходимости выполнить несколько операторов, их объединяют жирной
вертикальной чертой.

     

Оператор цикла в mathcad

Рис. 1.17

Рис. 1.18

Рис. 1.19

Модуль может вести себя как безымянная функция без параметров, но возвращающая результат – первый пример.
Программный модуль может выполнять и роль тела функции пользователя с именем и параметрами – второй пример.

Набор программных операторов для создания программных модулей ограничен и содержит следующие элементы:

  • Add Line – создает и при необходимости расширяет жирную вертикальную линию,
    справа от которой в шаблонах задается запись программного блока;
  • – символ локального присваивания (в теле модуля);
  • if – условный оператор;
  • for – оператор задания цикла с фиксированным числом повторений;
  • while – оператор задания цикла, действующего до тех пор, пока выполняется
    некоторое условие;
  • otherwise – оператор иного выбора
    (обычно применяется с if);
  • break – оператор прерывания;
  • continue – оператор продолжения;
  • return – оператор возврата;
  • on error – оператор обработки ошибок.
Читайте также:  Календарь женского цикла приложение

Оператор добавления линии Add Line
выполняет функции расширения программного блока. Расширение фиксируется удлинением
вертикальной черты программных блоков или их древовидным расширением. Благодаря этому, в принципе,
можно создавать сколь угодно большие программы.

Оператор внутреннего присваивания
выполняет функции внутреннего,
локального присваивания. Например, выражение
присваивает переменной x значение 123.
Локальный характер присваивания означает, что такое значение х сохраняет только в теле программы.
За пределами тела программы значение переменной х может быть неопределенным, либо равно значению,
которое задается вне программного блока операторами локального := или глобального присваивания.

Условный оператор if является оператором для создания условных выражений.
Он задается в виде:

Если условие выполняется, то возвращается значение выражения. Совместно с этим оператором часто
используются операторы прерывания break и иного выбора otherwise.

Оператор цикла for
служит для организации циклов с заданным числом повторений. Он записывается в виде:

Эта запись означает, что выражение, помешенное в расположенный ниже заменитель, будет выполняться для значений
переменной Var, меняющихся от Nmin до Nmax с шагом +1. Переменную счетчика Var можно использовать в
исполняемом выражении.

Оператор цикла while служит для организации циклов, действующих до тех пор,
пока выполняется некоторое условие. Этот оператор записывается в виде:

Выполняемое выражение записывается на место расположенного ниже заполнителя.

Оператор иного выбора otherwise обычно используется совместно с
оператором if. Это поясняет следующая программная конструкция:

Здесь f(x) получает значение 1, если х>0, и –1 во всех остальных случаях.

Оператор прерывания break вызывает прерывание работы программы всякий раз,
как он встречается. Чаще всего он используется совместно с оператором условного выражения
if и операторами циклов while и for,
обеспечивая переход в конец тела цикла.

Оператор продолжения continue используется для продолжения работы
после прерывания программы. Он также чаще всего используется совместно с операторами задания циклов
while и for, обеспечивая возвращение в точку прерывания и
продолжение вычислений.

Оператор возвращения return прерывает выполнение программы и возвращает
значение операнда, стоящего следом за ним. Например, конструкция

будет возвращать значение 0 при любом х < 0.

Оператор и функция обработки ошибок
позволяет создавать конструкции обработчиков ошибок. Этот оператор задается в виде:

Здесь если при выполнении Выражения_1 возникает ошибка, то выполняется Выражение_2.
Для обработки ошибок полезна также функция error(S), которая, будучи помешенной в
программный модуль, при возникновении ошибки выводит всплывающую подсказку с надписью, хранящейся в
символьной переменной S.

Программный модуль, в сущности, является функцией, но описанной с применением упомянутых программных
средств. Она возвращает значение, определяемое последним оператором (если не предусмотрено иное с помощью
оператора return). Это значит, что после такого модуля, выделенного как целый блок,
можно поставить знак равенства для вывода результата его работы (см. рис. 1.18). В блоке могут
содержаться любые операторы и функции входного языка системы. Для передачи в блок значений переменных
можно использовать переменные документа, которые ведут себя в блоке как глобальные переменные.

Обычно модулю присваивается имя со списком переменных, после которого идет знак присваивания:=. Переменные в списке являются локальными и им можно присваивать значения при вызове
функции, заданной модулем. Локальный характер таких переменных позволяет использовать для их
идентификаторов те же имена, что и у глобальных переменных документа. Однако лучше этого не делать и
использовать разные имена для локальных переменных программных модулей и переменных документа.

Источник