[Resolvido] Algoritmo para Calcular Raiz da equaçao de bháskara
11 respostas
olivercld
Bom dia, bom fazendo este algoritmo aqui para efetue o cálculo das raízes da equação de báscara obtive este resultado no algoritmo de forma simples, alguem poderia analizar e dizer com suas palavras se tem algo errado se poderia estar fazendo de forma diferente ? e me passar uma explicaçao mais formal que a minha caso esteja errado.
importjava.util.Scanner;/** * Desenvolva um algoritmo que leia 3 valores inteiros e efetue o cálculo das * raízes da equação de báscara. Se não foi possível calcular as raízes, mostre * uma mensagem correspondente. Obs.: não é possível divisão por 0 (zero) e raiz * quadrada de número negativo; */publicclassRaizDeBaskara{publicstaticvoidmain(String[]args){floata,b,c,delta,x1,x2;System.out.println("\n Digite o Valor de A ");Scannerv1=newScanner(System.in);a=v1.nextFloat();// digitando valor 2System.out.println("\n Digite o Valor de B ");Scannerv2=newScanner(System.in);b=v2.nextFloat();// sigitando valor3System.out.println("\n Digite o Valor de C ");Scannerv3=newScanner(System.in);c=v3.nextFloat();// calculo de delta, baskaradelta=b*b-4*a*c;// poderia estar usando Math.pow(b,2)ao inves de b*b,// delta recebe meu valor de (b*b),que e B ao// quadrado - 4* valor de A * valor de Cif(delta>0){// se condicao for verdadeira executax1=(float)((-b+Math.sqrt(delta))/(2*a));// x'calculo// de// x= -b +/-// Raiz de delta// (div/) por 2 * ax2=(float)((-b+Math.sqrt(delta))/(2*a));// x"// Math.sqrt// calcula a// raiz, raiz do// reaultado de// deltaSystem.out.println("\n Valor de X' e = "+x1+"\n Valor de X'' e = "+x2);}else{System.out.println("Não e possivel calcular esta Raiz, não e um numero real ");}}}
Fora isso, nao é preciso instanciar um novo Scanner a cada valor lido. É só instanciar uma vez e ir chamando o nextFloat.
Ou melhor ainda, chamar o nextLine() , que retorna a linha digitada até o “enter”. Vem como string, e aí vc converte para Float. Dessa forma se tem mais controle sobre os dados em formato incorreto.
EDIT:
Ah, também esqueci de mencionar outro erro no cálculo: delta pode ser igual a zero também, só não pode ser negativo. Nesse caso as duas raizes serão iguais, pois sqrt(delta) é igual a zero.
essa questao estava se referindo porque faltou o >=, if (delta >= 0) .
Só nao entendi o que disse aqui sobre:
quis referir desta forma:
System.out.println("\n Digite os Valores ");Scannerv1=newScanner(System.in);a=v1.nextFloat();b=v1.nextFloat();c=v1.nextFloat();tenteioa=v1.nextLine();b=v1.nextLine();c=v1.nextLine();
gomesrod
O que eu quis dizer é que não precisa ficar criando outro Scanner para cada input. Assim:
System.out.print("\n Digite o Valor de A: ");
Scanner v1 = new Scanner(System.in);
a = v1.nextFloat();
// digitando valor 2
System.out.print("\n Digite o Valor de B: ");
b = v1.nextFloat();
// digitando valor3
System.out.print("\n Digite o Valor de C: ");
c = v1.nextFloat();
Igual, só que aproveitando o mesmo scanner. Ele não é um objeto descartável, utilize o mesmo enquanto houver algo para ler. Também troquei o println por print só para ficar mais bonitinho, assim os dados são digitados na mesma linha da pergunta.
Sobre usar o nextLine(), deixa pra lá por enquanto, era frescura minha rsrs
Era para permitir um tratamento caso o usuário digite dados incorretos (vc já viu o que acontece? Estoura uma InputMismatchException, bem pouco amigável), mas dá para fazer um tratamento simples assim mesmo, basta colocar um try/catch:
try {
System.out.print("\n Digite o Valor de A: ");
a = v1.nextFloat();
// digitando valor 2
System.out.print("\n Digite o Valor de B: ");
b = v1.nextFloat();
// digitando valor3
System.out.print("\n Digite o Valor de C: ");
c = v1.nextFloat();
} catch (InputMismatchException e) {
System.out.println("Erro! Número inválido. A operação foi cancelada.");
return;
}
davidbuzatto
Se “a” for igual a zero você não tem uma equação do segundo grau.
Ah, outra coisa. É método ou fórmula de Bhaskara, não equação de Bhaskara. A equação é do segundo grau ou equação quadrática.
[]'s
olivercld
ok entendido gomesrod sobre a questao que voçe disse agora, sobre try e catch, eu so nao sabia usa-la valeu pela explicação.
nao entendi davidbuzatto
fiz de acordo com enunciado veja:
pelo jeito aqui e formula para calcular e é uma equação do 2º.
tnaires
olivercld:
nao entendi davidbuzatto
fiz de acordo com enunciado veja:
pelo jeito aqui e formula para calcular e é uma equação do 2º.
Rode seu programa, digite 0 quando o programa pedir o valor para a e veja o que acontece. Aí você entenderá o que o davidbuzatto quis dizer.
Para que a equação do tipo ax² + bx + c = 0 seja do segundo grau, o valor de a deve ser maior que zero. Seu programa deve testar essa condição.
olivercld
tnaires fiz como me disse, nao sei se e desta forma, tirei o try e catch
System.out.println("\n Digite os Valores ");Scannerv1=newScanner(System.in);System.out.print("\n Digite o valor de A ");a=v1.nextInt();if(a<=0){System.out.println(" Valor nao aceito tente novamente ");System.exit(0);// se eu nao coloca se isso ia para frente continuava pedindo para digitar B e C }
so nao sei como fazer ao invez de encerrar voltar ´para digitar o valor de A novamente
é dessa forma ou não ?
davidbuzatto
O coeficiente “a” deve ser diferente de 0.
Não pode ser zero pois se a = 0, então tem-se:
0x² + bx + c = 0 =>
bx + c = 0 (equação do primeiro grau).
Se aplicarmos o método de Bhaskara para a = 0, temos uma divisão por zero.
[]'s
olivercld
entendido so equação do 2º se for assim ax² + bx + c = 0 , bom davidbuzatto então eu posso deixar dessa forma: assim ela quando digito 0 para A nao aceita.
//try{System.out.println("\n Digite os Valores ");Scannerv1=newScanner(System.in);System.out.print("\n Digite o valor de A ");a=v1.nextInt();if(a<=0){System.out.println(" Valor nao aceito tente novamente ");System.exit(0);}System.out.print("\n Digite o valor de B ");b=v1.nextInt();System.out.print("\n Digite o valor de C ");c=v1.nextInt();
só lembrando não e trabalho não e só para praticar mesmo agradeço a grande ajuda que vocês estão dando.
tnaires
O coeficiente “a” deve ser diferente de 0.
Não pode ser zero pois se a = 0, então tem-se:
0x² + bx + c = 0 =>
bx + c = 0 (equação do primeiro grau).
Se aplicarmos o método de Bhaskara para a = 0, temos uma divisão por zero.
[]'s
Isso, cometi um engano :oops: Quis dizer diferente de zero, mas não vou editar o meu post