C++ Bc. 15 cpp

Z GeoWikiCZ
#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 ]