Zamiana na inny system liczbowy.

2011-11-18 13:01
0

Problem polega na tym, że program podaje nieprawidłowe wyniki. Na przykład liczba 10 w systemie dwójkowym to: 1010, a mój program wyświetla 0101. Jak to naprawić?


    int lNaturalna, podstawa, i;
    int tabReszty[15];
    int iloscReszt=1;

    for(i=0;i<15;i++)
        tabReszty[i]=0;

    while(lNaturalna/podstawa!=0)
    {
       lNaturalna=lNaturalna/podstawa;
       tabReszty[iloscReszt]=lNaturalna%podstawa;
       iloscReszt++;
    }
    for(i=iloscReszt;i>0;i--)
        printf("%d",tabReszty[i]);
Zwróć uwagę, że dla 11 też wyświetla 0101. Dopiero dla 12 i 13 jest 0110. - Zjarek 2011-11-18 13:21

Pozostało 580 znaków

2011-11-18 13:44
1

Dlatego, że piszesz reszty "od lewej do prawej" a powinieneś pisać je odwrotnie, albo odwrócić tablicę reszt ;]

Pozostało 580 znaków

2011-11-18 14:07
0

Inicjalizujesz IloscReszty=1. Oznacza to że przy 30 000 może zmienna osiągnąć wartość 15 i wtedy wyjdziesz poza zakres tablicy.

edytowany 2x, ostatnio: Sarrus, 2011-11-18 14:23

Pozostało 580 znaków

2011-11-18 14:14
1

Tak to jest, gdy ktoś zaczyna pomagać, a nie zastanowił się nad tym dobrze. Głównym problemem w tym kodzie jest to, że na początku dzielisz przez dwa, a potem dajesz modulo. Tracisz przez to najmniej znaczący bit.

Pierwsze wypisywanie było prawidłowe, tylko pamiętaj, że tablicę w C numeruje się od 0. Możesz się bawić od 1, ale może to wprowadzić innych programistów w konfuzje i być powodem błędów. Radziłbym Ci się przyzwyczaić do numerowania od zera.

Tak źle spojarzałem faktycznie pierwsze wypisywanie było dobrze. Sory za zmyłę. Przyznaję się że nie mam za bardzo czasu analizować dogłębnie, bo na forum właściwie co chwilę zaglądam (w pracy też trzeba pracować ;)), ale staram się. - Sarrus 2011-11-18 14:19

Pozostało 580 znaków

2011-11-18 14:43

Tab[ilereszt] jest pierwszym elementem po wypełnionym. W C i C++ jest to częsty idiom, tablica[rozmiar] jest właśnie takim elementem, podobnie iteratory. W dół powinieneś iść od ilereszt-1.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0