切换到宽版
  • 15785阅读
  • 10回复

『求助』大家看一看这个程序有什么错? [复制链接]

上一主题 下一主题
离线gelanjie
 
只看楼主 倒序阅读 0 发表于: 2005-10-31
var N,k:integer;
B:array[1..1000] of integer;

Procedure chg10(N,x:integer); {将十进制数N转换成x进制数}
Begin k:=0;   {转换后的x进制数位的长度}
while N<>0 do {N不为0时}
  begin B[k]:=N mod x; {除以x取余数}
    N:=N Div x;     {取最大商N}
    k:=k+1;         {x进制数位加1}
  end;
end;{chg10}

Procedure Sput(N,x:integer);{进制数输出}
VAR i:integer; A:string;
Begin A:='0123456789ABCDEF'; {表示x进制数的位数串}
write(N:6,' Turn into ',x:2,':');
for i:=k-1 downto 0 do write(copy(A,B+1,1));{逆序输出x进制数}
writeln;
end; {Sput}
begin {MAIN}
write('Input N(-32767 to 32767):');readln(N);
if (N<=-32767)or(N>32767) then
  begin writeln('Input error!');halt;end;
chg10(N,2);Sput(N,2);   {十进制数转换成2进制数,并输出}
chg10(N,8);Sput(N,8);   {十进制数转换成8进制数,并输出}
chg10(N,16);Sput(N,16); {十进制数转换成16进制数,并输出}
end.
思路我觉着对着哪。
为什么会出现如下:
input 69
69 turn into 2:10001008
69 turn into 8:10001008
69turn into 16:4001007
按理来说,69 turn into 2:10001008是不正确的呀!
离线stevenjl

只看该作者 1 发表于: 2005-10-31

write(copy(A,B+1,1));{逆序输出x进制数}

B不是数组吗?怎么会出现B+1这样的语句?
Dream Walker...
离线arronking
只看该作者 2 发表于: 2005-10-31
一楼说得对
另外
Begin A:='0123456789ABCDEF'; {表示x进制数的位数串}
这句,你既然说表示X进制,那为什么只写到16位,难道除了16进制就没有其他的了?
我觉得这里应该用一个集合,包括0...9 和A..Z
大秦魂不相信强盗悔忏,
只能用复仇雪耻的战争,
讨回我秦汉高贵的尊严。
强秦何曾看过六国脸色,
大汉何曾求过匈奴道歉?
用无坚不摧的滚滚铁骑,
踏平那敌国的巍峨宫殿!
离线李逍遥
只看该作者 3 发表于: 2005-11-10
Begin A:='0123456789ABCDEF'; {表示x进制数的位数串}
x是指什么进制,程序又没有说x不能是16;
所以觉得2楼说的没有道理,顶1楼!!!!!
离线velicue
只看该作者 4 发表于: 2005-11-11
hmm,I don't know
离线archimedes

只看该作者 5 发表于: 2005-11-12
for i:=k-1 downto 0 do write(copy(A,B+1,1));
数组怎么能加1? 顶1楼
离线gelanjie
只看该作者 6 发表于: 2005-11-13
再问一下copy怎么用?
我这两天忘了
离线李逍遥
只看该作者 7 发表于: 2005-11-15
以下是引用sammy312的:

copy 是字符串求字串函数!
我也不知道为什么叫copy
你的计算机老师真糟!
是这样的
格式
函数 copy(s,i,c);
意义
返回字符串s的从第i个字符开始数c个数得出的字串
比如
copy('123456',3,3):='345'
懂了吧??


[ 此贴被李逍遥在2005-11-16 21:55重新编辑 ]
离线archimedes

只看该作者 8 发表于: 2005-11-15
李逍遥!你抄我的!引用一下也好嘛!
离线李逍遥
只看该作者 9 发表于: 2005-11-16
不好意思,两个帖子没法直接引用!!!已经改正!!!
快速回复
限100 字节
 
上一个 下一个