Ergebnis 1 bis 3 von 3
  1. #1
    Avatar von Tobenx3
    Tobenx3 ist offline Grünschnabel
    registriert
    05-09-2013
    Beiträge
    1

    Post Taschenrechner ohne eval()

    Hallo, ich möchte einen Taschenrechner erstellen der strings zerlegt (mit regexp) und dieses array berechnet,
    der Rechner soll können:
    - Klammern aufsuchen
    - +-*/ rechnungen
    - Vorzeichen von Rechenzeichen unterscheiden (bei Gleichungen wie: 3--2 oder 3*-2)

    Schritt 1: Eingabe -> die hab ich schon fertig (von selfHTML geklaut xD)

    Schritt 2: den string in ein array serlegen
    -> hab ich mit php schon gamacht, hab aber kein plan wie ich das alles umschreiben soll
    Code:
    function tokenize ($sFormula)
    {
        $aTokens = token_get_all ('<?php ' . $sFormula);// $sFormula wird gespalten und mit Operant,sign,number,bracket benannt
        array_shift ($aTokens);//array_shift um $aTokens den ersten string zu löschen
    
        $aBraceStack = array ();//definition aBraceStack
    
        foreach ($aTokens as $iKey => $mToken) {// in $mToken werden jetzt alle zeichen im string nacheinander durchgegangen
    
          if (is_scalar ($mToken)) {// ist ds Zeichen ein operant oder klammer dann:
    	  
            if ('(' == $mToken) {// bei klammer auf:
              $sType = 'bracket:opening';//Typ wird bestimmt
              $aBraceStack[] = $iKey;
            }
            elseif (')' == $mToken) {
              $sType = 'bracket:closing';
    
              if (null === $iOpener = array_pop ($aBraceStack)) {
                throw new exception ('bracket order error');
              }
    
              /*
              
              Hier möglich: leere Klammern aussortieren
              
              */
    
              $aTokens[$iKey]               = array ();
              $aTokens[$iKey]['type']       = $sType;
              $aTokens[$iKey]['token']      = $mToken;
              $aTokens[$iKey]['related']    = $iOpener;
              $aTokens[$iOpener]['related'] = $iKey;
              continue;
            }
            elseif (in_array ($mToken , array ('+' , '-' , '*' , '/'))) {
              if (0 == $iKey || 'operator' == $aTokens[$iKey - 1]['type']) {
                $sType  = 'sign';
                /*
                
                Hier möglich: + Vorzeichen aussortieren
                
                */
              }
              else {
                $sType  = 'operator';
              }
            }
            else {
              throw new exception ('unknown token: ' . $mToken);
            }
          }
          elseif (T_DNUMBER == $mToken[0] || T_LNUMBER == $mToken[0]) {
            $sType  = 'number';
            $mToken = $mToken[1];
    
            /*
                
            Hier möglich: mit vorausgehndem Vorzeichen zusammenfassen
                
            */
    
          }
          else {
            throw new exception ('unknown token: ' . $mToken[1] . ' (' . token_name ($mToken[0]) . ')');
          }
    
          $aTokens[$iKey] = array (
                             'type'    => $sType  ,
                             'token'   => $mToken ,
                           );
        }
        
        if (array () !== $aBraceStack) {
          throw new exception ('bracket order error');
        }
    
        return $aTokens;
    }
    Schritt 3: vorzeichen(-) und Zahlen(2) zusammenfügen(-2) -> sollte ich nach schritt 2 hinbekommen...

    Schritt 4: eine Funktion zum berechnen des strings innerhalb der ausgesuchten Klammer -> das Konzept hab ich schon durch

    Schritt 5: die Klammer durch das Ergebnis ersetzen -> da muss ich dann die erste klammer mit dem ergebnis ersetzen(zb mit array.replace), dann den restlichen string nachschieben und die letzten werte löschen(zb mit array.pop())

    ich bin für jede Hilfe dankbar

  2. #2
    Avatar von mikdoe
    mikdoe ist offline Administrator
    registriert
    01-05-2010
    Beiträge
    7.625

    AW: Taschenrechner ohne eval()

    Zitat Zitat von Tobenx3 Beitrag anzeigen
    ich bin für jede Hilfe dankbar
    Ich glaube, mit konkreten Fragen täten sich Mitlesende einfacher.

  3. #3
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.672

    AW: Taschenrechner ohne eval()

    Was ist exakt dein Problem beim Transfer der Codes von PHP nach JS?

Ähnliche Themen

  1. taschenrechner
    Von Michi2610 im Forum JavaScript
    Antworten: 1
    Letzter Beitrag: 03-12-2007, 18:33
  2. Taschenrechner
    Von BESITZERvomMOND im Forum JavaScript
    Antworten: 0
    Letzter Beitrag: 23-09-2007, 21:13
  3. taschenrechner
    Von javascriptnubi im Forum JavaScript
    Antworten: 8
    Letzter Beitrag: 20-03-2007, 12:39
  4. Taschenrechner ??
    Von seppelator im Forum JavaScript
    Antworten: 12
    Letzter Beitrag: 16-06-2004, 15:28
  5. JS-Taschenrechner ohne Dezimaltrennung mit "."
    Von mak_tha_Don im Forum JavaScript
    Antworten: 12
    Letzter Beitrag: 16-10-2003, 22:04

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •