summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pl_calc.c159
1 files changed, 90 insertions, 69 deletions
diff --git a/pl_calc.c b/pl_calc.c
index 9a93ebe..1c8d8d9 100644
--- a/pl_calc.c
+++ b/pl_calc.c
@@ -1,8 +1,10 @@
/* $Id$ */
/* Berlin 26.12.2000 */
+
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
+
#define MAXOP 100
#define NUMBER '0'
#define MAXVAL 100
@@ -19,83 +21,102 @@ void ungetch(int);
char buf[BUFSIZE];
int bufp = 0;
-int main(void) {
- 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("Fehler: Teilung durch Null\n");
- break;
- case '\n':
- printf("\t%.8g\n", pop());
- break;
- default:
- printf("Fehler: Unbekanter Befehl %s\n", s);
- break;
- }
- }
- return 0;
+int
+main(void)
+{
+ 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("Fehler: Teilung durch Null\n");
+ break;
+ case '\n':
+ printf("\t%.8g\n", pop());
+ break;
+ default:
+ printf("Fehler: Unbekanter Befehl %s\n", s);
+ break;
+ }
+ }
+
+ return 0;
}
-void push(double f) {
- if (sp < MAXVAL)
- val[sp++] = f;
- else
- printf("Fehler: Stack ist voll, %g passt nicht rein\n", f);
+void
+push(double f)
+{
+ if (sp < MAXVAL)
+ val[sp++] = f;
+ else
+ printf("Fehler: Stack ist voll, %g passt nicht rein\n", f);
}
-double pop(void) {
- if (sp > 0)
- return val[--sp];
- else {
- printf("Fehler: Stack ist leer\n");
- return 0.0;
- }
+double
+pop(void)
+{
+ if (sp > 0)
+ return val[--sp];
+ else {
+ printf("Fehler: Stack ist leer\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;
+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;
}
-int getch(void) {
- return(bufp > 0) ? buf[--bufp] : getchar();
+int
+getch(void)
+{
+ return (bufp > 0) ? buf[--bufp] : getchar();
}
-void ungetch(int c) {
- if (bufp >= BUFSIZE)
- printf("Ungetch: Zu viele Zeichen\n");
- else
- buf[bufp++] = c;
+void
+ungetch(int c)
+{
+ if (bufp >= BUFSIZE)
+ printf("Ungetch: Zu viele Zeichen\n");
+ else
+ buf[bufp++] = c;
}