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)
#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[])
{
inti,j,n=strlen(s)-1,k;
chars1[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)
{
inti,j,k,x=0;
chars[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;
charhx[33];
for(i=0;i<n;i++)
{
strcpy(hx,hecxa2(a[i],l));
fprintf(l,"%s\n",hx);
}
}
int main()
{
intn,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();
}
No comments:
Post a Comment