Главная » Просмотр файлов » Манзон Б.М. Maple V Power Edition

Манзон Б.М. Maple V Power Edition (1185908), страница 16

Файл №1185908 Манзон Б.М. Maple V Power Edition (Манзон Б.М. Maple V Power Edition.djvu) 16 страницаМанзон Б.М. Maple V Power Edition (1185908) страница 162020-08-25СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 16)

В следуюшем примере очень простая процедура р(оМ((Т строит кривые функции и ес производной на о,цюм графике (рис. 68). > хеа~ах~гр1о~г1ЫКг=ргос(у,х,а,Ь) 1оса1 згрг ург=с11йй(у,х)г р1ог.((у,ур),х=а..Ь)г епйг р)огг)((Г:= ргос(у, х, а, 6) )оса! уул ур:= г)1Й(у, х); р)о!((у, ур), х = а .. 6) еив > р1оИз.И(х" 3-2 "х+1,х,-1, 1) г 8. Программирование в среде Мар)е 188 Рис, б8 В этой процедуре значение производной выражения присваивается локальной переменной. Локальные переменные — это временные ячейки памяти для сохранения значений переменных внутри процедуры, они образук1тся при каждом вьповс процедуры. Правила вычисления локальных переменных внутри процедур отличаются от правил вычисления переменных в командной строке (в интерактивном режиме).

Введем команду присваивания некоторой переменной а значения Ь > а:=Ьт после этого присвоим переменной Ь значение с > Ь:=сг А теперь введем > а+1г с+! 154 Мар!е Ч Рохчег Ес(Шоп Таким образом, в интерактивном режиме Мар!е вычисляет все произведенные присвоения переменной а до конца и выводит последнее присвоенное значение. Используя команду еуа! можно вызвать первое присвоенное значение > еча1(а,1); второе присвоенное значение > еча1(а,2)) а также любой другой уровень присвоения. Команда еуа! без указания уровня вычисляет до последнего уровня. > еча1(а)т Теперь посмотрим, что будет происходить, если переменная является локальной переменной некоторой процедуры. В качестве примсра запишем процедуру > у:=рхос() 1оса1 а,Ьт а:=Ь; Ь:=с) а+1 ахат т":= ртосО !оса! а, Ь; а:= Ь; Ь:= с; а + 1 епй > й()) Ь+ ! Такой результат связан с тем, что при вызове процедуры Мар/е вычисляет только первое присвоенное значение локальных переменных.

