C++ Bc. 15 cpp: Porovnání verzí
Bez shrnutí editace |
Bez shrnutí editace |
||
Řádek 1: | Řádek 1: | ||
#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"; | |||
} | |||
[ [[C plus plus Bc. 15|Zpět]] ] | [ [[C plus plus Bc. 15|Zpět]] ] |
Verze z 28. 2. 2006, 22:54
#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"; }
[ Zpět ]