/* * floating_point.cpp * * Program kodujacy liczby zmiennoprzecinkowe do systemu binarnego (16-bit). * Kompilacja @ Linux: g++ -o floating_point.o floating_point.cpp * * Copyleft (c) 2005 Damian Pasternok . All rights reversed. */ #include using std::cout; using std::cin; using std::endl; using std::string; string liczba; bool wynik[16]; int mantysa = 0; int cecha = 0; int i, l; /* zmienne tymczasowe (dla koncowego efektu) ;) */ string tmpl; int tmpm, tmpmr, tmpc; int main() { cout << "Podaj dowolna liczbe: "; cin >> liczba; tmpl = liczba; /* sprawdzanie znaku mantysy */ if(liczba[0] == '-') { wynik[0] = 1; i = 1; } else { wynik[0] = 0; i = 0; } /* selekcja mantysy */ while(liczba[i]) { if(liczba[i] == '0' && !mantysa) // jezeli sprawdzana cyfra i mantysa sa zerami, { i += 2; // ustaw licznik na pierwsze miejsce po przecinku break; // i wyjdz z petli (nastepny znak musi byc przecinkiem) } else if(liczba[i] == ',' || liczba[i] == '.') // jesli sprawdzany znak jest przecinkiem, { i++; // ustaw licznik na pierwsze miejsce po przecinku; break; // i wyjdz z petli } else // w przeciwnym wypadku { mantysa *= 10; // uzupelnij mantyse mantysa += liczba[i] - 48; // cecha++; // ceche i++; // i licznik } } /* selekcja pozostalej czesci mantysy i cechy */ while(liczba[i]) { if(liczba[i] == '0' && !mantysa) // jezeli sprawdzana cyfra i mantysa sa zerami { i++; // uzupelnij licznik cecha--; // ustaw ceche ujemna } else { mantysa *= 10; mantysa += liczba[i] - 48; i++; } } tmpm = mantysa; tmpc = cecha; /* sprawdzanie znaku cechy */ if(cecha < 0) wynik[9] = 1; else wynik[9] = 0; /* redukcja mantysy */ while(mantysa > 255) { mantysa /= 10; } tmpmr = mantysa; /* konwersja do systemu binarnego - mantysa */ for(l = 8; l >= 1; l--) { if(mantysa % 2) wynik[l] = 1; else wynik[l] = 0; mantysa /= 2; } /* konwersja do systemu binarnego - cecha */ for(l = 15; l >= 10; l--) { if(cecha % 2) wynik[l] = 1; else wynik[l] = 0; cecha /=2; } /* wypisywanie wyniku */ cout << endl << "Konwertuje liczbe " << tmpl << "*10^0..." << endl << endl << "Po przesunieciu przecinka: "; if(wynik[0]) cout << "-0,"; else cout << "0,"; cout << tmpm << "*10^" << tmpc << endl << "Po zredukowaniu mantysy: "; if(wynik[0]) cout << "-0,"; else cout << "0,"; cout << tmpmr << "*10^" << tmpc << endl << endl << "Ostateczny wynik:"; for(l = 0; l < 16; l++) { if(l == 0 || l == 9) cout << " " << wynik[l] << " "; else cout << wynik[l]; } cout << endl; return 0; }