Двумерный массив
Помогите пожалуйста! я долго мучалась и пыталась сделать. ((( Это змейка из двух частей: вначале по столбцам "вниз-вверх" в верхней половине матрицы, потом по столбцам "вверх-вниз" в нижней половине.Если n -нечетно, то центральную строку отнести к верхней половине матрицы. Но это еще не все. надо отсортировать элементы матрицы(сортировка подсчетом- см. внизу) так, чтобы они были по не убыванию. Ограничение: нельзя вводить дополнительных циклов, по сравнению с теми, что уже есть в сортировке. мне надо в пн сдать( либо я вылечу с универа(
Unit matrix_f;
interface
procedure initialize (asize:integer);
function coordstroka(K: integer): integer;
function column(K: integer): integer;
implementation
var n:integer;
{Функция для получения текущей строки}
function tekstroka(K: integer): integer;
var tstroka:integer;
begin
tstroka:= K div (n * 2);
if (K mod (n * 2) <> 0) then
tstroka := tstroka + 1;
tekstroka:=tstroka;
end;
{функция для получения координат столбца}
function column(K: integer): integer;
var step, tstroka, c: integer;
begin
tstroka:=tekstroka(K);
step := K - (tstroka - 1) * (n * 2);
c:= (step div 2) + (step mod 2);
if (tstroka mod 2 = 0) then
c:=n- c+ 1;
column:=c;
end;
{функция для получения координат строк}
function coordstroka (K: integer): integer;
var tstroka, c: integer;
begin
tstroka:= tekstroka(K);
c:=tstroka * 2;
if (K mod 2 = (column(K) mod 2)) then c:=c- 1;
coordstroka:=c;
end;
{процедура инициализации}
procedure initialize(asize: integer);
begin
n:= asize;
end;
end.
вот сама программа:
Код Pascal
program task1;
uses crt, matrix_f;
const n=10;
var matrix: array[1..n, 1..n] of integer;
loop, loopstroka, loopcolumn: integer;
begin
clrscr;
initialize
;
for loop := 1 to n*n do
matrix[coordstroka(loop)][column(loop)]:=loop-1;
for loopstroka:= 1 to n do
begin
for loopcolumn:= 1 to n do
begin
write(matrix[loopstroka][loopcolumn], ' ');
end;
writeln('');
end;
readkey;
end.
Сортировка подсчетом:
Код Pascal
procedure Sort(var z:Vector);
var
i,j,R,T:integer;
b:Vector;
begin{Sort}
R:=n-1;
{Обнуление счетчика*}
for i:=1 to n do
z:=0;
{Подсчет}
for i:=1 to R do
for T:=i+1 to n do
if a>a[j] then
inc(z)
else
inc (z[j]);
for i:=1 to n do
b[z+1]:=a;
a:=b;
end;{Sort}
Помогите пожалуйста! я долго мучалась и пыталась сделать. ((( Это змейка из двух частей: вначале по столбцам "вниз-вверх" в верхней половине матрицы, потом по столбцам "вверх-вниз" в нижней половине.Если n -нечетно, то центральную строку отнести к верхней половине матрицы. Но это еще не все. надо отсортировать элементы матрицы(сортировка подсчетом- см. внизу) так, чтобы они были по не убыванию. Ограничение: нельзя вводить дополнительных циклов, по сравнению с теми, что уже есть в сортировке. мне надо в пн сдать( либо я вылечу с универа(
Unit matrix_f;
interface
procedure initialize (asize:integer);
function coordstroka(K: integer): integer;
function column(K: integer): integer;
implementation
var n:integer;
{Функция для получения текущей строки}
function tekstroka(K: integer): integer;
var tstroka:integer;
begin
tstroka:= K div (n * 2);
if (K mod (n * 2) <> 0) then
tstroka := tstroka + 1;
tekstroka:=tstroka;
end;
{функция для получения координат столбца}
function column(K: integer): integer;
var step, tstroka, c: integer;
begin
tstroka:=tekstroka(K);
step := K - (tstroka - 1) * (n * 2);
c:= (step div 2) + (step mod 2);
if (tstroka mod 2 = 0) then
c:=n- c+ 1;
column:=c;
end;
{функция для получения координат строк}
function coordstroka (K: integer): integer;
var tstroka, c: integer;
begin
tstroka:= tekstroka(K);
c:=tstroka * 2;
if (K mod 2 = (column(K) mod 2)) then c:=c- 1;
coordstroka:=c;
end;
{процедура инициализации}
procedure initialize(asize: integer);
begin
n:= asize;
end;
end.
вот сама программа:
Код Pascal
program task1;
uses crt, matrix_f;
const n=10;
var matrix: array[1..n, 1..n] of integer;
loop, loopstroka, loopcolumn: integer;
begin
clrscr;
initialize
for loop := 1 to n*n do
matrix[coordstroka(loop)][column(loop)]:=loop-1;
for loopstroka:= 1 to n do
begin
for loopcolumn:= 1 to n do
begin
write(matrix[loopstroka][loopcolumn], ' ');
end;
writeln('');
end;
readkey;
end.
Сортировка подсчетом:
Код Pascal
procedure Sort(var z:Vector);
var
i,j,R,T:integer;
b:Vector;
begin{Sort}
R:=n-1;
{Обнуление счетчика*}
for i:=1 to n do
z:=0;
{Подсчет}
for i:=1 to R do
for T:=i+1 to n do
if a>a[j] then
inc(z)
else
inc (z[j]);
for i:=1 to n do
b[z+1]:=a;
a:=b;
end;{Sort}