Calculater

Advanced-Computer
Verfügbare Informationen zu "Calculater"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: donasa - just4fun
  • Forum: Advanced-Computer
  • Forenbeschreibung: Computer
  • aus dem Unterforum: alle C sprachen
  • Antworten: 2
  • Forum gestartet am: Samstag 07.10.2006
  • Sprache: deutsch
  • Link zum Originaltopic: Calculater
  • Letzte Antwort: vor 17 Jahren, 5 Monaten, 24 Tagen, 10 Stunden, 15 Minuten
  • Getaggt durch: Computer
  • Alle Beiträge und Antworten zu "Calculater"

    Re: Calculater

    donasa - 04.11.2006, 15:53

    Calculater
    So mein neuer Taschenrechner (kann klammern rechnen etc.)
    zur eingabe:

    calc "RECHENANWEISUNG"
    und enter drücken

    dieser wird auch bald in NOSS zu finden sein
    Code:
    #include <iostream>
    using namespace std;

    enum tToken {
        PLUS, MINUS, MUL, DIV, LPAR, RPAR, NUMBER, END, ERROR};

    // Globale Variablen:
    tToken aktToken;     // das zuletzt erkannte Token
    double TokenZahlenWert; // der Wert bei Zahlenkonstanten

    char *srcPos; // Programm-Position

    tToken sucheToken()
    // Sucht ab der aktuellen Stringposition das nächste Token.
    // Hier werden auch die Zahlenkonstanten bestimmt und in
    // der globalen Variablen TokenZahlenWert abgelegt.
    {
        aktToken = ERROR;
        if (*srcPos==0) {
            aktToken = END;
        } else {
            switch (*srcPos) {
            case '(': aktToken=LPAR;  break;
            case ')': aktToken=RPAR;  break;
            case '*': aktToken=MUL;   break;
            case '/': aktToken=DIV;   break;
            case '+': aktToken=PLUS;  break;
            case '-': aktToken=MINUS; break;
            }
            if (*srcPos>='0' && *srcPos<'9') {
                aktToken=NUMBER;
                TokenZahlenWert = 0.0;
            }
            while (*srcPos>='0' && *srcPos<'9') {
                TokenZahlenWert *= 10;
                TokenZahlenWert += *srcPos-'0';
                srcPos++;
            }
            if (aktToken != NUMBER) srcPos++;
        }
        return aktToken;
    }

    tToken Error(char *s)
    // Meldung ausgeben und Fehler-Token zurückliefern
    {
        cerr << s << endl;
        return ERROR;
    }

    double PlusMinus();

    double Klammern()
    // wertet Klammern, Zahlen und Vorzeichen aus
    // ruft Klammern() und PlusMinus() dadurch rekursiv!
    {
    double Wert;

        switch(aktToken) {
        case NUMBER:
            sucheToken();
            return TokenZahlenWert;
        case MINUS:
            sucheToken();
            return -Klammern();
        case LPAR:
            sucheToken();
            Wert = PlusMinus();
            if (aktToken != RPAR)
               return Error(") expected");
            sucheToken();
            return Wert;
        case END:
            return 1;
        }
        return Error("primary expected");
    }

    double MulDiv()
    // wertet Multiplikation und Division aus
    // ruft Klammern(), dadurch rekursiv!
    {
    double Wert;

      // rufe erst die Operation mit der nächsthöheren Priorität
      Wert = Klammern();
      while (aktToken==MUL || aktToken==DIV) {
        if (aktToken==MUL) {
          sucheToken();
          Wert *= Klammern();
        } else if (aktToken==DIV) {
          sucheToken();
          Wert /= Klammern();
        }
      }
      return Wert;
    }

    double PlusMinus()
    // wertet Summe und Differenz aus
    // ruft MulDiv(), dadurch rekursiv
    {
    double Wert;

      // rufe erst die Operation mit der nächsthöheren Priorität
      Wert = MulDiv();
      while (aktToken==PLUS || aktToken==MINUS) {
        if (aktToken==PLUS) {
          sucheToken();
          Wert += MulDiv();
        } else if (aktToken==MINUS) {
          sucheToken();
          Wert -= MulDiv();
        }
      }
      return Wert;
    }

    double Auswertung(char *s)
    {
        srcPos = s;
        sucheToken();   // bestimme schon einmal das erste Token vorweg
        return PlusMinus();
    }

    int main(int argc, char* argv[])
    {
        double Wert = Auswertung(argv[1]);
        cout << Wert << endl;
        return 0;
    }



    Re: Calculater

    just4fun - 06.11.2006, 23:42


    junge noss is ent die zukunft.......

    wir brauchen einen besseren namen wie wärs mit

    Lync

    hab ich mir ausgedacht und da chrisi is damit einverstanden....
    den kernel würden wir dann

    Kync

    nennen, jedes gescheite betriebsystem nennt seinen kernel anders ;)
    also wie schauts aus, du musst nur noch ja sagen



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Advanced-Computer

    Lieblingsprogrammiersprache - gepostet von Donasa am Dienstag 10.10.2006
    Calculater - gepostet von donasa am Samstag 04.11.2006
    Programme - gepostet von inachor am Sonntag 19.11.2006



    Ähnliche Beiträge wie "Calculater"

    Skill - Calculater - LuZerus (Dienstag 06.07.2004)
    SP Calculater - uselezz (Sonntag 22.04.2007)