kuuba2 Napisano 9 Styczeń 2011 Zgłoś Share 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. Odnośnik do komentarza Udostępnij na stronach More sharing options...
Micz Napisano 10 Styczeń 2011 Zgłoś Share 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; Odnośnik do komentarza Udostępnij na stronach More sharing options...
kuuba2 Napisano 10 Styczeń 2011 Autor Zgłoś Share 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; Odnośnik do komentarza Udostępnij na stronach More sharing options...
Micz Napisano 10 Styczeń 2011 Zgłoś Share 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. Odnośnik do komentarza Udostępnij na stronach More sharing options...
Recommended Posts