Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<string.h>
- #include<math.h>
- #include<locale.h>
- #include<malloc.h>
- #include<stdlib.h>
- #define z 255
- int aton(char a);
- char ntoa(int n);
- int cdot(char*S);
- void dot(char*S,char*S1,char*S2);
- void IntTransfer(char*S1,int b3,int b4);
- void DotTransfer(char*S2,int b5,int b6);
- int types(int b1,char*S);
- int types2(int b);
- int main()
- {
- int b1,b2;
- char S[z];
- char S1[z];
- char S2[z];
- printf("Введите число,которое нужно перевести\n");
- gets(S);
- if(cdot(S)==-1)
- {
- printf("Неправильное значение!!!!\n");
- getchar();
- exit(-1);
- }
- printf("Введите основание входной системы счисления\n");
- scanf("%d",&b1);
- if(types(b1,S)==-2)
- {
- printf("Некорректное основание входной системы счисления или неверное число для перевода\n");
- getchar();
- exit(-1);
- }
- if(types2(b1)==-1)
- {
- printf("Неверное основание входной системы счисления\n");
- getchar();
- exit(-1);
- }
- printf("Введите основание выходной системы счисления\n");
- scanf("%d",&b2);
- if(types2(b2)==-1)
- {
- printf("Неверное основание выходной системы счисления\n");
- getchar();
- exit(-1);
- }
- printf("Результат:");
- dot(S,S1,S2);
- IntTransfer(S1,b1,b2);
- DotTransfer(S2,b1,b2);
- printf("\n");
- }
- int aton(char a)
- {
- if((a>='0')&&(a<='9'))
- return a -'0';
- else if((a>='a')&&(a<='z'))
- return a -'a'+10;
- else
- return a-'A'+10;
- }
- char ntoa(int n)
- {
- if((n>=0)&&(n<=9))
- return'0'+n;
- else
- return'A'-10+n;
- }
- void dot(char*S,char*S1,char*S2)
- {
- const char*delim=".";
- char*cp=(char*)malloc(strlen(S)+1);
- char*tmp;
- if(cp==NULL)
- {
- printf("Ошибка при работе с памятью");
- exit(-1);
- }
- tmp=strtok(S,".");
- if(tmp!=NULL)strcpy(S1,tmp);
- else strcpy(S1,"\0");
- tmp=strtok(NULL,".");
- if(tmp!=NULL)strcpy(S2,tmp);
- else strcpy(S2,"\0");
- free(cp);
- }
- void IntTransfer(char*S1,int b3,int b4)
- {
- int n1,N,i,r1;
- int d1[z];
- n1=strlen(S1);
- N=0;
- for(i=0;i<n1;i++)
- {
- N=N*b3+aton(S1[i]);
- }
- if(N==0)
- {
- printf("0");
- }
- else
- {
- r1=0;
- while(N!=0)
- {
- d1[r1]=N%b4;
- N=N/b4;
- r1++;
- }
- for(i=r1-1;i>=0;i--)
- {
- printf("%c",ntoa(d1[i]));
- }
- }
- }
- void DotTransfer(char*S2,int b5,int b6)
- {
- int n2,i,k2;
- int const K=20;
- long double Nf;
- n2=strlen(S2);
- if(n2==0)
- {
- printf("\n");
- return;
- }
- printf(".");
- Nf=0;
- for(i=n2-1;i>=0;i--)
- {
- Nf=(aton(S2[i])+Nf)/b5;
- }
- k2=0;
- while(Nf!=0&&k2<K)
- {
- k2++;
- printf("%c",ntoa(floor(Nf*b6)));
- Nf=fmod((Nf*b6),1);
- }
- }
- int cdot(char*S)
- {
- int i,kol=0;
- for(i=0;i<strlen(S);i++)
- {
- if(S[i]=='.')kol++;
- }
- if(kol>1)
- {
- return-1;
- }
- }
- int types(int b1,char*S)
- {
- int i;
- for(i=0;i<strlen(S);i++)
- {
- if(aton(S[i])>=b1)return-2;
- }
- }
- int types2(int b)
- {
- if(b>16||b<2)return-1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement