Купить Matlab  |  Mathematica  |  Mathcad  |  Maple  |  Statistica  |  Другие пакеты Поиск по сайту
Internet-класс  |  Примеры  |  Методики  |  Форум  |  Download
https://hub.exponenta.ru/


Программирование
  • Создание программ
  • Условные операторы
  • Циклы
  • Программы в программах
  • Примеры программ

    В начало книги

  •  

    Список встроенных функций

    Программы в программах
    К предыдущему разделуК следующему разделу

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

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

    • Один из операторов программы можно сделать, в свою очередь, программой.
    • Можно определить программу где-нибудь в другом месте и вызывать ее из других программ так, как если бы она была подпрограммой.
    • Можно определить функцию рекурсивным образом.

    Остальная часть этого раздела поясняет эти методы на примерах.

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

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

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

    Одним из путей, которым многие программисты избегают нагромождения сложных программных конструкций, является перенесение сложностей в “подпрограммы.” На Рисунке 9 показано, как это можно сделать в Mathcad. Определив intsimp где-нибудь в другом месте и использовав его внутри adapt, можно сделать программу, определяющую adapt, значительно проще. Определение adapt стало бы значительно более громоздким, если бы оба вхождения intsimp в него нужно было бы заменять длиннющим определением intsimp, приведенным в верхней части рисунка.

    Функция  adapt осуществляет адаптивную квадратуру или интегрирование, используя intsimp для аппроксимации площади на каждом подинтервале интегрирования. Из последней строки видно, что функция adapt вызывает сама себя, т.е. определена рекурсивно. Рекурсивные определения функций рассмотрены более подробно в следующем разделе.

    14-12.gif (7885 bytes)

    Рисунок 8: Программы, операторы которых сами являются программами.

    14-13.gif (7570 bytes)

    Рисунок 9: Использование подпрограммы для устранения громоздкости.

    Рекурсия

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

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

    Основная идея подобна идее математической индукции: если можно получить значение f(n+1) из f(n) и известно f(0), то известна и вся функция  f.

    14-14.gif (7197 bytes)

    Рисунок 10: Рекурсивное определение функции.

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

    В начало страницы  К предыдущему разделуК следующему разделу

    Список встроенных функций

    | На первую страницу | Поиск | Купить Matlab

    Исправляем ошибки: Нашли опечатку? Выделите ее мышкой и нажмите Ctrl+Enter


    Copyright © 1993-2024. Компания Softline. Все права защищены.

    Дата последнего обновления информации на сайте: 04.03.17
    Сайт начал работу 01.09.00