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

Konwersja z binarnego na dziesiętny.

Ostatnio zmodyfikowano 2011-11-30 21:56
Autor Wiadomość
Krump
Temat założony przez niniejszego użytkownika
Konwersja z binarnego na dziesiętny.
» 2011-11-28 19:35:57
Witam, mam problem z konwersja liczby z systemu binarnego na dziesiętny, nie ma errorów, ani warningów ale źle liczy, co jest źle w tym algorytmie, bo idea jest dobra ;/ Zależy mi na czasie :)

    string bin;
    int dec, dlugosc, i;
           bin = 11011; //dziesietnym 27
           dec = 0;
           dlugosc = bin.length() - 1;
           i = 0;
           do
           {
                       dec += bin[dlugosc] * pow( 2, i );
                       i++;
                       dlugosc--;
           }
           while( dlugosc > 0 );
P-44885
akwes
» 2011-11-28 19:48:49
Źle liczy czyli co? Może liczba jest odwrócona (nie analizowałem jeszcze Twojego kodu, no ale jak mówisz że chodzi o czas :)
P-44887
Krump
Temat założony przez niniejszego użytkownika
» 2011-11-28 19:52:02
dla tego 11011 powinno być 27 w dziesiętnym a podaje 3 xD a dla np 11 gdzie w dziesiętnym jest 3 podaje 2 xD
P-44889
akwes
» 2011-11-28 19:54:03
C/C++
dec += bin[ dlugosc ] * pow( 2, i );

bin[dlugosc] != 0 oraz != 1 :P

A to dlatego że bin[dlugosc] zwraca char. Kompilator niejawnie rzutuje char na int. A LITERKA "1" w ASCII ma inny kod niż "1", tak samo z zerem. Zobacz jaka jest różnica w kodach ASCII :P

// Wygląda na to że różnica to 48

czyli np.

C/C++
char litera = 48;
cout << litera;

0

A w momencie char == int masz coś takiego
C/C++
char litera = "a";
cout << litera; // pokaze "a"
cout <<( int ) litera; // pokaze 97
P-44890
Krump
Temat założony przez niniejszego użytkownika
» 2011-11-28 19:56:42
No dobra ale jak to przerobić żeby było dobrze, myślałem że usunąłem ten błąd przy zliczaniu liczby znaków i odjęciu jedynki bo zaczęciu od i = 0;
P-44891
akwes
» 2011-11-28 19:59:17
Odjąć różnicę :P ? jednak nie xD Jednak też, ale nie tylko.

Widzę że to jest kilka błędów

C/C++
string bin;
bin = 11011;

chodziło Ci o
C/C++
string bin;
bin = "11011";
?
P-44893
Krump
Temat założony przez niniejszego użytkownika
» 2011-11-28 20:05:55
apropo ascii jak robiłem na polindromy to nie było problemu z tym, błąd musi być w algorytmie


po poprawie tego "" wyliczył 731 o 704 za dużo xD
P-44894
akwes
» 2011-11-28 20:08:00
C/C++
string bin;
int dec, dlugosc, i;
bin = "11011"; //dziesietnym 27
dec = 0;
dlugosc = bin.length();
i = 0;
do
{
    cout << bin[ dlugosc - 1 ];
    dec +=( bin[ dlugosc - 1 ] - 48 ) * pow( 2, i );
    i++;
    dlugosc--;
}
while( dlugosc > 0 );

cout << '\n' << dec;

Policzyło mi 27. Może zbieg okoliczności :P Chociaż na innych też działa.

Ale w palindromach nie liczyłeś nic na char, tylko zmieniałeś miejscami. A tutaj mnożysz wartość char. A trzeba zastosować konwersję CharToInt(), ktora zrobi to z sensem, tutaj wystarczy dać "-48", taka konwersja na szybko :P


Warto sobie często wyświetlać zmienne. Gdybyś wyświetlał
cout << bin[ dlugosc - 1 ];
 zauważyłbyś że wychodzą serduszka inne krzaki, czyli że był źle inicjalizowany string. A potem to myślę że byś trafił że coś mnoży za duże liczby :P

P-44895
« 1 » 2 3
  Strona 1 z 3 Następna strona