帮我纠正一下Pascal中进制转换的错误,谢谢!
2、输入一个十进制,将它转换成k进制数字串(k=2,3,4……,9),并列表输出。【运行实例】:输出:10jinzhi:输入-10.5输出:9jinzhi:-11.444...
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 begin
gc(t,k);
Write(k,'jinzhi:');
If t<0 then write('-');
For j:=s to 1 do Write(a[j]);
Write('.');
For m:=1 to 8 do Write(a[m]);
Writeln();
End;
End.
--------------------------------------------------------------
但是我总是无法运行出正确的结果
请大家帮帮忙看一下错在哪里,谢谢了!
PS:我用Watches看了一下
发现的问题是No symbol'n' in current context.
同样的 No symbol'l' in current context.
No symbol'r1'in current context. 展开
【运行实例】:
输出: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 begin
gc(t,k);
Write(k,'jinzhi:');
If t<0 then write('-');
For j:=s to 1 do Write(a[j]);
Write('.');
For m:=1 to 8 do Write(a[m]);
Writeln();
End;
End.
--------------------------------------------------------------
但是我总是无法运行出正确的结果
请大家帮帮忙看一下错在哪里,谢谢了!
PS:我用Watches看了一下
发现的问题是No symbol'n' in current context.
同样的 No symbol'l' in current context.
No symbol'r1'in current context. 展开
3个回答
展开全部
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就可以了。打印是倒排列应该用downto才对,其它应该没什么问题吧。
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就可以了。打印是倒排列应该用downto才对,其它应该没什么问题吧。
展开全部
你使用Watches的时候要保证在程序当中使用,而不能在运行完之后使用。
使程序逐步执行的方法是用F7(Trace into).
使程序逐步执行的方法是用F7(Trace into).
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//个人认为做如下修改(在整数部分的转换没有错,但是在小数部分的转换本人还是喜欢用乘数取整,因为不知道楼主用的转整再转进制是否正确(好像是错的。。。。))
Program jinzhi;
Var i,j,m,s,k: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);//因为在最后一次除法之后s又被加了一所以s多了一位,应该减一;
r1:=0;//擅自r1改用做b数组的监视哨
while (r1<8) do//当已处理的小数位数达到8时跳出
begin
r1:=r1+1;//增加一位已处理的小数
r:=r*k;//将当前的10进制小数×待转换的进制
b[r1]:=trunc(r);//截取整数部分作为新进制的当前小数位的值
r:=r-b[r1];//留下剩余部分继续进入下一次取整。
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 to 1 do Write(a[j]);
Write('.');
For m:=1 to 8 do Write(a[m]);
Writeln();
End;
End.
程序没有调试过,可能存在错误,但思想应该不错。
楼主的程序写得还是不错的,再接再厉^_^
Program jinzhi;
Var i,j,m,s,k: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);//因为在最后一次除法之后s又被加了一所以s多了一位,应该减一;
r1:=0;//擅自r1改用做b数组的监视哨
while (r1<8) do//当已处理的小数位数达到8时跳出
begin
r1:=r1+1;//增加一位已处理的小数
r:=r*k;//将当前的10进制小数×待转换的进制
b[r1]:=trunc(r);//截取整数部分作为新进制的当前小数位的值
r:=r-b[r1];//留下剩余部分继续进入下一次取整。
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 to 1 do Write(a[j]);
Write('.');
For m:=1 to 8 do Write(a[m]);
Writeln();
End;
End.
程序没有调试过,可能存在错误,但思想应该不错。
楼主的程序写得还是不错的,再接再厉^_^
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询