JavaScript-Quelltext in der Datei rechner.js
|
/* interne Maschinerie eines Rechners mit Vorrangautomatik,
der Addition, Subtraktion, Multiplikation, Division,
Potenzieren und Logarithmieren beherrscht
(c) 2001 Ulrich Kritzner */
|
var operands=new Array(0.0,0.0,0.0,0.0,0.0);
var operators=new Array(" "," "," "," ");
var operatorlist=new Array("+","-","*","/","^","log"," ","=");
var operatorlayer=new Array(1,1,2,2,3,3,4,0);
var oplayer=0;
|
function ClearOP()
/* re-initialisiert den Rechner komplett */
{
var i;
for (i=0;i<4;i++)
operands[i]=0.0;
for (i=0;i<3;i++)
operators[i]=" ";
}
|
function OperatorIndex(operator)
/* Index eines Operators im operatorlist-Array */
{
var i,ret=-1;
for (i=0;i<operatorlist.length;i++)
if (operatorlist[i]==operator)
ret=i;
return ret;
}
|
function OperatorLayer(operator)
/* Priorität eines Operators */
{
var i,ret=-1;
for (i=0;i<operatorlist.length;i++)
if (operatorlist[i]==operator)
ret=operatorlayer[i];
return ret;
}
|
function Operate(val1,val2,operator)
/* verknüpft zwei Operanden mit dem Operator */
{
var i=OperatorIndex(operator),ret;
if (i>=0)
switch (i)
{
case 0: ret=val1+val2; break;
case 1: ret=val1-val2; break;
case 2: ret=val1*val2; break;
case 3: ret=val1/val2; break;
case 4: ret=Math.exp(Math.log(val1)*val2); break;
case 5: ret=Math.log(val1)/Math.log(val2); break;
case 6: ret=val2; break;
case 7: ret=val2; break;
}
return ret;
}
|
function SetOperand(operand)
/* setzt einen Operanden in die aktuelle Prioritätsebene */
{
operands[oplayer]=operand;
}
|
function SetOperator(operator)
/* setzt einen neuen Operator und führt alle nötigen Operationen aus */
{
var i,newlayer=OperatorLayer(operator);
if (newlayer<0)
return;
while (newlayer<oplayer)
{
oplayer--;
operands[oplayer]=Operate(operands[oplayer],operands[oplayer+1],operators[oplayer]);
operands[oplayer+1]=0.0;
operators[oplayer]=" ";
}
while (newlayer>oplayer)
{
operators[oplayer]=" ";
operands[oplayer+1]=operands[oplayer];
oplayer++;
}
operators[newlayer]=operator;
oplayer=newlayer+1;
return operands[newlayer];
}
|
|
JavaScript-Quelltext in rechner.html
|
<script type="text/javascript" src="rechner.js"></script>
<script type="text/javascript">
<!--
|
var valstring="";
var pointenabled=1;
var expenabled=1;
var negation=0;
var memories=new Array(0.0,0.0,0.0,0.0,0.0,0.0);
|
/* Bilder -------- */
var img_vz=new Array(new Image(),new Image());
var img_nr=new Array(new Image(),new Image(),new Image(),new Image(),new Image(),
new Image(),new Image(),new Image(),new Image(),new Image());
img_vz[0].src="plus.gif";
img_vz[1].src="minus.gif";
img_point=new Image();
img_point.src="points.gif";
img_empty=new Image();
img_empty.src="emptys.gif";
img_minus=new Image();
img_minus.src="minuss.gif";
img_pluss=new Image();
img_pluss.src="pluss.gif";
img_e=new Image();
img_e.src="es.gif";
img_X=new Image();
img_X.src="Xs.gif";
{
var i;
for (i=0;i<10;i++)
{
img_nr[i].src=""+i+"s.gif";
}
}
/* -------- Bilder */
|
function Darstellen()
/* schreibt die Zahl in Bilder um */
{
var i;
var value=parseFloat(valstring);
document.images[3].src=img_vz[negation].src;
if (isNaN(value))
{
for (i=0;i<24;i++)
{
document.images[i+4].src=img_empty.src;
}
}
else
{
for (i=0;i<24;i++)
{
if (i<valstring.length)
{
if ((valstring.charAt(i)>="0")&&(valstring.charAt(i)<="9"))
document.images[i+4].src=img_nr[parseInt(valstring.charAt(i))].src;
else
{
document.images[i+4].src=img_X.src;
if (valstring.charAt(i)==".")
document.images[i+4].src=img_point.src;
if (valstring.charAt(i)=="-")
document.images[i+4].src=img_minus.src;
if (valstring.charAt(i)=="+")
document.images[i+4].src=img_pluss.src;
if ((valstring.charAt(i)=="e")||(valstring.charAt(i)=="E"))
document.images[i+4].src=img_e.src;
}
}
else
document.images[i+4].src=img_empty.src;
}
}
}
|
function Berechne(operator)
/* reagiert auf Verknüpfungsaufforderung (+ - * / ^ log) */
{
if ((valstring=="")||(valstring=="."))
valstring="0";
var value=parseFloat(valstring);
if (negation)
value=-value;
SetOperand(value);
pointenabled=2;
value=SetOperator(operator);
if (value<0)
{
negation=1;
value=-value;
}
else
negation=0;
valstring=String(value);
Darstellen();
}
|
function MemIn(number)
/* setzt eine Speicherzelle */
{
if ((valstring=="")||(valstring=="."))
valstring="0";
var value=parseFloat(valstring);
if (!isNaN(value))
memories[number]=value;
pointenabled=2;
valstring=String(value);
Darstellen();
}
|
function MemOut(number)
/* fragt eine Speicherzelle ab */
{
if (!isNaN(memories[number]))
{
var value;
value=memories[number];
pointenabled=2;
valstring=String(value);
Darstellen();
}
}
|
function Funktion(number)
/* reagiert auf Funktionsanforderung */
{
if ((valstring=="")||(valstring=="."))
valstring="0";
var value=parseFloat(valstring);
switch (number)
{
case 1: value=Math.sin(value); break;
case 2: value=Math.cos(value); break;
case 3: value=Math.tan(value); break;
case 4: value=Math.asin(value); break;
case 5: value=Math.acos(value); break;
case 6: value=Math.atan(value); break;
case 7: value=Math.exp(value); break;
case 8: value=Math.log(value); break;
case 9: value=Math.sqrt(value); break;
case 10: value=Math.round(value); break;
case 11: value=Math.ceil(value); break;
case 12: value=Math.floor(value); break;
case 13: value=1/value; break;
case 14: value=Math.PI; break;
case 15: value=Math.E; break;
case 16: value=value*value; break;
case 17: value=value*value*value; break;
case 18: value=Math.exp(Math.log(value)*1/3); break;
}
pointenabled=2;
valstring=String(value);
Darstellen();
}
|
function AddChar(s)
/* fügt ein Zeichen an die aktuelle Zahl an */
{
var normal=1;
if (pointenabled==2)
{
valstring="";
negation=0;
pointenabled=1;
expenabled=1;
}
if (s!="+-")
{
if (valstring.length<23)
{
if (s==".")
{
normal=0;
if (pointenabled==1)
{
valstring=valstring+s;
pointenabled=0;
}
}
if (s.charAt(0)=="E")
{
normal=0;
pointenabled=0;
if (expenabled==1)
{
valstring=valstring+s;
expenabled=0;
}
}
if (normal)
valstring=valstring+s;
}
}
else
{
if (negation==1)
negation=0;
else
negation=1;
}
Darstellen();
}
|
function ClearVal()
/* löscht die aktuelle Zahl */
{
valstring="";
negation=0;
pointenabled=1;
expenabled=1;
Darstellen();
}
|
function ClearAll()
/* reinitialisiert den Rechner */
{
ClearOP();
valstring="";
negation=0;
pointenabled=1;
expenabled=1;
Darstellen();
}
|
//-->
</script>
|
|