17585

Программирование в программе-функции циклических алгоритмов

Лабораторная работа

Информатика, кибернетика и программирование

Лекция 3 Программирование в программефункции циклических алгоритмов Напомним что циклические алгоритмы или проще циклы содержат повторяющиеся вычисления зависящие от некоторой переменной. Такая переменная называется параметром цикла а сами повторяющиеся выч...

Русский

2013-07-04

251 KB

3 чел.

Лекция 3 (

Программирование в программе-функции

циклических алгоритмов

Напомним, что циклические алгоритмы (или проще циклы) содержат повторяющиеся вычисления, зависящие от некоторой переменной. Такая переменная называется параметром цикла, а сами повторяющиеся вычисления составляют тело цикла.

Классификация циклов.  Циклы можно условно разделить на две группы:

циклы типа арифметической прогрессии;

итерационные циклы.

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

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

Пример 3.9. Вычислить значение x=, используя итерационную процедуру

                    xn=0.5(xn-1+a/xn-1),        n=1,2,3,..,  x0=a.

В качестве приближенного значения корня квадратного берется такое значение xn, которое удовлетворяет условию

                                                       ,

где  - заданная точность вычисления.            

Видно, что задав исходные данные, например, a = 9, = 10-3, нельзя, не выполняя итерационные вычисления, определить количество повторений тела цикла.

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

щелкнуть  на  кнопке  for  наборной  панели Программирования. На экране появятся  поля ввода, изображенные на рис. 3.4.

Рис. 3.4. Структура оператора цикла  for

в поле ввода 1 введите имя параметра цикла;

в поле ввода 2 ввести диапазон значений параметра цикла, используя для этого дискретный аргумент;

в поле ввода 3 вводятся операторы, составляющие тело цикла. Если одной строки недостаточно, то дополнительные поля ввода (дополнительные строки) создаются щелчком на кнопке “Add line” в панели программирования и тогда слева от тела цикла появляется вертикальная черта.

Пример 3.10. Для x меняющего от -2 до 2 с шагом 0.5 вычислить значение

 f(x) = e-x . Cos ( 2x )

и сформировать из этих значений  вектор y, т.е.   y1 = f(-2),  y2 =  f(-1.5)   и  т.д.

В этом примере количество повторений определяется по формуле

где xk , x0  - конечное и начальное значение параметра цикла, d - шаг его изменения. Подставив значения, получаем (2 - (-2) )/0.5+1=9.

Описание программы-функции имеет вид

В этом варианте описания программы-функции формальные параметры используются для задания диапазона изменения параметра цикла (переменная x). Для изменения индекса у элемента массива  y  вводится переменная i целого типа внутри программы-функции. Обращение  к  описанной программе-функции  может иметь вид                       

Замечание 3.5. Если значение индексов у элементов массива меняется начиная с 1 (как в этом  примере), то начальное значение индекса необходимо установить равным 1 ( для этого обратиться к пункту  MATH команде Built-in Variables, а затем в поле ввода Origin ввести значение 1 ( вместо установленного по умолчанию значения 0 ).

Пример 3.11. Немного изменим условия примера 3.5 , а именно: значения х, для которых вычисляется функция y(x) задается вектором x, имеющим n проекций. Для каждой проекции вектора х вычислить значение функции

f(x)=e-x  Cos ( 2x )

и записать это значение  в соответствующую проекцию вектора y.

Описание программы-функции, решающую эту задачу имеет вид :

 Здесь формальным параметром являются : n - число элементов вектора x ; х - вектор, состоящий  из n элементов.

Обращение  к описанной программе-функции   можно осуществить с помощью конструкций:

                  

      

                

Программирование итерационных циклов. Для программирования таких циклов используется оператор цикла while. Для ввода этого оператора необходимо выполнить следующие действия:

щелкнуть на кнопке while панели Программирования. На экране появляются  элементы, показанные на рис. 3.5.

                                                                            

                                                                           

Рис. 3.5. Структура оператора цикла  while

в поле 1 ввести условие выполнения цикла;

в поле 2 ввести операторы тела цикла. В теле цикла должны присутствовать операторы делающие условие цикла ложным иначе цикл будет продолжаться бесконечно.

Оператор цикла while выполняется следующим образом: обнаружив оператор while, Mathcad проверяет указанное условие. Если оно истинно, то выполняется тело цикла и снова проверяется условие. Если оно ложно, то цикл заканчивается.

Пример 3.12 . Составим программу-функцию, реализующую итерационную процедуру приближенного вычисления корня квадратного, описанную в примере 3.9.

Из текста программы-функции видно, что нет необходимости хранить в памяти все приближенные решения x0, x1, x2 , ... , и т.д. Достаточно хранить предыдущее (“старое” ) значение xc и последующее (“новое”)  значение xn.

Обращение  к описанной  программе  будет иметь  вид

Однако, организация итерационного цикла с помощью оператора while, без дополнительных средств контроля может привести к зацикливанию. Например, задав при обращении к программе eps < 0 получаем зацикливание.

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

Следующий пример показывает написание не зацикливающей программы с оператором break.

Пример 3.13. Составим программу-функцию, реализующую итерационную процедуру вычисления корня квадратного (см. пример 3.9) без зацикливания. Описание такой программы-функции имеет вид :

 

В этой программе число повторений тела ограничено 1000. Если за это число итераций приближенное значение корня с заданной точностью не найдено, то параметр ierr получает значение 1, что говорит об ошибке вычислительного процесса ( если были выполнены 1000 итераций ) .

Так как через имя программы  передается  значение только одной переменной, то для  передачи двух значений  xn, ierr  используется вектор, проекции которого формируются  внутри  программы.

 

Значение ierr нужно проверять после обращения к программе sqroot1. Например,

       

  

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

Условный оператор if может использоваться для реализации достаточно сложных разветвляющихся алгоритмов в теле операторов цикла. Поэтому рассмотрим  различное заполнение поля 1 и поля 3 этого оператора.

Вариант 1. В поле 1 находится локальный оператор присваивания (формирование единичной матрицы )

                      

Вариант 2. В поле 1 находятся несколько операторов

           

3.7 Дополнительные операторы   программирования     циклов

в пакете Mathcad7Professional

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

Пример 3.14. Составим программу-функцию, формирующую новый вектор из положительных проекций исходного вектора.

                        

В теле программы-функции используется функция last(v), определяющая индекс последнего элемента массива v .

 Обращение к этой программе функции имеет вид

Если очередной элемент  v i не больше нуля, то пропускаются все нижележащие операторы тела цикла ( в нашем случае - два оператора, формирующие очередную проекцию вектора w) и тело цикла повторяется при новом значении параметра цикла i.

Оператор return. Прерывает выполнение программы-функции и возвращает значение операнда, стоящего за ним. Следующий пример поясняет работу этого оператора.

Пример 3.15. Составим программу-функцию, находящую первую положительную проекцию исходного вектора. Возможны два варианта.

Вариант А                                                          Вариант B                            

         

Вариант B представляется более простым и "элегантным".

Оператор on error. Этот оператор является обработчиком возникающих при выполнении тех или иных вычислений ошибок и записывается в виде:

             <  выражение 1 >  on error  <  выражение 2 >

и выполняется  < выражение 1 >, если при выполнении < выражение 2 > возникает ошибка. Если ошибка не возникает, то выполняется < выражение 2 >.

 

Пример 3.16. Используем оператор on error для предотвращения появления ошибки "деление на нуль" при вычислении функции angl(x,y).

       

Функция error. Используется для вывода диагностических сообщений при возникновении в вычислениях ошибки и записывается в виде 

error ( "<  диагностическое сообщение пользователя >")

Функция используется в левом поле условного оператора if, как показано в следующем примере.

Пример 3.17. Программирование вывода диагностического сообщения при попытке спроектировать вектор  v на нулевой вектор w.


 

А также другие работы, которые могут Вас заинтересовать

79010. Эксперимент и наблюдение 38.5 KB
  Наблюдение и эксперимент в научном познании виды эксперимента. Существуют три основных метода опосредственного получения нового знания операциональный экспериментальный и логикоматематический. Эмпирическая процедура может выступать как средство выявления точного и однозначного физического смысла тех или иных ключевых понятий для чего в их определения должен входить метод позволяющий в каждом конкретном случае на основе эксперимента решить правильно ли применение этого понятия в данной познавательной ситуации или нет. При...
79011. Гипотеза и теория 29.5 KB
  К числу основных из них относятся проблема гипотеза теория и закон выступающие вместе с тем как формы узловые моменты построения и развития знания на теоретическом его уровне. Гипотеза научное допущение или предположение истинное значение которого не определено. Гипотеза это предположение о существовании какойто вещи явления свойства связи отношения и т. Научная гипотеза должна отвечать ряду требований главные из которых: соответствие фактам которые эта гипотеза собирается объяснить; внутренняя непротиворечивость; проверяемость;...
79012. Идеалы и нормы науки. Мотивация научной деятельности 37 KB
  Историческая изменчивость идеалов и норм рождает потребность их разумного объяснения и применения. Внутренний мотив это познавательная потребность информация заключенная в объекте на который направлено внимание человека. Познавательная потребность характеризуется следующими основными критериями: интенсивное стремление субъекта к знанию и к познавательной деятельности на основании чего избирается его направленность; активный поиск ожидание информации; формулирование вопросов задач и проблемных ситуаций; ...
79014. Проблема классификации наук 54.5 KB
  Проблема классификации наук. Науки: гуманитарные естественные точные математические экономические макроэкономика логика психология. В конечном счете все проблемы по классификации наук проявляются как невозможность совершить упомянутую классификацию без нарушения логических правил: требования одного основания и правило запрещающее членам деления иметь общий элемент. проблемы в качестве своего источника имеют трудность отыскания такого единого основания деления которое было бы существенным признаком для любой науки Наука как целостное...
79015. Основные закономерности развития науки 37.5 KB
  Основные закономерности развития науки. Необходимо выделять внешнее и внутреннее развитие любой системы и рассматривать специфику того и другого видов развития в том числе и науки. Сам процесс развития науки также понимается далеко неоднозначно. cumultio увеличение накопление по сути дела сводит на нет и даже игнорирует качественные изменения которые происходят в структуре научного знания и вызываются изменением основных понятий и принципов науки особенно в ходе научных революций.
79016. Исторические типы рациональности: классическая, неклассическая, постклассическая науки 31.5 KB
  Исторические типы рациональности: классическая неклассическая постклассическая науки. Исторические типы научной рациональности. Три крупных стадии исторического развития науки каждую из которых открывает глобальная научная революция можно охарактеризовать как три исторических типа научной рациональности сменявшие друг друга в истории техногенной цивилизации. Причем появление каждого нового типа рациональности не отбрасывало предшествующего а только ограничивало сферу его действия определяя его применимость только к определенным типам...
79017. Саморазвивающиеся синергетические системы и стратегия научного поиска 57 KB
  Саморазвивающиеся синергетические системы и стратегия научного поиска. Между тем подлинная самоорганизация по самому смыслу этого термина означает именно изменение прежней организации порядка или структуры и появление нового порядка и структуры в результате изменения взаимодействия между элементами системы. Точнее говоря причины такого изменения поведения элементов системы их самоорганизации следует искать в процессе взаимодействия элементов системы с внешней средой. Как признается он сам в то время он решал частную проблему и не...
79018. Глобальный эволюционизм и современная научная картина мира 36 KB
  Глобальный эволюционизм и современная научная картина мира. Научная картина мира основа рационалистического мировоззрения опирающаяся на совокупный потенциал науки той или иной эпохи. В научной картине мира систематизируются научные знания полученные в различных дисциплинарных областях. Есть частная картина мира и общая картина мира.