kuuba2 utworzono 9 stycznia 2011 utworzono 9 stycznia 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ć [code]cout << hex << x;[/code] 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 systemie np. 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: [code] # 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; } } [/code] Dziękuję za wszelką pomoc i wskazówki.
wojtex5 komentarz 10 stycznia 2011 komentarz 10 stycznia 2011 chodzi o to że liczby jako LICZBY w programie nie da się przechowywać w innym systemie niż dziesiątkowy (wiadomo - wszystkie są zapisywane w systemie dwójkowym, ale komputer zapisuje je w systemie dziesiągkowym - i w postaci np. piątkowego nie da się jej przechowywać.) dlatego zapisz sobie liczbę jako ciąg znaków char. najpierw przygotuj tabelę z jakiej program będzie korzystał podczas konwersji systemów: [code]char znaki[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; [/code] używając takich znaków zapiszesz liczbę nawet w systemie trzydziestodwujkowym (nie wiem jak to sie pisze ) (bo tyle znaków masz do dyspozycji). przecież choćby w systemie szesnastkowym masz cyfry : 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F (i nie myl znaków ABC..F z literami bo to w systemie szesnastkowym są cyfry ) kiedyś robiłem podobne zadanie. napisałem funkcję przekształcającą liczbę z systemu dziesiątkowego na dowolny inny (do 32) [code]#include<string> //... std::string zamien(int liczba,int system) { std::string wyjscie; std::string str_tmp; char tablica[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; while(liczba) //czyli dopóki liczba jest > 0 { str_tmp+=tablica[liczba%system]; liczba/=system; } //otrzymaliśmy liczbę zapisaną w zmiennej str_tmp, ale jest ona zapisana od tyłu... for(int i=str_tmp.size()-1;i>=0;i--) //więc odwracamy jej kolejność wyjscie+=str_tmp[i]; return wyjscie; //i zwracamy gotową liczbę zapisaną jako ciąg znaków } [/code]
kuuba2 komentarz 10 stycznia 2011 Autor komentarz 10 stycznia 2011 Wiem, że może to śmiesznie zabrzmi, ale mam problem z wrzuceniem tego kodu do swojego programu Bo ja to jakoś wszystko bardziej kombinowałem jeżeli chodzi o kod na chłopski rozum jak widać, mój kod jest o wiele uboższy i prostszy ;p [quote name='wojtex5' timestamp='1294677964' post='1167286'] chodzi o to że liczby jako LICZBY w programie nie da się przechowywać w innym systemie niż dziesiątkowy (wiadomo - wszystkie są zapisywane w systemie dwójkowym, ale komputer zapisuje je w systemie dziesiągkowym - i w postaci np. piątkowego nie da się jej przechowywać.) dlatego zapisz sobie liczbę jako ciąg znaków char. najpierw przygotuj tabelę z jakiej program będzie korzystał podczas konwersji systemów: [code]char znaki[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; [/code] używając takich znaków zapiszesz liczbę nawet w systemie trzydziestodwujkowym (nie wiem jak to sie pisze ) (bo tyle znaków masz do dyspozycji). przecież choćby w systemie szesnastkowym masz cyfry : 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F (i nie myl znaków ABC..F z literami bo to w systemie szesnastkowym są cyfry ) kiedyś robiłem podobne zadanie. napisałem funkcję przekształcającą liczbę z systemu dziesiątkowego na dowolny inny (do 32) [code]#include<string> //... std::string zamien(int liczba,int system) { std::string wyjscie; std::string str_tmp; char tablica[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; while(liczba) //czyli dopóki liczba jest > 0 { str_tmp+=tablica[liczba%system]; liczba/=system; } //otrzymaliśmy liczbę zapisaną w zmiennej str_tmp, ale jest ona zapisana od tyłu... for(int i=str_tmp.size()-1;i>=0;i--) //więc odwracamy jej kolejność wyjscie+=str_tmp[i]; return wyjscie; //i zwracamy gotową liczbę zapisaną jako ciąg znaków } [/code] [/quote]
wojtex5 komentarz 10 stycznia 2011 komentarz 10 stycznia 2011 ta funkcja jaką ci podałem konwertuje z dziesiątkowego na systemy liczbowe (od dwójkowego do trzydziestodwujkowego), więc nie będzie potrzebna druga część twojego kodu. przerobiłem twój program tak, aby korzystał z mojej funkcji i wygląda tak: [code]#include <iostream> #include <string> std::string zamien(int liczba,int system) { std::string wyjscie; std::string str_tmp; char tablica[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; while(liczba) //czyli dopóki liczba jest > 0 { str_tmp+=tablica[liczba%system]; liczba/=system; } //otrzymaliśmy liczbę zapisaną w zmiennej str_tmp, ale jest ona zapisana od tyłu... for(int i=str_tmp.size()-1;i>=0;i--) //więc odwracamy jej kolejność wyjscie+=str_tmp[i]; return wyjscie; //i zwracamy gotową liczbę zapisaną jako ciąg znaków } int main () { using namespace std; while(1) //cały czas pyta i po każdej zamianie czyści ekran (funkcja system("cls") { cout <<"Zamiana liczb pomiedzy dziesietnym, a innymi systemami"<<endl<<endl; int x,y; cout <<"Podaj liczbe w systemie dziesietnym, ktora chcesz zamienic:"; cin>>x; cout <<"Na jaki system chcesz zamienic? (wpisz liczbe)"; cin>>y; cout<<"wartosc "<<x<<"(10) w systemie "<<y<<"-owym wynosi: "<<zamien(x,y)<<"\n"; system("pause"); system("cls"); } } [/code]
kuuba2 komentarz 10 stycznia 2011 Autor komentarz 10 stycznia 2011 Dziękuję Ci bardzo! Czyli najpierw deklaruje tablice taka jaka jest podana w kodzie, ale gdzie mam ten warunek dopóki liczba jest wieksza od zera?:> [code]while(liczba) //czyli dopóki liczba jest > 0[/code] bo tu tego nie widze [quote name='wojtex5' timestamp='1294690256' post='1167586'] ta funkcja jaką ci podałem konwertuje z dziesiątkowego na systemy liczbowe (od dwójkowego do trzydziestodwujkowego), więc nie będzie potrzebna druga część twojego kodu. przerobiłem twój program tak, aby korzystał z mojej funkcji i wygląda tak: [code]#include <iostream> #include <string> std::string zamien(int liczba,int system) { std::string wyjscie; std::string str_tmp; char tablica[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; while(liczba) //czyli dopóki liczba jest > 0 { str_tmp+=tablica[liczba%system]; liczba/=system; } //otrzymaliśmy liczbę zapisaną w zmiennej str_tmp, ale jest ona zapisana od tyłu... for(int i=str_tmp.size()-1;i>=0;i--) //więc odwracamy jej kolejność wyjscie+=str_tmp[i]; return wyjscie; //i zwracamy gotową liczbę zapisaną jako ciąg znaków } int main () { using namespace std; while(1) //cały czas pyta i po każdej zamianie czyści ekran (funkcja system("cls") { cout <<"Zamiana liczb pomiedzy dziesietnym, a innymi systemami"<<endl<<endl; int x,y; cout <<"Podaj liczbe w systemie dziesietnym, ktora chcesz zamienic:"; cin>>x; cout <<"Na jaki system chcesz zamienic? (wpisz liczbe)"; cin>>y; cout<<"wartosc "<<x<<"(10) w systemie "<<y<<"-owym wynosi: "<<zamien(x,y)<<"\n"; system("pause"); system("cls"); } } [/code] [/quote]
wojtex5 komentarz 10 stycznia 2011 komentarz 10 stycznia 2011 jest jest.... spójrz na funkcję: [i]std::string zamien(int liczba,int system)[/i] po deklaracji tablicy znaków jest taki fragment: [code]while(liczba) //czyli dopóki liczba jest > 0 { str_tmp+=tablica[liczba%system]; liczba/=system; }[/code] korzystałem z tego co było, tylko że poskładałem wszystko w jedną całość. użyłem mojej funkcji [i]std::string zamien(int liczba,int system)[/i] i po prostu ją wykorzystałem w programie
Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!
Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.