Обход квадратной матрицы.Паскаль

Ответить
RAITER
Сообщения: 13
Зарегистрирован: 05 окт 2008, 16:15

Здравствуйте, сейчас написал программу.Разработать программу обхода квадратной матрицы N×N по спирали:
→→→↓
→→↓↓
↑. ← ↓
↑←←←
Выполнить обход матрицы А(4, 4) и В(7, 7).
Написать надо используя метод струтурного програмирования.
Программа:

Код: Выделить всё

Юнита
Unit obxod;
Interface
const m=4;
const n=7;
procedure Spiral(a:array of integer);
procedure Spiral2(b:array of integer);
Implementation
var p,i,j:integer;
procedure Spiral(a:array of integer);
var f:array[1..m,1..m] of integer;
Begin
writeln('massiv:');
begin
     for i := 1 to m do
     begin
             for j := 1 to m do Write (f[i,j]:7);
             Writeln;
     end;
     Writeln;
for p := 1 to (m+1) div 2 do
begin
for j := p to m-p+1 do Write (f[p,j] : 8);
for i := p+1 to m-p+1 do Write (f[i,m-p+1] : 8);
for j := m-p downto p do Write (f[m-p+1,j] : 8);
for i := m-p downto p+1 do Write (f[i,p] : 8);
end;
end;
end;
procedure Spiral2(b:array of integer);
var s:array[1..n,1..n] of integer;
Begin
writeln('massiv:');
begin
     for i := 1 to n do
     begin
             for j := 1 to n do Write (s[i,j]:7);
             Writeln;
     end;
     Writeln;
for p := 1 to (n+1) div 2 do
begin
for j := p to n-p+1 do Write (s[p,j] : 8);
for i := p+1 to n-p+1 do Write (s[i,n-p+1] : 8);
for j := n-p downto p do Write (s[n-p+1,j] : 8);
for i := n-p downto p+1 do Write (s[i,p] : 8);
end;
end;
end;
end.
Основная программа
Program Pr_1;
uses OBXOD;
Var z:integer;
    y:integer;
i,j:integer;
begin
  Spiral(z);
  Spiral2(y);
  Readln;
end.
в ней, что-то не так.Я думаю надо предусмотреть ввод массива, да и в основную программу передается по коду число, хотя на самом деле на экран выводится массив.Помогите пожалуйста разобраться.
P.S.Учителю не понравилось, то что у меня 2 процедуры и непонятно как заполняется массив.
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Код: Выделить всё

p:=0;
len:=4;//или 7, размер матрицы.
repeat
  case p mod 4 of
      0: for i:=p div 4 to len-1-(p div 4) do
           write(A[i, p div 4]);
      1: for i:=1+p div 4 to len-1-(p div 4) do
           write(A[len-1-(p div 4), i]);
      2: for i:=len-1-(p div 4) downto p div 4 
           write(A[i, len-1-(p div 4)]);
      3: for i:=len-1-(p div 4) downto 1+p div 4 do
           write(A[p div 4, i]);
  end;
  inc(p);
until p>2*len;
Не проверял
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
RAITER
Сообщения: 13
Зарегистрирован: 05 окт 2008, 16:15

Спасибо большое!
Ответить