Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Пример 8.8



Дан массив вещественных чисел A(10). Упорядочить этот массив по возрастанию его элементов, т.е. сделать так, чтобы каждый следующий элемент массива оказался бы больше предыдущего.

Рассмотрим один из наиболее простых алгоритмов, разработанных для задач такого рода.

Детализированный вариант Упрощенный вариант

алгоритма алгоритма

Идея этого алгоритма заключается в том, что элементы исходного массива сравниваются попарно - сначала a1 c a2, потом a2 c a3, далее a3 с a4 и т.д. Если первый элемент в паре больше второго, то меняют их численные значения, в результате чего первый элемент получает значение второго, а второй – первого. В противном случае никаких замен в паре не производят, а переходят к сравнению элементов второй пары.

Таким образом, происходит как бы постепенное «проталкивание» наибольшего элемента в конец массива, причем функцию «толкача» в алгоритме выполняет внутренний цикл. Как только наибольший элемент массива займет предназначенное ему последнее 10-е место, описанную процедуру повторяют с оставшимися неупорядоченными 9-ю элементами, в результате чего наибольший из оставшихся элемент займет последнее место в массиве и т.д.

Для получения искомого результата такую процедуру нужно выполнить девять раз, причем с каждым разом число повторений внутреннего цикла должно уменьшаться на 1.

Эту задачу решает внешний цикл. Его параметр, пробегая от повторения к повторению 9, 8, 7,..., 1 служит не только счетчиком числа повторений, но, в то же время, и наибольшим значением параметра внутреннего цикла.

program sort;

var i,k: integer;

b: real;

a: array [1..10] of real;

begin

write (‘введите массив - ‘);

for i:=1 to 10 do readln (a [ i ]);

writeln (' исходный массив:);

for i:=1 to 10 do write (a [ i ]:5:2);

for i:=9 downto 1 do

for k:=1 to i do if a [ k ] > a [ k + 1] then

begin

b:= a [ k ]; a [ k ]:= a [ k + 1 ]; a [ k + 1 ]:= b

end

writeln(' упорядоченный массив:');

for i:=1 to 10 do write (a [ i ]:5:2)

end.


Пример 8.9

Дана матрица A(20x20). Сформировать вектор C(20), каждый элемент которого есть произведение элементов столбца матрицы, за исключением элемента, лежащего на главной диагонали. Индексацию строк и столбцов исходной матрицы начать с нуля, индексацию элементов вектора с 10.

Численное значение p каждого элемента вектора C формируется во внутреннем цикле алгоритма, а запись в массив (C[n+10]:=p) – во внешнем после завершения очередного повторения тела внутреннего цикла.

Схема алгоритма

program massiv;

var b: array [0..19,0..19] of real;

c: array [10..29] of real;

p: real; m,n: integer;

begin

for m:=0 to 19 do

for n:=0 to 19 do read (b [m, n]);

for n:=0 to 19 do

begin

p:=1; for m:=0 to 19 do

if m <> n then {формирование произведения }

p:= p * b [m, n]; {элементов столбца матрицы }

{за исключением диагонального}

c[n + 10]:=p; {запись значения в массив С }

end;

for n:=10 to 19 do write (c[ n ]:10:3)

end.

 
 





Дата публикования: 2015-01-24; Прочитано: 185 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...