Функция еуа! позволяет вычислить последнее присвоенное значение. > еча1(й() ) ) Исключение — Й((о-оператор ("). Он является одной из переменных операционной среды (смотрите ниже), локальным для процедур. При вызове процедуры Мар/е назначает переменнои " значение Х()1Д (пустое выраже- 8. Программирование в среде Мар1е 188 ние). В процессе выполнения процедуры Мар(е присваивает переменной- значение последнего выражения, вычисленного до последнего уровня присваивания: > Е: =ркос ( ) 1оса1 а,Ьг рхфтзс('Вначале ["] имеет значение',["]); а:=Ьг Ье=сг а+1г ртзззс('Ееггерь ["] имеет значение',["]); ехИ т Г:= ргос() !оса! а, Ь; рппг(' Вначале г'") имеет значение', Т" /); и:= Ь; Ь:= с; а+ 1; рг)пг(' теперь г'"/ имеет значение', Г" Д епв > Е(); Вначале 1 "т' имеет значение, [ ] Теперь [") имеет значение, [с + 1) Глобальные переменные доступны изнутри любой процедуры и на интерактивном уровне. Таким образом глобальные переменные внутри процедуры вычисляются также, как в интерактивном режиме„то есть до последнего уровня присваивания, кроме тех случаев, когда глобальная переменная является таблицей, массивом или процедурой.

В этих последних трех случаях переменная вычисляется до последнего присвоенного имени (1аи нагие еь а!цапов). Параметры процедуры В строке определения процедуры стоят формальные параметры. Их имена могут быть произвольными (при вызове процедуры используются фактические имена параметров), однако важно их количество и определение типа. Параметров может не быть вовсе. однако и в этом случае в определении процедуры и при вызове сс нужно обязательно записывать пустые скобки. В обшем случае, при вызове процедуры число фактических параметров не обязательно должно совпадать с числом формальных параметров. Мар(е выдает ошибку, если параметр пропущен только в случае, если он необходим на лани ы й момент.

Вычисление параметров происходит следук1шим образом. Фактичсские параметры вычисляются полностью еще до передачи внутрь процедуры. Внутри процедуры, вездс где появляются в выражениях формальные параметры, они заменяк1тся соответствующими значениями фактических параметров. 156 Мвр!е )! Роччег Ес]11!оп Для оперирования параметрами процедуры в Мар!е введены специальные функции: агав[1] или агав[1..]] — последовательность фактических параметров (аргументов), передаваемых процедуре и пагаа — число параметров, передаваемых процедуре.

При помощи функции агав[1] можно выделить часть последовательности параметров, передаваемых процедуре, что очень удобно при программировании некоторых процедур, например, в следующей процедуре определяется максимальное из последовательности чисел > пгахззпшп:= расс () 1оса1 х, 1; х г= етга1й(авда[1)); кок 1 Екоа 2 ~о патдв «1о Иетга1й(арада[*') ) > к сЬеп и:= етга1й(акдв[а)) Н ой! к епй! пгаххпппп(Р1, ехр(1), 3) ! %Ох!глулг ."= ргос() )оса) г, г'; г;= еча1((агля[]); !ог 1 [тот 2 !о лагка йо (т" г < еча11(агав[1]) т]зеп г:= еча11(агав[1]) б ой; г епд 3.141592654 Формальные параметры процедуры можно также применить для передачи внутрь процедуры имени с целью присваивания результата выполнения процедуры.

Запишем пропедуру > Бдиакет=расс(хт:апус)запд, ут тпазпе) уеахл2 епг1 ! Буиаге:= ргос(хгплу(Ь|л~, уплате) у;= х'2 епй В этой процедуре результат присваивается второму параметру. Пусть, например, этот параметр апа > Ядиаке(с1,апв)т Однако при таком использовании параметра нужно соблюдать осторожность. Если мы не отменим присваивацие, то Марlе сообщит ошибку при повторном вызове процедуры. З.

ПРогРаммиРование в сРеде Марlе 157 > Ягуиаге (й, аззв ); Еггог, Ягтиаге ехресое г.св 2пй агдптепе, у, Со Ъе ог Суре пете, Ъпп гесесггес! б 2 ~г Ошибка связана с тем, что Мар!е внутри процедуры не псревычисляет параметр у и пытается присвоить одно выражение другому. Чтобы этого не происходило„нужно имя Фактического параметра, в данном случае апа, заключать в прямые кавычки, то есть писать 'апз'. А теперь запишем первым параметром процедуры переменную а, которой произведено двухуровневое присвоение > ае=Ь: Ьг=сг Яетзхахе(а,'ахзв')! с' г Мы видим, что в этом случае выполняется вычисление до последнего уровня присваивания.

Это объясняется тем, что передаваемый внутрь процедуры фактический параметр вычисляется на интерактивном уровне еще до передачи внутрь процедуры. Переменные операционной среды Эти переменные могут использоваться в качестве переменных для простых присваиваний внутри процедур. Эти присваивания автоматически отменякгтся при выходе из процедуры. Значение такой переменной не изменяется внутри всех подпрограмм, вызываемых из данной процедуры, если оно не замешено локально.

Другими словами, если в подпрограммах их значения изменились, то нет необходимости их восстанавливать, это произойдет автоматически. Помимо уже упомянутого Й((о-оператора ("г "", "" ") Мар!е содержит следующие встроенные переменные операционной среды: е Р)й((а — задает число десятичных знаков в числах с плавающей точкой е Хогша!(хег — исгц>льзуется в степенных рядах для упрощения коэффициентов е Тех(хего — используется в степенных рядах для выявления деления на нуль е гпог) — используется в арифметике по модулю пг е рппйете! — используется для задания уровня вложенных подпрограмм, выводимых на дисплей при распечатке программы Введем, например, процедуру: > с:= ржос() Ждав е= 0ъдЫв + 5! евй! 158 Мар!е Ч Ро>нег ЕейШоп Вьн>олнение процедуры дает увеличение нормального значения переменной О(яйа на 5: > ~()т 15 Однако на интерактивном уровне значение этой переменной автоматически возвращается к исходному нормальному значению: > рк1пе.(ВЕд1св); 10 Пользователь также может вводить переменные операционной среды.

Их имя должно начинаться с лексемы Епт, за которой может следовать любая последовательность разрешенных для имени символов. Теперь определим пользовательскую переменнук> операционной среды ЕвтХ и присвоим ей некоторое значение > ЕпзгХ:= х"2+1) ЕлтХ:= х' + ! Напишем процедуру, переопределяющую ЕвтХ > р:= расс() ЕпзгХ:= 'ро1упол>' епе1е р() т ромулов> Однако на интерактивном уровне значение переменной ЕвтХ не изменилось: > ЕпзгХ т Команда прерывания ЕЯЯОЯ С целью прерывания процедуры и вывода сос>тветствуюп>ей ошибки, например при неправильном вволе типа параметра, в процедуре исгц>льзуется команда ЕККОК('строка сообщения').

> ЗУИ:=ркос(п) 1оса1 1,соса1т Н псе суре(п,1пседет) сЬеп ЕЕКОЕ('Вводить можно только целое число'); й1) соса1:=От 8. Программирование в среде Мар(е 15о йод 1 Екояг 1 со и г1о соСа1:=соса1+1( ог1! СоСа1 епе1( о((л(:= р (п) !оса) (, гога(; !г ио1 гуре(п, (п(е8ег) 1)геи ЕККОК('Вводить можно только целое число 3 В; (ога(:= 0; (ог ( 1о п ио гога(:= (о(а(+ ( ов; еив > 317М(а) ( Ег сот, (ъл вин( Вводить можно только цслос число Рекурсивные процедуры, команда ВЕТУВИ, опция гететЬег Эти процедуры содержат обращения к самим себе.

Напишем в качестве примера процедуру вьшисления чисел Фибоначчи > кевеаке.тв.хЬопасс1:=рюсс(пз:поппедхпс) И п<2 сЬеп ВЕТОИТ(п) ( в.1Ьопассз(п-1)+ГЕЬопассх(п-2) е БЬопасс(: = ргос(плпоппе8т() !т п < 2 Феи КЕ'Г((КМ(п) 6; БЬоиасс((п — !) ь Изоиасс((п — 2) еии В этой процедуре явно определен тип переменной п — поииеа!и1 (неотрицательное целое число). При попытке вызвать процедуру с объектом другого типа Мар(е выдаст сообщение об ошибке. В процедуре применена команда КЕТИЛ((выражение), прерывакицая выполнение команды и возврашакицее значение "выражения", В данной процедуре эта команда применена для возвращения числа и при и < 2.

Вычислим последовательность чисел Фибоначчи от 1 до 15; > вест(ИЬопассх (х), 1=0 .. 15) т О, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610 160 Мар1е Ч Роигег Ед!т)оп С целью увеличения скорости выполнения расчетов в рекурсивных процедурах вводится опция гететбег, при помощи которой сохраняется в памяти предыдущий результат вычисления. С применением этой опции процедура вычисления чисел Фибоначчи запишется в следующем виде; > Р:=рхос(пе:поппед1пе) оре.хоп хехпезпЬехт зЕ п<2 сЬеп ветлы (и) Нт 1Е 1хегп(п,2)=0 еЬеп Р(п)е=2*Р(п/2-1)*Р(п/2)+Р(п/2)"2 е1пе Р(п)е=Р((п-1)/2+1)*2+Р((п-1)/2)*2 йл.

епг1т г:= ргос(ихиоииеИ!ий ор((оп гееетбег; 1( и < 2 !пеп КЕТ()К!х!(и) ((; 1( !гещ(и, 2) = 0 йеп Г(и):= 2*Г(1/2*л — 1)*Г(1/2"и) + Г(1/2*и) 2 е)ае Г(и):= Г(1/2*л + !/2) 2 + Г(1/2*п — 1/2) 2 0 епв Если в первом варианте процедуры время вычисления каждого следующего числа Фибоначчи увеличивается по экспоненте, то во втором — линейно с увеличением и. Так, например, 2000-е число Фибоначчи вычисляется почти мгновенно: > Р(2000)т 4224696333392304878706725602341482782579852840250681098010280!3731х 4308584370130707224123599639!4151!0884460875389096036076401947~ 1164359602927!9833!25987373262535558026069915859!5229492453904х 9987222567953169828744824729922639018337!677806060701161549788х 67!98798583!14688708762645973690867228840236544222952433479644х 80!395!5349562972087652656069529806499841977448720155612802665х 4045541717178819303240252043120825!6817125 В то же время для первого варианта процедуры уже 20-е число Фибоначчи вычисляется несколько секунд.

Характеристики

Тип файла
DJVU-файл
Размер
2,15 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6390
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее