#include #include #include #define DEBUG #define MAX 256 FILE *inp; char buf[ MAX ]; int l,n,i,k,numOfEnds,level,fac,stsize,j,a[MAX],stack[MAX],num; int main() { inp = fopen( "complex.in", "r" ); fscanf( inp, "%d\n", &n ); for ( i=1; i<=n ;i++ ) { /* variablen init */ numOfEnds = 1; level = 0; fac = 1; stsize = -1; for ( j=0; j= 0){ if (stack[stsize] == -1) level--; else if (stack[stsize]) fac = fac / stack[stsize]; numOfEnds--; stsize--; } } else if ( !strcmp(buf,"OP") ) { fscanf( inp, "%d", &num ); a[level] += num * fac; } else /* LOOP */ { numOfEnds++; stsize++; fscanf( inp, "%s", &(buf[0]) ); if ( !strcmp(buf,"n") ) { level++; stack[stsize] = -1; } else { stack[stsize] = atoi( &(buf[0]) ); fac = fac * stack[stsize]; } } } /* if (i != (n-1)) fscanf( inp, "%s", &(buf[0]) ); printf("buf %s\n", buf); */ printf("Program #%d\n", i); printf("Runtime = "); for ( k=MAX-1; k>=0 ; k-- ) { if (a[k]) { #if 1 if (a[k] > 1) printf( "%d", a[k] ); if (k > 1) printf( "*n^%d+", k ); else if (k == 1) printf( "*n+" ); else printf( "" ); #endif } } #if 0 printf( "\nstack\n" ); for (l=0;l<5;l++) printf( "%d ", stack[l] ); printf( "\na\n" ); for (l=0;l<5;l++) printf( "%d ", a[l] ); #endif printf("\n"); } fclose( inp ); return 0; }