C++ Bc. 15 cpp: Porovnání verzí
Bez shrnutí editace |
m +kategorie programovani, c++ |
||
(Není zobrazeno 6 mezilehlých verzí od 2 dalších uživatelů.) | |||
Řádek 1: | Řádek 1: | ||
[ [[C | #include <iostream> | ||
#include <string> | |||
#include <cctype> | |||
#include <algorithm> | |||
int prevod(std::string cislo, int zaklad) | |||
{ | |||
int soucet = 0, mocnina=1; | |||
for (int i=cislo.size()-1; i>=0; i--) | |||
{ | |||
const char znak = toupper(cislo[i]); | |||
int cislice = 0; | |||
// prevod znak ==> cislice lze efektivneji implementovat prevodni tabulkou | |||
switch (znak) | |||
{ | |||
case 'F': cislice++; | |||
case 'E': cislice++; | |||
case 'D': cislice++; | |||
case 'C': cislice++; | |||
case 'B': cislice++; | |||
case 'A': cislice++; | |||
case '9': cislice++; | |||
case '8': cislice++; | |||
case '7': cislice++; | |||
case '6': cislice++; | |||
case '5': cislice++; | |||
case '4': cislice++; | |||
case '3': cislice++; | |||
case '2': cislice++; | |||
case '1': cislice++; | |||
} | |||
soucet += cislice*mocnina; | |||
mocnina *= zaklad; | |||
} | |||
return soucet; | |||
} | |||
std::string prevod(int cislo, int zaklad) | |||
{ | |||
const std::string cislice = "0123456789ABCDEF"; | |||
std::string s; | |||
while (cislo) | |||
{ | |||
int r = cislo % zaklad; | |||
s.push_back(cislice[r]); | |||
cislo /= zaklad; | |||
} | |||
// standardni funkce 'reverse' muze byt nahrazena cyklem | |||
// for (int i=0, j=s.size()-1; i<j; i++, j--) | |||
// { | |||
// char t = s[i]; s[i] = s[j]; s[j] = t; | |||
// } | |||
reverse(s.begin(), s.end()); | |||
return s; | |||
} | |||
int main() | |||
{ | |||
using namespace std; | |||
int k, z, n; | |||
string s; | |||
cout << "prevod int ==> string : "; | |||
cout << prevod( "6B", 16) << " "; | |||
cout << prevod( "107", 10) << " "; | |||
cout << prevod( "153", 8) << " "; | |||
cout << prevod("1101011", 2) << "\n"; | |||
cout << "prevod string ==> int : "; | |||
cout << prevod(107, 16) << " "; | |||
cout << prevod(107, 10) << " "; | |||
cout << prevod(107, 8) << " "; | |||
cout << prevod(107, 2) << "\n"; | |||
} | |||
'''výstup''' | |||
prevod int ==> string : 107 107 107 107 | |||
prevod string ==> int : 6B 107 153 1101011 | |||
[ [[C++ Bc. 15|Zpět]] ] | |||
[[Kategorie:Programování]] | |||
[[Kategorie:C++]] |
Aktuální verze z 2. 9. 2006, 10:46
#include <iostream> #include <string> #include <cctype> #include <algorithm> int prevod(std::string cislo, int zaklad) { int soucet = 0, mocnina=1; for (int i=cislo.size()-1; i>=0; i--) { const char znak = toupper(cislo[i]); int cislice = 0; // prevod znak ==> cislice lze efektivneji implementovat prevodni tabulkou switch (znak) { case 'F': cislice++; case 'E': cislice++; case 'D': cislice++; case 'C': cislice++; case 'B': cislice++; case 'A': cislice++; case '9': cislice++; case '8': cislice++; case '7': cislice++; case '6': cislice++; case '5': cislice++; case '4': cislice++; case '3': cislice++; case '2': cislice++; case '1': cislice++; } soucet += cislice*mocnina; mocnina *= zaklad; } return soucet; } std::string prevod(int cislo, int zaklad) { const std::string cislice = "0123456789ABCDEF"; std::string s; while (cislo) { int r = cislo % zaklad; s.push_back(cislice[r]); cislo /= zaklad; } // standardni funkce 'reverse' muze byt nahrazena cyklem // for (int i=0, j=s.size()-1; i<j; i++, j--) // { // char t = s[i]; s[i] = s[j]; s[j] = t; // } reverse(s.begin(), s.end()); return s; } int main() { using namespace std; int k, z, n; string s; cout << "prevod int ==> string : "; cout << prevod( "6B", 16) << " "; cout << prevod( "107", 10) << " "; cout << prevod( "153", 8) << " "; cout << prevod("1101011", 2) << "\n"; cout << "prevod string ==> int : "; cout << prevod(107, 16) << " "; cout << prevod(107, 10) << " "; cout << prevod(107, 8) << " "; cout << prevod(107, 2) << "\n"; }
výstup
prevod int ==> string : 107 107 107 107 prevod string ==> int : 6B 107 153 1101011
[ Zpět ]