PROBLEMA JavaScript equazione di 2° grado

Neah

Nuovo Utente
7
0
CPU
Intel(R) Core(TM)2 Duo CPU T5800 2,00GHz
Scheda Madre
Sony Vaio
RAM
DDR2 3072 MBytes
GPU
ATI Mobility Radeon HD 3470
OS
Windows Vista 32 bit
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>
 

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
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).
 

Neah

Nuovo Utente
7
0
CPU
Intel(R) Core(TM)2 Duo CPU T5800 2,00GHz
Scheda Madre
Sony Vaio
RAM
DDR2 3072 MBytes
GPU
ATI Mobility Radeon HD 3470
OS
Windows Vista 32 bit
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.
 

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
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.
 

Neah

Nuovo Utente
7
0
CPU
Intel(R) Core(TM)2 Duo CPU T5800 2,00GHz
Scheda Madre
Sony Vaio
RAM
DDR2 3072 MBytes
GPU
ATI Mobility Radeon HD 3470
OS
Windows Vista 32 bit
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:

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
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...
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili