Требуется: расположить элементы массива А в порядке возрастания (убывания).
Существует много различных методов. Рассмотрим один из них, основанный на поиске минимального (максимального) элемента массива или его части.
Исходные данные:
N - размер массива;
A - массив размером N;
Результат:
А - массив, упорядоченный по возрастанию;
Вспомогательные переменные:
P - переменная для хранения промежуточного значения минимального элемента;
K - индекс минимального элемента;
I - индекс элемента упорядоченного массива (управляющая переменная внешнего цикла);
J - индекс элемента части массива, в котором ищется минимальный элемент (управляющая переменная внутреннего цикла).
Вначале найдем минимальный элемент массива и поменяем его местами с первым элементом, затем определим минимальный элемент из оставшихся элементов (кроме первого) и поменяем его местами со вторым элементом.
Procedure SORTIROV (n : integer; A :mas; var A : mas; var K : integer);
{ где mas должен быть описан в главной программе, см 7.1.}
{ процедура упорядочивания одномерного массива по возрастанию}
Var p : real ; i, j : integer ; { локальные переменные }
begin
for i := 1 to n - 1 do
begin P := A [ i ] ; k := i ;
for j := i + 1 to n do
If A [ i ] < P then begin P := A [ i ] ; k := j end;
A [ k ] := A [ i ] ; A [ i ] := P
end
end;
После нахождения минимального из последних двух элементов и размещения его на предпоследнем месте на последнем автоматически останется самый большой элемент.
Представленные выше несколько типовых алгоритмов работы с массивами, так же как и более сложные фрагменты программ, можно легко проверить (так называемая, безмашинная отладка программ, или "прокрутка"). Для этого задаются конкретными значениями исходных данных и выполняют операторы процедур или программ шаг за шагом, фиксируя значение переменных после каждого выполнимого оператора.
Типовые алгоритмы оформлены в виде процедур, которые при необходимости можно использовать при программировании конкретных задач, связанных с обработкой массивов. Ниже рассмотрим несколько примеров обработки массивов.
Пример 1.
Упорядочить по возрастанию одномерный массив A размером N.
program primer_1;
const N = 5;
var A : array [ 1..N ] of real;
p : real;
i, j, k, g : integer;
begin
writeln('упорядочение массива по возрастанию');
writeln('введите элементы массива через пробел в конце ENTER ');
for i := 1 to N do read (A [ i ] ); writeln;
{ второй вариант ввода одномерного массива }
{ for i := 1 to N do
begin write (' введите A [', i:2 ,' ] = ' ) ; readln ( A[i] ); end;}
{ для упорядочивания массива задействуем промежуточные
переменные p - для запоминания минимального значения массива,
k - для запоминания его местонахождения }
for i := 1 to N - 1 do
begin
p := a [ i ] ; k := i ;
for j := i + 1 to N do
if A [ j ] < p then begin p := A[ j ]; k := j ; end;
A [ k ] := A [ i ] ; A [ i ] := p ;
end;
for i := 1 to N do
begin write( ' A [ i ] ='); writeln( A [ i ] : 8 : 5 ); end;
end.
В следующем примере представлен более удобный вариант оформления программ, где самостоятельные части работы вынесены в процедуры. Главная программа ( вызывающая ) получается тогда очень короткой, а отладка таких программ значительно проще.
Пример 2.
Программа для умножения сцепленных матриц A = ?aik? размера m x n и B = ?bik? размера r x s ( матрицы называются сцепленными, если число столбцов первой матрицы равно числу строк второй ). Произведение AB двух сцепленных матриц есть матрица C=?cik? размера m x s, где cik = ? aijbjk.