• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

# Grundrechenarten #

Status
Für weitere Antworten geschlossen.

Eistee

Neues Mitglied
Hallo,

zurzeit versuche ich eine art Taschenrechner mit js zu schreiben
die eingabe erfolgt mit prompt und die ausgabe ist ein einfaches alert.

Bin meiner meinung nach fast fertig nur irgentwo scheint noch ein Fehler drin zustecken (irgentetwas stimmt mit der var zahl nicht).

Kann mir vielleicht jemand sagen wo der Fehler steckt? Hier mein Code:


HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<meta name="author" content="PC">
<meta name="editor" content="html-editor phase 5">
</head>
<body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">

<script language="JavaScript">
<!--

var eingabe
var i = 0

var operator

var einmal = 0
var zahl = 0

var start = 0
var start2 = 0
var ende = 0
var ergebnis = 0


eingabe=prompt("Gebe eine Rechnung ein:","350+70");

for(i;i<=eingabe.length;i++){

alert("i=" + i );
alert("zahl=" + zahl );

operator = eingabe.charAt(i);



         if (operator == "+"){

                  start2 = i+1;
                  ende = i;

                  if (einmal != "0")
                  {zahl = eingabe.substring(start, ende);}
                  else
                  {zahl = eingabe.substring(start2, ende);}

         ergebnis = ergebnis + zahl;
         }
         if (operator != "-")
         {
                  start2 = i+1;
                  ende = i;

                  if (einmal == 0)
                  {zahl = eingabe.substring(start, ende);}
                  else
                  {zahl = eingabe.substring(start2, ende);}

         ergebnis = ergebnis - zahl;
         }
         if (operator != "*")
         {
                  start2 = i+1;
                  ende = i;

                  if (einmal == 0)
                  {zahl = eingabe.substring(start, ende);}
                  else
                  {zahl = eingabe.substring(start2, ende);}

         ergebnis = ergebnis * zahl;
         }
         if (operator != "/")
         {
                  start2 = i+1;
                  ende = i;
                  if (einmal == 0)
                  {zahl = eingabe.substring(start, ende);}
                  else
                  {zahl = eingabe.substring(start2, ende);}

         ergebnis = ergebnis / zahl;
         }

einmal =  1


alert("zahl: " + zahl );

}

alert("Ergebnis: " + ergebnis );

//-->
</script>
</body>
</html>
(Ja es geht auch einfacher aber ich soll mich mit der Basis vertraut machen und es auf diesen weg lösen)
 
Du machst dir das Ganze nur etwas zu kompliziert :)
Dafür gibt es eval

Code:
alert(eval(2+2-3));

Teste es mal :)

Und zu deinem start und start2 :D Das kannst du doch schöner machen ^^ Einfach start neu setzen, nachdem du die zahl gesplittet hast. Und mit substr kriegst du einen String zurück. heisst:

"1"+"1" = "11"
Heisst du müsstest das ganze erst einmal als Integer parsen (parseInt)
Wieso du nur bei dem Plus-operator ein == verwendest und bei den anderen nicht ist mir unklar :D
Aber hab den Code nicht genau studiert :)

Hoffe du kannst was mit meiner Antwort anfangen
 
Da wo beim + operator ein == ist soll er überprüfen welchen operator er gefunden hat und in dem if kommt dann die eigentliche rechnung und mit eval darf ich das nicht machen weil ich das erst so können soll :???:

Ich denke mal dieses "Integer parsen" ist das Problem werd mich mal dran versuchen Danke für den Tipp!
 
Hallo,

ich bin es nochmal ich konnte das Problem bis jetzt immernoch nicht beheben obwohl die Strings jetzt Integer sind :cry:

Könnte vilelicht jemand nochmal drüber gucken:?:

Der Neue Code
HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<meta name="author" content="PC">
<meta name="editor" content="html-editor phase 5">
</head>
<body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">

<script language="JavaScript">
<!--

var eingabe
var i = 0

var operator

var einmal = "J"
var zahl = 0

var start = 0
var start2 = 0
var ende = 0
var ergebnis = 0


eingabe = prompt("Gebe eine Rechnung ein:","350+70");

for(i;i<=eingabe.length;i++){

operator = eingabe.charAt(i);



         if (operator == "+"){

                  start2 = i+1;
                  ende = i;

                  if (einmal == "J" )
                  {zahl = parseInt(eingabe.substring(start, ende))
                  i = i - 1;
                  einmal = "N";}
                  else
                  {zahl = parseInt(eingabe.substring(start2, ende));}
                  alert(zahl);
         ergebnis = parseInt(ergebnis + zahl);

         }


         if (operator == "-")
         {
                  start2 = i+1;
                  ende = i;

                  if (einmal == "J" )
                  {zahl = parseInt(eingabe.substring(start, ende))
                  i = i - 1;
                  einmal = "N";}
                  else
                  {zahl = parseInt(eingabe.substring(start2, ende));}

         ergebnis = parseInt(ergebnis - zahl);
         }


         if (operator == "*")
         {
                  start2 = i+1;
                  ende = i;

                  if (einmal == "J" )
                  {zahl = parseInt(eingabe.substring(start, ende))
                  i = i - 1;
                  einmal = "N";}
                  else
                  {zahl = parseInt(eingabe.substring(start2, ende));}

         ergebnis = parseInt(ergebnis * zahl);
         }


         if (operator == "/")
         {
                  start2 = i+1;
                  ende = i;

                  if (einmal == "J" )
                  {zahl = parseInt(eingabe.substring(start, ende))
                  i = i - 1;
                  einmal = "N";}
                  else
                  {zahl = parseInt(eingabe.substring(start2, ende));}

         ergebnis = parseInt(ergebnis / zahl);
         }

}

alert("Ergebnis: " + ergebnis);

//-->
</script>
</body>
</html>
Gruß Eistee
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben