Разработка объектно-ориентированной программы разбора математических выражений
Создание эффективной и простой в освоении программы для решения математических выражений. Организация входных и выходных данных. Проверка наличия алгебраических операций, цифр, скобок и выражений, тригонометрических функций. Общий алгоритм программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 22.12.2019 |
Размер файла | 1,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Введение
С развитием информационных технологий и телекоммуникаций жизнь становится все более мобильной и информативной, новые технологии прочно входят в различные отрасли, сферы жизни и несут новые нормы в них.
В современном мире программные средства и разработки облегчают решение различных задач. В данный момент математические примеры решаются вручную, а значит, затрачивая время человека. Время в современном обществе - главный ресурс. Опираясь на данное утверждение, и выбрана данная тематика курсовой работы.
В данный момент все решения математических выражений осуществляется вручную, и человек может допустить ошибку в решении тех или иных задач. Главное в решении выражений - это правильная последовательность действий.
Объектом разработки является образовательный процесс. И по данной тематике существует решение для сокращения затратов времени и развитию образования, путем наглядного решения простого математического выражения с неизвестными по действиям.
Программа, представленная в данной работе, написана на языке программирования С#. В её функции входит разбор математического выражения методом рекурсивного спуска. Процесс ее работы описывается следующим образом: пользователь вводит выражение, программа производит анализ введенного выражения, разбирает его по действиям, и выводит ответ.
Таким образом, основной целью работы является разработка объектно-ориентированной программы разбора математических выражений. Основной задачей выполнения работы является создание эффективной и простой в освоении программы для решения математических выражений.[1]
1. Анализ технического задания
алгебраический цифра скобка алгоритм
Согласно техническому заданию на курсовой проект, необходимо разработать приложение "Разработка объектно-ориентированной программы разбора математических выражений", в дальнейшем именуемая как "программа". Краткое название программы - "Программа Mat". Она предназначена для анализа выражение, его разбора по действиям и с дальнейшим решением.
1.1. Критерии эффективности и качества программы
Данная программная разработка очень проста в освоении и рассчитана не только на профессионалов, но и на рядовых пользователей, работающих в среде MS Windows.
В отличие от других программ "Программа разбора математических выражений " идеально подходит для любителей и опытных пользователей, так как содержит все, что им необходимо для работы.
1.2. Цели разработки программы
Создание данной программы преследует ряд целей: создание программного продукта, позволяющего анализировать введённое пользователем выражение, решить его и разложить по действиям.
1.3. Организация входных и выходных данных
В данной программе входной информацией будет являться-выражение, а выходной информацией будет являться-результат выражения.
1.4. Требования к программе
1.4.1 Требования к функциональным характеристикам
Требования к функциональным характеристикам заключаются в способности выполнения программой следующих функций:
1. Программа должна работать с одним пользователем;
2. Программа должна проанализировать выражения и разбить его по действиям;
3. Программа должна распознать неизвестные и вывести запрос для внесения в них чисел;
1.4.2 Временные характеристики
Время восстановления после отказа должно состоять из:
- времени закрытия программы;
- времени перезапуска программы пользователем исполняемого файла программы;
- времени повторного ввода потерянных данных.
1.4.3 Анализ исключительных ситуаций
При возникновении в ходе работы программы исключительных ситуаций, программа не должна прекращать свою работу при
возникновении исключительных ситуаций - программа должна обработать ситуацию и выдать пользователю сообщение о ней.
1.5 Описание класса
«Decompositor» данный класса позволяет разобрать выражение методом рекурсивного спуска. Данный класс содержит методы, которые позволяют выражение, которое написал пользователь, разобрать по переменным и действиям.[2]
Данный класс включает следующие методы:
1. double Calculate(stringstr);
2. double Base(refstringstr,refint index);
3. double Expr(stringstr,refint index);
4. doubleGetNumber(stringstr, refint index);
5. doubleGetIdentifier(stringstr, refint index);
6. doubleCalcFunction(string name, stringstr,refint index);
8. double Factor(stringstr, refint index);
9. double Term(stringstr,refint index);
1.5.1 Описание методов
doubleCalculate(stringstr)
Данный метод является стартовым для всей программы. Дальнейшие методы являются рекурсией этого метода.
double Base(refstringstr,refint index)
Данный метод в строке str, которое хранит выражение, введённое пользователем, в позиции index, проверяет наличие скобок в выражении и разбирает выражение внутри скобки.
double Expr(stringstr,refint index)
Данный метод в строке str, которое хранит выражение, введённое пользователем, в позиции index, проверяет наличие алгебраических операций низшего уровня (сложение и вычитание) и выполняет их с крайними элементами этой операции. Данные метод является рекурсией для метода «base», т.к. в скобках могут быть только алгебраические операций низшего уровня (сложение и вычитание).
doubleGetNumber(stringstr, refint index)
Данный метод в строке str, которое хранит выражение, введённое пользователем, в позиции index, проверяет наличие цифры и извлекает её. Числа могут быть как целыми, так и с плавающей точкой.
doubleGetIdentifier(stringstr, refint index)
Данный метод в строке str, которое хранит выражение, введённое пользователем, в позиции index, проверяет наличие неизвестных (идентификаторов) и извлекает их.
doubleCalcFunction(string name, stringstr,refint index)
Данный метод в строке str, которое хранит выражение, введённое пользователем, в позиции index, проверяет наличие тригонометрических функций и извлекает их. Если в этих функциях есть неизвестные, то он извлекает их в строку с неизвестными name.
doubleFactor(stringstr, refintindex)
Данный метод в строке str, которое хранит выражение, введённое пользователем, в позиции index, проверяет наличие алгебраических операций низшего уровня (сложение и вычитание) и выполняет их с крайними элементами этой операции.
double Term(stringstr,refint index)
Данный метод в строке str, которое хранит выражение, введённое пользователем, в позиции index, проверяет наличие алгебраических операций высшего уровня (умножение и деление) и выполняет их с крайними элементами этой операции.[3]
2. Обзор и сравнение аналогов
В данном разделе сравнивается программа курсового проекта(MathParser) с двумя аналогами, «Инженерный калькулятор 2.1» и «Калькулятор Windows 10» .
2.1 Инженерный калькулятор 2.1
Инженерный калькулятор 2.1- Программа для инженерных расчетов. Вычисляет математические выражения, введенные в строку с использованием знаков операций, чисел, констант, функций и скобок. Выражения можно вводить как с клавиатуры, так и с использованием панели инструментов. [4]
Рисунок1 - Инженерный калькулятор 2.1
2.2 Калькулятор Windows 10
Калькулятор Windows 10 - это версия калькулятора для настольных компьютеров под управлением предыдущих Windows,которая поддерживает сенсорный ввод и работает как на телефонах, так и на настольных устройствах.
Рисунок 2 - калькулятор Windows 10
2.3 Сравнение программ
Таблица 1 - сравнение программ
Сильные и слабые стороны |
Название программы |
|||
Инженерный калькулятор 2.1 |
Калькулятор Windows 10 |
MathParser |
||
Цена |
||||
Интерфейс |
||||
Использование ячейки памяти |
||||
Выведение некорректных ситуаций |
||||
Вычисление основных арифметических действий |
||||
Решение нелинейных уравнений |
||||
Работа с углами в градусной и радианной мерах |
||||
Преобразователь |
3. Разработка алгоритма
3.1 Описание ключевых методов и их алгоритмы
3.1.1 Общий алгоритм программы
Рисунок 3 - Общий алгоритм программы
3.1.2 Стартовый метод
Данный метод является стартовым для всей программы. Дальнейшие методы являются рекурсией этого метода.
Рисунок 4 - Декомпозиция метода Calculat.
Приведем код по данной блок-схеме:
publicdouble Calculate(stringstr)
{
int index = 0;
str = str.Replace(" ", "");
double result;
try
{
result = Expr(str, ref index);
}
catch(Exception ex)
{
throw ex;
}
if (index <str.Length - 1) thrownew Exception("Некорректныйсимволвпозиции " + (index + 1).ToString());
returnresult;
3.1.3 Сложение и вычитание
Данный метод в строке str, которое хранит выражение, введённое пользователем, в позиции index, проверяет наличие алгебраических операций низшего уровня (сложение и вычитание) и выполняет их с крайними элементами этой операции. Данные метод является рекурсией для метода «base», т.к. в скобках могут быть только алгебраические операций низшего уровня (сложение и вычитание).
Рисунок 5 - Декомпозиция метода Expr
Приведем код по данной блок - схеме:
double Expr(stringstr,refint index)
{
double result;
char operation;
try
{
result = Term(str, ref index);
while (index <str.Length&&
(str[index] == '+' || str[index] == '-'))
{
operation = str[index];
++index;
switch
(operation)
{
case'+':
{
result += Term(str, ref index);
}
break;
case'-':
result -= Term(str, ref index);
break;
}
}
}
catch(Exception ex)
{
throw ex;
}
returnresult;
}
3.1.4 Умножение и деление
Данный метод в строке str, которое хранит выражение, введённое пользователем, в позиции index, проверяет наличие алгебраических операций высшего уровня (умножение и деление) и выполняет их с крайними элементами этой операции.
Рисунок 6 - Декомпозиция метода Term
Приведем код по данной блок-схеме:
double Term(stringstr,refint index)
{
double result;
char operation;
double div;
try
{
result = Factor(str, ref index);
while (index <str.Length&&
(str[index] == '*' || str[index] == '/'))
{
operation = str[index];
++index;
switch (operation)
{
case'*':
result *= Factor(str, ref index);
break;
case'/':
div = Factor(str, ref index);
if (div == 0) thrownewDivideByZeroException("Невозможноподелитьнаноль!");
result /= div;
break;
}
}
}
catch(Exception ex)
{
throw ex;
}
returnresult;
}
3.1.5 Проверка наличия алгебраических операций
Данный метод в строке str, которое хранит выражение, введённое пользователем, в позиции index, проверяет наличие алгебраических операций низшего уровня (сложение и вычитание) и выполняет их с крайними элементами этой операции.
Рисунок 7 - Декомпозиция метода Factor
Приведем код по данной блок-схеме:
double Factor(stringstr, refint index)
{
double result;
if (index >= str.Length) thrownew Exception("Неожиданныйконецстроки");
try
{
switch (str[index])
{
case'+':
++index;
result = Factor(str, ref index);
break;
case'-':
++index;
result = -Factor(str, ref index);
break;
default:
result = Base(refstr, ref index);
if (index <= str.Length - 1 &&str[index] == '^')
{
++index;
result = Math.Pow(result, Factor(str, ref index));
}
break;
}
}catch(Exception ex)
{
throw ex;
}
returnresult;
}
3.1.6 Проверка наличия скобок в выражении
Данный метод в строке str, которое хранит выражение, введённое пользователем, в позиции index, проверяет наличие скобок в выражении и разбирает выражение внутри скобки.
Рисунок 8 - Декомпозиция метода base
Приведем код по данной блок-схеме:
double Base(refstringstr,refint index)
{
double result;
if (index >= str.Length) thrownew Exception("Неожиданныйконецстроки");
if (str[index] == '(')
{
++index;
try
{
result = Expr(str, ref index);
}
catch(Exception ex)
{
throw ex;
}
if (index >= str.Length || str[index] != ')') thrownewArithmeticException("Ожидается \")\" впозиции");
++index;
}
else
{
if (str[index] >= '0'&&str[index] <= '9')
result = GetNumber(str,ref index);
else
{
if ((str[index] >= 'A'&&str[index] <= 'Z') ||
(str[index] >= 'a'&&str[index] <= 'z') ||
(str[index] == '_'))
{
try
{
result = GetIdentifier(str, ref index);
}
catch(Exception ex)
{
throw ex;
}
}
elsethrownew Exception("Некорректныйсимволвпозиции " + index + 1);
}
}
returnresult;
}
3.1.7 Проверка наличия цифры
Данный метод в строке str, которое хранит выражение, введённое пользователем, в позиции index, проверяет наличие цифры и извлекает её. Числа могут быть как целыми, так и с плавающей точкой.
Рисунок 9 - Декомпозиция метода GetNumber
Приведем код по данной блок-схеме:
doubleGetNumber(stringstr, refint index)
{
double result = 0.0;
char digit = '\0';
double k = 10.0;
while (index <str.Length)
{
digit = str[index++];
if (digit >= '0'&& digit <= '9')
result = result * 10.0 + (digit - '0');
else
{
--index;
break;
}
}
if (index <str.Length)
digit = str[index++];
if (digit == '.')
{
while (index <str.Length)
{
digit = str[index++];
if (digit >= '0'&& digit <= '9')
{
result += (digit - '0') / k;
k *= 10.0;
}
else
{
--index;
break;
}
}
}
else --index;
return result;
}
3.1.8 Проверка наличия неизвестных (идентификаторов)
Данный метод в строке str, которое хранит выражение, введённое пользователем, в позиции index, проверяет наличие неизвестных (идентификаторов) и извлекает их.
Рисунок 10 - Декомпозиция метода GetIdentifier
Приведем код по данной блок-схеме:
doubleGetIdentifier(stringstr, refint index)
{
string name = "";
double result;
while (index <str.Length&&
((str[index] >= 'a'&&str[index] <= 'z') || (str[index] >= 'A'&&str[index] <= 'Z') || (str[index] >= '0'&&str[index] <= '9') ||
(str[index] == '_')))
name += str[index++];
if (index <str.Length&&str[index] == '(')
{
++index;
try
{
result = CalcFunction(name, str, ref index);
}
catch (Exception ex)
{
throw ex;
}
if (index >= str.Length || str[index] != ')') thrownewArithmeticException("Ожидается \")\" впозиции " + index + 2);
++index;
}
elseif (vars.ContainsKey(name.ToLower())) result = vars[name.ToLower()];
else
{
try
{
result = Convert.ToDouble(NeedWriteVar(name));
vars.Add(name.ToLower(), result);
}
catch (Exception ex)
{
throw ex;
}
}
returnresult;
}
3.1.9 Проверка наличия тригонометрических функций
Данный метод в строке str, которое хранит выражение, введённое пользователем, в позиции index, проверяет наличие тригонометрических функций и извлекает их. Если в этих функциях есть неизвестные, то он извлекает их в строку с неизвестными name.
Рисунок 11 - Декомпозиция метода CalcFunction
Приведем код по данной блок-схеме:
doubleCalcFunction(string name, stringstr,refint index)
{
try
{
double argument = Expr(str, ref index);
switch (name.ToLower())
{
case"acos":
returnMath.Acos(argument);
case"asin":
returnMath.Asin(argument);
case"atan":
returnMath.Atan(argument);
case"cos":
returnMath.Cos(argument);
case"cosh":
returnMath.Cosh(argument);
case"exp":
returnMath.Exp(argument);
case"log":
returnMath.Log(argument);
case"log10":
return Math.Log10(argument);
case"sin":
returnMath.Sin(argument);
case"sinh":
returnMath.Sinh(argument);
case"sqrt":
returnMath.Sqrt(argument);
case"tan":
returnMath.Tan(argument);
case"tanh":
returnMath.Tanh(argument);
default:
thrownewArgumentException("Неизвестнаяфункция");
}
}
catch(Exception ex)
{
throw ex;
}
}
4. Тестирование
1. Выполним запуск exe-файла данной программы.
Рисунок 12 - Окно программы «Разложение математического выражения».
2. Введём выражение, которое заведомо решили: .
Рисунок 13 - Тестирование программы с использованием степенного выражения
3. На запрос программы о вводе значения переменной, введем значение x=2.
Рисунок 13 - Запрос программы ввода неизвестной.
4. Получаем результат решения равным 15, что является верным, т.к.
.
Рисунок 14 - Вывод ответа
Данная программа может разобрать степенные функции тригонометрические: x^2+6*y+cos(z).
5. На запрос программы о вводе значения переменной, введем значение x=2, y=4, z=0.
Рисунок 15 - Решение выражения с 3 неизвестными и тригонометрической функцией
В случае отсутствия скобки программа выдаст сообщение с номером места отсутствия:
Рисунок 16 - Вывод ошибки при отсутствии скобки.
Все неизвестные должны быть написаны английскими буквами, в противном случае программа выдаст ошибку:
Рисунок 17 - Вывод ошибки при вводе неизвестной
Если тригонометрическая функция будет введена неверно, то программа выдаст ошибку:
Рисунок 18 - Вывод ошибки при вводе неизвестной функции
В случае если происходит деление на нуль, то программа выдаст ошибку:
Рисунок 19 - Вывод ошибки при делении на нуль
5. Руководство пользователя
5.1 Назначение программы
Программа, разработанная в курсовой работе, предназначена для разбора математических выражений. Программа выполняет разбор выражения методом рекурсивного спуска.
5.2 Некорректные ситуации
Программа разбора математических выражений» выводит сообщение об ошибке при некорректных ситуациях.
К некорректным ситуациям относятся:
1.отсутствие закрывающей скобки в выражении;
2. некорректно введенные переменные;
3. некорректно введенная функция;
4. деление на нуль;
5.3 Минимальные системные требования
1. ОС Windows XP и выше.
2. монитор с разрешением 800X600
3. Объем занимаемой оперативной памяти 1,6 Мb.
4. На HDD запускаемый файл с расширением exe занимает 964 Kb.
5. Клавиатура
6. рекомендуется манипулятор типа мышь.
6. Руководство системного администратора
Чтобы установить программу, необходимо скачать папку «Release», со-держащую, в себе 2 файла: Setup.exe и Setup.msi. Открыть файл Setup.msi и в открывшемся мастере установки указать путь, куда будет устанавливаться программа.
Чтобы удалить программу, необходимо запустить файл Delete.exe и вы-брать пункт «Удалить Delete», также можно удалить приложение через панель управления.
6.1 Описание среды программирования
VisuaStudioС# живет по принципу «всякая сущность есть объект». Его причисляют к объектно-ориентированным, а точнее объектным, языкам программирования. «Язык основан на строгой компонентной архитектуре и реализует передовые механизмы обеспечения безопасности кода» - так принято характеризовать его. Однако скептики сомневаются как минимум в его безопасности.
Сторонники VisuaStudio С# называют его самым мультипарадигменным, универсальным, продвинутым и удобным в использовании языком программирования. Учитывая тот факт, что за ним стоит платформа Microsoft .NET, число таких сторонников достаточно велико.
6.2 Переменные
Переменная - это именованная область памяти. В переменную можно записывать данные и считывать. Данные, записанные в переменной, называются значением переменной.
6.3 Минимальные системные требования
1. ОС Windows XP и выше.
2. Монитор с разрешением 800X600
3. Объем занимаемой оперативной памяти 1,6 Мb.
4. На HDD запускаемый файл с расширением exe занимает 964 Kb.
5. Клавиатура
6. Рекомендуется манипулятор типа мышь.
Заключение
В процессе выполнения курсовой работы было разработано приложение ОС Windows «Программа разбора математических выражений» в среде программирования C#.
Все цели и задачи, поставленные в работе, были выполнены:
- анализ выражения с неизвестными
- вывод неизвестных с запросом о внесении в них чисел,
- разбор по действиям
- решение выражения
С помощью разработанной программы можно решить выражение с неизвестными.
Список литературы
1. C# 5.0. Справочник. Полное описание языка. Авторы: Джозеф Албахари, Бен Албахари. Вильямс, 2013 г. 1008 стр.
Приложение A
Программный код
llFunctions.cs:
using System;
usingSystem.Collections.Generic;
namespaceMathParser
{
classDecompositor
{
private Dictionary<string, double>vars;
public delegate string DecompositorEventHandler(string name);
public event DecompositorEventHandlerNeedWriteVar;
publicDecompositor()
{
vars = new Dictionary<string, double>();
}
doubleGetNumber(string str, ref int index)
{
double result = 0.0;
char digit = '\0';
double k = 10.0;
while (index <str.Length)
{
digit = str[index++];
if (digit >= '0' && digit <= '9')
result = result * 10.0 + (digit - '0');
else
{
--index;
break;
}
}
if (index <str.Length)
digit = str[index++];
if (digit == '.')
{
while (index <str.Length)
{
digit = str[index++];
if (digit >= '0' && digit <= '9')
{
result += (digit - '0') / k;
k *= 10.0;
}
else
{
--index;
break;
}
}
}
else --index;
return result;
}
doubleGetIdentifier(string str, ref int index)
{
string name = "";
double result;
while (index <str.Length&&
((str[index] >= 'a' &&str[index] <= 'z') || (str[index] >= 'A' &&str[index] <= 'Z') || (str[index] >= '0' &&str[index] <= '9') ||
(str[index] == '_')))
name += str[index++];
if (index <str.Length&&str[index] == '(')
{
++index;
try
{
result = CalcFunction(name, str, ref index);
}
catch (Exception ex)
{
throw ex;
}
if (index >= str.Length || str[index] != ')') throw new ArithmeticException("Ожидается \")\" впозиции " + index + 2);
++index;
}
else if (vars.ContainsKey(name.ToLower())) result = vars[name.ToLower()];
else
{
try
{
result = Convert.ToDouble(NeedWriteVar(name));
vars.Add(name.ToLower(), result);
}
catch (Exception ex)
{
throw ex;
}
}
return result;
}
doubleCalcFunction(string name, string str,refint index)
{
try
{
double argument = Expr(str, ref index);
switch (name.ToLower())
{
case "acos":
returnMath.Acos(argument);
case "asin":
returnMath.Asin(argument);
case "atan":
returnMath.Atan(argument);
case "cos":
returnMath.Cos(argument);
case "cosh":
returnMath.Cosh(argument);
case "exp":
returnMath.Exp(argument);
case "log":
returnMath.Log(argument);
case "log10":
return Math.Log10(argument);
case "sin":
returnMath.Sin(argument);
case "sinh":
returnMath.Sinh(argument);
case "sqrt":
returnMath.Sqrt(argument);
case "tan":
returnMath.Tan(argument);
case "tanh":
returnMath.Tanh(argument);
default:
throw new ArgumentException("Неизвестнаяфункция");
}
}
catch(Exception ex)
{
throw ex;
}
}
double Expr(string str,refint index)
{
double result;
char operation;
try
{
result = Term(str, ref index);
while (index <str.Length&&
(str[index] == '+' || str[index] == '-'))
{
operation = str[index];
++index;
switch
(operation)
{
case '+':
{
result += Term(str, ref index);
}
break;
case '-':
result -= Term(str, ref index);
break;
}
}
}
catch(Exception ex)
{
throw ex;
}
return result;
}
double Term(string str,refint index)
{
double result;
char operation;
double div;
try
{
result = Factor(str, ref index);
while (index <str.Length&&
(str[index] == '*' || str[index] == '/'))
{
operation = str[index];
++index;
switch (operation)
{
case '*':
result *= Factor(str, ref index);
break;
case '/':
div = Factor(str, ref index);
if (div == 0) throw new DivideByZeroException("Невозможноподелитьнаноль!");
result /= div;
break;
}
}
}
catch(Exception ex)
{
throw ex;
}
return result;
}
double Factor(string str, ref int index)
{
double result;
if (index >= str.Length) throw new Exception("Неожиданныйконецстроки");
try
{
switch (str[index])
{
case '+':
++index;
result = Factor(str, ref index);
break;
case '-':
++index;
result = -Factor(str, ref index);
break;
default:
result = Base(ref str, ref index);
if (index <= str.Length - 1 &&str[index] == '^')
{
++index;
result = Math.Pow(result, Factor(str, ref index));
}
break;
}
}catch(Exception ex)
{
throw ex;
}
return result;
}
double Base(ref string str,refint index)
{
double result;
if (index >= str.Length) throw new Exception("Неожиданныйконецстроки");
if (str[index] == '(')
{
++index;
try
{
result = Expr(str, ref index);
}
catch(Exception ex)
{
throw ex;
}
if (index >= str.Length || str[index] != ')') throw new ArithmeticException("Ожидается \")\" впозиции");
++index;
}
else
{
if (str[index] >= '0' &&str[index] <= '9')
result = GetNumber(str,ref index);
else
{
if ((str[index] >= 'A' &&str[index] <= 'Z') ||
(str[index] >= 'a' &&str[index] <= 'z') ||
(str[index] == '_'))
{
try
{
result = GetIdentifier(str, ref index);
}
catch(Exception ex)
{
throw ex;
}
}
else throw new Exception("Некорректныйсимволвпозиции " + index + 1);
}
}
return result;
}
public double Calculate(string str)
{
int index = 0;
str = str.Replace(" ", "");
double result;
try
{
result = Expr(str, ref index);
}
catch(Exception ex)
{
throw ex;
}
if (index <str.Length - 1) throw new Exception("Некорректныйсимволвпозиции " + (index + 1).ToString());
returnresult;
}
}
}
Размещено на Allbest.ru
...Подобные документы
Исследование арифметических выражений и разработка простых программ. Таблица переменных для алгоритма и программы. Алгоритм решения, текст программы на языке С. Разработка программы вычисления значений выражений, сравнение результатов с ручным подсчетом.
лабораторная работа [282,7 K], добавлен 30.01.2015Изучение принципов построения линейных алгоритмов и простых расчетных программ на языке программирования C. Разработка программы расчета математических выражений на основе вводимых данных. Создание консольных приложений в среде Microsoft Visual Studio.
лабораторная работа [254,4 K], добавлен 23.11.2014Понятие и принципы построения трансляторов. Методика написания программы на языке программирования С++, реализующей определенные действия над математическими выражениями. Написание транслятора с языка математических выражений на язык деревьев вывода.
курсовая работа [423,3 K], добавлен 24.08.2009Изучение категории типов данных, видов выражений и операций, работа на языке Си. Составление программы вычисления значения функции у(х) при произвольном значении х. Блок-схема алгоритма. Описание текста программы и рассмотрение контрольного примера.
лабораторная работа [124,7 K], добавлен 09.01.2012Особенности объектно-ориентированного программирования. Основные возможности языка программирования Java, классификация платформ. Создание программы, обеспечивающей вычисление арифметических выражений. Руководство пользователя и характеристика функций.
курсовая работа [1,2 M], добавлен 07.07.2012Команды преобразования выражений, используемые в системе Maple, их назначение и принцип действия, отличия активной и пассивной формы. Команда simplify () для упрощения выражений, случаи ее применения. Разложение полинома на множители: factor ().
лабораторная работа [57,8 K], добавлен 15.07.2009Метод Гаусса-Зейделя как модификация метода Якоби, его сущность и применение. Разработка программы решения системы линейных алгебраических уравнений на языке VB, проверка правильности работы программы в MS Excel и математических пакетах MathCad и MatLab.
курсовая работа [325,5 K], добавлен 27.10.2013Разработка программы тестирования студентов по MS PowerPoint с кодом на языке Delphi. Создание алгоритма для решения функциональных требований задачи. Описание переменных, вспомогательных процедур, входных и выходных данных для реализации программы.
курсовая работа [1,5 M], добавлен 21.09.2010Комбинированный тип данных для хранения входных данных о студентах и информация, содержащаяся в полях. Пример структуры входных и выходных данных. Алгоритм работы и программный код программы по успеваемости студентов, описание используемых функций.
курсовая работа [135,9 K], добавлен 28.12.2012Виды записи выражений. Особенности обратной польской записи. Вычисления на стеке. Преобразование из инфиксной нотации. Операторы входного языка. Описание выходной информации. Алгоритмические аспекты программы-распознавателя арифметических выражений.
курсовая работа [2,1 M], добавлен 26.11.2011Особенности составления программы (сценария) на языке JavaScript. Построение выражений из литералов, переменных, знаков операций, скобок. Элементы, используемые для хранения данных. Приоритет операций, порядок, в котором выполняются операции в выражении.
лабораторная работа [40,2 K], добавлен 19.09.2019Создание программы решения математических выражений методом трансляции с помощью обратной пользовательской записи на алгоритмическом языке Си. Определение функционального назначения процедур ChartoInt, Scobka и Sumin, представление их в виде блок-схем.
курсовая работа [267,7 K], добавлен 20.11.2010Разработка эскизного и технического проектов программы, ее назначение и область применения, описание алгоритма, организация входных и выходных данных. Выбор состава технических и программных средств, разработка рабочего проекта, спецификация программы.
курсовая работа [159,8 K], добавлен 26.01.2010Метод половинного деления при приближенном вычислении алгебраических и трансцендентных выражений. Решение системы уравнений методом Крамера. Блок-схема программы Glav. Описание стандартных и нестандартных процедур и функций, интерфейса. Численные примеры.
курсовая работа [1,5 M], добавлен 29.07.2013Написание программы для работы с клиентами средствами языка Delphi, которая предусматривает ввод, редактирование и удаление информации. Разработка алгоритма решения задачи, описание переменных, вспомогательных процедур, входных и выходных данных.
курсовая работа [355,7 K], добавлен 21.09.2010Разработка программы игры в крестики-нолики. Примеры игровой ситуации на игровом поле. Описание входных и выходных данных, переменных и функций программы. Реализация алгоритма работы программы на языке C++. Текст программы и примеры ее выполнения.
курсовая работа [352,8 K], добавлен 14.04.2011Разработка эскизного и технического проектов программы "Шифр Цезаря": назначение и область применения, описание алгоритма, организация входных и выходных данных. Выбор состава технических и программных средств, разработка, тест и внедрение программы.
курсовая работа [563,7 K], добавлен 15.07.2012Разработка эскизного и технического проектов программы, ее назначение и область применения, описание алгоритма, организация входных и выходных данных. Выбор состава технических и программных средств, разработка рабочего проекта, спецификация программы.
курсовая работа [700,6 K], добавлен 26.01.2010Создание приложения, которое будет производить построение графиков функций по заданному математическому выражению. Разработка программы "Генератор математических функций". Создание мастера функций для ввода математического выражения, тестирование.
дипломная работа [1,7 M], добавлен 16.02.2016Команды, используемые при вычислении обыкновенных и частных производных аналитического выражения по одной или нескольким переменным в системе вычислений Maple, при интегрировании аналитических выражений и при вычислении пределов, сумм, рядов функций.
лабораторная работа [62,1 K], добавлен 15.07.2009