JanRos Temat założony przez niniejszego użytkownika |
Kalkulator binarny-dziesiętny » 2016-11-04 13:32:30 Witam, piszę autorski kalkulator, jednak nie działa mi pewna funkcja nie mam pojęcia dlaczego. Otóż gdy zamieniam z dziesiętnego na binarny to ładnie wszystko wypisuje tą funckją: cin >> liczba; dlugosc = sqrt( liczba ) + 1; bool tablica[ dlugosc ]; while( liczba > 0 ) { reszta = liczba % 2; liczba = liczba / 2; tablica[ index++ ] = reszta; } cout << "To twoja liczba: "; for( index; index > 0; index-- ) { cout << tablica[ index - 1 ]; }
Na kształt tego zrobiłem tak aby nie trzeba było wpisywać od tyłu tej liczby też tabelą, ale coś nie działa. Podejrzewam, że jest coś nie tak w pętli for. case 2: { int cyfra = 0, liczba = 0, index = 0itam; cout << "Witaj w programie konwertujacym liczby z systemu binarnego na dziesietny" << endl; cout << "Podaj liczbe po każdej wpisanej cyfrze naciskajac enter (uzywaj tylko cyfr 0;1). Jesli chcesz zakonczyc wcisnij 2:" << endl; bool tablica[ 100 ]; while( cyfra <= 1 ) { cin >> cyfra; if( cyfra <= 1 ) tablica[ index++ ] = cyfra; } for( int kwadrat = - 1; index < 0; kwadrat++ ) { liczba = liczba + cyfra *( pow( 2, kwadrat ) ); cyfra = tablica[ index - 1 ]; index--; } cout << "Twoja liczba to:" << liczba << endl; }; break; default: cout << "Podales zly numer" << endl; break; }
Będę wdzięczny za pomoc :D. EDIT Dałem cały case, bo dziwnie wygladło. |
|
pekfos |
» 2016-11-04 13:45:24 Ten kod: for( int kwadrat = - 1; index < 0; kwadrat++ ) { liczba = liczba + cyfra *( pow( 2, kwadrat ) ); cyfra = tablica[ index - 1 ]; index--; } |
Jest do niczego. |
|
mateczek |
» 2016-11-04 14:42:58 Uwaga !!! program nie posiada żadnych zabezpieczeń przed podaniem nie liczby :P #include <iostream> using namespace std; string liczbaToString( int liczba, int base ) { string temp; int cyfra; while( liczba ) { cyfra = liczba % base; liczba /= base; temp.insert( temp.begin(), cyfra + '0' ); } return temp; } int stringToLiczba( string liczba, int base ) { int wynik = 0; for( int i = 0; i < liczba.size(); i++ ) { wynik = wynik * base +( liczba[ i ] - '0' ); } return wynik; }
string stringToSTring( string liczba, int baseSource, int baseDestination ) { return liczbaToString( stringToLiczba( liczba, baseSource ), baseDestination ); } int main() { string napis = "101"; cout << stringToLiczba( napis, 2 ) << endl; int liczba = 15; cout << liczbaToString( liczba, 2 ) << endl; napis = "1111"; cout << stringToSTring( napis, 2, 8 ) << endl; }
|
|
JanRos Temat założony przez niniejszego użytkownika |
» 2016-11-04 16:53:55 Tylko ja nie chciałem słuchać czy jest do niczego czy mieć całkiem co innego tylko się dowiedzieć dlaczego "for" nie działa. Gdy trzeba było podawać liczby od końca to działało ale tabelka mi nie działa. |
|
mateczek |
» 2016-11-04 17:11:10 jeśli chcesz sprawdzić swój algorytm użyj debuggera a zobaczysz co masz nie tak. Ogólnie mi jest ciężko po kodzie wywnioskować co chciałeś zrobić. tym bardziej po ki czort chcesz wpisywać od tyłu??. Weźmy dla przykładu system dziesiętny. i cyfry '3','4','5' trzy iteracje i masz liczbę #1) 0*10+3=3; #2) 3*10+4=34; #3) 34*10+5=345; nie ma potrzeby żadnego wpisywania od tyłu !!!! algorytm dla systemu dwójkowego jest: liczba=liczba*2+cyfra; A Zamianę z binarnego na liczbę Ci zrobiłem. Prawidłowa pętla for for( int i = 0; i < liczba.size(); i++ ) { wynik = wynik * base +( liczba[ i ] - '0' ); }
int liczba = 0; for( int i = 0; i < index, i++ ) { liczba = liczba * 2 + tablica[ i ] ); }
Jeśli chcesz na tablicy 0-1 to zobacz taki kod: (również nie ma potrzeby wpisywania od tyłu) #include <iostream> using namespace std;
int main() { int tab[ 4 ] = { 1, 0, 1, 1 }; int liczba = 0; for( int element: tab ) { liczba = liczba << 1 | element; } cout << liczba << endl; }
|
|
JanRos Temat założony przez niniejszego użytkownika |
» 2016-11-09 17:11:37 Dziękuję za pomoc ostatecznie zrobiłem tak: int liczba = 0, cyfra = 0, index = 0, dlugosc = 0; bool tablica[ 100 ]; while( cyfra <= 1 ) { cin >> cyfra; if( cyfra <= 1 ) tablica[ index++ ] = cyfra; dlugosc++; } for( int i = 0; i < dlugosc; i++ ) { liczba = liczba + tablica[ index - 1 ] * pow( 2, i ); index--; }
cout << "Wynik to:" << liczba << endl;
I wszystko ładnie działa :D. |
|
« 1 » |