ďťż

Ładny brzuch

Generalnie liczbę całkowitą potrafię zamienić na system dwójkowy, korzystam z takiego kodu:
#include <iostream> using namespace std; void zamiana(int liczba) { int tablica[10], i=0; do { tablica[i]=liczba%2; liczba/=2; i++; } while(liczba!=0); i--; while(i>=0) { cout << tablica[i]; i--; } } int main() { int liczba; cin >> liczba; zamiana(liczba); system("pause"); return 0; }
Jak przerobić ten program, żeby obsługiwał liczby zmiennoprzecinkowe (w postaci np. 12.375)
Dodam, że wiem, że w ułamkach miejsca po przecinku należy nie dzielić, a mnożyć przez 2.



jest tylko problem w jakiej notacji chcesz zapisac ta liczbe

jezeli klasycznie ma wypisac na ekran 1110101010,0111101 to jest rzeczywiscie tak jak piszesz

inaczej jest w typowym zapisie liczb zmiennoprzecinkowych opierajacych sie na mantysie i eksponencie, co tez nie jest trudniejszym zadaniem

aby ulatwic sobie zadanie, najlepiej zrobic oddzielnie czesc calkowita i ulamkowa

czesc calkowita to wiadomo jak, natomiast czesc ulamkowa robi sie bardzo podobnie:

np. z liczba robisz tak 0.375

0.5 * 0 + 0.25 * 1 + 0.125 * 1 = 2^(-1) * 0 + 2^(-2) * 1 + 2^(-3) * 1 = 0.375 = 0.011 (2)

oczywiscie musisz to robic na floatach (albo lepiej na double), bo nie zawsze Ci wyjdzie taki "piekny" wynik (zobacz co sie dzieje dla 0.1)

nalezy pamietac, ze przy pewnych liczbach mozesz wyjsc poza zakres liczby zmeinnoprzecinkowej i albo nie bedziesz miec poprawnego wyniku albo program sie zapetli

dlatego jakis warunek stopu trzeba bedzie ustalic, bo nie zawsze musi wyjsc zero

OK, postaram się napisać sobie funkcję, potem ją wrzucę tutaj do przejrzenia. Dzięki :)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •