Secondo me l'errore e' in questa riga invece

codice:
if(d-n5==0)
che dovrebbe essere:

codice:
if(d+n5==0)
Infatti le righe della tabella vanno sempre sommate. Cosi' funziona ma poi ci sono altri due errori che non sempre si verificano.

primo:

codice:
if(d<0)
   D=-d
Cosa succede se per caso d e' maggiore di zero? Che l'if non viene eseguito e D non viene definito e il programma si ferma

meglio fare cosi':

codice:
D = Math.abs(d)
secondo

Cosa succede se NON ci sono soluzioni? Che non viene eseguito questo if

codice:
if(d+n5==0)
E questo e' proprio il tuo caso quando metti d=-8.

Allora ti conviene mettere un controllo. Ad esempio una variabile che chiamerai trovato che verra' inizializzata a false e che farai diventare true solo nel caso che si entri nell'if. Poi dovrai gestire la cosa con un messaggio di errore

codice:
if(trovato == true)
{
     qua ci metti tutti i calcoli
     e stampi la tabella
}
else
    document.write("Divisore non trovato")
ecco comunque il mio codice. Scusa se cambio l'indentazione ma io sono abituato cosi'...

Ciao

Codice PHP:
<html>
<
head>
<
style>table{text-align:center;border-collapse:collapse}
#l1{border-left:2px solid black}#l2{border-top:2px solid black}
#l3{border:2px solid black;border-right:0px;border-bottom:0px}</style>
<script type="text/javascript" language="JavaScript">

a=1
b
=3
c
=6
d
=-8

document
.write(a+"x<sup>3</sup>+"+b+"x<sup>2</sup>+"+c+"x+"+d+"=0<hr>")
last=new Array

//if(d<0)
    //D=-d
Math.abs(d);
for(
i=0;i<=D;i++)
{
    if(
i==0)
    {
        
last.push(i)
        
last.push(-i)
    }
}

document.write(last+"<hr>")

for(
j=0;j<last.length;j++)
{
    
trovato false;
    
n1=a*last[j]
    
n2=b+n1
    n3
=n2*last[j]
    
n4=c+n3
    n5
=n4*last[j]
    if(
d+n5==0)
    {
        
trovato true;
        
m1=n1;
        
m2=n2;
        
m3=n3;
        
m4=n4;
        
m5=n5
        k
=-last[j]
        
j+=last.length
    
}
}
if(
trovato)
{
    
delta=Math.sqrt(m2*m2-4*a*m4)/(2*a)
    
x1=-k
    x2
=(-m2/(2*a))+delta
    x3
=(-m2/(2*a))-delta
    
if(k>0)
        
k="+"+k;
    if(
m2==1)
        
m2="+";
    else if(
m2>0)
        
m2="+"+m2;
    if(
m4>0)
    
m4="+"+m4;
    
document.write("(x"+k+")("+a+"x<sup>2</sup>"+m2+"x"+m4+")=0<hr>")
    
document.write("[i]S{"+x1+";"+x2+";"+x3+"}[/i]")
    
document.write("<hr><table width=150><tr><td></td><td id=l1>"+a+"</td><td>"+b+"</td><td>"+c+"</td><td id=l1>"+d+"</td></tr><tr><td>"+(-x1)+"</td><td id=l1></td><td>"+m1+"</td><td>"+m3+"</td><td id=l1>"+m5+"</td></tr><tr><td id=l2></td><td id=l3>"+a+"</td><td id=l2>"+m2+"</td><td id=l2>"+m4+"</td><td id=l3>0</td></tr></table>")
    
document.write("Trovato il divisore");
}
else
    
document.write("Divisore NON trovato");
</script>
</head></body></html>