Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 07.09.2013, 15:24   #1 (permalink)
WSA
Новичок
 
Регистрация: 07.09.2013
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Exclamation Двумерный массив

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

Старый 07.09.2013, 15:24
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Люди посещающие форум уже создавали что то подобное

Дан двумерный массив
Двумерный массив
Двумерный массив Си

Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.