#include "stdafx.h"
#include <locale.h>
#include <stdio.h>
#include <string.h>
#include <windows.h>
int k,i;
template <class T>
void swap(T&a,T&b)//для разных типов
{
T tmp=a;
a=b;
b=tmp;
}
//int kolvo(char *x) //считает колво чисел в строке
//{
// k=0;
// while(x[k++]!='\0');
// k=k-1;
// return k;
//}
int chusla(char x)//распознает числа
{
if (x<='9')
return x-'0';
else
if((x<'a'))
return x-'A'+10;
else
return x-'a'+10;
}
int proverka(char *x,int a) // для того, чтобы число вводилось корректно
{
for(i=0;i<=strlen(x)-1;i++)
{
// printf("\n %d", chusla(x[i]));
if((chusla(x[i])>=a)||(x[i]<'0')||((x[i]>'9')&&(x[i]<'A'))||((x[i]>'Z')&&(x[i]<'a'))||(x[i]>'z')) return 1;
}
return 0;
}
int intoDec(char *x, int a)//переводит изначально заданное число в десятичную систему счисления
{
int sum=0;
int st=1;
for (int i=strlen(x)-1;i >=0;i--)
{
sum+=chusla(x[i])*st;
st*=a;
}
return sum;
}
void Conv(char *x, int a,int b)//конвентирует в желаемую систему
{
int sum=intoDec(x,a);
int i=0;
do
{
int h=sum%b;
sum=(sum-h)/b;
if (h>9)
x[i]=h+'A'-10;
else
x[i]=h+'0';
i++;
}
while( sum!=0 );
x[i]='\0';
for(i=0;i<int((strlen(x))/2);i++)
{
swap(x[i],x[strlen(x)-1-i]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"rus");
int a,b;
char x[255];
int z = 1;
while(z==1)
{ system("cls");
printf("Введите исходную систему счисления: \n");
scanf("%i",&a);
printf("\nВведите число в исходной системе счисления: \n");
scanf("%s",&x);
while(proverka(x,a)==1)
{
printf("Число введено неправильно!!! \n Попробуйте еще раз:");
scanf("%s",&x);
printf("\n");
}
printf("\nВведите желаемую систему счисления: \n");
scanf("%i",&b);
printf("\n");
while(b<2)
{
printf("Некорректно ввели систему счисления\nПовторите:\n");
scanf("%i",&b);
printf("\n");
}
Conv(x,a,b);
printf("Конечное число равно:\n%s\n",&x);
printf("Для повтора нажмите 1, для выхода 0\n");
scanf("%i",&z);
}
return 0;
}
Hi there, just became alert to your blog through Google, and
found that it’s really informative. I am gonna watch out for brussels.
I’ll be grateful if you continue this in future.
Many people will be benefited from your writing. Cheers!
Very interesting points you have noted, appreciate it for putting up.!
I was examining some of your articles on this website and
I believe this website is really informative!
Continue posting. Euro travel guide