Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<ctype.h>
- #include<stdarg.h>
- #include<stdlib.h>
- #include<string.h>
- #define SIZE 128
- void leksema(FILE*, char*) ;
- int main()
- { int base, startN,des, res,res1,dec,dec10;
- int x=0;
- char bufNum[SIZE],buf[SIZE],*b = buf, *bb = bufNum;
- char n[1024] = "", hex[1024] = "",z=0;
- int num, rest, i = 0 ,j=0;
- FILE*fi=NULL,*fj=NULL;
- char *estr;
- if ((fi = fopen("D:\\textin.txt", "r"))== NULL)
- perror("Error open file");
- if((fj = fopen("D:\\textout.txt", "w"))== NULL)
- perror("Error open file");
- res = 0 ;
- leksema(fi, bb) ; // находим первую лексему - число
- bb = bufNum -1 ;
- leksema(fi, b) ; // находим вторую лексему - основание
- b =buf-1;
- res1=0;
- while(*++b)
- {
- res1 = res1 * 10 + (isdigit(*b) ? *b - '0' : toupper(*b) - 'A' + 10) ; // переводим основание в число
- }
- base=res1;
- b=buf;
- while(*++bb)
- {
- res = res * base + (isdigit(*bb) ? *bb - '0' : toupper(*bb) - 'A' + 10) ;
- }
- bb = bufNum ;
- dec=res;// присваиваем число в 10 системе счисления
- des=dec;
- printf("%d",res);
- fprintf(fj, "The number is %s(%d)=", bb, base) ; // записываем в файл наше число и его основание
- ///////////////////////////////////////////////
- res=0;
- leksema(fi, bb) ; // находим десятичное число
- bb = bufNum-1 ;
- leksema(fi, b) ;
- while(*++bb)
- res = res * 10 + (isdigit(*bb) ? *bb - '0' : toupper(*bb) - 'A' + 10) ;// base = atoi(bb) ; // переводим основание в число
- dec10=res;//деку10 присваиваем ччисло в 10 системе счисления
- bb = bufNum ;
- b =buf;
- //dec10 = atoi(bb);//dec присвоили число в (10) системе счисления
- fprintf(fj,"%d(10)-->True\n",dec10);
- /////////////////////////////////////////////////////////
- for (i=0; i<9;i++)
- {
- res=0;
- bb = bufNum ;
- dec=des;
- leksema(fi, bb) ; // находим следующее число после res(10)==>(2) - число
- bb = bufNum-1 ;
- leksema(fi, b) ; // находим вторую лексему - основание
- b =buf-1;
- res1=0;
- while(*++b)
- {
- res1 = res1 * 10 + (isdigit(*b) ? *b - '0' : toupper(*b) - 'A' + 10) ;
- }
- base=res1;
- b=buf;
- while(*++bb)
- res = res * base + (isdigit(*bb) ? *bb - '0' : toupper(*bb) - 'A' + 10) ;
- bb = bufNum ;
- fprintf(fj, "The number is %s(%d)", bb, base) ; // записываем в файл наше число и его основание
- dec10=res;
- if (dec10 == dec)
- {
- fprintf(fj,"=%d(10)-->True\n",dec10);
- }
- else
- {
- x=x+1;
- fprintf(fj,"<>%d(10)False!--> ",dec);
- //dec переводим из 10 в base
- while(base <= 1 || base > 36) ;
- dec=des;
- startN = dec ;
- while(dec) {
- rest = dec % base ;
- n[j++] = (char) ((rest < 10) ? rest + 48 : rest + 55) ;
- dec /= base ;
- z=z+1;
- } ;
- dec = strlen(n) ;//деку присваиваем количество символов в переведенном числе
- j = -1 ;
- while(j++, dec--)
- {
- hex[j] = n[dec] ;
- }
- j=j+1-z;
- fprintf(fj," Correct result -->%s (%d)\n", hex, base) ;
- }
- }
- fprintf(fj,"Total error!=%d",x);
- return 0;
- }
- void leksema(FILE *fi, char *s)// функция ищет лексему методом границы
- {
- char c, c_ = ' ' ;
- while(!feof(fi)) {
- c = fgetc(fi) ;
- if(isalnum(c))
- *s++ = c ;
- else if(isalnum(c_)) {
- *s = 0 ;
- break ;
- } ;
- c_ = c ;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement