just a sample of what can be done

Dependencies:   mbed

PRN電卓プログラム

「プログラミング言語C (K&R本)」に出てくる例を元にした,RPN計算機です.

hp写真はイメージです

このプログラムは..

Committer:
okano
Date:
Sat Jun 27 01:29:21 2015 +0000
Revision:
5:3b9daee5f734
Parent:
3:4ef74510cc5b
functions "power" and "drop" are added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okano 0:6be9f112093f 1 #include "mbed.h"
okano 2:0e96f4495b43 2 #include "calc.h"
okano 0:6be9f112093f 3
okano 0:6be9f112093f 4 #define MAXOP 100
okano 0:6be9f112093f 5
okano 0:6be9f112093f 6 int main()
okano 0:6be9f112093f 7 {
okano 0:6be9f112093f 8 int type;
okano 0:6be9f112093f 9 double op2;
okano 0:6be9f112093f 10 char s[ MAXOP ];
okano 3:4ef74510cc5b 11 int stack_dump;
okano 0:6be9f112093f 12
okano 0:6be9f112093f 13 while ( (type = getop( s )) != EOF ) {
okano 3:4ef74510cc5b 14 stack_dump = 1;
okano 3:4ef74510cc5b 15
okano 0:6be9f112093f 16 switch( type ) {
okano 0:6be9f112093f 17 case NUMBER:
okano 0:6be9f112093f 18 push( atof( s ) );
okano 3:4ef74510cc5b 19 stack_dump = 0;
okano 0:6be9f112093f 20 break;
okano 0:6be9f112093f 21 case '+':
okano 0:6be9f112093f 22 push( pop() + pop() );
okano 0:6be9f112093f 23 break;
okano 0:6be9f112093f 24 case '*':
okano 0:6be9f112093f 25 push( pop() * pop() );
okano 0:6be9f112093f 26 break;
okano 0:6be9f112093f 27 case '-':
okano 0:6be9f112093f 28 op2 = pop();
okano 0:6be9f112093f 29 push( pop() - op2 );
okano 0:6be9f112093f 30 break;
okano 0:6be9f112093f 31 case '/':
okano 0:6be9f112093f 32 op2 = pop();
okano 0:6be9f112093f 33 if ( op2 != 0.0 )
okano 0:6be9f112093f 34 push( pop() / op2 );
okano 3:4ef74510cc5b 35 else {
okano 0:6be9f112093f 36 printf( "error: zero divisor\n" );
okano 3:4ef74510cc5b 37 stack_dump = 0;
okano 3:4ef74510cc5b 38 }
okano 0:6be9f112093f 39 break;
okano 5:3b9daee5f734 40 case 'p':
okano 5:3b9daee5f734 41 op2 = pop();
okano 5:3b9daee5f734 42 push( pow( pop(), op2 ) );
okano 5:3b9daee5f734 43 break;
okano 5:3b9daee5f734 44 case 'd':
okano 5:3b9daee5f734 45 pop();
okano 5:3b9daee5f734 46 break;
okano 0:6be9f112093f 47 case '\n':
okano 1:eb37ff1cb458 48 break;
okano 1:eb37ff1cb458 49 case 0x0D:
okano 1:eb37ff1cb458 50 // just ignore
okano 3:4ef74510cc5b 51 stack_dump = 0;
okano 0:6be9f112093f 52 break;
okano 0:6be9f112093f 53 default:
okano 0:6be9f112093f 54 printf( "error: unknown command %s (0x%02X)\n", s, *s );
okano 3:4ef74510cc5b 55 stack_dump = 0;
okano 0:6be9f112093f 56 break;
okano 0:6be9f112093f 57 }
okano 3:4ef74510cc5b 58
okano 3:4ef74510cc5b 59 if ( stack_dump )
okano 3:4ef74510cc5b 60 show_stack();
okano 0:6be9f112093f 61 }
okano 0:6be9f112093f 62 }