Другие журналы

научное издание МГТУ им. Н.Э. Баумана

НАУКА и ОБРАЗОВАНИЕ

Издатель ФГБОУ ВПО "МГТУ им. Н.Э. Баумана". Эл № ФС 77 - 48211.  ISSN 1994-0408

Программный модуль для ввода математических функций на C#

# 04, апрель 2010
авторы: Джаманбаев А. Б., Петросян О. Г.

УДК 681.3.07

МГТУ им. Н. Э. Баумана

dabulkhairb@yahoo.com

 

 

 

В C# [1, 2, 3] при работе с готовыми проектами не предусмотрены специальные программные модули для ввода с клавиатуры тех или иных аналитических выражений, (без входа в программный код), состоящих из математических функций, реализованных в классе Math в пространстве имён System. В частности, при физических исследованиях, при анализе метрологических характеристик измерительного комплекса [4] требуется ввести исследуемую формулу измерения для проведения численных расчётов.

Целью настоящей статьи является создание в готовом проекте специального окна, куда с клавиатуры можно ввести (по существующим в C# правилам) выражение, состоящее из математических функций, например, и далее использовать эти формулы для численных расчётов значения функции, построения графика функции и т.д.

При записи различных математических выражений в коде программы обычно используется инфиксная нотация (ИН) [5], т. е. когда учитываются скобки и соблюдается порядок операторов.

Для реализации поставленной задачи была использована постфиксная нотация (ПН) [6, 7, 8]. В ПН используют входную строку и стек. При переходе в ПН используется алгоритм перевода из ИН в ПН, который предусматривает выполнение следующих правил:

1.      Чтение очередного символа;

2.      Если символ является числом, то он добавляется в выходную строку;

3.      Если символом является оператором О1, то:

а) если приоритет О1 меньше либо равен приоритету оператора находящегося на вершине стека, то «выталкиваются» все верхние элементы стека с большим либо равным приоритетом в выходную строку;

б) если приоритет О1 больше приоритета оператора, находящегося на вершине стека, то записываем оператор О1 в стек;

4. Если символ является открывающейся скобкой, то помещаем его в стек;

5. Если символ является закрывающейся скобкой, то элементы из стека «выталкиваются» в выходную строку до тех пор, пока на вершине стека не окажется открывающаяся скобка. При этом открывающаяся скобка удаляется, а закрывающаяся скобка никуда не помещается. Обе скобки уничтожаются.

6. Когда выходная строка заканчивается, «выталкиваются» все символы из стека в выходную строку.

Пусть требуется преобразовать  следующее выражение: (А+В)*(C+D)+E

 

╧ шага

Очередной символ

Выходная строка

Стек

1

(

 

(

2

А

А

(

3

+

А

(,+

4

В

А,В

(,+

5

)

А,В,+

 

6

*

А,В,+

*

7

(

А,В,+

*,(

8

C

А,В,+,C

*,(

9

+

А,В,+,C

*,(,+

10

D

А,В,+,C,D

*,(,+

11

)

А,В,+,C,D,+

*

12

+

А,В,+,C,D,+,*

+

13

E

А,В,+,C,D,+,*,E

+

14

 

А,В,+,C,D,+,*,E,+

 

 

Таким образом, в ПН, например, сложения чисел «a» и «b» выглядит как «a b +», т.е. оператор становится после двух чисел к которым он применяется.

Результат выходной строки: A В + C D + * E + (с учётом приоритетов операторов). Приоритет операторов: ^ - высокий, *, / - средний, + - низкий.

Поскольку в программе используются функции, которые во входной строке представлены символами, то будет целесообразнее и эффективнее, если каждую функцию заменить в строке кодом ASCII (например: sin → #16, cos → #17). При этом сопоставление кодов произвольное (#n, n={15…255}).


Если во входной строке имеется переменная, значение которой задаётся пользователем, то эта переменная заменяется на это значение в выходной строке. Например: .

 

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

В модуль для построения графика функции также вводятся граничные значения аргумента. С помощью дополнительных элементов управления предусмотрена возможность построения нескольких графиков разными цветами.

Литература:

1. Герберт Шилдт. С# 2.0. Перевод с англ. – «ЭКОМ», - Москва. 2007. – 1046 с.

2. Т.А.Павловская. С#. Программирование на языке высокого уровня. Учебник для вузов. – СПб.: Питер,2007. – 432 с.:ил.

3. Герберт Шилдт. Полный справочник по С#. Перевод с англ. – М. :  Издательский дом «Вильямс»,2008. – 752 с. : ил.

4. Петросян О.Г. Анализ и прогноз метрологических характеристик измерительных комплексов. Вестник МГТУ им. Н. Э. Баумана, с. 49.

5. http://ru.wikipedia.org/wiki/Польская_нотация

6. http://ru.wikipedia.org/wiki/Обратная_польская_нотация

7. http://algolist.manual.ru/maths/misc/revpn.php

8. Bob Brown - http://www.spsu.edu/cs/faculty/bbrown/web_lectures/postfix/


Тематические рубрики:
Поделиться:
 
ПОИСК
 
elibrary crossref ulrichsweb neicon rusycon
 
ЮБИЛЕИ
ФОТОРЕПОРТАЖИ
 
СОБЫТИЯ
 
НОВОСТНАЯ ЛЕНТА



Авторы
Пресс-релизы
Библиотека
Конференции
Выставки
О проекте
Rambler's Top100
Телефон: +7 (915) 336-07-65 (строго: среда; пятница c 11-00 до 17-00)
  RSS
© 2003-2019 «Наука и образование»
Перепечатка материалов журнала без согласования с редакцией запрещена
 Тел.: +7 (915) 336-07-65 (строго: среда; пятница c 11-00 до 17-00)