Матросов А.В. Maple 6. Решение задач высшей математики и механики (1185909), страница 54
Текст из файла (страница 54)
Если ни одно из булевых условий не истинно, то выполняются операторы блока е1ве, опять-таки, в случае его задания. Блоков е111 может быть сколько угодно, тогда как бЛОК етве ВСЕГДа ТОЛЬКО ОДИН. Замечание Квадратные скобки в синтаксисе операторов Мар]е используются нами для оп- ределения не обязательных элементов конструкций. .Глава б. Основы программирования в Мар(е > г т Суре(ро1упогаз, Еопстьоп(пагае) ) т)аеп рх1пт("Тита 1а хспст1оп са11.")г е1зе рг1пт(ро1упогзз)) апо 11) с ес хас х ас х > х:=5: > 1х х<О таеп О:=-1) е111 х<1 1)1еп д:=Ою е1ае д:=1г епг( 11) В связи с использованием трехзначной логики а Мар(е значение г)(11 трактуетСя В операторе Еатапаиня Ках Га1аа.
Оператор 15 е предыдущих версиях Мар(е завершался ключевым словом тх Для совместимости с предыдущими версиями его можно использовать и в Мар(е Б, однако при написании новых программ рекомендуется для завершения конструкции ветвления использовать ключевое слово еп<( тк В Мар1е нет оператора, реализующего конструкцию переключателя. Для этих целей следует использовать оператор 11 с несколькими блоками е111.
="'ачгап ...А. а)игхктззв( ' ..Й)йР'"ЙЙФкк;;ьс:,'.".".Сз( т.'"*)х" > х:=5: > 1< х=с С)теп О е111 х=1 111еп 1 е111 х=2 С)1еп 4/3 е1ае рхтпт("Осе оГ саада!") еп<( 11г "Оа(ог" гапке!" Синтаксис Мар1е позволяет использовать вложенные конструкции 11, т. е. последовательности операторов в блоках свел и е1ае МОГУГ содержать операторы ветвления. Часть!.
Основы Агар)е Операция 1г предназначена для использования в выражениях и аналогична тернарной операции условия (2) в языке С. Она имеет следующий синтаксис: '11'(условие, операнд1, операнд2) Семантика ее такова: вычисляется значение параметра условие, который должен быть булевым выражением, и если он равен " се, то результатом операции будет операнд1, в противном случае операнд2. > а:=4: Ь:=3: > с:= 11" (а>Ь,а,ш +в1п('11'(а>Ь,а,щ )," с:= 4 е а|п(4) Для организации повторяющихся вычислений в Мар)е предусмотрены лве формы операторов цикла: гоп-где и го -гп.
Первый оператор цикла является универсальным и включает в себя как циклы, повторяющиеся заданное число раз, так и циклы, выполняющиеся, пока некоторое булево выражение является истинным. Вторая форма цикла гот реализует цикл по элементам списка или множества, и в других языках программирования он известен Ках ЦИКЛ Гот-еась. Наиболее общий синтаксис оператора цикла тот-гтоы следующий: (Гот иыя) (Гтоы выражение) (Ьу выражение] (Со выражение) (нщ1е булево выражение) со последовательность операторов епб со; В блоке тот задается имя переменной цикла, блоки гасы и то определяют, соответственно, начальное и конечное значение диапазона изменения переменной цикла, а в блоке ьу задается шаг ее изменения (он может быть и отрицательным). Выполнение цикла начинается с присваивания переменной цикла начального значения, после чего проверяется, не превосходит ли оно конечного значения, и в случае положительного ответа выполняются операторы тела цикла, заданные в блоке по...епп со, переменная цикла увеличивается на значение шага и алгоритм проверки начинается снова.
Если значение переменной цикла превосходит конечное значение, то цикл прекращает свое выполнение. Отметим, что если при проверке начального значения переменной цикла, оно превосходит конечное значение, то цикл завершает свое выполнение, а операторы тела цикла, таким образом, не выполни)отса ни разу. Если задан блок ыьтье, то одновременно с проверкой значения переменной цикла проверяется на истинность булево выражение этого блока, и цикл также завершает работу, если его значение оказывается равным га1ве или РАП.. Глава 5. Основы и ммироввния в Мвр(е Все перечисленные блоки являются необязательными и могут задаваться в произвольном порядке за одним исключением: если присутствует блок гох, то он должен быть задан первым.
Если какой-либо блок не задан, то его параметр по умолчанию принимает значение из табл. 5.6. Таблица в.б. Значения пс умолчанию параметров блоков цикла го шб ш ;~:,Й Х "'Г>ь,''фФЕ,' 'а„;:(1>'; ";;";-".;,",:' ""; 'Д В.ы~.л ~. а > (( Не выполняется ни разу > Гох 1 Гхош 1 Хо -1 Со еуа1Г(зпхХ(1)) епб бо; > () Выполняется два раза > Гох 1 Гхош 1 хо 2 бо еуа1Г(зпх (1)) епб бо; 1. !.4!4213562 > (( определяет первое простое число, большее 500000, но меньшее 500010 > Гох 1 Гхош 5*10"5 Хо 500010 чк11е пес 1зрхпае(1) бо епб бо; > 1; 500009 Последний цикл примера 5.5 демонстрирует совместное задание диапазона изменения переменной цикла и булева условия, а также тот факт, что тело цикла может быть пустым.
При задании оператора цикла гох-гхош обязательным является только блок ао, определяющий тело цикла, причем, он может быть единственным блоком цикла: бо последовательность операторов епб с(о( Подобная конструкция определяет бесконечный цикл, прервать выполнение которого может только один из операторов: ьхеан, хеепхп, Чп1Х ИЛИ ВОЗНИК- новение ошибки при выполнении операторов цикла. Если в операторе цикла отсутствуют все необязательные блоки за исключе- НИЕМ бЛОКа наше, тО ПОЛуЧаЕтея КЛаССИЧЕСКИй ЦИКЛ нь11е С ПрЕдуСЛОВИЕМ: сначала проверяется истинность булева выражения условия, а затем, в зависимости от результатов проверки, либо выполняются операторы тела цикла (условие истинно), либо цикл завершает свою работу (условие ложно). При Часть I. Основы Мар)в ИСПОЛЬЗОВаинн цИКЛа ~Ь11е СЛЕдуЕт ВНИМатЕЛЬНО СЛЕдИтЬ За тЕМ, ЧтсбЫ В теле цикла изменялись переменные, входящие в выражение условия, так как иначе цикл будет выполняться бесконечно.
> х:=2: > мп11е х>1/2 оо х:=х/2 епб бо; х;= ] ) х;=— 2 ВтОрая фОрМа ОПЕратОра ЦИКЛа Гог-1п, КаК ужс ОтМЕЧаЛОСЬ, ОрГаНИЗуЕт ЦИКЛ по злементам объекта, который может быть представлен последовательностью, списком, множеством, суммой, произведением или строкои. Его общий синтаксис имеет вид: гог имя ьп объект [ми№1е булево выра:гение) бо последовательность операторов епб Оо5 Переменная цикла, определяемая в блоке гог...1п, последовательно принимает значения операндов объекта, как они определяются командой ор(]. Цикл выполняется столько раз, сколько операндов задано в объекте, если только булево выражение в необязательном блоке мп11е не станет ложным раньше, чем будут последовательно перебраны все операнды объекта. Ж Ьв > № Вычисление произведения слагаемых суммы > в:=1: > гог г гп 51п(х)ясов(х) с[о в:=в*в епб г[о: в; 51п(х)со5(х) > № Вычисление суьяах ПЕрВЫх 2-х сомножителей произведения > в:=О: 1:=1: > гог г 1п 51п(х] *выл(2*х) *вгп(3*х) ыь11е 1<=2 бо в:=вег; г:=1е1 епб с[о: в; 5(п(х ) + 5]п(2 х) > № Цикл по символам строки > Гог г 1п "ОМЕ" бо х епс[ Оо] "О" Глава б.
Основы программирования в е(ар(е > (( Суммирование элементов множества > з:=(х,у,с(: в:=О: > Год 1 1п Я 1(о в:=ве1 епг( оо: в; хеуе= Обычно нормальное завершение любого цикла происходит либо когда значение переменной цикла превысило заданное конечное значение (в случае положительного шага), либо она стала меньше этого значения (в случае отрицательного шага), либо булево выражение условия в блоке нь11е стало ложным. Иногда, однако, необходимо прервать дальнейшее выполнение итераций цикла при выполнении некоторого условия. Для подобных случаев в языке Мар(е предусмотрен оператор ьтеах, основное предназначение которого завершить выполнение цикла.
Он используется совместно с оператором условия 'г. :г~ф~(й~$~~,~~ффй~б(9~~(~)11~) > (( Суммирование первых двух элементов множества > Я."=(х,у,х(: в:=О: 3:=1: > Сох 1 1п Б оо 5:=вт1; хв 1>2 СЬев Ьсеак1 еп1( 111 3:=)т2; епо с(о: з; х+у 3 Часто приходится при программировании алгоритма применять конструкции цикла, но при некоторых условиях пропускать выполнение части или даже всех операторов тела цикла, переходя на следующий цикл с изменением значения переменной цикла.
Такой аффект достигается применением оператора пехс, который немедленно прекращает выполнение текущей итерации цикла и переключает оператор цикла на выполнение очередной итерации. > (( цикл только по нечетньм значениям переменной цикла > тох 1 Гсож 1 Со 5 я(о хд 1в(1,ечеп( СЬеп пехС еп1( 11; 1; ЕПС( 1(О( ( 3 5 Часть /. Основы Мвр/е Блок тела операторов цикла в предыдущих версиях Мар!е завершался ключевым словом гак Для совместимости с предыдущими версиями его можно использовать и е Мар!е 6, однако при написании новых программ рекомендуется для завершения операторов цикла использовать ключевое слово елл г(с.
В отличие от других языков программирования, где для организации циклов используется подобная либо оператору гсг, либо оператору ил11е конструкция„Чар!е предлагает программисту ряд команд, в которых реализованы часто используемые в работе циклы. Эти команды позволяют писать программы намного быстрее, освобождая программиста от "рутинного" программирования некоторых видов циклов, и, что также важно, делают их более наглядными и информативными.
К таким командам можно отнести команду аар(), которая в цикле выполняет вызов функции, определяемой первым параметром команды, и использует в качестве первого параметра функции операнды выражения, определяемого вторым параметром команды изр(): > гззр(а)>з,х"2+з1л(х))) (х (з + ( 5!п(х) ! > гзар(ьпг, (х 2, з1с(х), Е(х) !,х) ) х',-соз(х), ~ й(х) Нх~ ! 3 Если для выполнения команды необходимы дополнительные параметры, то все они задаются после второго параметра команды гззр().
Аналогично команде ар() работают и команды зе1есг() (выбрать), гегзсуе() !удалить) и зе1ессгетсче() (выбрать и удалить), но их объектом могут быть только элементы списка: > ),:=(зея(1,1=1..10))) Е:=[1,2,3,4,5,6,7,8,9, 10) > зе1ес1(суре, Ь. 'огЫ') г ! 1, 3, 5, 7, 9! > гепкле (1уре, Ь, 'ос)г)') г !2,4,6,8,10) > зе1есегегь>че(гуре, Ь, 'осхз') г ~1,3,5,7,9),!2,4,6,8, 10) (Подробное описание этих команд можно найти в гл. 2.) КОМаНда згр(Г, 11зе1, ьвзе2) СОЗдаЕт НОВЫЙ СПИСОК С ЭЛЕМЕНтаМИ, яВЛяЮ- ц(имися результатом выполнения функции двух переменных г, в качестве ПаРаМЕтРОВ КОтОРОй ПОПаРНО ВЫСтУПаЮт ЭЛЕМЕНТЫ ДВУХ СПИСКОВ 11з11 И Глава 5.