Last active
October 24, 2015 07:00
-
-
Save Hajto/096da4559745d4420111 to your computer and use it in GitHub Desktop.
Conversion between numeric systems
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Zrodla : | |
http://www.cplusplus.com/reference/stack/stack/push/ | |
http://www.cplusplus.com/reference/string/string/ | |
Opublikowano na pastebin.com | |
Dlaczego unsigned ? - bo nie niesie za soba, bo wymaga bardzo malo pamieci | |
Dlaczego stack ? - bo chcialem sprawdzic jak to dziala | |
*/ | |
#include<iostream> | |
#include<stack> | |
#include<cstdlib> | |
#include<string> | |
using namespace std; | |
char znaki[]="0123456789ABCDEFGAHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+|"; //tablica znakow wykorzystywanych do odtworzenia | |
inline unsigned char check(){ | |
unsigned short baza; | |
cin>>baza; | |
while(baza>50||baza<2){ | |
cout<<"Podstawa musi zawierać się w przedziale <2;50>. Podaj inną: "; | |
cin>>baza; | |
} | |
return baza; | |
} | |
int main(){ | |
int decimal=0; // decimal bedzie zawieraz dziesiatna wartosc | |
cout<<"\t\tPodaj calkowita liczbe wejsciowa: "; | |
string input; | |
cin>>input; | |
cout<<"\tPodaj podstawe systemu liczbowego liczby wejsciowej: "; | |
unsigned char stara_baza=check(); | |
cout<<"\tPodaj podstawe systemu liczbowego liczby wyjsciowej: "; | |
unsigned char nowa_baza=check(); | |
cout<<"\t\t\t\tWynik: "; | |
if(stara_baza==nowa_baza)cout<<input; //skrot jezeli nie nastepuje zmiana systemu to wypisz wynik | |
else{ | |
for(int i=0;i<input.length() ;++i){ // input.length sprawdzadlugosc ciagu | |
unsigned char znak=tolower(input[i]); //zmienia wszystko na male znaki | |
decimal=decimal*stara_baza+znak+((znak>='0'&&znak<='9')?-'0':-'a'+10); | |
} | |
if(nowa_baza==10)cout<<decimal; // taki skrot, jezeli nowa baza to odrazu wypisuje zmienna decimal | |
else if(decimal==0) cout<<'0'; | |
else{ | |
stack<char> output; //definicja stosu wyjsciowego | |
do{ | |
output.push(znaki[decimal%nowa_baza]); // modulo, ktorego wynik dodaje element na szczyt stosu | |
decimal/=nowa_baza; //dzielimy | |
}while(decimal!=0); | |
while(!output.empty()){ // przyjmuje wartosc kiedy stos jest pusty | |
cout<<output.top(); // Zwraca element na szczycie sostu | |
output.pop(); // Usuwa element z gory stosu | |
} | |
} | |
} | |
cout<<"\n"; | |
system ("pause"); | |
return 0; | |
} | |
/* Zbedny kod z lekcji | |
void zamien(char &a, char &b){ | |
char tmp=a; | |
a=b; | |
b=tmp; | |
} | |
void odwroc(char wyniki[]){ | |
int i=0, j=counter-1; | |
for(int k=1;k<=counter/2;k++){ | |
zamien(wyniki[i],wyniki[j]); | |
i++; | |
j--; | |
} | |
} | |
void wypisz(char wyniki[]){ | |
for(int i=0;i<counter;i++){ | |
cout<<wyniki[i]; | |
} | |
} | |
*/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<iostream> | |
#include<cmath> | |
#include<cstdlib> | |
using namespace std; | |
void zamien(char &a, char &b); | |
void odwroc(char wyniki[]); | |
void wypisz(char wyniki[]); | |
char a,b; | |
int counter=0; | |
main(){ | |
int rt=4, nowa, stara,val=0,dyszka=0; | |
char znaki[]="0123456789ABCDEF"; | |
char znak; | |
cout<<"Ile znakow bedzie miala liczba do konwersji??"<<endl; | |
cin>>rt; | |
char *tablica=new char[rt]; | |
cout<<"Podaj ta liczbe \n"; | |
for(int i=0;i<rt;i++){ | |
cin>>tablica[i]; | |
} | |
cout<<"Podaj stara baze systemu liczbowego. Od 2 do 16 \n"; | |
cin>>stara; | |
cout<<"Podaj nowa baze systemu liczbowego. Od 2 do 16 \n"; | |
cin>>nowa; | |
int i = rt-1, wartosc; | |
for(int k = 0; k < rt; k++) | |
{ | |
znak = tablica[i]; | |
i--; | |
switch(znak){ | |
case 'F': | |
val=15; | |
break; | |
case 'E': | |
val=14; | |
break; | |
case 'D': | |
val=13; | |
break; | |
case 'C': | |
val=12; | |
break; | |
case 'B': | |
val=11; | |
break; | |
case 'A': | |
val=10; | |
break; | |
default: | |
val=(int)znak-48; | |
break; | |
} | |
cout<<val<<endl; | |
dyszka= dyszka+(pow(stara, k)*val); | |
} | |
while (dyszka>0) | |
{ | |
tablica[counter]=dyszka%nowa; | |
counter++; | |
dyszka/=nowa; //po modulo trzeba podzielic | |
} | |
char *wyniki=new char[counter]; | |
for(int i=0;counter>i;i++){ | |
wyniki[i]=znaki[*(tablica+i)]; | |
} | |
odwroc(wyniki); | |
wypisz(wyniki); | |
cout<<"\n"; | |
system("pause"); | |
} | |
void zamien(char &a, char &b){ | |
char tmp=a; | |
a=b; | |
b=tmp; | |
} | |
void odwroc(char wyniki[]){ | |
int i=0, j=counter-1; | |
for(int k=1;k<=counter/2;k++){ | |
zamien(wyniki[i],wyniki[j]); | |
i++; | |
j--; | |
} | |
} | |
void wypisz(char wyniki[]){ | |
for(int i=0;i<counter;i++){ | |
cout<<wyniki[i]; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment