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