Pagini recente » Cod sursa (job #2381729) | Cod sursa (job #441295) | Cod sursa (job #27809) | Cod sursa (job #3274078) | Cod sursa (job #2789117)
#include <stdio.h>
#define MAX_LEVEL 2
#define NUL 320
char s[ 100000 ];
int f[ 255 ];
int poz;
int exp( int level );
int no() {
if( f[ s[ poz ] ] == NUL )
return 0;
//printf( "%c\n", s[ poz ] );
int no = 0;
if( s[ poz ] == '(' ) {
++poz;
// printf( "caca\n" );
no = exp( 0 );
++poz;
} else {
// printf( "-> " );
no = 0;
while( f[ s[ poz ] ] == MAX_LEVEL )
no = no * 10 + s[ poz++ ] - '0';
}
//printf( "%d\n", no );
return no;
}
void modific( int& rez, char operatie, int level ) {
if( f[ s[ poz ] ] == NUL )
return;
if( level == 0 )
if( operatie == '+' )
rez += exp( level + 1 );
else rez -= exp( level + 1 );
else if( level == 1 )
if( operatie == '*' )
rez *= exp( level + 1 );
else rez /= exp( level + 1 );
else rez += no();
}
int exp( int level ) {
int rez = 0;
if( f[ s[ poz ] ] == NUL )
return 0;
if( level < MAX_LEVEL )
rez = exp( level + 1 );
else rez = no();
if( level < MAX_LEVEL )
while( f[ s[ poz ] ] == level )
modific( rez, s[ poz++ ], level );
return rez;
}
int main()
{
FILE *fin = fopen( "evaluare.in", "r" );
fscanf( fin, "%s", s );
fclose( fin );
f[ '\0' ] = f[ ')' ] = NUL;
f[ '+' ] = f[ '-' ] = 0;
f[ '*' ] = f[ '/' ] = 1;
for( int i = '0'; i <= '9'; i++ )
f[ i ] = MAX_LEVEL;
FILE *fout = fopen( "evaluare.out", "w" );
fprintf( fout, "%d\n", exp( 0 ) );
fclose( fout );
return 0;
}