Написать программу для перевода числа, представленного в системе счисления с основанием 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;
}

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

  1. 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!

  2. Very interesting points you have noted, appreciate it for putting up.!

  3. I was examining some of your articles on this website and
    I believe this website is really informative!

    Continue posting. Euro travel guide

Leave a Comment