.NET -
A classe Math
A classe System.Math oferece muitos campos constantes e métodos estáticos que você pode usar para fazer cálculos trigonométricos, logarítmicos, e outros cálculos matemáticos. Por exemplo, o método Pow da classe System.Math pode ser usado para elevar um número a uma potência de x.
A seguir alguns exemplos de funções matemáticas e constantes existentes na classe System.Math:
| Função/Constantes | Resultado | Exemplo |
| Abs(x) | Fornece Valor absoluto de x | Abs(4.5) = 4.5; Abs(-4.5) = 4.5; |
| Ceiling(x) | Arredonda x para cima |
Ceiling(4.1) = 5; Ceiling(-4.1) = -4; |
| Cos(x) | Obtém o cosseno de x | Cos(2.0) = -0.4161...... |
| Sin(x) | Obtém o seno de x | Sin(2) = 0.909297... |
| Tan(x) | Obtém o valor da Tangente de x | Tan(1.5) =14.1014... |
| PI | Obtém o valor de PI | PI = 3.141516171819... |
| E | Obtém o valor da constante E | E = 2.7182818284590451 |
| Exp(x) | Obtém o exponencial (e elevado na x) | Exp(5.0) =54.59... |
| Floor(x) | Arredonda o valor de x para baixo | Floor(2.9) = 2; Floor(-2.9)) = -3; |
| Log(x) | Calcula o logaritmo de x na base natural e | Log(3.0) = 1.098612... |
| Log10(x) | Calcula o logaritmo de x na base 10 | Log10(3.0) = 0.47712... |
| Max(x,y) | Obtém o maior valor entre dois números | Max(2.46,2.56) = 2.56; Max(-2.46,-2.56) = 2.46; |
| Min(x,y) | Obtém o menor valor entre dois números | Min(1.92,1.89) = 1.89; Min(-1.92,-1.89) = 1.92; |
| Pow(x,y) | Obtém o valor de x elevado na y | Pow(2,4) = 16 |
| Round(x,y) | Arredonda x para y casas decimais | Round(7.6758549,4) = 7.6759 |
| Sqrt(x) | Obtém a raiz quadrada de x | Sqrt(169) = 13 |
Vamos usar o método Pow e o campo Math.PI (devolve o valor de PI, a razão entre a circunferência de um círculo com o seu diâmetro), para calcular a área de um círculo . Onde RaioDoCirculo é o raio de um círculo, e PI é o número 3.14159265358979323846.
Crie um novo projeto usando o Visual Studio Express 2012 for Desktop. Escolha a sua linguagem de preferência VB .NET ou C#. Informe o nome do projeto como AreaDoCirculo;
A seguir defina o seguinte código em arquivo Program.cs para projeto C# ou no modulo padrão em Sub Main() para um projeto VB .NET:
|
using
System; namespace CalcularAreaCirculo{ class Program { static void Main(string[] args) { double areaCirculo = 0; double RaioDoCirculo = 0; Console.WriteLine(" Informe o raio do Círculo : "); RaioDoCirculo = Convert.ToDouble(Console.ReadLine()); areaCirculo = Math.PI * Math.Pow(RaioDoCirculo, 2); Console.WriteLine(" A área do círculo de raio " + RaioDoCirculo.ToString() + " é : " + areaCirculo.ToString()); Console.ReadKey(); } } } |
Module
Module1
Sub
Main() Console.ReadKey() End
Sub
|
| C# | VB .NET |
O resultado pode ser visto abaixo:
![]() |
Outra constante, diferente de PI, é a base logarítmica natural ou
constante de Euler, especificada pela constante
Math.E ( 2,7182818284590452354). O método Log() calcula o logaritmo
de um número especificado em uma base especificada.
Assim o método Log(double a,double novaBase) tem dois parâmetros. O
primeiro é o número cujo logaritmo é para ser encontrado, e o segundo é a base
do logaritmo.
Então podemos fazer:
Console.WriteLine(System.Math.Log(Math.E, 10))A função Math.Round tem outra sobrecarga com o qual você pode
especificar o número de dígitos além do ponto decimal no valor retornado.
Em outras palavras, ele retorna o valor mais próximo do número com precisão
igual ao segundo parâmetro passado.
|
Console.WriteLine(Math.Round(5.44,
1)) ' retorna 5.4 Console.WriteLine(Math.Round(5.45, 1)) ' retorna 5.4 Console.WriteLine(Math.Round(5.46, 1)) ' retorna 5.5 Console.WriteLine(Math.Round(5.54, 1)) ' retorna 5.5 Console.WriteLine(Math.Round(5.55, 1)) ' retorna 5.6 Console.WriteLine(Math.Round(5.56, 1)) ' retorna 5.6 Console.ReadKey() |
Console.WriteLine(Math.Round(5.44, 1)); // retorna 5.4 Console.WriteLine(Math.Round(5.45, 1)); // retorna 5.4 Console.WriteLine(Math.Round(5.46, 1)); // retorna 5.5 Console.WriteLine(Math.Round(5.54, 1)); // retorna 5.5 Console.WriteLine(Math.Round(5.55, 1)); // retorna 5.6 Console.WriteLine(Math.Round(5.56, 1)); // retorna 5.6 Console.ReadKey(); |
| VB .NET | C# |
Você pode usar o método Floor para truncar um número real. O método
retorna o maior número inteiro menor que o número original. Por exemplo, use o
seguinte para obter o Floor de 4.8.
Console.WriteLine(Math.floor
(4.8)); //retorna 4
Console.WriteLine(Math.floor
(-4.8)); //retorna -5
A resposta seria 4. Observe que o método Floor pode se comportar
diferentemente do que você poderia esperar para valores negativos. Por exemplo,
Math.floor (-4.8) retorna -5.
O método de Celing faz o contrário, retornando o menor número inteiro
maior do que o original.
Console.WriteLine(Math.Ceiling (4.8));
//retorna 5
Console.WriteLine(Math.Ceiling (-4.8));
//retorna -4
Criando uma classe para cálculo de área de volume com base na classe Math
Vamos agora criar uma classe para realizar alguns cálculos de área e volume com base na classe Math.
Esta classe será uma classe estática com métodos estáticos de forma que não precisaremos instanciar a classe para acessar os seus métodos.
Para criar a classe estática vamos estar atentos às seguintes regras :
Iremos criar um projeto do tipo Class Library de forma que o afinal teremos uma DLL que poderemos referenciar em qualquer tipo de projeto.
Abra o Visual Studio Express 2012 for desktop e clique no menu File-> New Project;
A seguir selecione o template : Visual C# -> Class Library, informando o nome MacMath;
![]() |
A seguir defina o seguinte código nesta classe:
using System; namespace Macoratti
{
public static class MacMath
{
/// <summary>
/// Area do Quadrado em função do lado
/// </summary>
/// <param name="lado"></param>
/// <returns></returns>
public static double AreaQuadrado(double lado)
{
return lado * lado;
}
/// <summary>
/// Area do quadrado com base na diagonal
/// </summary>
/// <param name="diagonal"></param>
/// <returns></returns>
public static double AreaQuadradoDiagonal(double diagonal)
{
return (diagonal * diagonal) / 2;
}
/// <summary>
/// Area do tringulo em função da base e altura
/// </summary>
/// <param name="altura"></param>
/// <param name="valorBase"></param>
/// <returns></returns>
public static double AreaTriangulo(double altura, double valorBase)
{
return (valorBase * altura)/2;
}
/// <summary>
/// Area do retangulo em função da base e altura
/// </summary>
/// <param name="valorBase"></param>
/// <param name="altura"></param>
/// <returns></returns>
public static double AreaRetangulo(double valorBase, double altura)
{
return (valorBase * altura);
}
/// <summary>
/// Area do circulo em função do raio
/// Usa a constante PI
/// </summary>
/// <param name="raio"></param>
/// <returns></returns>
public static double AreaCirculo(double raio)
{
return (raio * Math.PI);
}
/// <summary>
/// Area do trapezio em função da altura e base menor e maior
/// </summary>
/// <param name="altura"></param>
/// <param name="baseMenor"></param>
/// <param name="baseMaior"></param>
/// <returns></returns>
public static double AreaTrapezio(double altura, double baseMenor, double baseMaior)
{
return (altura * (baseMaior - baseMenor)) / 2;
}
/// <summary>
/// Area d Anel(setor circular em função dos raios interno e externo
/// </summary>
/// <param name="raioInterno"></param>
/// <param name="raioExterno"></param>
/// <returns></returns>
public static double AreaSetorCircular(double raioInterno,double raioExterno)
{
return (AreaCirculo(raioInterno) - AreaCirculo(raioExterno));
}
/// <summary>
/// Volume do cilindro com base na altura e raio
/// </summary>
/// <param name="altura"></param>
/// <param name="raio"></param>
/// <returns></returns>
public static double VolumeCilindro(double altura, double raio)
{
return Math.PI * Math.Pow(raio,2) * altura;
}
/// <summary>
/// Volume de um tubo (cilindro vasado)
/// </summary>
/// <param name="altura"></param>
/// <param name="raioExterno"></param>
/// <param name="raioInterno"></param>
/// <returns></returns>
public static double VolumeCilindroOco(double altura, double raioExterno, double raioInterno)
{
return VolumeCilindro(altura, raioExterno) - VolumeCilindro(altura, raioInterno);
}
/// <summary>
/// Volume da Esfora com base no raio
/// </summary>
/// <param name="raio"></param>
/// <returns></returns>
public static double VolumeEsfera(double raio)
{
return 4 / 3 * Math.PI * Math.Pow(raio, 3);
}
/// <summary>
/// Area da esfera com base no raio
/// </summary>
/// <param name="raio"></param>
/// <returns></returns>
public static double AreaEsfera(double raio)
{
return 4 * Math.PI * Math.Pow(raio, 2);
}
/// <summary>
/// Volume da Piramide em função da altura e area da base
/// </summary>
/// <param name="altura"></param>
/// <param name="areaBase"></param>
/// <returns></returns>
public static double VolumePiramide(double altura, double areaBase)
{
return (altura * areaBase) / 3;
}
}
}
|
Estamos criando os seguintes métodos nesta classe:
Cada método possui uma documentação básica e usa as fórmulas matemáticas para calcular a respectiva área e/ou volume.
Após criar a classe compile o projeto de forma gerar o arquivo dll - MacMath.dll - que iremos referenciar em um projeto Windows Forms de forma a usar os métodos para calcular algumas áreas e volumes.
Criando o projeto Windows Forms e usando a classe MacMath
Abra o Visual Studio Express 2012 for desktop e clique no menu File-> New Project;
A seguir selecione o template : Visual C# ->Windows Forms, informando o nome Calculando;
![]() |
Vamos agora incluir a referência a nossa dll criada no projeto Class Library.
No menu PROJECT clique em Add Reference e a seguir na guia Browse e localize onde você criou o arquivo dll do projeto Class Library:
Selecione o arquivo e clique no botão OK;
![]() |
Agora vamos definir uma interface bem simples no formulário form1.cs usando os seguintes controles:
Abaixo vemos o leiaute do formulário exibindo as duas visualizações possíveis:
![]() |
![]() |
Abaixo temos o código do formulário iniciando com a declaração dos namespaces. Note que estamos declarando o namespace Macoratti de forma a simplificar a chamada dos métodos da Library.
O código do formulário abaixo mostra que no evento Click de cada botão de comando estamos chamando diretamente o método da classe MacMath sem a necessidade de criar uma instância da classe pois ela é uma classe estática.
Exemplo da chamada do método AreaQuadrado da classe MacMath : MacMath.AreaQuadrado(lado).ToString();
using System; using System.Windows.Forms; using Macoratti; namespace Calculando
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnQuadrado_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(txtLado.Text))
{
MessageBox.Show("Informe o valor do lado do quadrado.", "Lado do Quadrado", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
//
try
{
double lado = Convert.ToDouble(txtLado.Text);
txtAreaQuadrado.Text = MacMath.AreaQuadrado(lado).ToString();
}
catch
{
MessageBox.Show("Ocorreu um erro no cálculo da área.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtLado.Focus();
}
}
//valida o valor no textbox
private void txtLado_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar) && !(e.KeyChar ==',');
}
private void btnRetangulo_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(txtBaseRetangulo.Text))
{
MessageBox.Show("Informe o valor da base do retângulo.", "Base do Retângulo", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
if (String.IsNullOrEmpty(txtAlturaRetangulo.Text))
{
MessageBox.Show("Informe o valor da altura do retângulo.", "Altura do Retângulo", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
//
try
{
double b = Convert.ToDouble(txtBaseRetangulo.Text);
double a = Convert.ToDouble(txtAlturaRetangulo.Text);
txtAreaRetangulo.Text = MacMath.AreaRetangulo(b,a).ToString();
}
catch
{
MessageBox.Show("Ocorreu um erro no cálculo da área.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtLado.Focus();
}
}
private void txtBaseRetangulo_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar) && !(e.KeyChar == ',');
}
private void txtAlturaRetangulo_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar) && !(e.KeyChar == ',');
}
private void btnVolumeEsfera_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(txtRaioEsfera.Text))
{
MessageBox.Show("Informe o valor do raio da esfera.", "Raio da Esfera", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
//
try
{
double raio = Convert.ToDouble(txtRaioEsfera.Text);
txtVolumeEsfera.Text = MacMath.VolumeEsfera(raio).ToString();
}
catch
{
MessageBox.Show("Ocorreu um erro no cálculo da área.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtRaioEsfera.Focus();
}
}
private void btnVolumeCilindro_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(txtAlturaCilindro.Text))
{
MessageBox.Show("Informe o valor da altura do Cilindro.", "Altura do Cilindro", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
if (String.IsNullOrEmpty(txtRaioCilindro.Text))
{
MessageBox.Show("Informe o valor do raio do Cilindro.", "Raio do Cilindro", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
//
try
{
double altura = Convert.ToDouble(txtRaioCilindro.Text);
double raio = Convert.ToDouble(txtAlturaCilindro.Text);
txtVolumeCilindro.Text = MacMath.VolumeCilindro(raio,altura).ToString();
}
catch
{
MessageBox.Show("Ocorreu um erro no cálculo da área.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
lblaltura.Focus();
}
}
private void txtRaioEsfera_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar) && !(e.KeyChar == ',');
}
private void txtRaioCilindro_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar) && !(e.KeyChar == ',');
}
private void textBox5_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar) && !(e.KeyChar == ',');
}
}
}
|
Estamos usando o evento KeyPress para permitir somente valores numéricos nas caixas de texto e estamos verificando se foram informando valores nas caixas de texto.
O código básico é : e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar) && !(e.KeyChar == ',');
que permite somente números, a vírgula e backspace.
Pegue o projeto completo aqui:
MacMath.zip
e Calculando.zip
1Pe 2:6
Por isso, na Escritura se diz: Eis que ponho em Sião uma principal pedra angular, eleita e preciosa; e quem nela crer não será confundido.1Pe 2:7
E assim para vós, os que credes, é a preciosidade; mas para os descrentes, a pedra que os edificadores rejeitaram, esta foi posta como a principal da esquina,1Pe 2:8
e: Como uma pedra de tropeço e rocha de escândalo; porque tropeçam na palavra, sendo desobedientes; para o que também foram destinados.Referências:
José Carlos Macoratti