Advertisement
Guest User

Kostikov c 1programma

a guest
Oct 25th, 2014
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.54 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<ctype.h>
  3. #include<stdarg.h>
  4. #include<stdlib.h>
  5. #include<string.h>
  6. #define SIZE 128
  7.  
  8.  
  9. void leksema(FILE*, char*) ;
  10. int main()
  11. {       int base, startN,des, res,res1,dec,dec10;
  12. int x=0;
  13.         char bufNum[SIZE],buf[SIZE],*b = buf, *bb = bufNum;
  14.         char n[1024] = "", hex[1024] = "",z=0;
  15.         int num, rest, i = 0 ,j=0;
  16.  
  17. FILE*fi=NULL,*fj=NULL;
  18.  
  19.      
  20.      char *estr;
  21.      if ((fi = fopen("D:\\textin.txt", "r"))== NULL)
  22.         perror("Error open file");
  23.      if((fj = fopen("D:\\textout.txt", "w"))== NULL)
  24.          perror("Error open file");
  25.  
  26.            
  27.              res = 0 ;
  28.                    leksema(fi, bb) ; // находим первую лексему - число
  29.                     bb = bufNum -1 ;
  30.                     leksema(fi, b) ; // находим вторую лексему - основание
  31.                     b =buf-1;
  32.                     res1=0;
  33.                     while(*++b)
  34.                     {
  35.                    
  36.                             res1 = res1 * 10 + (isdigit(*b) ? *b - '0' : toupper(*b) - 'A' + 10) ; // переводим основание в число
  37.                     }
  38.                             base=res1;
  39.                     b=buf;
  40.                    
  41.                    
  42.                     while(*++bb)
  43.                     {
  44.                             res = res * base + (isdigit(*bb) ? *bb - '0' : toupper(*bb) - 'A' + 10) ;
  45.                     }
  46.                     bb = bufNum ;
  47.                
  48.                 dec=res;// присваиваем число в 10 системе счисления
  49.                 des=dec;
  50.                
  51.                 printf("%d",res);
  52.                
  53.                 fprintf(fj, "The number is %s(%d)=", bb, base) ; // записываем в файл наше число и его основание
  54.                  
  55.                  
  56.                 ///////////////////////////////////////////////
  57.                 res=0;
  58.             leksema(fi, bb) ; // находим десятичное число
  59.             bb = bufNum-1 ;
  60.             leksema(fi, b) ;
  61.             while(*++bb)
  62.                    
  63.                             res = res * 10 + (isdigit(*bb) ? *bb - '0' : toupper(*bb) - 'A' + 10) ;// base = atoi(bb) ; // переводим основание в число
  64.                
  65.                 dec10=res;//деку10 присваиваем ччисло в 10 системе счисления
  66.                 bb = bufNum ;
  67.             b =buf;
  68.  
  69.  
  70.             //dec10 = atoi(bb);//dec присвоили число в (10) системе счисления
  71.            
  72.            
  73.                 fprintf(fj,"%d(10)-->True\n",dec10);
  74.  
  75.             /////////////////////////////////////////////////////////
  76.             for (i=0; i<9;i++)
  77.             {
  78.             res=0;
  79.             bb = bufNum ;
  80.             dec=des;
  81.               leksema(fi, bb) ; // находим следующее число после res(10)==>(2) - число
  82.                     bb = bufNum-1 ;
  83.                     leksema(fi, b) ; // находим вторую лексему - основание
  84.                     b =buf-1;
  85.                     res1=0;
  86.                     while(*++b)
  87.                     {
  88.                    
  89.                             res1 = res1 * 10 + (isdigit(*b) ? *b - '0' : toupper(*b) - 'A' + 10) ;
  90.                     }
  91.                             base=res1;
  92.                     b=buf;
  93.                     while(*++bb)
  94.                      res = res * base + (isdigit(*bb) ? *bb - '0' : toupper(*bb) - 'A' + 10) ;
  95.                
  96.                 bb = bufNum ;
  97.                
  98.            
  99.                 fprintf(fj, "The number is %s(%d)", bb, base) ; // записываем в файл наше число и его основание
  100.                 dec10=res;
  101.                 if (dec10 == dec)
  102.             {
  103.                 fprintf(fj,"=%d(10)-->True\n",dec10);
  104.  
  105.             }
  106.                        
  107.             else
  108.             {
  109.                     x=x+1;
  110.                     fprintf(fj,"<>%d(10)False!-->  ",dec);
  111.                                                     //dec переводим из 10 в base
  112.        
  113.              
  114.        while(base <= 1 || base > 36) ;
  115.        dec=des;
  116.         startN = dec ;
  117.         while(dec) {
  118.            
  119.                 rest = dec % base ;
  120.                 n[j++] = (char) ((rest < 10) ? rest + 48 : rest + 55) ;
  121.                 dec /= base ;
  122.                 z=z+1;
  123.         } ;
  124.         dec = strlen(n) ;//деку присваиваем количество символов в переведенном числе
  125.         j = -1 ;
  126.        
  127.         while(j++, dec--)
  128.            
  129.         {
  130.                 hex[j] = n[dec] ;
  131.         }
  132.        
  133.         j=j+1-z;
  134.         fprintf(fj," Correct result -->%s (%d)\n", hex, base) ;
  135.        
  136.        
  137.             }
  138.  
  139.             }
  140.             fprintf(fj,"Total error!=%d",x);
  141.            
  142.             return 0;
  143. }
  144.                
  145.  
  146.     void leksema(FILE *fi, char *s)// функция ищет лексему методом границы
  147.     {
  148.             char c, c_ = ' ' ;
  149.             while(!feof(fi)) {
  150.                     c = fgetc(fi) ;
  151.                 if(isalnum(c))
  152.                             *s++ = c ;
  153.                     else if(isalnum(c_)) {
  154.                        *s = 0 ;
  155.                         break ;
  156.                 } ;
  157.  
  158.                     c_ = c ;
  159.             }
  160.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement