[PHP5] taschenrechner in php

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    PHP-Code:
    function calc($str){
    if(
    preg_match("#^[\\d\\s+-\\/*()\\.]+$#",$str)){
     
    $erg="";
     eval(
    "\$erg=".$str.";");
     return 
    $erg;
     }
     else return 
    "falsche eingabe"
    }


    echo 
    calc("(235+1/2-100)* 3.5 ");
    //ende von perversion 
    Slava
    bituniverse.com

    Kommentar


    • #17
      @Slava
      danke für den Beitrag...darf aber nicht "eval" verwenden....trotzdem danke

      Kommentar


      • #18
        such mal im google die worte factor term expression

        dann schaust du noch mal in http://tut.php-q.net/recursion.html#u7 das ist gerade fertig, ausser die klammern. für die klammerfaktoren was koala gesagt hat, oder ich auch.

        ich könnte Dich auch zu meiner Musterlösung beamen.
        OffTopic:
        das wirklich perverse ist, dass es eigentlich nur auf eine Art geht, und wenn man nicht J.v. Neumann ist, man nie selber drauf kommt. Was denken sich die Profs.

        Kommentar


        • #19
          @mai
          auf der Adressse war ich auch schon....mal sehen was sich mahen lässt...

          Warte Scooti ich bin fertig zum beamen...

          Tja gute Frage das weiß ich leider auch nicht...

          Kommentar


          • #20
            Wer das rekursive Pattern #\( ( ( (?>[^()]+) | (?R) )* ) \)# zum laufen bringt, bekommt einen extrapunkt. Wer es auch versteht, zwei. Quelle:http://www.php.net/manual/en/reference.pcre.pattern.syntax.php Abschnitt Recursive Patterns

            Kommentar


            • #21
              da habe ich ein paar Zeilen geschrieben.
              sieh Anhang
              Angehängte Dateien
              Slava
              bituniverse.com

              Kommentar


              • #22
                hier findet sich ne Taschenrechnerfunktion:

                http://tut.php-q.net/recursion.html

                Kommentar


                • #23
                  Original geschrieben von Slava
                  da habe ich ein paar Zeilen geschrieben.
                  sieh Anhang
                  aha es funktioniert sogar mit Iteration anstatt Rekursion. odin1978 wird sich für deinen originellen Ansatz viel Sympathie holen. (ehrlich!)

                  drei Bemerkungen:
                  Notice: Undefined variable: a on line 34
                  $matches anstatt $array, oder sogar $subaufgabe anstatt $array schreiben (irgendwas semantisches)
                  $aufgabe='2-2*(3*(1+4)+5*(7+8*(2+3)))+20';
                  echo "Aufgabe=$aufgabe = ".calculator($aufgabe); gibt -518.
                  und Aufgabe=2+2*(3*(1+4)+5*(7+8*(2-3)))-20 = 182*--19
                  Kannst Du nochmals schauen?

                  Kommentar


                  • #24
                    Original geschrieben von Slava
                    da habe ich ein paar Zeilen geschrieben.
                    sieh Anhang
                    Pattern wird übrigens mit doppel T geschrieben und nicht "patern" *auf die Variable im Code zeigt*

                    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                    Wie man Fragen richtig stellt

                    Kommentar


                    • #25
                      Original geschrieben von ghostgambler
                      Pattern wird übrigens mit doppel T geschrieben und nicht "patern" *auf die Variable im Code zeigt*
                      na ja so ist es bei Auslender.
                      ein wenig Optimiert
                      ich mache quelcode ohne php-highleiting wegen
                      paTTern Darstellung



                      function operationen($str){
                      $pattern='#(\d+\.?\d*)([\*|\/])(\d+\.?\d*)#';
                      $str=$str;
                      //multication und devision berechnen und ersetzen
                      while( preg_match_all($patern,$str,$array)){
                      for($i=0;$i<count($array[0]);$i++){
                      $st=$array[1][$i].$array[2][$i].$array[3][$i]; //echo $st."<br>";
                      if($array[2][$i]=="*")$str=str_replace($st,$array[1][$i]*$array[3][$i],$str);
                      else $str=str_replace($st,$array[1][$i]/$array[3][$i],$str);
                      } unset($array);
                      }
                      // + und - berechnen und ersetzen
                      $pattern='#(\d+\.?\d*)([\+|-])(\d+\.?\d*)#';
                      while(preg_match_all($patern,$str,$array)){
                      for($i=0;$i<count($array[0]);$i++){
                      $st=$array[1][$i].$array[2][$i].$array[3][$i]; //echo $st."<br>";
                      if($array[2][$i]=="+")$str=str_replace($st,$array[1][$i]+$array[3][$i],$str);
                      else $str=str_replace($st,$array[1][$i]-$array[3][$i],$str);
                      } unset($array);
                      }
                      return $str;
                      }

                      function calculator($str){
                      $str=preg_replace( "#\s#","",$str);
                      $pattern = '#\(([^(]+)\)#';
                      while(preg_match_all($patern,$str,$array)){
                      for($i=0;$i<count($array[0]);$i++){
                      $st=$array[0][$i]; //echo $st."<br>";
                      $str=str_replace($st,operationen($array[1][$i]),$str);

                      } unset($array);
                      }
                      return operationen($str);
                      }

                      echo calculator("(2+5)*3+(8-13/(7+6))");
                      Zuletzt geändert von Slava; 14.06.2006, 12:10.
                      Slava
                      bituniverse.com

                      Kommentar


                      • #26
                        Slava dein Ansatz ist höchst [zensiert]. Es geht sogar ohne preg_match_all. mit etwa folgendem pseudocode

                        while (preg_match ("Klammer klammerfreier text Klammer",$string)
                        ::ersetze im $string diese klammern und den text durch den wert

                        Etwas ähnliches geht für die beiden Stufen des klammerfreien Texts. im matchen des klammerfreien texts muss jedoch auch -15*-30 gehen und nachher -15--15 berücksichtigt werden. Anfangen kann man die Auswertung, indem um den gesamten String noch zusätzliche Klammern gegeben werden.

                        OffTopic:
                        pattern wäre amerikanisch, deutsch ist Muster, slava's language s.u. ist паттерн, man findet aber auch пэттерн, петтерн bzw. образ
                        Zuletzt geändert von mai; 14.06.2006, 17:09.

                        Kommentar


                        • #27
                          Zusatz zu meinem Quelltext.
                          1)in meiner Sprache heißt pattern Паттерн hm!!! auch mit 2 T
                          2)

                          Lizenz zu meinem quelltext
                          1)diese Code darf frei geändert werden
                          2)Es ist erlaubt bei Änderung der Wort "pattern" mit Schreibfehler zu schreiben.
                          3)diese Code darf von jedem als eigene verkauft werden.
                          4)ich habe kein Bock die Code für Vorzeichen zu optimieren, und normale weise lohnt es sich überhaupt nicht sich damit zu beschäftigen :-)
                          5)Weitere Kritik zu diesem Quelltext senden Sie bitte direkt an Ihren Arzt oder Apotheker
                          6)Wichtig!!!
                          Slava
                          bituniverse.com

                          Kommentar


                          • #28
                            Original geschrieben von Slava
                            Zusatz zu meinem Quelltext.
                            1)in meiner Sprache heißt pattern Паттерн hm!!! auch mit 2 T
                            Я так и думал.

                            Kommentar


                            • #29
                              Original geschrieben von mai
                              Я так и думал.
                              Übersetzt von russisch auf deutsch: das habe ich mir schon gedacht
                              Slava
                              bituniverse.com

                              Kommentar


                              • #30
                                -
                                Zuletzt geändert von mai; 14.06.2006, 13:27.

                                Kommentar

                                Lädt...
                                X