Skocz do zawartości

ForumPC.pl używa plików cookies, by ułatwić korzystanie z serwisu internetowego. Więcej informacji na ten temat znajdziesz w polityce prywatności.    Akceptuję używanie plików cookies



Zdjęcie

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


  • Zaloguj się, aby dodać odpowiedź
5 odpowiedzi w tym temacie

#1 OFFLINE   kuuba2

kuuba2
  • Użytkownik
  • 11 postów
0
Neutralny
  • Numer GG:

Napisano 09 styczeń 2011 - 15:35

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


# 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.
  • 0

www.timikomp.pl - usługi informatyczne oświęcim, serwis i naprawa komputerów stacjonarnych, laptopów, nawigacji gps, projektowanie i pozycjonowanie stron internetowych





#2 OFFLINE   wojtex5

wojtex5
  • Użytkownik
  • 207 postów
26
Neutralny
  • Numer GG:

Napisano 10 styczeń 2011 - 17:44

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:
char znaki[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

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)
#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ść <img src='http://www.forumpc.pl/public/style_emoticons/<#EMO_DIR#>/tongue.gif' class='bbc_emoticon' alt=':P' />
               wyjscie+=str_tmp[i];
        return wyjscie; //i zwracamy gotową liczbę zapisaną jako ciąg znaków
}



  • 0

#3 OFFLINE   kuuba2

kuuba2
  • Autor tematu
  • Użytkownik
  • 11 postów
0
Neutralny
  • Numer GG:

Napisano 10 styczeń 2011 - 17:57

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

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:

char znaki[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

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)
#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ść <img src='http://www.forumpc.pl/public/style_emoticons/<#EMO_DIR#>/tongue.gif' class='bbc_emoticon' alt=':P' />
               wyjscie+=str_tmp[i];
        return wyjscie; //i zwracamy gotową liczbę zapisaną jako ciąg znaków
}


  • 0

www.timikomp.pl - usługi informatyczne oświęcim, serwis i naprawa komputerów stacjonarnych, laptopów, nawigacji gps, projektowanie i pozycjonowanie stron internetowych


#4 OFFLINE   wojtex5

wojtex5
  • Użytkownik
  • 207 postów
26
Neutralny
  • Numer GG:

Napisano 10 styczeń 2011 - 21:08

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:
#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ść <img src='http://www.forumpc.pl/public/style_emoticons/<#EMO_DIR#>/tongue.gif' class='bbc_emoticon' alt=':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")<img src='http://www.forumpc.pl/public/style_emoticons/<#EMO_DIR#>/wink.gif' class='bbc_emoticon' alt=';)' />
{ 
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");
}
}



  • 0

#5 OFFLINE   kuuba2

kuuba2
  • Autor tematu
  • Użytkownik
  • 11 postów
0
Neutralny
  • Numer GG:

Napisano 10 styczeń 2011 - 21:28

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

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


bo tu tego nie widze :P


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:

#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ść <img src='http://www.forumpc.pl/public/style_emoticons/<#EMO_DIR#>/tongue.gif' class='bbc_emoticon' alt=':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")<img src='http://www.forumpc.pl/public/style_emoticons/<#EMO_DIR#>/wink.gif' class='bbc_emoticon' alt=';)' />
{ 
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");
}
}


  • 0

www.timikomp.pl - usługi informatyczne oświęcim, serwis i naprawa komputerów stacjonarnych, laptopów, nawigacji gps, projektowanie i pozycjonowanie stron internetowych


#6 OFFLINE   wojtex5

wojtex5
  • Użytkownik
  • 207 postów
26
Neutralny
  • Numer GG:

Napisano 10 styczeń 2011 - 21:57

jest jest....

spójrz na funkcję: std::string zamien(int liczba,int system)

po deklaracji tablicy znaków jest taki fragment:
while(liczba)  //czyli dopóki liczba jest > 0
       {
         str_tmp+=tablica[liczba%system];
         liczba/=system;
       }


korzystałem z tego co było, tylko że poskładałem wszystko w jedną całość. użyłem mojej funkcji std::string zamien(int liczba,int system) i po prostu ją wykorzystałem w programie :D


  • 0




Użytkownicy przeglądający ten temat: 1

0 użytkowników, 1 gości, 0 anonimowych

Przekaż 1% podatku na rzecz OPP | tanie domeny w PROGRESO

Zawartość każdej wiadomości wyraża poglądy i opinie jego autora, a nie administratorów czy moderatorów (poza wiadomościami pisanymi przez nich)