9.29.2017

Đổi số thập phân sang phân số

Lập chương trình đổi một số thập phân hữu hạn hoặc một số thập phân vô hạn tuần hoàn ra phân sô tối giản
                                                                 Giải
Var 
   i,j,a,b,c,d,e:integer;
   s,s1,s2,s3: String;
   hh,vh: boolean;
   tu,mau,t,m,t1,t2,m1,m2: longint;
BEGIN
   hh:=true; vh:=false;m1:=1; m2:=1;tu:=1;mau:=1;
   Write('Nhap so thap phan: '); Readln(s);
   For i:=1 to length(s) do
       if s[i]='(' then
           if s[i-1] ='.' then vh :=true;
   if vh then hh:=false;
   a:=0;b:=0;
   Repeat
       inc(a);
   Until s[a] ='(';
   repeat
       inc(b);
   Until s[b]='.';
   If vh Then
       begin
           d:=length(s)-a-1;  s1:= copy(s,1,b-1); s2:=copy(s,b+1,a-b-1);
           s1:=s1+s2; Val(s1,t1,e);  s3:= copy(s,a+1,d); Val(s3,t2,e);
           for i:=1 to d do m1:=m1*10;
           m1:=m1-1;
           for i:=1 to a-b-1 do m2:=m2*10;
           tu:=t1*m1+t2; mau:=m1*m2;
       end;
   If hh Then
       begin
           s1:=copy(s,1,b-1); s2:=copy(s,b+1,length(s)-b); s1:=s1+s2; Val(s1,tu,e);
           for i:=b+1 to length(s) do mau:=mau*10;
       end;
   Write(s,' = ',tu,'/',mau); t:=tu; m:=mau;
   repeat
       if tu>mau then tu:=tu-mau
      else mau:=mau-tu;
   until tu=mau;
   t:=t div tu; m:=m div mau;
   Writeln(' = ',t,'/',m);
   readln;
END.

No comments:

Post a Comment

Cảm ơn bạn đã nhận xét