TheYGD Temat założony przez niniejszego użytkownika |
Błędy w obliczeniach » 2018-05-06 18:49:41 Witam. Chciałem zrobić pewien program zmieniający liczby z różnych systemów liczbowych na inne. Pomysł był taki, by najpierw te liczby były zamieniane na system dziesiętny, a następnie na docelowy. To tak w małym uproszczeniu. No więc napisałem program, którego fragment wygląda w ten sposób: { int system1; int liczbacin; int system2; int liczbacout = { 0 }; int ktory_rzad = { 0 }; int reszta; cout << "Z jakiego systemu chcesz podac liczbe? Mozesz wybrac 2-10. "; cin >> system1; cout << "\nTeraz podaj liczbe z tego systemu. "; cin >> liczbacin; cout << "\nNa jaki system chcesz przekonwertowac liczbe? "; cin >> system2; do { if( liczbacin > 10 ) { reszta = { liczbacin % system1 }; liczbacout = { liczbacout + reszta * pow( system1, ktory_rzad ) }; liczbacin = {( liczbacin - reszta ) / 10 }; ktory_rzad++; } } while( liczbacin > 10 ); liczbacout = { liczbacout + liczbacin * pow( system1, ktory_rzad ) }; cout << liczbacout; }
Najpierw użytkownik wprowadza system1, potem liczbę z tego system, a następnie system, na który chce zamienić liczbę. Następnie liczba przeliczana jest na liczbę dziesiętną. W teorii (wg mnie) wszystko powinno działać, jednak wpisując: system1 = 10 liczbacin = 123456 system2 = dowolny (jeszcze nie ma zastosowania) , to ostatnia linijka programu wypisująca liczbę, zamiast 123456, wypisuje 123454. Niestety po kilkukrotnej analizie programu, nie widzę żadnego błędu. Byłbym bardzo wdzięczny, jeśli ktoś z was byłby w stanie mi pomóc. Pozdrawiam. |
|
pekfos |
» 2018-05-06 19:48:25 Wczytana liczba jest w systemie dziesiętnym, ta konwersja nie ma sensu. |
|
TheYGD Temat założony przez niniejszego użytkownika |
. » 2018-05-06 20:18:37 Zdaję sobie z tego sprawę, lecz chciałem po prostu przetestować czy program działa, tymczasem wynik, który otrzymałem nie był równy wprowadzonej liczbie. Może i zamiana liczby z systemu dziesiętnego ponownie na dziesiętny nie ma sensu, jednakże program powinien wykonywać ją poprawnie. Dlatego poprosiłem o pomoc, by dowiedzieć się co źle zrobiłem. |
|
pekfos |
» 2018-05-06 20:52:22 pow() nie nadaje się do takiego zastosowania i nie jest tu też do niczego potrzebne. |
|
TheYGD Temat założony przez niniejszego użytkownika |
» 2018-05-06 21:12:35 Dzięki, zmieniłem pow(system1, ktory_rzad) na coś takiego i teraz działa poprawnie: { int system1; int liczbacin; int system2; int liczbacout = { 0 }; int ktory_rzad = { 0 }; int reszta; int potega = { 1 }; cout << "Z jakiego systemu chcesz podac liczbe? Mozesz wybrac 2-10. "; cin >> system1; cout << "\nTeraz podaj liczbe z tego systemu. "; cin >> liczbacin; cout << "\nNa jaki system chcesz przekonwertowac liczbe? "; cin >> system2; do { if( liczbacin > 10 ) { reszta = { liczbacin % system1 }; liczbacout = { liczbacout + reszta * potega }; liczbacin = {( liczbacin - reszta ) / 10 }; potega = potega * system1; } } while( liczbacin > 10 ); liczbacout = { liczbacout + liczbacin * potega }; cout << liczbacout; }
Mam tylko pytanie, dlaczego poprzednia wersja nie działała? |
|
mateczek |
» 2018-05-06 21:42:12 To ci działa?? |
|
TheYGD Temat założony przez niniejszego użytkownika |
» 2018-05-06 22:10:22 Tak, ale jest to tylko fragment, wcześniej jest jeszcze kilka niezwiązanych z tym funkcji, dlatego użyłem tu tylko tego. |
|
mateczek |
» 2018-05-07 07:58:53 Masz poprawiony kod bo trochę przekombinowałeś #include <iostream> #include<string> using namespace std; int main() { int system1; int liczbacin; int liczbacout = { 0 }; int reszta; int potega = { 1 }; cout << "Z jakiego systemu chcesz podac liczbe? Mozesz wybrac 2-10. "; cin >> system1; cout << "\nTeraz podaj liczbe z tego systemu. "; cin >> liczbacin; while( liczbacin ) { reszta = liczbacin % 10; liczbacout = liczbacout + reszta * potega; liczbacin = liczbacin / 10; potega = potega * system1; } cout << liczbacout; }
Zobacz takie rozwiązanie #include <iostream> #include<string> using namespace std;
int to_int( string & s, int system ) { int liczba = 0; for( char znak: s ) { int cyfra = znak - '0'; liczba = liczba * system + cyfra; } return liczba; }
string int_to_string( int liczba, int system ) { string s; while( liczba ) { int reszta = liczba % system; s.insert( s.begin(), reszta + '0' ); liczba /= system; } return s; } int main() { string s = "1000"; int liczba = to_int( s, 2 ); liczba = liczba * 3; cout << liczba << " : " << int_to_string( liczba, 8 ); }
|
|
« 1 » 2 |