Konwerter ONP problem z ładowaniem łańcucha do po programu.
Ostatnio zmodyfikowano 2018-05-14 20:10
lewozmywak Temat założony przez niniejszego użytkownika |
Konwerter ONP problem z ładowaniem łańcucha do po programu. » 2018-05-12 15:44:45 Hej Mam problem z kalkulatore ONP. Poniższy kod działa i zamienia normalną postać infiksową na ONP. To nie jest mój kod przyznaje się bez bicia. http://eduinf.waw.pl/inf/utils/010_2010/0410.php Szukam jakiegoś sposobu na konwersje infiksa na ONP, dlatego wspieram się rozwiązaniami które pomogą mi napisać własny kod. #include <iostream>
using namespace std;
int main() { char stos[ 256 ], el[ 256 ]; int ws = 0; do { cin >> el; if( el[ 0 ] >= '0' && el[ 0 ] <= '9' ) cout << el << " "; else switch( el[ 0 ] ) { case '+':; case '-': while( ws && stos[ ws - 1 ] != '(' ) cout << stos[ --ws ] << " "; stos[ ws++ ] = el[ 0 ]; break; case '*':; case '/': while( ws && stos[ ws - 1 ] != '(' && stos[ ws - 1 ] != '+' && stos[ ws - 1 ] != '-' ) cout << stos[ --ws ] << " "; stos[ ws++ ] = el[ 0 ]; break; case '^': while( ws && stos[ ws - 1 ] == '^' ) cout << stos[ --ws ] << " "; stos[ ws++ ] = el[ 0 ]; break; case '(': stos[ ws++ ] = '('; break; case ')': while( stos[ ws - 1 ] != '(' ) cout << stos[ --ws ] << " "; ws--; break; case '=': while( ws ) cout << stos[ --ws ] << " "; cout << " =\n\n"; break; } } while( el[ 0 ] != '=' ); return 0; }
Chce by program przyjmował łańcuch z zmiennej, a nie podany z klawiatury przez cin. Wydawało mi się to banalnie proste. Dlatego sztywno przed pętlą deklaruje łańcuch. Ale nie wiem czemu program później się zapętla i nic nie działa. #include <iostream>
using namespace std;
int main() { char stos[ 256 ]; char el[] = "23 + 5 - 5 ="; int ws = 0; do { if( el[ 0 ] >= '0' && el[ 0 ] <= '9' ) cout << el << " "; else switch( el[ 0 ] ) { case '+':; case '-': while( ws && stos[ ws - 1 ] != '(' ) cout << stos[ --ws ] << " "; stos[ ws++ ] = el[ 0 ]; break; case '*':; case '/': while( ws && stos[ ws - 1 ] != '(' && stos[ ws - 1 ] != '+' && stos[ ws - 1 ] != '-' ) cout << stos[ --ws ] << " "; stos[ ws++ ] = el[ 0 ]; break; case '^': while( ws && stos[ ws - 1 ] == '^' ) cout << stos[ --ws ] << " "; stos[ ws++ ] = el[ 0 ]; break; case '(': stos[ ws++ ] = '('; break; case ')': while( stos[ ws - 1 ] != '(' ) cout << stos[ --ws ] << " "; ws--; break; case '=': while( ws ) cout << stos[ --ws ] << " "; cout << " =\n\n"; break; } } while( el[ 0 ] != '=' ); return 0; }
|
|
pekfos |
» 2018-05-12 16:58:02 |
|
lewozmywak Temat założony przez niniejszego użytkownika |
» 2018-05-12 22:10:31 Ale to jest ten sam program główny... W każdym razie jeśli zadeklaruje ten łańcuh w pętli też nie działa. Nie wiem gdzie mam braki ale na moje oko to powinno działać, w końcu to ten sam program główny. Jeśli mógłbyś podpowiedzieć gdzie miałbym w takim razie zadeklarować ten łańcuch? |
|
jankowalski25 |
» 2018-05-12 22:17:38 A dlaczego zawsze sprawdzasz pierwszy znak? Przez cały czas korzystasz z el[ 0 ] , a el[ 1 ] , el[ 2 ] i cała reszta jest nietknięta. |
|
pekfos |
» 2018-05-12 23:06:53 cin >> el; std::cout << "Wczytano: \"" << el << "\"\n"; |
|
lewozmywak Temat założony przez niniejszego użytkownika |
» 2018-05-13 00:12:34 Troche mam problem z zrozumieniem tego kodu, jak napisałem na początku kod jest wzięty strony którą podałem. Nie rozumiem, dane są kopiowane dalej z tego ciągu, a ciągle wisi na pozycji 0... Kod działa i poprawnie zamienia notacje infiksową na ONP.
@pekfos nie mówi to za wiele :/ |
|
pekfos |
» 2018-05-13 00:24:32 @pekfos nie mówi to za wiele :/ |
Litości.. Dopisz tego couta do działającej wersji, to zrozumiesz czemu twoja nie ma prawa działać. |
|
YooSy |
» 2018-05-13 00:31:32 Litości.. Dopisz tego couta do działającej wersji, to zrozumiesz czemu twoja nie ma prawa działać. |
Żeby to zrobić trzeba przeanalizować kod, który się wstawiło. Poradnik dla początkującego. |
|
« 1 » 2 3 |