protected void botaoCalcular_Click(object sender, EventArgs e) { const double erroComparacao = 0.01; if ((TextBoxA.BorderColor == System.Drawing.ColorTranslator.FromHtml("#ff0000")) || (TextBoxB.BorderColor == System.Drawing.ColorTranslator.FromHtml("#ff0000")) || (TextBoxC.BorderColor == System.Drawing.ColorTranslator.FromHtml("#ff0000"))) { ScriptManager.RegisterStartupScript(this, GetType(), "Erro", "alert('Só são permitidos valores numéricos até 8 dígitos.');", true); return; } //testar se as 3 caixas de texto se encontram vazias (o que significa que são interpretadas como tendo o valor 0) //se estiverem vazias, não é possível efectuar qualquer cálculo if (TextBoxA.Text.Equals("") && TextBoxB.Text.Equals("") && TextBoxC.Text.Equals("")) { ScriptManager.RegisterStartupScript(this, GetType(), "Erro", "alert('Não foram introduzidos quaisquer valores.');", true); return; } //inicializar um objeto da classe cálculo. Calculo calculo = new Calculo(TextBoxA.Text, TextBoxB.Text, TextBoxC.Text); //verifica se a=0 e b=0. if (calculo.getA() == 0 && calculo.getB() == 0 && calculo.getC() != 0) { ScriptManager.RegisterStartupScript(this, GetType(), "Erro", "alert('Os valores introduzidos não constituem uma equação. Introduza outro valor para além do termo C.');", true); return; } eq_valida_actual = calculo.geteq(); //verifica se (a=0 ou b=0) e c=0, mostrando o valor de x nesse caso. if ((calculo.getA() == 0 || calculo.getB() == 0) && calculo.getC() == 0) { mostraResultado(0); return; } //verifica se a=0 e b!=0 e c!=0 if (calculo.getA() == 0 && calculo.getB() != 0 && calculo.getC() != 0) { mostraResultado(calculo.formulaSimplificada()); return; } //--------------->testar se a equação tem 2 raízes, 1 raíz ou nenhum raíz usando o discriminante da fórmula resolvente (discriminante = b * b - 4*a*c) double discriminante = calculo.getB() * calculo.getB() - 4 * calculo.getA() * calculo.getC(); //se discriminante<0 a equação não possui raízes if (discriminante < 0) { ScriptManager.RegisterStartupScript(this, GetType(), "Erro", "alert('A equação indicada não possui raízes.');", true); resultado.Text="<br/>"; return; } //se discriminante=0 a equação possui apenas 1 raiz if (discriminante == 0) { //comparar o x obtido pela fórmula resolvente com o obtido pelo método de newton double x1FR = calculo.formulaResolvente_x1(), x1MN = 0, aux = 0; calculo.metodoNewton(ref x1MN, ref aux); if((Math.Abs(x1FR - x1MN)) >= erroComparacao) // se a diferença entre os valores obtidos pelos 2 métodos for superior ao erroComparacao, surge mensagem de erro { ScriptManager.RegisterStartupScript(this, GetType(), "Erro", "alert('Erro de cálculo; resultado não fidedigno.');", true); return; } mostraResultado(x1FR); return; } //se discriminante=0 a equação possui 2 raizes if (discriminante > 0) { //comparar x1 e x2 obtido pela fórmula resolvente com o obtido pelo método de newton double x1FR = calculo.formulaResolvente_x1(), x1MN = 0, x2FR = calculo.formulaResolvente_x2(), x2MN = 0; calculo.metodoNewton(ref x1MN, ref x2MN); // se a diferença entre os valores obtidos pelos 2 métodos for superior ao erroComparacao, surge mensagem de erro if ((((Math.Abs(x1FR - x1MN)) >= erroComparacao) || ((Math.Abs(x2FR - x2MN)) >= erroComparacao)) && (((Math.Abs(x1FR - x2MN)) >= erroComparacao) || ((Math.Abs(x2FR - x1MN)) >= erroComparacao))) { ScriptManager.RegisterStartupScript(this, GetType(), "Erro", "alert('Erro de cálculo; resultado não fidedigno.');", true); return; } mostraResultado(x1FR, x2FR); return; } }