回 帖 发 新 帖 刷新版面

主题:pascal回旋填数

输入n,输出一个二维数组
输出如下形式的数组:如 n=5 时

1    2    3    4    5

16   17   18   19   6

15   24   25   20   7

14   23   22   21   8

13   12   11   10   9

请问我的程序为何出现错误26,应该改为什么?
program ss;
  var a:array[1..10,1..10] of integer;
      i,j,k,l,z:integer;
  procedure sz(n,m:integer);(编号的过程)
    begin
      z:=z+1;
      if (z mod 4=1) or (z mod 4=2) then (判断是递增还是递减)
        while a[n+1]<>0 (运行到这时提示错误26)do(如果下一个值为0就给下一个编上号)
          begin
            k:=k+1; 
            n:=n+1;
            a[n,m]:=k;(k为计数器,用来编号)
          end;
      if (z mod 4=3) or (z mod 4=0) then
        while
          begin
            k:=k+1;
            n:=n-1;
            a[n,m]:=k;
          end;
        if k=l then print;
        l:=k;
        if z mod 2=1 then sz(n,m);(判断是行增加还是列增加)
        if z mod 2=0 then sz(m,n);   
    end;
     procedure print; (打印的过程)
       var q,w:integer;
       begin
         for q:=1 to s do
           begin
           for w:=1 to s do
             write(a[q,w]:3);
           writeln;
           end;
       end;
  begin
    read(s);
    for i:=1 to n do  
      for j:=1 to n do
        a[i,j]:=0;
    i:=1; j:=1;
    sz(i,j);
  end;

回复列表 (共4个回复)

沙发

TP中错误26是“类型不匹配”。
你这数组是二维的,可是你在判断时只有一个下标,当然类型不匹配了。

板凳

还有,你这程序真是错误百出。

除了你说的这处,我还找出来几处:

第一处:
[quote]IF (z MOD 4 = 3) OR (z MOD 4 = 0) THEN
        WHILE[/quote]
这个WHILE要删掉。

第二处:
[quote]IF k = l THEN print;[/quote]
这里违反了模块排列原则,根据此原则,print过程应在sz过程前面,你却放到了后面。

第三处:
[quote]FOR q:=1 TO s DO BEGIN
           FOR w:=1 TO s DO[/quote]
这里变量s没定义。

第四处:
[quote]READ(s);[/quote]
这里变量s没定义。

3 楼


厄厄厄厄~~.......这个么,好像是错误有点点多,那帮我看看这个新的程序对不对:
PROGRAM exp;
const maxn=3;
var
  a:array[1..maxn,1..maxn] of integer;
  i,j,k,n,m:integer;
begin
  write('n=');readln(n);
    for i:=1 to n do for j:=1 to n do a[i,j]:=0;
    i:=1;j:=1;k:=1;m:=1;
    repeat
      a[i,j]:=k;k:=k+1;
      case m mod 4 of
      1:if (j<n) and (a[i,j+1]=0) then j:=j+1
         else begin m:=m+1; i:=i+1; end;
      2:if (i<n) and (a[i+1,j]=0) then i:=i+1
        else begin m:=m+1; j:=j-1; end;
      3:if (j>1) and (a[i,j-1]=0) then j:=j-1
         else begin m:=m+1; i:=i-1; end;
      0:if (i>1) and (a[i-1,j]=0) then i:=i-1
      else begin m:=m+1; j:=j+1; end;
      end;
    until k>n*n;
    for i:=1 to n do
    begin
      for j:=1 to n do write(a[i,j]:4);
      writeln;
      end;
end.
[em54][em54][em54][em54][em12][em12][em12][em12]

4 楼

给你pascal原码:
program luoxuan(input,output);
var
 i,j,n,v:longint;
 a:array[1..60,1..60] of longint;
begin
 readln(n);
 for i:=1 to n div 2 do
  begin
   for j:=i to n-i do
    begin;
    v:=v+1;
    a[i,j]:=v;
   end;
    for j:=i to n-i do
    begin;
    v:=v+1;
    a[j,n-i+1]:=v;
   end;
    for j:=i to n-i do
    begin;
    v:=v+1;
    a[n-i+1,n-j+1]:=v;
   end;
   for j:=i to n-i do
    begin
    v:=v+1;
    a[n-j+1,i]:=v;
   end;
 end;
 if n mod 2=1 then a[(n+1) div 2,(n+1) div 2]:=n*n;
 for i:=1 to n do
  begin;
  for j:=1 to n do
   begin;
   write(a[i,j]:4);
  end;
  writeln
 end;
 readln;
end.

我来回复

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