x-kom hosting

[C++] Zamiana systemu dziesiętnego na wszystkie inne

kuuba2
utworzono
utworzono

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
komentarz

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 :P) (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 :D)

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ść :P
wyjscie+=str_tmp[i];
return wyjscie; //i zwracamy gotową liczbę zapisaną jako ciąg znaków
} [/code]


kuuba2
komentarz
komentarz

Wiem, że może to śmiesznie zabrzmi, ale mam problem z wrzuceniem tego kodu do swojego programu :o

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 :P) (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 :D)

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ść :P
wyjscie+=str_tmp[i];
return wyjscie; //i zwracamy gotową liczbę zapisaną jako ciąg znaków
} [/code]
[/quote]

wojtex5
komentarz
komentarz

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ść :P
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
komentarz

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?:>:P

[code]while(liczba) //czyli dopóki liczba jest > 0[/code]


bo tu tego nie widze :P


[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ść :P
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
komentarz

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 :D

Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!

Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.