PROBLEMA JavaScript equazione di 2° grado

  • Autore discussione Autore discussione Neah
  • Data d'inizio Data d'inizio
Pubblicità

Neah

Nuovo Utente
Messaggi
7
Reazioni
0
Punteggio
24
Buonasera, giusto per iniziare col JS ho provato a realizzare questo semplice codice per risolvere un'equazione di secondo grado. Il problema è che nel momento in cui clicco sul bottone, il risultato appare nel paragrafo #result però scompare subito, mentre vorrei che restasse visibile (:

Codice:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Risoluzione equazione di secondo grado</title>


<script>
function _sol() {
	var a=parseInt(document.Equazione.a.value);
	var b=parseInt(document.Equazione.b.value);
	var c=parseInt(document.Equazione.c.value);
	var d=Math.sqrt(b*b-4*a*c);
	if((a==0)||(d<0))
		alert("Impossibile risolvere l'equazione");
	else
	{
	var x1 = (-b + d ) / (a*2);
    var x2 = (-b - d ) / (a*2);
	document.getElementById("result").innerHTML=x1;}
}
</script>
</head>
<div align="center">
<form name="Equazione">
<h1>Equazione di 2° grado</h1><br />
<input type="text" name="a" />x<sup>2</sup> + <input type="text" name="b" />x + <input type="text" name="c" /><br />


<button onclick="_sol()">Risolvi</button></form>
Il risultato è: <span id="result"></span>
</div>
<body>
</body>
</html>
 
Non ne sono sicuro, ma credo tu debba bloccare l'invio del form.
Codice:
function doNotSubmit()
{
  document.Equazione.onsubmit=function(){
  
   event.preventDefault();
  };
 }
 document.addEventListener("DOMContentLoaded", doNotSubmit, false);
Ma comunque l'algoritmo è sbagliato, infatti mi da NaN (non credo sia correlato al mio suggerimento).
 
Dove dovrei inserire il codice? (:

Comunque l'algoritmo dovrebbe essere giusto penso, perchè mettendo l'equazione 1x^2 + 2x + 1 mi dà -1 che è la soluzione corretta.
 
Si, scusami.
Modifica lo script così
Codice:
function _sol() {
    var a=parseInt(document.Equazione.a.value);
    var b=parseInt(document.Equazione.b.value);
    var c=parseInt(document.Equazione.c.value);
    var d=Math.sqrt(b*b-4*a*c);
    document.getElementById("result").innerHTML=d;
    if((a==0)||(d<0))
        alert("Impossibile risolvere l'equazione");
    else
    {
    var x1 = (-b + d ) / (a*2);
    var x2 = (-b - d ) / (a*2);
    document.getElementById("result").innerHTML=x1;}
    
    }
function doNotSubmit()
{
  document.Equazione.onsubmit=function(){
  
   event.preventDefault();
  };
 }
 document.addEventListener("DOMContentLoaded", doNotSubmit, false);
E il risultato non sparirà. :ok:

Comunque l'algoritmo non è errato, è incompleto in quanto le soluzioni sono due.
 
Grazie mille, comunque bastava anche spostare il button fuori dal form :asd: Ho anche inserito entrambe le soluzioni, rimane comunque un problema con d ovvero il discriminante. A quanto pare se è minore di 0 mi dà Not a Number (NaN), ho messo un alert(d) per verificare ciò.
Il codice attuale è:
Codice:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Risoluzione equazione di secondo grado</title>


<script>
function _sol() {
    var a=parseInt(document.Equazione.a.value);
    var b=parseInt(document.Equazione.b.value);
    var c=parseInt(document.Equazione.c.value);
    var d=Math.sqrt(b*b-4*a*c);
    alert(d);
    if((a==0)||(d<0)) 
        alert("Impossibile risolvere l'equazione");
    else
    {
    var x1 = Math.round((-b + d ) / (a*2));
    var x2 = Math.round((-b - d ) / (a*2));
    document.getElementById("result").innerHTML="La prima soluzione è: " + x1 + "\n, la seconda soluzione è: " + x2;}
}


</script>
<style>
body {font-family: Georgia, "Times New Roman", Times, serif; background-image: url(http://i.imgur.com/P4KCIBK.png), #ADADAD;}
input[type="text"] {
border-radius: 3px;
background: #24262E;
box-shadow: 1px 1px rgba(255, 255, 255, .1), inset 1px 1px 7px rgba(0, 0, 0, .18);
font-style: italic;
border: 1px solid rgba(36, 38, 46, 0.1);
color: #FFF;
padding: 3px;
} 
button {
    padding: 5px 9px;
    font-size: 16px;
    border-radius: 4px;
    box-shadow: 0 1px 0 rgba(255, 255, 255, 0.10), inset 1px 2px 0 rgba(0, 0, 0, 0.20);
    color: #FFF;
    background-color: #262733;
    border: 1px solid #000;
}
</style>
</head>
<div align="center">
<form name="Equazione">
<h1>Equazione di 2° grado</h1><br />
<input type="text" name="a" />x<sup>2</sup> + <input type="text" name="b" />x + <input type="text" name="c" /><br />
</form>
<button onclick="_sol()">Risolvi</button><br />
Il risultato è: <div id="result"></div>
</div>
<body>
</body>
</html>

EDIT: ah no ho capito l'errore (: Grazie mille lo stesso.
 
Ultima modifica:
Chiaramente sqrt() lavora sui numeri in R, dove non vi sono soluzioni per le radici negative.
Quel
Codice:
alert(d);
sono sicuro sia solamente per debugging...
 
Pubblicità
Pubblicità
Indietro
Top