主题:OH......Wrong!!!???
kuuga
[专家分:190] 发布于 2005-08-19 15:31:00
我的程序,功能是实现2,8,10,16进制之间的互相转换:
var m,n,i,k,p,l,z,si,kj:integer;
sa,s1,s2,s3:string;
b:array[0..32767]of integer;
function t2(sa:string;m:integer):integer;
var s:string;
i,z,y,x,k,z1:integer;
begin
z:=0;
s1:='';
x:=0;
s:='123456789ABCDEF';
for i:=length(sa) downto 1 do begin
y:=pos(sa[i],s);
z1:=1;
for k:=1 to z do z1:=z1*m;
x:=x+z1*y;
inc(z);
end;
t2:=x;
end;
function t(a,m:integer):integer;
var l:integer;
begin
k:=0;
l:=a;
while l<>0 do begin
a:=a mod m;
b[k]:=a;
l:=l div m;
a:=l;
inc(k);
end;
end;
procedure t1(a,m:integer);
var so,sko:string;
io:integer;
begin
sko:='';
so:='0123456789ABCDEF';
for io:=k-1 downto 0 do sko:=sko+so[b[io]+1];
write(sko);
end;
begin
write('Number:');
readln(sa);
write('Type:');
readln(m);
s3:='123456789ABCDEF';
for l:=1 to length(sa)do begin
val(sa[l],kj);
if (kj>m-1)or(pos(sa[l],s3)=0)and(sa[l]<>'0')then begin
writeln('The number is not this type.');
halt;
end;
end;
write('Output"s Type:');
readln(n);
si:=t2(sa,m);
write(sa,'(',m,') turn into Type ',n,' is ');
t(si,n);
t1(si,n);
writeln('.');
readln;
end.
本人认为该程序决无错漏,但老师又说此程序有致命性错误,又不与我说明其原因,
要我自己领悟,然我思索数日,仍不可发现些许错误,故请各位英雄豪杰能除强扶弱
助小弟我一臂之力!谢谢!!!(不管是任何人,只要他/她发言的,每帖都加30分,
决不食言!!!!)
回复列表 (共10个回复)
沙发
delphi6 [专家分:3450] 发布于 2005-08-19 17:16:00
老师的意思是不是说你的编程风格太乱了?
怎么那么多m,n,i,k,p,l,z,si,kj,我看着都心慌。
继续看看......
板凳
delphi6 [专家分:3450] 发布于 2005-08-19 17:19:00
program xxx;
{$apptype console }
var m,n,i,k,p,l,z,si,kj:integer;
sa,s1,s2,s3:string;
b:array[0..32767]of integer;
function t2(sa:string;m:integer):integer;
var s:string;
i,z,y,x,k,z1:integer;
begin
z:=0;
s1:='';
x:=0;
s:='123456789ABCDEF';
for i:=length(sa) downto 1 do begin
y:=pos(sa[i],s);
z1:=1;
for k:=1 to z do z1:=z1*m;
x:=x+z1*y;
inc(z);
end;
t2:=x;
end;
function t(a,m:integer):integer;
var l:integer;
begin
k:=0;
l:=a;
while l<>0 do begin
a:=a mod m;
b[k]:=a;
l:=l div m;
a:=l;
inc(k);
end;
end; //Warning: Return value of function 't' might be undefined
procedure t1(a,m:integer);
var so,sko:string;
io:integer;
begin
sko:='';
so:='0123456789ABCDEF';
for io:=k-1 downto 0 do sko:=sko+so[b[io]+1];
write(sko);
end;
begin
write('Number:');
readln(sa);
write('Type:');
readln(m);
s3:='123456789ABCDEF';
for l:=1 to length(sa)do begin
val(sa[l],kj); //Error: Not enough actual parameters
if (kj>m-1)or(pos(sa[l],s3)=0)and(sa[l]<>'0')then begin
writeln('The number is not this type.');
halt;
end;
end;
write('Output"s Type:');
readln(n);
si:=t2(sa,m);
write(sa,'(',m,') turn into Type ',n,' is ');
t(si,n);
t1(si,n);
writeln('.');
readln;
end.
这是编译器检查出来的2出问题。
3 楼
delphi6 [专家分:3450] 发布于 2005-08-19 17:42:00
还是IntToHex()好用。
4 楼
xpycc [专家分:410] 发布于 2005-08-19 17:54:00
楼上的,FP和TP好像没这个函数吧~~~~~~~~~~~~~~~
5 楼
jtchang [专家分:5370] 发布于 2005-08-19 18:05:00
本来想回家去调试这个程序。但我用的是TP7,一看就懒得调了,肯定编译不过。
var
b:array[0..32767]of integer;
TP7肯定开不了。TP7能用的变量内存是64K。加上其它一些杂七杂八的变量,实际开不了这个数组:这一个数组就是64K了。要命!除非用delphi去弄弄。
另:IntToHex 函数,TP7没有,delphi有。
6 楼
闪电123 [专家分:470] 发布于 2005-08-19 20:24:00
吐了。。。。。。
要养成良好的编程风格啊。。。。。。。。
前辈说的太对了!
7 楼
阿Ben [专家分:2200] 发布于 2005-08-21 23:21:00
除了要养成良好的编程风格外……
function t(a,m:integer):integer;
这一句是不是应该改为
procedure t(var a:integer;m:integr);
还有如果是在TP7中,val(sa[l],kj);这一句会出错。应该是
val(sa[l],kj,code);(当然程序开头要加上var code:integer;)
这句是用来把字符串转成数字的,若转换成功,则code=0,否则code=出错位置
8 楼
QQ331373582 [专家分:1500] 发布于 2005-10-15 10:06:00
++++++++++++++++++++++++++++++
9 楼
QQ331373582 [专家分:1500] 发布于 2005-10-15 10:07:00
+++++++++++++++++++++++++++++++++++++++
10 楼
lmj9201 [专家分:1400] 发布于 2005-11-13 21:27:00
我也+++++++++++
顺便说
var
b:array[0..32767]of integer;
应该不用那么大吧——太大了
还有 halt;
end;
第2个“;”应该是句号吧
你上面只有一个BEGIN啊
我来回复