Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Двумерный массив (http://www.tehnari.ru/f41/t90762/)

WSA 07.09.2013 15:24

Двумерный массив
 
Помогите пожалуйста! я долго мучалась и пыталась сделать. ((( Это змейка из двух частей: вначале по столбцам "вниз-вверх" в верхней половине матрицы, потом по столбцам "вверх-вниз" в нижней половине.Если 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(n);

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[i]:=0;
{Подсчет}
for i:=1 to R do
for T:=i+1 to n do
if a[i]>a[j] then
inc(z[i])
else
inc (z[j]);
for i:=1 to n do
b[z[i]+1]:=a[i];
a:=b;
end;{Sort}


Часовой пояс GMT +4, время: 06:09.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.