• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

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

  • Автор темы Автор темы WSA
  • Дата начала Дата начала

WSA

Ученик
Регистрация
7 Сен 2013
Сообщения
1
Реакции
0
Баллы
0
Двумерный массив

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