Написать программу для перевода числа, представленного в системе счисления с основанием S, в системы счисления с основаниями P, Q, R. Обеспечить корректность ввода числа в системе счисления с основанием S. Перевод чисел реализовать с применением функций. (Разработайте функцию для перевода числа из системы счисления с основанием S в систему счисления с основанием P, а затем, функции для перевода из P в Q и из P в R.) Не использовать стандартных возможностей по вводу/выводу чисел представленных в 2-ой, 8-ой, 16-ой системах счисления. Для представления цифр больших 9 использовать заглавные буквы латинского алфавита- C++(Си)

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

Leave a Comment