Tento příklad dokáže převést číslo z jakékoliv číselné soustavy do císlové číselné soustavy
Po startu aplikace vyžaduje:
Číslo pro konverzi
Zdrojovou číselnou soustavu
Cílovou číselnou soustavu
#include "stdafx.h"
#include
#include
#include
#include
#include
#include
#include
int Validate(char[], int, int);
void ConvToDec(char[], int, int, int);
void EvaluateWhole(long, int);
void EvaluateFract(double, int);
const int MAXSTRING = 30;
void main()
{
char old_string[MAXSTRING];
int original_base, new_base ;
cout << "\nEnter number for conversion"
<< " (max-30 characters): " ;
cin.getline(old_string, MAXSTRING, '\n') ;
cout << "\nOriginal base (2-binary): " ;
cin >> original_base ;
if (!Validate(old_string, original_base, strlen(old_string)))
cout << "\nNumber does not belong to specified base!" ;
else
{
cout << "\nEnter number for conversion: " ;
cin >> new_base ;
ConvToDec(old_string, original_base, new_base, strlen(old_string));
}
getchar();
}
int Validate(char str[], int base, int length)
{
int aski_val ;
aski_val = '0' + base ;
if (base>10)
aski_val += ('A' - '9') -1;
for (int i=0; i {
if (str[i] >= aski_val)
return 0;
}
return 1;
}
void ConvToDec(char str[], int base, int new_base, int length)
{
double dec_frac =0;
long dec_num =0;
int dec_digit =0;
for (int i=0; i {
dec_digit = str[i] - '0';
if (str[i]>='A')
dec_digit -= ('A' - '9') -1;
dec_num = dec_digit + dec_num*base;
}
EvaluateWhole(dec_num, new_base);
int index;
if (str[i] == '.')
{
for (index = --length ; index > i; index--)
{
dec_digit = str[index] - '0';
if (str[index]>='A')
dec_digit -= ('A' -'9') -1;
dec_frac = (dec_frac + dec_digit)/base;
}
EvaluateFract(dec_frac, new_base);
}
}
void EvaluateWhole(long DecWhole, int base)
{
char new_string[MAXSTRING] ;
int i = 0, aski_val;
while (DecWhole > 0)
{
aski_val = DecWhole % base + '0';
if (DecWhole%base > 9)
aski_val += ('A' - '9') -1;
new_string[i] = aski_val ;
DecWhole = DecWhole/base ;
i++;
}
cout << "\nThe number converted is " ;
for (int j=i-1; j>=0; j--)
cout << new_string[j] ;
}
void EvaluateFract(double DecFrac, int base)
{
char FracDigit ;
int Digit ;
cout << "." ;
for (int i=0; i<10; i++)
{
DecFrac = DecFrac * base ;
Digit = (int)DecFrac ;
DecFrac -= Digit;
FracDigit = Digit + '0' ;
if (base>10 && FracDigit>'9')
FracDigit += ('A' - '9' - 1) ;
cout << FracDigit ;
}
}