回 帖 发 新 帖 刷新版面

主题:OH......Wrong!!!???

我的程序,功能是实现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个回复)

沙发

老师的意思是不是说你的编程风格太乱了?
怎么那么多m,n,i,k,p,l,z,si,kj,我看着都心慌。

继续看看......

板凳

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 楼

还是IntToHex()好用。

4 楼

楼上的,FP和TP好像没这个函数吧~~~~~~~~~~~~~~~

5 楼

本来想回家去调试这个程序。但我用的是TP7,一看就懒得调了,肯定编译不过。

var
    b:array[0..32767]of integer;

TP7肯定开不了。TP7能用的变量内存是64K。加上其它一些杂七杂八的变量,实际开不了这个数组:这一个数组就是64K了。要命!除非用delphi去弄弄。

另:IntToHex 函数,TP7没有,delphi有。

6 楼

吐了。。。。。。
要养成良好的编程风格啊。。。。。。。。
前辈说的太对了!

7 楼

除了要养成良好的编程风格外……
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 楼

++++++++++++++++++++++++++++++

9 楼

+++++++++++++++++++++++++++++++++++++++

10 楼

我也+++++++++++
顺便说
var
    b:array[0..32767]of integer;
应该不用那么大吧——太大了
还有   halt;
       end;
第2个“;”应该是句号吧
你上面只有一个BEGIN啊

我来回复

您尚未登录,请登录后再回复。点此登录或注册