Zamiana na inny system liczbowy.

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]);
1

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

0

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

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.

1

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.

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