Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Генерация кодов на языке С




Язык С (Си) также широко используется для решения вычислительных задач. Достаточно отметить, что сама система Maple 7 создана на языке С.

Для генерации кодов на языке С вначале надо подключить соответствующую функцию:

> with(codegen.C); [С]

Затем можно использовать функцию С:

С(ехрг.folename=str.optimi zed)

Эта функция используется по аналогии с функцией fortran, что и показывают приведенные ниже примеры:

> C(d1ff(x4>,x$2));

t0 = pow(x,1.0*b)*b*b/(x*x)-pow(x,1.0*b)*b/(x*x);

> C(diff(xAb,x$2),optimized);

tl = pow(x,1.0*b);

t2 = b*b;

t4 = x*x;

t5 = l/t4; '

t9 = tl*t2*t5-tl*b*t5;

Обширные возможности преобразования выражений в различные формы предоставляет функция convert. А функция interface позволяет управлять выводом. К сожалению, объем книги не позволяет рассмотреть все многочисленные варианты применения этих функций.

Дополнительные возможности Maple-языка

Дополнительные возможности Maple-языка

Переназначение определений

В большинстве случаев Maple-язык использует достаточно длинные идентификаторы для своих определений, например функций. Однако с помощью функции al i as можно изменить любое определение на другое, если оно кажется пользователю более удобным. Функция alias записывается в виде:

alias(e1. е2..... еN)

где e1, e2,..., eN — ноль или более равенств.

Эта функция возвращает список переназначений и осуществляет сами переназначения. Например, для замены имени функции BesselJ на более короткое имя BJ достаточно параметром функции alias записать BJ=BesselJ:

> alias(BJ-BesseU):

BJ,Fx

> [BJ(0.1.),Besse1J(0,1.)]:

[.7651976866,.7651976866]

Можно также переназначить функцию пользователя:

Для отмены переназначения, например BJ, используется та же функция alias с повтором переназначения:

> a1ias(B>BJ): Fx

> BJ(0,1.); BJ(0,1.)

Обратите внимание на то, что BJ исчезло из списка переназначений и функция BJ(0,1.) уже не вычисляется, поскольку ее больше нет.

Gif

Модули.

Модули

Модули придают языку программирования Maple 7 некоторые свойства языков объектно-ориентированного программирования. Они служат для реализации абстрактного типа данных на основе инкапсуляции — объединения данных и процедур их обработки. Модули задаются ключевым словом module с пустыми скобками () и завершаются словами end module или просто end:

name:= module()

export eseq; local Iseq; global gseq:

option optseq: description desc:

Тело модуля

end module (или просто end)

Хотя структура модуля во многом напоминает структуру процедуры, включая объявление локальных и глобальных переменных, параметров и описаний, между ними есть существенная разница:

  • модуль не имеет списка входных параметров; О в модуле могут размещаться данные;
  • модули могут использоваться для создания пакетов процедур, доступ к которым обеспечивается командой with;
  • модули имеют свойства в виде локальных переменных и методы в виде процедур интерфейса модулей;
  • реализация абстрактных типов данных с помощью модулей скрыта от пользователя;
  • модули могут содержать оператор export eseq, объявляющий экспортируемые переменные модуля;
  • для доступа к экспортируемым переменным модуля может использоваться специальный оператор «:-» (двоеточие и минус);
  • модули и процедуры могут вкладываться друг в друга без ограничения уровня вложенности;
  • модули могут иметь специальные конструкторы объектов.

Следующий пример демонстрирует создание модуля pt, в котором заданы две операции (сложения plus и умножения times) и показан доступ к ним:

> pt:= module()

export plus, times;

plus:= (a.b) -> a + b;

times:= (a.b) -> a * b: end module:

pt:= module () export plus, times; end module

> pt:-p1us(3,5);

> pt:=times(3,7);

Детальную информацию о модулях и о конструкторах объектов можно найти в справках по ним. Некоторые пакеты Maple 7 (в основном сравнительно новые) реализованы уже не в виде процедур, а в виде модулей (например, в виде модуля сделан пакет LinearAlgebra). В простейшем виде модули могут использоваться всеми пользователями системы Maple 7, но их серьезное применение (например, с целью создания полноценных пакетов Maple 7) требует серьезного знакомства с техникой объектно-ориентированного программирования. Такое знакомство выходит за рамки данной книги.

Макросы

Макросы

Макрос — это макрокоманда, короткая запись длинных определений. По сравнению с переназначениями макросы более гибки и могут использоваться для сокращения операций загрузки новых определений из библиотеки и пакетов. Макросы создаются с помощью функции macro:

macrc(e1, e2,.... en)

где el, е2,....,, en — ноль или более равенств.

В следующем примере функция numbperm с помощью макроса заменена на пр:

> numbperm([l,2,3,4]);

> macro(np=numbperm(V));

> V:=[1.2.3.4]:

F:=[l,2,3,4]

> np(V);

Макросы могут быть использованы для конструирования выражений из их макроопределений.

Внешние вызовы

Внешние вызовы

Maple 7 имеет команду system(string), с помощью которой можно исполнить любую команду MS-DOS, записанную в виде строки string. Например, для форматирования гибкого диска из среды Maple 7 можно использовать стандартную команду MS-DOS:

> system(`format a:`);

На экране появится окно MS-DOS с начальным диалогом форматирования диска А. Это окно показано на рис. 7.5.

При работе в операционной системе Windows эта возможность практически бесполезна, поскольку форматирование диска с большими удобствами можно выполнить средствами Windows.

Внешние вызовы командой system куда более полезны для MS-DOS-реализаций Maple, которые кое-где используются и по сей день. Но поскольку данная книга посвящена самым современным Windows-реализациям системы Maple 7, более подробное рассмотрение операций внешних вызовов не имеет особого смысла.

а

б

Рис. 7.5. Результат выполнения команды форматирования гибкого диска

Gif

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...