Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Operadores aritméticos - formulas

O que está errado no código, para ele mostrar minha MessageBox como pedido, da seguinte forma: O resultado de a1 é = NaN (não é um número)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace calculoBaskara
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int a = 5;
            int b = 8;
            int c = 4;

            double delta;
            double a1;
            double a2;

            delta = b * b - 4 * a * c;
            a1 = (-b + Math.Sqrt(delta)) / (2 * a);
            a2 = (-b - Math.Sqrt(delta)) / (2 * a);

            MessageBox.Show("O resultado de a1 é = " + a1);
            MessageBox.Show("O resultado de a2 é = " + a2);

        }
    }
}
3 respostas

CSI, o problema é que o computador não sabe lidar com números imaginários, como raízes negativas, e os considera NaN. Faça as contas:

delta = b*b - 4*a*c = 64 - 4*20 = 64-80 = -16

Qual a raiz quadrada de -16? É um número imaginário 4i.

Então o computador vai mesmo mostrar NaN.

Oi CSI, tudo bom?

Seu delta está retorando -16, raiz de numeros negativos retornam um numero imaginário. Pra trabalhar com esse tipo de numero vc vai precisar de algo um pouco mais robusto que a biblioteca nativa de matematica do c#, por isso o retorno NaN

Abraço e bons estudos =)

solução!

Uma alternativa é conferir se delta é negativo e, caso sim, tratar o resultado de modo diferente. Porém, isso serve para poucos casos em que é fácil identificar exatamente onde seu número imaginário se encontra:

delta = b*b - 4*a*c
if (delta >= 0) {
  double a1 = (-b + Math.Sqrt(delta)) / (2 * a);
  double a2 = (-b - Math.Sqrt(delta)) / (2 * a);
  MessageBox.Show("O resultado de a1 é = " + a1);
  MessageBox.Show("O resultado de a2 é = " + a2);
} else {
  delta = -delta;
  String a1 = String.Format("{0} + {1}i / 2{2}", -b, Math.Sqrt(delta), a);
  String a2 = String.Format("{0} - {1}i / 2{2}", -b, Math.Sqrt(delta), a);
  MessageBox.Show("O resultado de a1 é = " + a1);
  MessageBox.Show("O resultado de a2 é = " + a2);
}

Sobre a repetição de código (mostrar mensagens) acima, deixo a seu critério como resolver!