Konwersja na systemy liczbowe.
Ostatnio zmodyfikowano 2015-04-21 22:28
Argris Temat założony przez niniejszego użytkownika |
Konwersja na systemy liczbowe. » 2015-04-19 13:46:59 Witam, mam problem z konwersją na systemy, a dokładniej z zamianą z innego systemu na decymalny. Niektóre liczby są konwertowane poprawnie np. 1111 w systemie decymalnym to 15. Jednak problem pojawia się przy np. liczbie 1010, która powinna wynosić 10, a według programu wynosi 5. Poniżej zamieszczam mój kod: #include <iostream>
using namespace std;
char d2s( int liczba ) { if( liczba >= 10 ) { return liczba - 10 + 'A'; } else return liczba + '0'; }
int char2int( int liczba ) { if( liczba >= '0' && liczba <= '9' ) { return liczba - '0'; } if( liczba >= 'A' && liczba <= 'Z' ) { return liczba + 10 - 'A'; } if( liczba >= 'a' && liczba <= 'z' ) { return liczba + 10 - 'a'; } }
string Konwersja( int liczba, int system ) { string reszta = " "; while( liczba > 0 ) { reszta = d2s( liczba % system ) + reszta; liczba /= system; } return reszta; }
int Konwersja_Odw( string liczba, int system ) { int wynik = 0; for( int i = liczba.length() - 1; i >= 0; i-- ) { wynik = wynik * system + char2int( liczba[ i ] ); } return wynik; }
int main() { int liczba, system, kod; string Liczba; char znak; cout << "\tMENU" << endl; cout << "----------------------------" << endl; cout << "Decimal----->inny system [1]" << endl; cout << "Decimal<-----inny system [2]" << endl; cout << "----------------------------" << endl; while( kod != 49 && kod != 50 ) { cout << "Wybierz opcje: "; cin >> znak; kod = znak; } if( kod == 49 ) { cout << "Podaj liczbe: "; cin >> liczba; cout << "Podaj system: "; cin >> system; cout << "Liczba " << liczba << " w systemie " << system << "= " << Konwersja( liczba, system ); } if( kod == 50 ) { cout << "Podaj liczbe: "; cin >> Liczba; cout << "Podaj system: "; cin >> system; cout << "Liczba " << Liczba << " zapisana w systemie decymalnym= " << Konwersja_Odw( Liczba, system ); } }
|
|
notabigthreat |
Nic pewnego, ale... » 2015-04-21 22:28:32 Po pierwsze: Sprawdź tę linijkę, ona budzi moje podejrzenia. Ty sam(a) wiesz, co chciał[e/a]ś, by się tam znalazło. Spróbuj uruchomić za pomocą debuggera. wynik = wynik * system + char2int( liczba[ i ] ); To już mniej ważne: while( kod != 49 && kod != 50 ) { cout << "Wybierz opcje: "; cin >> znak; kod = znak; }
Można tu po prostu porównać znak ze znakiem tak, jak liczbę z liczbą: znak == '1' znak == '2' Na koniec: Polecam poczytanie kursu. |
|
« 1 » |