Матросов А.В. Maple 6. Решение задач высшей математики и механики (1185909), страница 53
Текст из файла (страница 53)
> еча1ь (х+у=зчпп (х" 2) +у) ) оие > еча)3з(х"2-у"2=(х+у) * (х-у) ) ) Га(ее > еча1Ь(х"2-у 2=ехрапе(( (х+у) *(х-у) ) ) ) геие ВтОрОЕ ВЫражЕНИЕ В буЛЕВОМ КОНтЕКСтЕ, СОЗдаВаЕМОМ КОМаидсй еча1Ь(), ВЫ- числяется как ложное равенспю. Для получения правильного результата Часть 1 Основы Мар(е 266 в атом контексте пришлось явно раскрыть скобки в правой части равенства функцией ехрапо(() . ВМЕСТО КОМаНдЫ еха1Ь() для ВЫЧИСЛЕНИЯ ОтНОШЕНИй В буЛЕВОМ КОНтЕКСтЕ можно воспользоваться командой 1в(), которая проверяет равенство или неравенство не с синтаксической, а с математической точки зрения, а также в отношениях неравенства операнды могут содержать символьные числовые КОНСтаятЫ тИПа впгс(2): > 1в(х"2-у"2=(хеу)*(х-у)); !гие > ека1Ь(вяго(3) >впхх(2) ); /2 — )(3 <0 > 1в (ваге (3) >вяг1 (2) ) (гие ПсгиЧЕСКиЕ ОЛЕРаиии апс), ох И поп таКжЕ ПОЗВОЛЯЮТ фОрМИРОВатЬ НОВОЕ ВЫ- ражение, которое вычисляется в булевом контексте, причем первые две операции являются бинарными, а последняя — префиксная унарная.
Операндами логических операций могут быть выражения отношения или булевы константы сгпе и га1ве. Старшинство логических операций в сложном вы- ражЕНИИ СЛЕдуЮщЕЕ: СНаЧаЛа ВЫПОЛНястея ОПЕрацИя ОтрИцаНИя по1, ЗатЕМ логическое умножение апо( и последней логическое сложение оп Скобки, как обычно, используются для изменения порядка выполнения операций в выражении в соответствии с правилом по умолчанию. Тип логического выражения соответствует последней выполняемой логической операции. > 6>7 ог 5>7) )с(ве > пох а апо( Ь ог о апо гп по1 аапп Ьог с аль й > еьагпуре(в) ог > пох (а апе( (Ь ог с) апс( о); по1 (свпо (Ь ог с) апе й) > иьасоуре(в)) но! Если выражение содержит последовательность логических операций одинакового старшинства, то логические операции вычисляются последовательно слева направо до того момента, когда становится очевидным значение всего выражения.
Например, при вычислении выражения, состоящего из последовательности операций логического умножения > а апе( Ь апс( о; гВТ Глава 5. Основы программирования в МарЬ сначала вычисляется значение выражения а. Если оно равно га1ае, то при любых значениях выражений ь и с результатом вычисления всего выражения будет гагае, а поэтому операнды ь и с не вычисляются. Для булева контекста необходимы булевы выражения, которые формируются с помощью булевых констант ттае, гаьае и глть, операций отношения и логических операций. В отличие от большинства языков программирования, в которых применяется двухзначная логика со значениями стае и га1ае, Мар!е использует трехзначную логику, добавляя третье значение гать, которое можно трактовать как значение "я не знаю". Команда или процедура Мар!е возвращает это значение, если она не может решить некоторую задачу, стоящую перед ней.
Например, в случае проверки положительности некоторой переменной, которой не присвоено никакого значения; > Га(а, роз!тече(; ГАП. Вычисления в трехзначной логике осуществляются в соответствии с таблицами истинности !табл. 5.5). Таблица 5.5. Таблица истинности трехзначной логики Иногда необходимо провести более тонкую проверку типа выражения, чем проверка командой туре ( ! на соответствие выражения простому типу Мар(е. Например, проверка выражения х2 на соответствие типу ' может оказаться недостаточной, так как не дает пользователю никакой информации о типе основания и показателя степени. В таких случаях следует использовать сложный, или струкл(уриый тол, который формируется.
из простых типов Мар1е путем построения из них выражений, используемых в параметре задания типа команды суре (и > суре(м" 2, пате" Ьаседех! > (тяе После выполнения укаэанной проверки будет точно известно, является ли показатель степени целым числом, а основание неизвестной величиной' Мар!е, так как тип пате именно ей и соответствует: с(есть !. Основы Мар(е > Туре (х" (3/2), паве" з.пТедет) з !а)ее > суре ( (хаа) "3, паве" 1пгедет) !а)ее РЕЗуЛЬтат ВЫПОЛНЕНИЯ ПрОВЕрКИ На СтруКтурНЫй тнн паве" Тпгедег дВуХ ВЫ- ражений примера показывает, что ни одно из них не принадлежит к выражению указанного типа. Действительно, в первом выражении показатель степени не целый, а во втором основание не является именем переменной величины Мар!е. В этом последнем случае можно использовать тип апуСП1пд, КОтОрЫй СООтВЕтетВуЕт ЛЮбОМу ВЫражЕНИЮ: > суре((хаа)"З,апуСП1пд"1пседег)з а хе Если необходимо проверить выражение на соответствие одному из типов из некоторого их набора, то проверяемые типы следует задавать в виде множества, причем типы могут быть соверщенно разные, а подобную конструкцию можно использовать в задании структурного типа: > Суре(2.б78, (1пгедет, г1оаС))з а хе > Суре(2.678 х, (гпгедет, 11оаг)" (паве, 11оат)) згие Для проверки типов элементов множества или списка можно воспользоВатЬСя, СООтВЕтетВЕННО, СтруКтурНЫМИ тИПаМИ пег(гхп) И 1заС(тип).
В НИХ также в качестве параметра допускается задавать множество типов для проверки неоднородных множеств и списков. > Суре((4,х,2.3, х" 2, б. 7), пег ((ргзхе,пазпе, 11оаг,ззаве" зпгедег) ) ); !а!ее > Суре((1..2, "а".."д"),11еТ(гапде) ); (пхе Так как число 4 не является простым, то результат проверки множества га1ее. При задании структурного типа можно использовать имена встроенных или пользовательских функций для проверки, является ли выражение вызовом соответствующей функции с определенным типом параметров. При этом следует имя функции задавать в одинарных кавычках, чтобы Мар1е не стал вычислять такие имена как вызов соответствующих функций: > Суре(ехр(2), 'ехр' (1пгедег) ) з В7ЗЕ > суре(ьпс(х(х),х 1..2),1пт(апус)з1пд,апус)з1пд) ) з Егтог, Сеегьпд адаапаС ап 1пзса11с) Туре з'авва д Основы про грамми валия в А4 (е В последнем примере команда проверки типа суре() печатает сообщение о не существующем типе, так как при передаче в нее второго параметра он был вычислен как интеграл > ьпс(апупп1пд,апусььпд)з — апу()з|ид г 2 и полученное значение не может быть интерпретировано как допустимый тип выражения.
Для корректной проверки следует имя функции вычислеНня ИНтЕГраЛа 1пе В Задаинн СтруКтурНОГО тИПа ЗаКЛЮЧИтЬ В ОдИНарНЫЕ Кавычки: > суре(злг (Г(х), х=1..2), '1пп' (апуОш~о, апуПП1по) ) з згие Для проверки выражения на соответствие вызова определенной функции с произвольным числом параметров, в том числе нулевым, существует специальный тип ареоеппо(тип, иззх фуихци>з), в котором первый параметр определяет допустимый тип параметров функции, имя которой задается вторым параметром. Проверить, что выражение является вызовом любой функции с произвольным количеством параметров заданного типа, позволяет структурный тип г псс1оп(тип), а тип апугспо(тизз 1, ..., тип и) проверяет выражение на вызов произвольной функции с заданным количеством параметров соответствующего типа. > суре (озгг (г (х), х), аресгппс ( ( гппо11оп (апупп1пд), пазпе ), о1ю ); (гие > Пуре(Г(1,2), Гппс11оп(1ппедег))) (гие > суре(г(1,2, 3), апугппс((1пседег, Г1оас),ьппедеп) ) з уаЬе При задании структурного типа можно использовать логические операции лпс(, ог и нос 1именно с прописной буквы) для формирования булевых комбинаций типов: > хз=1/2*0.897) суре(х,'Апо(сопасапс,г1оам)'); х:= .4485000000 (гие > суре(81,'Агк((сопзсапс, нос(ппазегзо))'); згие Мы рассказали о некоторых структурных типах Мар)е и и» использовании для проверки типов выражений.
Познакомиться со всеми структурными типами можно на странице справки, отображаемой командой зсуре, зегосепгегь Часть 1 Основы МарЬ с90 5.1.3. Операторы Одним из наиболее употребительных операторов Мар!е является оператор присваивания:=. Его основное предназначение присвоить значение некоторой переменной, чтобы в дальнейшем использовать ее в вычислениях.
Он применяется не только при создании программ, но и при интерактивной работе в Мар!е. .]фф~Ф > ро1употз:=впы(с ! '1'] *х" '1', 'хт=о..з); ро!улотЗ:= с, т с, х + с, х + с, х' > б111 ро1употз: =П111 ) в, х); агу ро!упот3:= с, + 2 с„х-ь 3 с х"' В примере 5.1 переменной ро1употз присваивается выражение, представляющее общий вид полинома третьей степени. В дальнейшем она используется для вычисления производной заданного полинома. Обычно программа реализует некоторый алгоритм решения задачи. В любом алгоритме возникает необходимость выполнения определенной последовательности операторов в зависимости от истинности или ложности того нли иного выражения. В Мар!е ветвление в программе реализуется оператором 11, общая форма которого имеет следующий синтаксис: 11 булево выражение Сьев последовательность операторов [е111 булево выражение Ььеп последовательность операторов] ]е1ве последовательность операторов] епб 11 Семантика этого оператора проста: если истинно булево выражение после ключевого слова 11, то выполняется последовательность операторов после ключевого слова тпеп до первого встретившегося е111, е1ве или епо ьг, если его значение равно га1ве или гать, то проверяется на истинность булево ВЫражЕНИЕ ПОСЛЕ КЛЮЧЕВОГО СЛОВа е111, ЕСЛИ ОНО Задаис, И В СЛуЧаЕ ИСТИН- ности выполняются операторы после ключевого спел.