主题:文件写入的问题
蓝色的水晶
[专家分:90] 发布于 2007-12-13 18:45:00
程序:
随机产生M*N个(M,N由键盘输入)介于[10,9999]之间的整数存入二维数组A(M,N)中,然后对二维数组A按行排序,要求每一行上的数按升序排列,再删除二维数组A中第一列上的所有元素,并按M行,N-1列的形式输出二维数组A并放入顺序文件 sx.dat中。请编制程序。
回复列表 (共3个回复)
沙发
蓝色的水晶 [专家分:90] 发布于 2007-12-13 21:12:00
我对此程序困惑的地方是写文件的地方,先把文件的程序的前面部分编写如下,请大家帮我分析一下:
cls
input m,n
dim a(m,n)
for i=1 to m
for j=1 to n
a(i,j)=int(rnd*9990)+10
print a(i,j);
next j
print
next i
for i=1 to m
for j=1 to n-1
for k=j+1 to n
if a(i,j)>a(i,k) then swap a(i,j),a(i,k)
next k,j,i
for i=1 to m
for j=1 to n-1
print a(i,j);
next j
print
next i
for i=1 to m
for j=1 to n-1
a(i,j)=a(i,j+1)
next j,i
open "sx.dat" for output as #1
'此处我有困惑
close #1
end
我对最后一段程序觉得有困惑:
比如m=3,n=4的话,可以这样,open "sx.dat" for output as #1
for i=1 to 3
write #1,a(i,1);a(i,2);a(i,3);a(i,4)
next i
close #1
当m,n为已确定时,可按记录的顺序一条条放进数据文件,而如果m,n是由键盘不确定的数时,写入语句变成了write #1,a(i,1);a(i,2);……a(i,n)显然不能这样列举了,如果这样:
open "sx.dat" for output as #1
for i=1 to m
for j=1 to n-1
write #1,a(i,j)
next i,j
则会出现数据每个元素为一个记录,而不是矩阵的每一行为记录输入数据了,请高手指点名津?
close #1
那如何实现把一条条的记录放到数据文件中呢。
板凳
moz [专家分:37620] 发布于 2007-12-14 09:23:00
近年来我已经很少使用 Write 了
能用 Print 轻易解决的, Why Not?
for i=1 to m
for j=1 to n-1
print #1,a(i,j), '注意结尾的逗号
next
print #1, '这里只有逗号,但没有参数,也就是换行的意思.
next i,j
3 楼
蓝色的水晶 [专家分:90] 发布于 2007-12-17 11:39:00
我尝试了你的方法,输出的数据文件也很正确,
不知道为什么write语句为什么不行.
如果改成如下:
for i=1 to m
for j=1 to n-1
write #1,a(i,j),
next
write #1,
next i,j
程序运行时提示出错,如果去掉 write #1,a(i,j),后边的逗号,则不提示出错,但输出的数据文件不能为矩阵形式的输出了.
这也许是因为write #语句在存储每条记录时,在记录的最后都有个回车符和换行符,不允许加逗号可能是这个原因吧.
我来回复