C++ Bc. 15 cpp: Porovnání verzí
Bez shrnutí editace |
m +kategorie programovani, c++ |
||
| (Není zobrazeno 8 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 ]