Мой Kbyte.Ru
Рассылка Kbyte.Ru
Группы на Kbyte.Ru
Партнеры Kbyte.Ru
Реклама
Сделано руками
Сделано руками
> Исходные коды - Алексей Немиро -

Visual Basic .NET - Числа, математика, финансы

Все примеры / Числа, математика, финансы

Решатель

Автор: Алексей Немиро | добавлено: 24.04.2011, 14:07 | просмотров: 4389 (2+) | комментариев: 1 | рейтинг: *x9
Небольшая программка - решатель математических формул. В программе два текстовых поля, в одно вводится формула с неизвестным X (икс), во второе поле вводится значение X. После нажатия на кнопку, производится расчет формулы. Формула может быть любой. Программа создает динамический класс с функцией расчета и вставляет в него формулу, компилирует его на лету и возвращает результат. В формуле должны использоваться операторы VB, однако можно легко расширить функционал программы.

Код

Imports System.Reflection
Imports System.CodeDom.Compiler

Public Class Form1

  Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim myCode As CodeDomProvider = CodeDomProvider.CreateProvider("VB")
    Dim myPar As New CompilerParameters()
    'формируем виртуальный класс, в котором будет производиться расчет
    Dim myCodeBody As New System.Text.StringBuilder()
    myCodeBody.AppendLine("Public Class MyCalculator")
    myCodeBody.AppendLine("Public Function Calc() As Double")
    'TextBox1.Text.ToLower().Replace("x", TextBox2.Text) - меняем икс в формуле (TextBox1) на число указанное в TextBox2
    '.Replace(",", ".") - меняем запятые на точки, т.к. в VB в качестве десятичного разделителя используются точки
    myCodeBody.AppendLine(String.Format("Return {0}", TextBox1.Text.ToLower().Replace("x", TextBox2.Text).Replace(",", ".")))
    myCodeBody.AppendLine("End Function")
    myCodeBody.AppendLine("End Class")
    'компилируем
    Dim myResult As CompilerResults = myCode.CompileAssemblyFromSource(myPar, myCodeBody.ToString())
    If myResult.Errors.HasErrors Then
      'какие-то ошибки
      For i As Integer = 0 To myResult.Errors.Count - 1
        ListBox1.Items.Insert(0, myResult.Errors(i).ErrorText)
      Next
      Return
    End If
    'ошибок нет, выдергиваем наш класс
    Dim myAsm As Assembly = myResult.CompiledAssembly()
    Dim myCls As Object = myAsm.CreateInstance("MyCalculator", True)
    'выводим результат
    ListBox1.Items.Insert(0, TextBox1.Text.ToLower().Replace("x", TextBox2.Text) & " = " & myCls.Calc())
  End Sub

End Class
Файлы FormulaVB.zip (23,06 Кб)
Об авторе

Алексей Немиро

Интернет-деятель. Автор многочисленных статей и переводов статей по программированию и информационным технологиям. Работы Алексея можно найти в популярных печатных изданиях компьютерной тематики. Автор проекта Kbyte.Ru.
Сейчас Алексей занимается профессиональным Web-программированием на базе технологий .NET Framework. Иногда пишет различные программки и компоненты для Windows и Android. В свободное время занимается Web-дизайном, увлекается фото- и видеосъемкой.

См. также:
Профиль автора
Алексей Немиро
Последние комментарии (всего: 1)

Добавлять комментарии могут только зарегистрированные пользователи сайта.
Если у Вас уже есть учетная запись на Kbyte.Ru, пройдите процедуру авторизации OpenID.
Если Вы еще не зарегистрированы на Kbyte.Ru - зарегистрируйтесь.

Авторизация
 
OpenID
Зарегистрируйся и получи 10% скидку на добавление своего сайта в каталоги! Подробнее »
Поиск по сайту
Реклама
Счетчики