Cho một tệp văn bản input.txt chứa các phần tử nguyên không âm, các phần tử cách nhau ít nhất một dấu cách trống hoặc ít nhất một dấu xuống dòng. Viết chương trình đổi các số nguyên đọc ra từ tệp input.txt thành xâu nhị phân và xâu hexa tương ứng. Kết quả đưa vào tệp văn bản output.txt theo dạng: n ----> xâu nhị phân -----> xâu hexa (1 điểm)

Tuesday, August 26, 2014

Cho một tệp văn bản input.txt chứa các phần tử nguyên không âm, các phần tử cách

nhau ít nhất một dấu cách trống hoặc ít nhất một dấu xuống dòng. Viết chương trình đổi các
số nguyên đọc ra từ tệp input.txt thành xâu nhị phân và xâu hexa tương ứng. Kết quả đưa
vào tệp văn bản output.txt theo dạng:
n ----> xâu nhị phân -----> xâu hexa (1 điểm)

 : file input.txt và output.txt ở nền ô C




#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <math.h>
void doctep(int a[],int *n,FILE *l)
{
     int i=0;
     while (!feof(l))
     {
         fscanf(l,"%d",&a[i]);
         i++;
     }
     *n=i;
}
void xemmang(int a[],int n)
{
     int i;
     printf("\n");
     for (i=0;i<n;i++)
             printf(" %d ",a[i]);
     printf("\n");
}
char *nhiphan(int n)
{
     int i=0,j,k,x;
     char s[33],d[3]="01",tg;
     x=n;
     while (x!=0)
     {
          k=x%2;
          s[i]=d[k];
          i++;
          x=x/2;
     }
     j=i;
     for(i=0;i<(j/2);i++)
     {
          tg=s[i];
          s[i]=s[j-i-1];
          s[j-i-1]=tg;
     }
     s[j]=NULL;
     return &s[0];
}
char *chuanhoa(char s[])
{
     int i,j,n=strlen(s)-1,k;
     char s1[100];
     if ((n+1)%4==0) return &s[0];
     k=((n+1)/4+1);
     for(i=0;i<=n;i++) s1[k*4-i]=s[n-i];
     for(i=0;i<(k*4-n);i++) s1[i]='0';
     s1[k*4+1]=NULL;
     return &s1[1];
}
char *hecxa2(int n,FILE *l)
{
                int i,j,k,x=0;
                char s[65],np1[65],np[65],d[17]="0123456789ABCDEF";
                strcpy(np1,nhiphan(n));
                fprintf(l,"%d  ==> %s ===>",n,np1);
                strcpy(np,chuanhoa(np1));
                n=strlen(np);
                for (i=0;i<n;i+=4)
                {
          k=0;
          for (j=0;j<4;j++) if (np[i+j]=='1') k+=pow(2.0,3-j);
          s[x]=d[k];
          x++;
      }
      s[x]=NULL;
      return &s[0];
}
void ghihecxa(int a[],int n,FILE *l)
{
      int i;
      char hx[33];
      for (i=0;i<n;i++)
      {
           strcpy(hx,hecxa2(a[i],l));
           fprintf(l,"%s\n",hx);
      }
}
int main()
{
      int n,a[1000];
      FILE *u,*v;
      v=fopen("c:\\output.txt","wt");
      u=fopen("c:\\input.txt","rt");
      doctep(a,&n,u);
      printf("\nMang du lieu doc ra co  %5d  phan tu",n);
      xemmang(a,n);
      ghihecxa(a,n,v);
      fclose(u);
      fclose(v);
      printf("\n\nHoantat");
      getch();

}
Chia sẻ bài viết ^^
Other post

All comments [ 0 ]


Your comments