C# - Avaliando expressões numéricas
Neste artigo vamos veremos avaliar expressões numéricas usando a linguagem C#. |
Hoje vou apresentar outro exemplo de programa de realiza a avaliação de expressões numéricas informadas pelo usuário em um programa Windows Forms.
A expressão numérica deve envolver apenas as variáveis x e y e usar as operações de adição (+), subtração (-) , divisão (/) e multiplicação ( * ). Assim para expressão aque usa uma potenciação, você deve usar a multiplicação. Exemplo: x ^ 2 deve ser expresso como : x * x.
Mais uma vez vamos usar os recursos do CodeCOM que fornece tipos que representam muitos dos tipos mais comuns de elementos de código-fonte. Também vamos usar Reflection para obter informações de metadados.
Vou deixar nas referências o link de outros artigos que já escrevi sobre o assunto.
Recursos Usados:
Criando o projeto Windows Forms
Abra o VS 2017 Community e crie um projeto usando o template Windows Desktop -> Windows Forms App(.NET Framework) e informe o nome AvaliaExpressMatematica;
A camada de interface com o usuário é o formulário Form1 que possui os seguintes controles:
|
Os namespaces usados no formulário são:
using System;
using System.CodeDom.Compiler;
using System.Reflection;
using System.Windows.Forms;
No início
do formulário vamos declarar as variáveis do tipo DataView
e CurrencyManager:
private DataView dv;
private CurrencyManager cm;
No evento Click do botão de comando - btnCalcular - inclua o código abaixo:
private void btnCalcular_Click(object sender, EventArgs e)
{
// Transforma a equação em uma função
string funcao =
"public static class Avaliador" +
"{" +
" public static double Avaliar(double x, double y)" +
" {" +
" return " + txtEquacao.Text + ";" +
" }" +
"}";
// Compila a função
CodeDomProvider code_provider = CodeDomProvider.CreateProvider("C#");
// Gera um assembly não executável na memória
CompilerParameters parametros = new CompilerParameters();
parametros.GenerateInMemory = true;
parametros.GenerateExecutable = false;
// Compila o código
CompilerResults resultados =
code_provider.CompileAssemblyFromSource(parametros, funcao);
// Se houver erros exibe os erros
if (resultados.Errors.Count > 0)
{
string msg = "Erro ao compilar a expressão informada.";
foreach (CompilerError compiler_error in resultados.Errors)
{
msg += "\n" + compiler_error.ErrorText;
}
MessageBox.Show(msg, "Erro na Expressão ", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
else
{
// Obtem o tipo da classe Avaliador
Type tipo_Avaliador = resultados.CompiledAssembly.GetType("Avaliador");
// Obtem o objeto MethodInfo descrevendo o método Avaliar
MethodInfo metodo_info = tipo_Avaliador.GetMethod("Avaliar");
// Cria a lista de parãmetros
object[] metodo_parametros = new object[]
{
double.Parse(txtValorX.Text),
double.Parse(txtValorY.Text)
};
// Executa o metodo
double resultado_equacao = (double)metodo_info.Invoke(null, metodo_parametros);
// Exibe o resultado retornado
txtResultado.Text = resultado_equacao.ToString();
}
}
|
Pronto ! Executando o projeto iremos obter o seguinte resultado:
Pegue o projeto aqui : AvaliaExpressoMatematica.zip
"Combati o bom combate, acabei a carreira,
guardei a fé.
Desde agora, a coroa da justiça me está guardada, a qual o Senhor, justo juiz,
me dará naquele dia;
e não somente a mim, mas também a todos os que amarem a sua vinda. "
2
Timóteo 4:7,8
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
VB - Avaliador de expressões numéricas - Macoratti
VB - Avaliando expressões matemáticas - Macoratti
C# - Avaliando Expressões Matemáticas - Macoratti