Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Postfix Notation berechnen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.06.2004, 15:37 Uhr
chrisuni



Muss noch eine Aufgabe umsetzen und zwar:

Schreiben Sie eine Funktion die den Wert eines gegebenen arithmetischen Ausdrucks in Postfixnotation (aufgebaut aus den Operatoren +, * und - sowie ganzzahligen Operanden) berechnet.
Beispiel:
Bei der Eingabe 2 3 + 5 * sollte 25 berechnet werden, denn (2+3)*5 = 25..

Klausur ist am Freitag hab noch viele andere Aufgaben an denen ich hänge... wäre nett wenn jmd sich dieser Aufgabe mal annehmen könnte ...

in c++
--
gruß chris

nehmts mir net übel ich bin nen Anfänger und seh manchmal den Wald vor lauter Bäumen nicht mehr ;)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.06.2004, 21:03 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
C++ Lösung habe ich loider keine, vielleicht hilft der ne C Lösung:

C++:
/*Polish notation 1.0
written by Dennis M. Ritchie
Copy & Paste by mike :-) */

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAXOP 100
#define NUMBER '0'
int getop(char []);
void push(double);
void ungetch(int c);
int getch(void);
double pop(void);
int main() {
   int type;
   double op2;
   char s[MAXOP];
   while ((type = getop(s)) != EOF) {
      switch (type) {
         case NUMBER: push(atof(s)); break;
         case '+': push(pop() + pop()); break;
         case '*': push(pop() * pop()); break;
         case '-': op2 = pop(); push(pop() - op2); break;
         case '/': op2 = pop();
         if (op2 != 0.0)
            push(pop() / op2);
         else
            printf("error: zero divisor\n"); break;
         case '\n': printf("\t%.8g\n", pop()); break;  
         default: printf("error: unknown command %s\n", s); break;
       }
    }
    return 0;
}

#define MAXVAL 100
int sp = 0;
double val[MAXVAL];
void push(double f) {
   if (sp < MAXVAL)
      val[sp++] = f;
   else printf("error: stack full, can't push %g\n", f);
}
double pop(void) {
    if (sp > 0)
       return val[--sp];
    else {
       printf("error: stack empty\n");
       return 0.0;
     }
}


int getop(char s[]) {
   int i, c;
   while ((s[0] = c = getch()) == ' ' || c == '\t') ;
   s[1] = '\0';
   if (!isdigit(c) && c != '.')
      return c;
   i = 0; if (isdigit(c))
   while (isdigit(s[++i] = c = getch())) ;
   if (c == '.')
   while (isdigit(s[++i] = c = getch())) ;
   s[i] = '\0';
   if (c != EOF)
      ungetch(c);
   return NUMBER;
}

#define BUFSIZE 100
char buf[BUFSIZE];
int bufp = 0;
int getch(void) {
   return (bufp > 0) ? buf[--bufp] : getchar();
}
void ungetch(int c) {
   if (bufp >= BUFSIZE) printf("ungetch: too many characters\n");
   else  buf[bufp++] = c;
}



mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.06.2004, 23:04 Uhr
chrisuni



Vielen Dank !!!!!!!!!!!!! Perfekt
--
gruß chris

nehmts mir net übel ich bin nen Anfänger und seh manchmal den Wald vor lauter Bäumen nicht mehr ;)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: