Witam!
Mam taki oto kod, który oblicza podaną przez nas liczbę dziesiętną na liczbę binarną.
#include
using namespace std;
void dwojkowo(int licz);
int main()
{
int liczba;
cout << "\n\nPodaj liczbe na zamiane dwojkowa: ";
cin >> liczba;
cout << "\t Oto liczba w zapisie binarnym: ";
dwojkowo(liczba);
cout << "\n\n";
cout << "\n\n\n\n\n\n---------------------------------------------------------------\n";
system("pause");
}
void dwojkowo(int licz)
{
int reszt = licz % 2; // <----- !
if(licz > 1)
{
dwojkowo(licz / 2);
}
static int i = 4;
if(i)
{
cout << reszt;
i--;
}
else
{
cout << " ";
i = 4;
}
}
[/code]
Moim zadaniem była taka modyfikacja, aby bity były grupowane po 4.
Pierwsze dotyczy tego, że: na moment przed kompilacją myślałem, że program nie zadziała. Jednak tak się nie stało, i nie rozumiem dlaczego. Przecież w tym miejscu co zaznaczyłem wykrzyknikiem w komentarzu jest obliczana reszta. Jeżeli przykładowo liczba na zamianę będzie wynosiła [b]14[/b] to zostanie tam wpisane:
[b]0111[/b]
Potem wypisze się na odwrót związku z tym, że jest to funkcja rekurencyjna:
[b]1110[/b]
To rozumiem. Ale tutaj:
[code]static int i = 4; if(i) { cout << reszt; i–; }
W pierwszym “wyskoku” powinno przecież wyświetlić cztery aż 1 i potem przejść dopiero do kolejnego “wyskoku”…
Tzn. za pierwszym “wyskokiem” powinno być takie coś:
przy if jest 4, więc wyświetla 1, potem jest dekrementacja,
przy if jest 3, więc wyświetla 1, potem jest dekrementacja,
przy if jest 2, więc wyświetla 1, potem jest dekrementacja,
przy if jest 1, więc wyświetla 1, potem jest dekrementacja,
przy if jest 0, więc powinno przejść do else.
Tymczasem to się zachowuje, tak, że przebiega warunek tylko 1 raz. Niezależnie od tego, że nawet wciąż jest tam true…