free pascal编程问题 50

programshudu;vara:array[1..9,1..9]ofsmallint;b:array[1..9,1..9]ofsmallint;i,j:longint... program shudu;
var
a:array[1..9,1..9] of smallint;
b:array[1..9,1..9] of smallint;
i,j:longint;
f,g:text;

function pass(x,y:smallint):boolean;
var
k,l,s,q,w:longint;
begin
pass:=true;
s:=0;
for k:=1 to 9 do if a[x,k]=a[x,y] then s:=s+1;
for k:=1 to 9 do if a[k,y]=a[x,y] then s:=s+1;
k:=x mod 3;l:=y mod 3;
if k=0 then k:=3;if l=0 then l:=3;
for q:=x+1-k to x+3-k do
for w:=y+1-l to y+3-l do
if a[x,y]=a[q,w] then s:=s+1;
if s>3 then pass:=false;
end;

procedure print;
var k,l:integer;
begin
for k:=1 to 9 do
begin
for l:=1 to 9 do
write(g,a[k,l],' ');
writeln(g);
end;end;

procedure fill(x:integer);
var k,l,v:longint;
begin
v:=x mod 9;
if v=0 then v:=9;
if b[(x div 9)+1,v]=0 then for k:=1 to 9 do
begin
a[(x div 9)+1,v]:=k;
if pass((x div 9)+1,v)=true then
if x=81 then print else fill(x+1);
end else
begin
if x=81 then
print else fill(x+1)
end;
end;

begin
assign(f,'f:/shudu.txt');
assign(g,'f:/shuchu.txt');
reset(f);rewrite(g);
for i:=1 to 9 do for j:=1 to 9 do read(f,b[i,j]);
for i:=1 to 9 do for j:=1 to 9 do a[i,j]:=b[i,j];
fill(1);
close(f);close(g);
end.

实际运行的时候到只计算了两行就停止了,也没有输出结果,请问为什么
展开
 我来答
h1415926535
2013-04-15 · TA获得超过3139个赞
知道小有建树答主
回答量:675
采纳率:100%
帮助的人:398万
展开全部

解数独的程序吗?

我之前回答过一个类似的问题,见:

http://zhidao.baidu.com/question/540561865?&;;

不过只有最后的exe文件,我是用pascal编的。需要的话,我可以把代码放一下……


1.看了一下你的程序,最初的读入部分有些奇怪:

for i:=1 to 9 do for j:=1 to 9 do read(f,b[i,j]);
for i:=1 to 9 do for j:=1 to 9 do a[i,j]:=b[i,j];
建议改为:(也不算错误……)
for i:=1 to 9 do
begin
for j:=1 to 9 do
begin
read(f,b[i,j]);
a[i,j]:=b[i,j];
end;
readln;
end;

其他的实在找不出来,你的程序在我这是Compile successful的。

我的程序:

program Suduku;
var i,j,sum,Tsum:integer;
a:array[1..81,1..81]of integer;
procedure print;
var m,n:integer;
begin
for m:=1 to 9 do
begin
for n:=1 to 9 do
write(a[m,n],' ');
writeln;
end;
writeln;
end;
procedure findTsum;
var i,j:integer;
begin
for i:=1 to 9 do
for j:=1 to 9 do
if a[i,j]=0 then inc(Tsum);
end;
procedure TorF(i:integer; j:integer);
var s:set of 1..9;
p,q,r,v,w:integer;
begin
if sum=Tsum then
begin
print;
exit;
end;
while a[i,j]>0 do
begin
if j<9 then inc(j)
else begin
inc(i);
j:=1;
end;
end;
s:=[1..9];
for p:=1 to 9 do
begin
s:=s-[a[i,p]];
s:=s-[a[p,j]];
end;
v:=(i-1)div 3*3+1;
w:=(j-1)div 3*3+1;
for p:=v to v+2 do
for q:=w to w+2 do
s:=s-[a[p,q]];
for r:=1 to 9 do
if r in s then
begin
a[i,j]:=r;
inc(sum);
TorF(i,j);
a[i,j]:=0;
dec(sum);
end;
end;
begin
assign(input,'input.in');
reset(input);
writeln('Input Number:9*9');
for i:=1 to 9 do
begin
for j:=1 to 9 do
read(a[i,j]);
readln;
end;
writeln;
assign(output,'output.out');
rewrite(output);
i:=1;
j:=1;
Tsum:=0;
sum:=0;
findTsum;
TorF(i,j);
readln;
close(output);
end.
百度网友667241e
2013-04-13 · TA获得超过520个赞
知道答主
回答量:154
采纳率:0%
帮助的人:61.2万
展开全部
提供f:/shudu.txt,
输出结果在f:/shuchu.txt
你可以单步运行F7
把错误页面截图发上来
我这里好像是201错误
if b[(x div 9)+1,v]=0 then for k:=1 to 9 do
可能是(x div 9)+1,v超出1..9的范围
附上:pascal错误码
(A) DOS 错误代码:
1:无效DoS功能号
2:文件末找到
3:路径未找到
4:打开文件过多
5:禁止文件存取
6:无效文件句柄
12:无效文件存取代码
15:无效驱动器号
16:不能删除当前日录
17:不能跨驱动器改文件名
(B) I/O错误
100:磁盘读错误
101:磁盘写错误
102:文件变量末赋值
103:文件未打开
104:文件未用输入方式打开
105:文件末用输出方式打开
106:无效数字格式
(C) 严重错误
150:磁盘写保护
15l:未知单元
152:驱动器未准备好
153:未知命令
154:数据CRC校验错
155:驱动器请求的结构长度错
156:磁盘定位错
157:未知媒介类型
158:扇区末找到
159:打印机缺纸
160:设备写失败
161:设备读失败
162:硬件故障
(D) 致命错误
200:被零除
20l:范围检查错
202:堆栈溢出错
203:堆溢出错
204:无效指针操作
205:浮点上溢出
206:浮点下溢出
207:无效浮点运算
208:未安装覆盖管理程序
209:覆盖文件读错
210:对象未初始化
2ll:调用抽象方法
212:流登计错
213:集合下标越界
214:集合溢出
215:算术上溢错误
216:存取非法
217:控制-C
218:授权指令
219:无效的TYPECAST
220:无效的变体TYPECAST
221:无效的变体操作
222:没有变体方法调用DISPATCHER
223:不能建立变体数组
224:变体不包含数组
225:变体数组边界错误
226:TLS初始化错误
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式