2010-10-12 11 views
0

Hé les gars, aujourd'hui, j'ai été inspiré par un ALU 16 bits fait dans Mincraft pour essayer de faire mon propre additionneur. J'ai littéralement commencé JavaScript aujourd'hui, et j'ai joué avec les portes logiques au cours des deux derniers jours. Donc, je suis très nouveau à cela.Aide avec l'additionneur de bits auto-extensible JavaScript

Voici mon code jusqu'à présent.

<html> 
<body> 
    <script type="text/javascript"> 

     function add(ai, bi) { 
     var newadd = [ai.length+1]; 
      for(i = 0 ; i < ai.length ; i ++) { 
       if(i>0) { 
        newadd[i]=fullAdd(ai[i],bi[i],fullAdd(ai[i-1],bi[i-1],0).charAt(1)).charAt(0);; 

       } 
       else { 
        newadd[i]=fullAdd(ai[i],bi[i],0).charAt(0); 

       } 
      } 
      return newadd; 
     } 

     function fullAdd(ai, bi, ci) { 
      var ao = ((ai^bi)^ci); 
      var co = (((ai^bi)&ci)|(ai&bi)); 
      return ao+""+co; 
     } 

     var a = [1,0]; 
     var b = [0,1]; 
     document.write("a + b = " + add(a,b)); 

    </script> 
</body> 

Qu'est-ce que je fais mal? Je suis sûr que c'est quelque chose de stupide ou de stupide, ou que mon système auto-conçu ne fonctionnera tout simplement pas. En tout cas merci pour votre aide à l'avance! -Devan

Remarque: l'additionneur complet fonctionne et renvoie les caractères qu'il devrait contenir. Le problème est la fonction d'ajout.

EDIT: fixe les 2 erreurs évidentes

EDIT2: Je suis venu près de la réponse en changeant la fonction ajouter un peu.

EDIT3: Résolu, voici le code qui fonctionne

<html> 
<body> 
    <script type="text/javascript"> 

     function add(ai, bi) { 
     var newadd = [ai.length+1]; 
      for(i = 0 ; i < ai.length+1 ; i ++) { 
       if(i>0) { 
        newadd[i]=fullAdd(ai[i],bi[i],fullAdd(ai[i-1],bi[i-1],0).charAt(1)).charAt(0);; 
       } 
       else { 
        newadd[i]=fullAdd(ai[i],bi[i],0).charAt(0); 
       } 
      } 
      return newadd; 
     } 

     function fullAdd(ai, bi, ci) { 
      var ao = ((ai^bi)^ci); 
      var co = (((ai^bi)&ci)|(ai&bi)); 
      return ao+""+co; 
     } 

     var a = [1,0,1,1]; 
     var b = [0,1,0,1]; 
     document.write("a + b = " + add(a,b)); 

    </script> 
</body> 

Merci les gars!

Répondre

0

Aussi, je ne sais pas si vous devez utiliser for (i = 0; i < ai.length; i ++) ou (i = ai.length-1; i > = 0; je--)

on suppose l'original, alors vous devriez peut-être utiliser:

if (i> 0) { newadd [i] = fullAdd (ai [i], bi [i ], newadd [i] .charAt (0)); newadd [i + 1] = fullAdd (ai [i], bi [i], newadd [i] .charAt (1)); }

+0

oui je viens de le résoudre, en utilisant une variation de ce que vous avez utilisé. (ai.length + 1 dans l'instruction for) –

0

probablement vous voulez

document.write("a + b = " + add(a,b)); 

au lieu de

document.write("a + b = " + newadd(a,b); 
+0

Cela aiderait, mais n'est toujours pas le problème principal = ( –

+0

je reçois "a + b = 1,01,1" quel devrait être le bon résultat? – mykhal

+0

il devrait lire 0,1,1 –

0

À première vue, peut-être vous avez mal écrit, il faudrait peut-être: document.write ("a + b =" + ajouter (a, b));

L'original manque ")" enfin et utiliser "newadd"

Aussi, je ne sais pas si vous devez utiliser pour (i = 0; i = 0; je--)

Supposons l'original, alors peut-être vous devriez utiliser si (i> 0) { newadd [i] = fullAdd (ai [i], bi [i], newadd [i] .charAt (0));

newadd[i+1]=fullAdd(ai[i],bi[i], newadd[i].charAt(1)); 

}

+0

oui, merci. ceux qui ont été corrigés la méthode add ne fonctionne toujours pas correctement. –