Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Konwersja na systemy liczbowe.

Ostatnio zmodyfikowano 2015-04-21 22:28
Autor Wiadomość
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:

C/C++
#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 );
    }
   
   
   
   
}
P-131129
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:
C/C++
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.
P-131262
« 1 »
  Strona 1 z 1