帮我纠正一下Pascal中进制转换的错误,谢谢!

来源:百度知道 编辑:UC知道 时间:2024/06/26 00:11:13
2、输入一个十进制,将它转换成k进制数字串(k=2,3,4……,9),并列表输出。
【运行实例】:
输出:10 jinzhi:
输入-10.5
输出:
9jinzhi:-11.44444444
8jinzhi:-12.4
7jinzhi:-13.33333333
6jinzhi:-14.3
5jinzhi:-20.22222222
4jinzhi:-22.2
3jinzhi:-101.11111111
2jinzhi:-1010.1

我的程序是:
Program jinzhi;
Var i,j,m,s,k,c:integer;
t,r:real;
a,b:array[1..100] of integer;
Procedure gc(t:real;k:integer);
Var n:real;l,r1:integer;
Begin
n:=abs(t);
l:=trunc(n);
r:=n-l;s:=1;
While l>0 do begin
a[s]:=l mod k;
l:=l div k;
s:=s+1; end;
While r-trunc(r)>0 do begin r:=r*10;end;
r1:=trunc(r);
For c:=1 to 8 do begin
b[c]:=r1 mod k;
r:=r1 div k;
end;
End;
Begin
Writeln('10jinzhi:');
Readln(t);
For k:=9 downto 2 do b

Program jinzhi;
Var i,j,m,s,k,c:integer;
t,r:real;
a,b:array[1..100] of integer;
Procedure gc(t:real;k:integer);
Var n:real;l,r1:integer;
Begin
n:=abs(t);
l:=trunc(n);
r:=n-l;s:=1;
While l>0 do begin
a[s]:=l mod k;
l:=l div k;
s:=s+1; end;
dec(s);{多加了一次,得减,你没做}
While r-trunc(r)>0 do begin r:=r*10;end;
r1:=trunc(r);
For c:=1 to 8 do begin
b[c]:=r1 mod k;
r:=r1 div k;
if r=0 then break;{建议加个条件判断,提高效率,如果r为0就推出循环}
end;
End;
Begin
Writeln('10jinzhi:');
Readln(t);
For k:=9 downto 2 do begin
gc(t,k);
Write(k,'jinzhi:');
If t<0 then write('-');
For j:=s downto 1 do Write(a[j]); {由大到小用downto}
Write('.');
For m:=1 to 8 do Write(a[m]);
Writeln;{打印空行不用加括号}
End;
End.
程序写得不错,主要是小问题没认真考虑好。
在处理小数的时候,建议采用楼上说相乘法。楼上的程序处理小数时少了一位,你用的是while语句,不是repeat语句,结束循环的条件改为>=8就可以了。打印是倒排列应该用