[C] konwerter wyrażeń na ONP
Ostatnio zmodyfikowano 2013-10-10 17:36
Katruf Temat założony przez niniejszego użytkownika |
[C] konwerter wyrażeń na ONP » 2013-10-09 22:05:00 Witam napisałem prosty konwerter, ale nie we wszystkich przypadkach działa tak jak powinien, przy niektórych wyrażeniach po prostu program przestaje działać. nie potrafię znaleźć zgrzytu ... problem leży albo przy operatorach albo przy nawiasach tylko ja nie wiem co może być tam źle wklejam kod, w komentarzach umieszczam kolejne kroki algorytmu według którego postępowałem stos * wsk = NULL; char wyraz[ ile ] = { "a*a*a" }; char pom; int i;
for( i = 0; i < ile; i++ ) { if((( int ) wyraz[ i ] > 96 ) &&(( int ) wyraz[ i ] < 123 ) ) { printf( "%c ", wyraz[ i ] ); } else if(( wyraz[ i ] == '+' ) ||( wyraz[ i ] == '-' ) ||( wyraz[ i ] == '*' ) ||( wyraz[ i ] == '/' ) ||( wyraz[ i ] == '^' ) ) { if( wsk != NULL ) { while( porownaj( wyraz[ i ], wsk->symbol ) ) { printf( "%c ", zdejmij_ze_stosu( & wsk ) ); } } dodaj_na_stos( & wsk, wyraz[ i ] ); } else if( wyraz[ i ] == '(' ) { dodaj_na_stos( & wsk, wyraz[ i ] ); } else if( wyraz[ i ] == ')' ) { pom = zdejmij_ze_stosu( & wsk ); while( pom != '(' ) { printf( "%c ", pom ); pom = zdejmij_ze_stosu( & wsk ); } } }
while( wsk != NULL ) printf( "%c", zdejmij_ze_stosu( & wsk ) );
i funkcja porównująca int porownaj( char p, char d ) { int wp = 0, wd = 0; if( p == '(' ) wp = 0; if( d == '(' ) wd = 0; if(( p == '+' ) ||( p == '-' ) ) wp = 1; if(( d == '+' ) ||( d == '-' ) ) wd = 1; if(( p == '*' ) ||( p == '/' ) ) wp = 2; if(( d == '*' ) ||( d == '/' ) ) wd = 2; if( p == '^' ) wp = 3; if( d == '^' ) wd = 3; printf( "p: %i d:%i\n", wp, wd ); return( wp <= wd ); }
|
|
DejaVu |
» 2013-10-10 17:08:39 Wystarczy, że wyrażenie będzie niepoprawne i program się wysypie. |
|
Katruf Temat założony przez niniejszego użytkownika |
» 2013-10-10 17:17:51 tylko że np a*a*a jest poprawne a program się wysypuje :( |
|
DejaVu |
» 2013-10-10 17:36:19 Uruchom debbugger i z miejsca masz miejsce wystąpienia błędu. |
|
« 1 » |