kuuba2 Napisano 9 Styczeń 2011 Zgłoś Napisano 9 Styczeń 2011 Witam, jak w temacie, zwracam się z prośbą o pomoc przy tym programie. Próbuję zrobić program, trochę już mam, ma przeliczać liczby z dziesiętnego systemu na wszystkie inne, zrobiłem wszystkie podstawowe od dwójkowego do dziewiątkowego, szesnastkowy też zrobiłem bo wystarczyło użyć cout << hex << x; jednak mam problem z resztą systemów, np. trzynastkowy, przy zamianie liczby z dziesietnego na trzynastkowy, nie wiem jak to wszystko ująć, by do mojej reszty z dzielenia zostały przypisywane znaki odpowiednio do ich ilości w systemienp. 334\13 | reszty 9 25\13 | reszty 12 odpowiada w tym systemie litera C 1 | reszty 1 a więc 334 w dziesiętnym to 1C9 w trzynastkowym, tylko jak zapisać to w kodzie, aby program to sam wyliczył? Poniżej daje to co już mam: # include <iostream> int main () { using namespace std; cout <<"Zamiana liczb pomiedzy dziesietnym, a innymi systemami"<<endl<<endl; int tab[1]={0}; int ile=0; int x,y; cout <<"Podaj liczbe w systemie dziesietnym, ktora chcesz zamienic:"; cin>>x; cout <<"Na jaki system chcesz zamienic?\n 2 - dwojkowy\n 3 - trojkowy\n 5 - piatkowy\n 6 - szostkowy\n 7 - siodemkowy\n 8 - osemkowy\n 9 - dziewiatkowy\n 11 - jedenastkowy\n 13 - trzynastkowy\n 16 - szesnastkowy\n 20 - dwudziestkowy\n"; cin>>y; if (y==16) { cout <<"Wartosc w systemie szesnastkowym:\n"; cout << hex << x; cout <<" \n"; system("PAUSE"); return 0; } else if (y!=16); { while(x>0) { tab[ile]=x%y; x/=y; ile++; } for(int i=ile-1; i>=0; i--) cout<<tab[i]; cout<<endl; cin>>x; return 0; } } Dziękuję za wszelką pomoc i wskazówki.
Micz Napisano 10 Styczeń 2011 Zgłoś Napisano 10 Styczeń 2011 Generalnie konwersję z dziesiętnego systemu na jakikolwiek inny robimy w następujący sposób. Np. dla ósemkowego: liczba 79 w ósemkowym: bierzemy najwyższą możliwą potęgę podstawy (w tym wypadku 8^2 = 64) i dzielimy liczbę 79 przez 64 otrzymujemy 1 i resztę 15 przechodzimy o jedną potęgę w dół, czyli 8^1 = 8, dzielimy 15 / 8 wychodzi 1 reszta 7 przechodzimy o jedną potęgę w dół, czyli 8^0 = 1, dzielimy 7 / 1 wychodzi 7 bez reszty. Czyli wynik końcowy to 117. Jeśli reszta wyjdzie nam mniejsza niż następny dzielnik to w danej potędze jest 0 i reszta przechodzi na niższą potęgę jak np. przy liczbie 130 druga potęga: 130 / 64 = 2 reszta 2 // wynik[2] = 2; pierwsza potęga: 2 / 8 = 0 reszta 2 // wynik[1] = 0; zerowa potęga: 2/1 = 2 reszta 0 // wynik[0] = 2; wynik 202. Jak byś miał jakieś problemy w implementacji to pisz. Co do pytania jak to ująć, jak już masz te wyniki to musisz mieć tablicę z odpowiednimi znakami np. znaki[0]=0; znaki[1]=1; ... znaki[10]=A; ... znaki[15]=F; i a wynik wyświetlasz w pętli od najwyższej potęgi for(int potega = najwyzsza_potega; potega >=0;potega--) cout << znaki[wynik[potega]]; cout << endl;
kuuba2 Napisano 10 Styczeń 2011 Autor Zgłoś Napisano 10 Styczeń 2011 heheh niestety mam ogólnie w ogóle problemy z wrzuceniem/stworzeniem tego kodu tak żeby działało Generalnie konwersję z dziesiętnego systemu na jakikolwiek inny robimy w następujący sposób. Np. dla ósemkowego: liczba 79 w ósemkowym: bierzemy najwyższą możliwą potęgę podstawy (w tym wypadku 8^2 = 64) i dzielimy liczbę 79 przez 64 otrzymujemy 1 i resztę 15 przechodzimy o jedną potęgę w dół, czyli 8^1 = 8, dzielimy 15 / 8 wychodzi 1 reszta 7 przechodzimy o jedną potęgę w dół, czyli 8^0 = 1, dzielimy 7 / 1 wychodzi 7 bez reszty. Czyli wynik końcowy to 117. Jeśli reszta wyjdzie nam mniejsza niż następny dzielnik to w danej potędze jest 0 i reszta przechodzi na niższą potęgę jak np. przy liczbie 130 druga potęga: 130 / 64 = 2 reszta 2 // wynik[2] = 2; pierwsza potęga: 2 / 8 = 0 reszta 2 // wynik[1] = 0; zerowa potęga: 2/1 = 2 reszta 0 // wynik[0] = 2; wynik 202. Jak byś miał jakieś problemy w implementacji to pisz. Co do pytania jak to ująć, jak już masz te wyniki to musisz mieć tablicę z odpowiednimi znakami np. znaki[0]=0; znaki[1]=1; ... znaki[10]=A; ... znaki[15]=F; i a wynik wyświetlasz w pętli od najwyższej potęgi for(int potega = najwyzsza_potega; potega >=0;potega--) cout << znaki[wynik[potega]]; cout << endl;
Micz Napisano 10 Styczeń 2011 Zgłoś Napisano 10 Styczeń 2011 To tu masz kolejną podpowiedź Żeby znaleźć największą potęgę podstawy mniejszą od liczby którą konwertujesz możesz użyć tego kodu //... Wczytywanie danych int i = 1; do_potegi[0] = 1; do_potegi[1] = podstawa; if(zadana_liczba >= podstawa) { while ( do_potegi[i] < liczba_do_konwersji) { i++; do_potegi[i] = do_potegi[i-1] * podstawa; } najwyzsza_potega = i - 1; //... Dzielenie z resztą for(int potega = najwyzsza_potega; potega >=0;potega--) cout << znaki[wynik[potega]]; cout << endl; } else cout << znaki[zadana_liczba]; cout << endl; Brakuje tylko wczytywania danych i samego dzielenia z resztą i zapisania wyników w tablicy.
Recommended Posts