13.06.2011, 19:35
|
#1
|
Регистрация: 23.02.2011
Сообщений: 4
|
не могу разобраться в чем ошибка
Цитата:
Написала прогу, и не могу понять почу она не так работает...Помогите пожалуйста....
Дано натуральное N (1 N 10)? целочисленный квадратный массив - матрица (aij) Отсортировать элементы матрицы так, чтобы при прохождении по спирали против часовой стрелки начиная с верхнего левого угла они были упорядочены по не убыванию методом сортировки выбора
Код:
uses Crt;
type
DataArray = array [1..100] of integer;
TMx = array[0 .. 100, 0 .. 100] of integer;
var
A:DataArray;
n,j,imin,i,x : integer;
t:integer;
B:TMx;
w,k,g,l,m,s:integer;
{заполнение матрицы случайными числами}
procedure matrix (var B:TMx);
begin
randomize;
For l:=1 to n do
begin
for m:=1 to n do
begin
B[l,m]:=random(20);
write(B[l,m]:2,' ');
end;
writeln;
end;
end;
{занесение значения матрицы в линейный массив}
procedure massiv(var x: DataArray);
begin
g:=1;
For l:=1 to n do
for m:=1 to n do
Begin
A[g]:=B[l,m];
inc(g);
end;
end;
{сортировка выбора}
procedure SortVibor (var a:DataArray);
var
k:integer;
max:integer;
begin
for g:=1 to n*n-1 do
begin
k:=g;
max:=a[g];
for j:=g+1 to n*n do
if a[j]<max then
begin
max:=a[j];
k:=j;
end;
A[k]:=a[g];
a[g]:=max;
end;
end;
{вывод отсортированного массива на экран}
procedure PrintVector (var a:DataArray);
begin
for g:= 1 to n*n do
write(a[g],' ');
writeln;
end;
{вывод сортированного массива матрицуй спиралью}
procedure spiral (n, k:integer; var i, j : integer);
begin
if (k<(n*4-4))then
begin
if (k<n) then //верхний слой
begin
j:=0;
i:=k;
end
else
if (k<(n*2-1)) then //слой справа
begin
j := k - n + 1;
i := n-1;
end
else
if (k < (n*3-2)) then //нижний слой
begin
j:= n - 1;
i:= n*3-3 - k;
end
else
begin//слой слева
j:= n*4-4 - k;
i:= 0;
end;
end
else
begin
spiral(k-(n*4-4), n-2, i, j); // удаление пройденое количество элементов, спучкаемся на нижний слой
inc(i);
inc(j);
end;
end;
begin
writeln('Введите число n');
readln(n);
matrix(B);
massiv(A);
SortVibor(A);
writeln;
printvector(a);
for k:=1 to n*n do
begin
spiral(n,k,i,j);
B[i,j]:=A[k];
end;
writeln;
{финальная матрица:');
For l:=1 to n do
begin
for m:=1 to n do
begin
write(B[l,m]:2,' ');
end;
writeln;
end;
end.
|
Оч прошу помочь....зачет не получу пока не сделаю эту программу
Последний раз редактировалось shokoladka5013; 13.06.2011 в 19:40.
|
|
|