Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Решение. Эта задача является логическим продолжением задачи примера 4






Алгоритм

Эта задача является логическим продолжением задачи примера 4. В самом деле, чтобы расположить элементы массива по такой схеме и выполнить условие задачи - упорядочить элементы в порядке возрастания, надо:

1) " растянуть" матрицу в одномерный массив;

2) упорядочить полученный массив в порядке возрастания;

3) " выбрать" из полученного одномерного массива столбцы с расположением элементов по предложенной схеме.

Первый пункт этого алгоритма выполнить нетрудно, основываясь на предыдущем примере.

Упорядочить полученный одномерный массив можно с помощью процедуры быстрой сортировки.

Третий пункт является для нас новым. Чтобы выполнить его, надо заметить следующую закономерность. Если столбец двумерного массива имеет нечетный номер, т. е. 1-й, 3-й, 5-й и т.д., тогда элементы располагаются в порядке возрастания от 1-го элемента столбца до n-го - " сверху вниз".

Если номера столбцов четные, т. е. 2-й, 4-й, 6-й и т. д., тогда элементы располагаются от n-го до 1-го - " снизу вверх".

Теперь можно составить схему программы.

 

Схема программы

Program Problem18;

Описание массивов и переменных.

Процедура быстрой сортировки.

Begin

Создание двумерного массива с помощью функции случайных чисел и одновременное " растягивание" в одномерный массив, а также вывод полученной матрицы на экран.

Вызов процедуры быстрой сортировки и сортировка одномерного массива в порядке возрастания.

v: = 1; - счетчик столбцов матрицы, получаемой из отсортированного одномерного массива;

k: = 0; - счетчик элементов одномерного массива;

Repeat

if v mod 2 < > 0 then

for i: = 1 to n do

Begin

k: = k + 1;

a[i, v]: = b[k]

End

Else

for i: = n downto 1 do

Begin

k: = k + 1;

a[i, v]: = b[k]

end;

v: = v + 1

until v = m + 1;

Вывод массива на экран.

end.

Program Problem18;

uses WinCrt;

const

n = 5; m = 6;

type

s = array [1..m] of integer; t = array [1..n] of s; f = array [1..n*m] of integer;

var

a: t;

b: f;

i, j, k, v: integer;

{----------------------------------------------------------------------------------------}

Procedure create_two(n, m: integer; var a: t);

var

i, j: integer;

begin

writeln('Заданный двумерный массив целых чисел');

randomize;

for i: = 1 to n do

Begin

for j: = 1 to m do

Begin

a[i, j]: = random(201) - 100;

write(a[i, j]: 6, ' ')

end;

writeln

End

End;

{----------------------------------------------------------------------------------------}

Procedure sprain(n, m: integer; a: t; var b: f);

var

k, i, j: integer;

begin

k: = 0;

for i: = 1 to n do

for j: = 1 to m do

Begin

k: = k + 1;

b[k]: = a[i, j]

end

End;

{----------------------------------------------------------------------------------------}

Procedure fast(q, p: integer; var b: f);

var

s, l, r: integer;

begin

l: = q; r: = p;

s: = b[l];

repeat

while (b[r] > = s) and (l < r) do r: = r - 1;

b[l]: = b[r];

while (b[l] < = s) and (l < r) do l: = l + 1;

b[r]: = b[l]

until l = r;

b[l]: = s;

if q < l - 1 then fast(q, l - 1, b);

if l + 1 < p then fast(l + 1, p, b)

End;

{----------------------------------------------------------------------------------------}

Begin

create_two(n, m, a);

sprain(n, m, a, b);

fast(1, n*m, b);

for i: = 1 to n*m do write(b[i], ' '); writeln;

v: = 1; k: = 0;

repeat

if v mod 2 < > 0 then

for i: = 1 to n do

Begin

k: = k + 1;

a[i, v]: = b[k]

end

Else

for i: = n downto 1 do

begin

k: = k + 1;

a[i, v]: = b[k]

end;

v: = v + 1

until v = m + 1;

writeln('Массив расположения элементов по схеме');

for i: = 1 to n do

Begin

for j: = 1 to m do write(a[i, j]: 6, ' '); writeln

end

end.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.