|
|
|
![]() |
|
Strumenti |
![]() |
#1 | |
Member
Iscritto dal: Sep 2008
Messaggi: 91
|
[java] equazione secondo grado
Ciao a tutti!
Devo realizzare un programma che chiesti in ingresso i coefficienti a,b,c di un’equazione di secondo grado, calcoli il numero di soluzioni (0 oppure 1 oppure 2) e stampi i valori esempio: a: 3 b: 4 c: 1 numero di soluzioni:2 soluzione1: -0.333333 soluzione2: -1 Il codice è il seguente: Codice:
package equazione2grado; import java.math.*; import java.io.*; public class Main { public static void main(String[] args) throws Exception { BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Dammi il coefficiente a:"); String line = input.readLine(); int a = Integer.parseInt(line); System.out.println("Dammi il coefficiente b:"); line = input.readLine(); int b = Integer.parseInt(line); System.out.println("Dammi il coefficiente c:"); line = input.readLine(); int c = Integer.parseInt(line); double soluzione1 = (-b + Math.sqrt(b ^ 2 - 4 * a * c)) / 2 * a; double soluzione2 = (-b - Math.sqrt(b ^ 2 - 4 * a * c)) / 2 * a; System.out.println("La prima soluzione è: " + soluzione1); System.out.println("La seconda soluzione è: " + soluzione2); } } Quote:
Ciao e grazie |
|
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Oct 2006
Messaggi: 136
|
perchè non usi semplicemente l'util Scanner?
Codice:
import java.util.scanner; [...] Scanner keyb = new Scanner(System.in); System.out.println("Dammi il coefficiente a:"); int a = keyb.nextInt(); x tornare al tuo problema...nn hai trattato i casi in cui il determinante è negativo. cmq NaN => Not A Number, è probabile che mettendo qualche parentesi e usando semplicemente lo scanner di int, senza passare per String e poi per il metodo parseInt il problema si risolve ps: piccolo consiglio, metti le parentesi, soprattutto quando fai operazioni! sebbene a volte inutili aiutano la lettura di terzi, ti aiutano a capire se sai quello che stai facendo e prevengono errori a volte stupidi ![]() Ultima modifica di n0n4m3 : 11-07-2009 alle 17:22. |
![]() |
![]() |
![]() |
#3 | |
Member
Iscritto dal: Sep 2008
Messaggi: 91
|
ciao
Quote:
a=3 b=4 c=1 (-4+sqrt(16-4*3*1))/6 |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
|
b ^ 2
^ e' l'operatore di or esclusivo.. Devi usare Math.pow() per calcolare la potenza.. ![]() |
![]() |
![]() |
![]() |
#5 | |
Member
Iscritto dal: Sep 2008
Messaggi: 91
|
Quote:
b*Math.pow(2) ? Per motivi che non sto ad elencare, non voglio utilizzare: Codice:
import java.util.scanner; Scanner keyb = new Scanner(System.in); int a = keyb.nextInt(); |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
|
Quote:
Math.pow(b,2); per fare b^2 Per lo scanner va benissimo anche il tuo metodo, io ho sempre utilizzato quello ed e' sempre andato bene, quindi, perche' cambiare? ![]() |
|
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Oct 2006
Messaggi: 136
|
sisi, lo so che con a= 3, b = 4, e c= 1 ottieni un delta positivo, ma dalla tua descrizione di come dovrebbe funzionare il programma non li hai cmq tenuti in conto
![]() per evitare il math.pow(a, 2) fai semplicemente a * a ps: si risparmiano molte linee di codice usando lo Scanner...cmq de gustibus ![]() |
![]() |
![]() |
![]() |
#8 | |
Member
Iscritto dal: Sep 2008
Messaggi: 91
|
Ora il codice è questo:
Codice:
import java.io.*; public class Main { public static void main(String[] args)throws Exception { BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Dammi il coefficiente a:"); String line = input.readLine(); int a = Integer.parseInt(line); System.out.println("Dammi il coefficiente b:"); line = input.readLine(); int b = Integer.parseInt(line); System.out.println("Dammi il coefficiente c:"); line = input.readLine(); int c = Integer.parseInt(line); double soluzione1 = (-b + Math.sqrt(Math.pow(b,2) - 4 * a * c)) / 2 * a; double soluzione2 = (-b - Math.sqrt(Math.pow(b,2) - 4 * a * c)) / 2 * a; System.out.println("La prima soluzione è: " + soluzione1); System.out.println("La seconda soluzione è: " + soluzione2); } } Quote:
|
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
metti tra tonde il denominatore della formula 2 * a..
|
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Sep 2008
Messaggi: 91
|
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
figurati. hai capito il perchè? a parità di priorità tra operandi si eseguono da sinistra verso destra. nel tuo caso quindi veniva eseguita prima la divisione e poi la moltiplicazione.
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Codice:
b*b; Codice:
public class Eq2grado { /** Attributi di Eq2grado */ double a, b, c; // i tre coefficienti di un'equazione di secondo grado double[] s = new double[2]; // le (0-2) soluzioni possibili dell'equazione boolean intersezioniOk = false; // TRUE se ci sono intersezioni valide /** * Risolve l'equazione di secondo grado * * @param a primo coefficiente * @param b secondo coefficiente * @param c terzo coefficiente */ public Eq2grado(double a, double b, double c) { this.a = a; this.b = b; this.c = c; double delta = b*b - 4*a*c; if (delta >= 0) { s[0] = ( -b + Math.sqrt(delta) ) / (2*a); s[1] = ( -b - Math.sqrt(delta) ) / (2*a); intersezioniOk = true; } else { intersezioniOk = false; System.out.println("Eq2grado: non esiste un'intersezione reale."); } } }
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
|
__________________
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
tranquillo è la stessa cosa, ti sta dicendo che Math.pow(b, 2) è uguale che b * b come Math.pow(n, 3) è uguale a n * n * n.
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
|
Quote:
![]()
__________________
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:07.