Zdrojové kódy pro vývojáře.
Skip Navigation Links. Top 10 přispěvatelů
UživatelČlánky
codeshare49
sochor1
stoupa1
tomas.oplt11
Článek: Algoritmus - číselné soustavy a konverze
Špatný
Super
Autor:
Vytvořeno:
Popularita:

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 ;
  }
}

 

  Na stránku 
screen  Nový příspěvek
Název  Uživatel  Datum 
Poslední návštěva: 0:12:46, 2. května 2024 První  Předchozí  0 Záznamů  Další  Poslední  

Autor článku
Jméno
Pracovní pozice
Informace
Foto

   

Počet návštěvníků:1
 
  Kontakt