Говорухин В., Цибулин Б. Компьютер в математическом исследовании (1185927), страница 34
Текст из файла (страница 34)
Здесь речь пойдет о написании пользователем на Мар)е-языке собственных программ, процедур, отладке программ и др. Для этого в пакете имеется довольно широкий набор команд и конструкций, аналогичный существующим в известных языках программирования (например, в языках Паскаль или С). Ниже мы последовательно перечислим эти конструкции и команды, сопровождая изложение короткими примерами.
Условные операторы Условный оператор в Мар)е начинается с зарезервированного слова 1г и обязательно должен заканчиваться словом 11 или епп 11, которые являются синонимамн. Этот оператор имеет несколько форм написания, которые отличаются детальностью проверки условий: 1Г ВООЕ Гпеп ЕХРВ1 Г1; 1Ч ВООЕ ГПеп ЕХРЙ1 е1зе ЕХРВ2 епд 1Г; Эта конструкция дает возможность в зависимости от значения логического условия ВООЕ выполнять выражение ЕХРй1 (когда ВООЕ-ггие) или ЕХРй2 (если ВООс-га1зе в случае ветки е1 зе).
В качестве выражений ЕХРй1 и ЕХ Рй2 здесь может выступать любая последовательность Мар!е-команд. Приведем пример: > х:-2: ХГ х<0 тьеп х:-5 е1зе х:--5 епо 1Г. х;= -5 Для реализации сложных условий можно использовать полный вариант условного оператора, который имеет следующий вид: 1Г ВООЕ1 Феп ЕХРВ1 Е11Г ИХХ.2 тПЕп ЕХРй2 180 Глава У.
Программирование в Мар1е е11Г ВООЕН ЕЬеп ЕХРВИ е1ве ЕХРВО епе 1Г: Таким образом, вложенность условий может быть практически неограниченной и реализуется при помоши вставки е11й В качестве выражений ЕХРЙО, ЕХРй1, ..., ЕХРЙ11 могут выступать любые последовательности Мар!е-команд. Как и для про- стого условного оператора, у этой конструкции может отсутсгвовать ветка е1ве.
Приведем пример полного условного оператора; > х:=7 11 х<0 таеп х.-а: е1>Г х-0 еьеп х.-Ь; е11Г х<10 1леп х =с, е)ве х:=Ш Г1: Существует вариант условного оператора, который предназначен для использования в выражениях. Вго синтаксис имеет вид: "Ь Г"ЧВВОС ЕХРЯ1 ЕХРВ2) При обрашении к этому оператору сначала провсрястся логическос выражение ВСОЕ, загсы прп его истинности (Егпе) вычисляется оператор ЕХРП], а при ложности (101ве) — ЕХРР2. Пример: > а =2 Ь.-4: > "1гча>ь,)одЕь](а),1оч[а](ь'): !п(4) ы12) 5 1 п1 р) ! гу1 Х ): 2 Операторы цикла В Мар]е имеется несколько операторов цикла, и для пх записи используются служебные слова Еог, Ггоп), Ьу, Ьо, иш!е, 00, 00 и епЬ г]о.
Телом всех операторов цикла является последовательность команд, заключенных между Со и епЬ 00 (оп — синоним этой комбинации). Начнем с перечислительного цикла, который есть практически во всех алгоритмических языках: Гог ЧАИ Ггоа ЧАН Ьу ЧЯЕ2 Го ЧАЕВ Оо ЕХРВ епо Оо; Тело цикла ЕХРВ выполняется при каждом значении параметра цикла ЧАй, который изменяется от ЧАЕ) с шагом ЧЯЕ2 до тех пор, пока не станет больше ЧАЕЗ.
Отметим, что если шаг изменения ЧАЕ2 равен единице, то оператор никла допускает сокращенную форму: Гог ЧАВ Ггоп ЧАЕ) то ЧАЕВ Ео ЕХРВ ос: А если и начальное значение ЧЯЕ)переменной ЧАП равно единице, то возможен еше более короткий вариант: Гог ЧАА Во ЧАЕВ со ЕХРВ ое; Операторы цикла 181 Приведем пример оператора цикла: > Еог 1 Егоп 0 Ьу 4 Со 8 Оо 1: епе Оо: 0 Оператор цикла типа «пока» имеет вид: иы1е 8000 Оо ЕХРй оф Тело никла ЕХ Рй выполняется, пока значение логического выражения ВООЕ истинно (Егие), и выполнение прекращается, если ВООЕ ложно ( а1ае).
Приведем соответствующий пример: 1.=0: ий 1е а«5 Оо 1 =О+11"а епе Оо; 1';= 1 /:=2 ~':= 9 Следукпций оператор цикла является некоторым симбиозом двух предыдущих: Еог улй тгов УАЕ1 Ьу ГА 2 »Ю1е 800Е Оо ЕХРй епе По: Тело цикла ЕХРй выполняется, пока логическое выражение ВООЕ является истинным, а переменная уйй изменяется от значения »А~ 1 с шагом ХАЕ2. Отметим, что Мар!е вначале проверяет условие цикла, а затем выполняет выражение Гдрй Например: > Гог х Егое 1 Ьу 2 ию1е х<6 По х 2 ою 1 25 Четвертый оператор цикла ориентирован на работу с символьными выражениями н имеет следующую форму: тог УАй ~п ЕХРй1 Оо ЕХРй2 оо.
Тело цикла ЕХРй2 (последовательность команд между 00 и 00) выполняется, когда символьная переменная ЧАй последовательно принимает значения каждого из операндов алгебраического выражения или списка ЕХРй1. Естественно, работа етой конструкции зависит от внутреннего представления выражения ЕХРй1. Если ЕХРй1— сумма, то переменная ЧАй принимает поочередно значения каждого слагаемого, если произведение — то каждого сомножителя, и т.
д. Поясним сказанное примером: > Е:-х 2+3«х+1/х: 9', е1аР1ХЕУ1Е); т У:=х «Зхчх хз«ахе+1 182 Глава 7, Програииироваиие в нар[а > Тог 5 1О Г бо 5: Об: 2 Зх 1 х > Тог 5 1О 9 бо 5: Об: х'+Зх'+1 1 х Команды Ьгеаи и пехт предназначены для управления операторами цикла. По команде ЬгеаХ осуществляется немедленный выход из цикла, а по команде пех1— переход к следующему шагу. Приведем два примера: > 1:-0: бо 1:-2 -1: 11 1-3 тиеп Ьгеаь 12 епб бо: 2: 1 То>2 2 з>З > [:-[1,2,5.1001: Гог Ч 1О 1 бо 11 1-5 Шее пех1 еоб 11; 1"2 об; 1 4 Иногда бывает полезным бесконечный цикл, который можно реализовать, опустив все управляющие циклами параметры: бо ЕХРа епб бо; Этот цикл будет работать до тех пор, пока внутри него не встретится ошибка или не будет осуществлен выход с помощью команд Ьгеаи или геьогп (см. следующий раздел).
Для обработки возможных ошибок и аварийных или специальных ситуаций существует конструкция вида: 1гу ЕХРХ1 сатси САТСНБТХ1И6;ЕХР92 11паИу ЕХРЙЗ епб; Выражение ЕХРР1 выполняется до тех пор, пока не возникла ошибка или ситуация, ОЩТСЫВаЕМая Строкой С21ТСНЗТН1Н6. При возникновении такой ситуации выполняется выражение ЕХРЙ2, а выражение ЕХРкЗ выполняется в любом случае. В этой конструкции обязательна только первая ветка Егу2 Пример: >1: 2: > тгу бо геаи15 : З/1: рг1лг(*тгу",геао151: Функции, процедуры и подули 133 1:-1-1: оо сассп: геки)С ;= 1"2; рг(пт( пза(си",1); (1па11у 1,Д"3 епп сгу: 1 тус-у ту,у Саге)п О о,/ Подробнее о возможных вариантах строки САТСНБТй1 НС смотрите в справке Мар1е, Рункции, процедуры и модули В Мар!е существует множество команд, которые реализованы в виде процедур- функций, процедур или модулей.
В этом разделе мы кратко опишем, как создавать такие конструкции самостоятельно и какие возможности это предоставляет. Процедуры-функции Процедуры-функции в Мар1е можно задавать несколькими способами. Первый напоминает задание отображения — некоторое число входных параметров при помощи знака -> формирует результирующее выражение ехрг: папе:- (чаг1.чаг2,...) -> ехрг: Здесь папе — имя процедуры-функции, чаг1, чаг2, ... — имена формальных параметров, а ехрг — выражение, реализующее тело процедуры-функции.
Напомним, что типы формальных параметров и результата работы процедуры-функции могут быть любыми. Приведем пример задания процедуры-функции: > (: (х,у)- иир111У(х"2-у"2); У ж (х, у ) -ч кипр)цу( х + у ) > Г(51п(х).с05(х)): 1 Второй способ задания процедуры-функции при тех же входных параметрах использует команду цпарр1 У: папе:гипарр1У(ехрг,чаг1лаг2,...); Здесь чаг1, чаг2,, — переменные, а ехрг — выражение или операция. Эта команда полезна при определении новой функции через известную или когда вычисленное выражение предполагается использовать как процедуру-функцию.
Например: > т:гцларр1У(П(СГ(К(Х)"2.Х)-2.г): 184 Глава?. Программирование в Ивр1е гд У;= с-«2 г(х) ~ — — г(х)~ — 2 ~ дх Г(в1п 2). 4 яп(х)' сов(х) — 2 С процедурами-функциямп в Мар!е можно проделывать элементарные математическис операции, такие как композиция, умножение и др. Приведем примеры: > Г.=х->ю п(х»2) Р.=-х->агсв1п(х)-2 »и-(9. Шу): яп(у е 2) + игсяп(у) — 2 > п.=("9: П(у); яп() е 2) (вгсяп(у) — 2) > п.=ВО: му)' Выразительно применение отображения (так называемой функции без имени) в качестве параметра в ряде команд.
Приведем пример использования функции при обращении к команде явр: > мвр(х-»х"2 „г1.2,3 4,5«) [ 1, 4, 9, 16, 25 ! Процедуры Всякая процедура в Мар!с на пшается с заголовка, который состоит пз имени процедуры, за которым следует знак присваивания н служебное слово ргос, за- тем в круглых скобках через запятую указываются формальные параметры. Про- цедура должна обязательно заканчиваться оператором еп0 (в последней версии пакета можно использовать синоним еп«ргос). Все команды и выражения, сто- ящие после заголовка и до оператора епс, составляют тело процедуры.
Простей- шая процедура имеет следующий вид: НАНЕ:=ргос( НАР1 НАР2, ЕКРВ!: ЕХРК2; епп' ргос: Здесь ИАНŠ— нмя процедуры, НАЯ1, НАР2,... — имена формальных параметров, а ЕХРР1, ЕХРР2,, — выражения, реализующие тело процедуры. Текст процедуры должен быть набран в одной группе. По нажатию клавиши Еп1ег происходит синтаксический анализ текста и в случае ошибки выводится сообще- ние о ней. После того как процедура загружена в память, к ней можно обращаться по имени.