Матросов А.В. Maple 6. Решение задач высшей математики и механики (1185909), страница 52
Текст из файла (страница 52)
Следует отметить, что при проверке типа натурального числа команда нлаееуре() возвращает целый тип 1пседег, тад как натуральный;тип паепха1 рассматривается как один из подтипов целого типа Для уточнения полтина целого числа следует использовать команду суре(),.вторым параметром,Которой может быть одно из следующих значений, описываюцпьх пщпипы: целого типа: паепха1 (натуральный), печхпе (отрицательное целое)„.ров)х)е (иоложительиое целое), поппео1пс (не отрица- Глава о.
Основы программирования а !й !е ~ельцов ЦЕЛОЕ), лолровглЕ (НЕ ~~лож~т~л~н~с ЦЕЛОЕ), ввел (ЧЕТНОЕ), оба (нечетное) и рх!аве (простое). При составлении выражений лексемы можно разделять пробельными символами (пробел, табуляция и символ новой строки). Пробельные символы не допустимы внутри лексем, их наличие приводит к ошибке синтаксического разбора выражения. Так как символ новой строки функционально идентичен пробелу, то можно вводить операторы в нескольких строках. Однако при нажатии клавиши <Епгег> при незавершенном операторе интерпретатор сгенерирует ошибку. Если не обращать на нее внимание и продолжать ввод оператора, то по его завершении и передаче на выполнение оператор выполнится, как будто он был набран в одной строке.
> в : = б; в Пробел в лексеме Егсох, '=' илехрессеб > а:=1ехе > х"2; а:=1 ах ах' 5.1.2. Выражения и типы Выражения играют фундаментальную роль в языке Мар1е. В отличие от других языков программирования, в которых основным назначением выражения является его вычисление для получения числового значения, в Мар!е выражение не только может быть носителем числовой величины, но и представлять алгебраическое выражение с неизвестными величинами. Ведь мы помним, что система Мар!е, — зто система аналитических вычислений, позволяющая, в том числе, производить и численные расчеты. Выражение может состоять из числовых констант, имен переменных и неизвестных, булевых выражений, функций, рядов и других структур данных (объектов Мар!е), над которыми выполняются допустимые операции. Любое выражение в Мар!е имеет определенный тип.
Например, если выражение представляет собой сумму целых чисел, то и его тип определяется как целый (ълседех), если же оно представляет сумму, в слагаемые которого входят неизвестные (переменные, которым не присвоены значения) или они представляют точные числовые иррациональные величины наподобие в>аы! или вчхс !е1, то такое выражение имеет тип сумма ( е'). В отличие от других языков программирования в Мар!е, в связи с его возможностью работать с аналитическими математическими выражениями, реализовано большое разнообразие типов.
Даже такой„казалось' бы, простой' числовой тип, как целый (алеедех), соответствующий целым числам, подразделяется на отрицательный целый, положительный целый, простой и т д'. Это связано с тем, что при реализации алгоритмов аналитических вЪ!числеиий с))ще'-' ственным является не столько числовая характеристика величины,:еко)1ъкб Часть Ь Основы Марй Таблица бА. Основные обьекты Мар(е и их типы Объект Тал Педтал зггъпд папе ьпгечег Строка Имя зуспЬо1, тпоехео Целое число пепзпг, розьпг, поппедгпг,попрозт и еееп, осЫ, ртпзе Д1юбь, лла рациональное гагзопе1 Ъпгеяет, Гтзогс оп ее качественный вид: что она представляет из себя с точки зрения аналитики — сумму, произведение, целое число и т.
и. Для определения типа выражения можно использовать функцию н зггуре () с единственным аргументом, представляющим исследуемое выражение или переменную, в которой оно хранится. Правда, эта функция не определяет подтипы основного типа. Более точно определить, к какому типу принадлежит выражение можно командой гуреы, в которой первый параметр является выражением, а второй указывает допустимый тип или подтип.
Эта команда возвращает ггпе, если проверяемое выражение является выражением заданного типа, и гз1зе — в противном случае. Каждое выражение подвергается синтаксическому разбору, результатом которого является построение дерева выражения (см. рис. 2.1). В первом, корневом узле отмечается тип выражения, а каждая ветвь соответствует одному из составляющих выражение членов, или операндов. Узел в каждой ветви соответствует типу операнда, так как он сам может быть сложным выражением, а его ветви определяют составляющие члены этого члена выражения.
Этот процесс продолжается до тех пор, пока не дойдет до листьев дерева, представляющих имена переменных или числовые константы. После того как дерево выражения построено, оно вычисляется. Это означает, что вместо имен переменных подставляются присвоенные им ранее значения (если таковое имело место) и вызываются и вычисляются все функции, входвщие в выражение. Полученное числовое или алгебраическое выражение упрощается, а его результат и является значением выражения. Пользователь может самостоятельно осуществить синтаксический разбор выражения, используя команды пзггуре ~ ~, гуре [ ~, поре ~ ~ и ор ~1 (сн.
гл. 2). В результате вычисления выражение может оказаться равным одному из основных объектов Мар1е. В этом случае оно будет иметь тип, имеющий соответствующий объект. В табл. 5.4 представлены основные объекты Мар!е и возможные типы и подтипы, которым они могут соответствовать при проверке командой гуреев~. 2Ю Глава д Основы программирования в МарЬ Таблица 6.4 (окончание) Тип Подтип 1птедет, ?гас?1оп, 11оап Объект Десятичные числа пптет1с ех?епоес) потегьс 1п?ечет ?пас?1оп, т)оат 1п?т п??у, спс(ет?пес сотр1ех(1п?едет) сотр1ех ( та ? 1опа1 ) сотр1ех(?1оа?) сотр1ех (ппт)>ет) Комплексные числа 11а? Список Множество Гппс?топ Вызов функции (например, д (х) ) При построении арифметических выражений используются арифметические операции: сложение и вычитание, умножение и деление и возведение в степень.
При использовании этих операций следует знать, если все их операнды являются числами (целыми, дробными, вещественными или комплексными), то результатом вычисления такого выражения будет также некоторое число, а поэтому и тип выражения будет соответствовать типу полученного числа: > а:=5+6/7+1У10-?100/4*1? 417 а:= +25) > суре(а, сотр) ех (тасьопа1) ) ) (гие > д:=ехрапс((а" (1.?1) ) ? 8:= -.8685814032 — 6.694384671 / > ива?суре(я)' соя)р)ех Если арифметическое выражение не вычисляется в виде числа Мар1е, а представляется в виде алгебраического выражения с неизвестными величинами, или при выполнении вычислений используется точная арифметика, оставляющая иррациональные значения операндов в форме точных чисел, НаПрИМЕр, а1п(1), апхе (2) И т.
д., тО В ЗтИХ СЛуЧаяХ тнн ВЫражЕНИя СООтВЕтствует той последней арифметической операции, которая должна быть выполнена в соответствии с приоритетом их выполнения в сложном арифметическом выражении. При этом тип алгебраической суммы, включая вычй- Часть Ь Основы )(вар/з ганне двух операндов„определяется как +, тип выражения, являющегося произведением или делением некоторых операндов, будет '*', а выражение, представляющее возведение в степень,— > з:=а+1/10-100/4*1; 1 з:=а+ — — 25/ 10 > ньа<1ура(з)! > з:=а*1/10*100/4*1; 5 з:=-/а 2 > зьа<<урз (з) > д:=ехраас) (з" (1+1) ) > суре(д, (гие Следует помнить, что операндами алгебраической суммы х-у являются х и -у, операндами операции деления х/у, результат которой имеет тип произведения *, будут х и у ', а цри возведении в степень х"а будут выделены два операнда: основание х и показатель степени а. Разговор об операциях и типах выражений Мар!е будет не полным, если не затронуть операции отношения и логические операции, которые вводят алгебраический и булевый контексты.
Онерации отношения <, >, <=, >5ч = и <>, связывающие два алгебраических выражения, формируют новый тип выражения, семантика которого зависит от контекста, в котором оно встречается. В алгебраическом контексте, который встречается при выполнении присваивания или простого задания выражения без присваивания его значения какой-либо переменной, операции отношения формируют уравнения и неравенства.
Тип уравнения представляется символом '=', а тип неравенства может быть представлен одним из символов '<>', '<' или '<='. При задании неравенств со знаками > или '>- Мар1е автоматически преобразует их соответственно к неравенствам противоположного знака. Любой тип отношения имеет два операнда: левую и правую часть, которые можно выделить С ПОМОЩЬЮ КОМаНд 1лз () И хлз () . > Ч: 2>=х; в:=хк2 > абассуре(д) ( с Глава В. Основы программирования в МарЬ гВб > ор(п) ) > 1Ьз (д) 4 х,2 В булевом контексп)е, который возникает при использовании отношений в КаЧЕСтВЕ УСЛОВИЯ В ОПЕРатОРЕ 4 8 ИЛИ ПОСЛЕ КЛЮЧЕВОГО СЛОВа еЬ11е В ОПЕРаторах цикла, отношение может быть равным пепе или га1зе.
Вычислить от- НОШЕНИЕ В буЛЕВОМ КОНтЕКСтЕ МОЖНО И КОМаНдсй еча1Ь(), ПЕрЕдаВ ЕГО Ей В качестве параметра. Если в выражении используется одна из операций отношения », =, < или <=, то в булевом контексте вычисляется разность левой и правой частей, которые должны быть числовыми константами, и сравнивается с нулем: > х:=3: 1Г х>2 ЬЬеп "х>2" е1яе "х<2" епп' 1Г; "х>2" > еча1ь(4+7/8+еча1г(зчпп(2)) > еча1г(ячпп(3))+20); Га(ее > еча1ь(4+7/8+зчпп(2) > ячхп(3)+20) ) у)3 — )'2 <— -121 8 > чьаППУРе(%)4 Обратите внимание, что последнее выражение вычисляется в алгебраическом контексте, хотя явно задано его вычисление в булевом функцией еча1Ь(). ЭтО СВяэаНО С тЕМ, ЧтО ОбЕ ЕГО ЧаетИ НЕ ВЫЧИСЛяЮтСя раВНЫМИ ЧИ- еловым константам, а представляют, с точки зрения Мар!е, алгебраические выражения.
В случае операций = и <> их операндами могут быть произвольные выражения (алгебраические и числовые). Они проверяют, равны или не равны выражения левой и правой частей отношения с точки зрения их синтаксического представления в Мар!е, что не эквивалентно их равенству или не равенству с математической точки зрения.