Читайте также: |
|
b: array [1..100] of real;
Begin
write ('введите массив');
for i:=1 to 100 do read (b[i]);
Readln;
max:=b[1]; { присваивание текущему максимуму
max его начального значения }
{ поиск элемента вектора с наибольшим значением }
for i:=2 to 100 do
if b[i] > max then max:= b[i];
writeln ('max=', max:10:3)
End.
Пример 4.7. Дан массив вещественных чисел A(10). Упорядочить этот массив по возрастанию его элементов, т.е. сделать так, чтобы каждый следующий элемент массива оказался бы больше предыдущего.
Рассмотрим один из наиболее простых алгоритмов, разработанных для задач такого рода, так называемый “метод пузырька”. Идея этого алгоритма заключается в том, что сравниваются два соседних элемента исходного массива – сначала a1 c a2, потом a2 c a3, далее a3 с a4 и т.д. Если первый элемент в паре больше второго, то меняют их численные значения, в результате чего первый элемент получает значение второго, а второй – первого. В противном случае никаких замен в паре не производят, а переходят к сравнению элементов второй пары. Каждая перестановка элементов фиксируется, т.е. при перестановке увеличивается значение специальной переменной kP.
Как поменять местами содержимое a[i] и a[i+1]? Задача кажется достаточно простой – надо записать два оператора
a[i]:= a[i+1]; a[i+1]:= a[i];
Однако, предположим, что значение a[i] равно 1, а a[i+1] – 10. Тогда при выполнении первого присваивания a[i] станет равным 10, так же, как и a[i+1], а старое значение a[i] потеряется. Значит, это вариант выполнения не годится.
Вспомним известную головоломку о двух стаканах: один стакан наполнен водой, другой – вином. Как поменять местами их содержимое. Наверняка все знают, что для решения задачи нужен третий, пустой стакан. Сначала из стакана с вином выливают содержимое в третий стакан, освобождая первый стакан, затем воду из второго стакана выливают в свободный первый стакан, и, наконец, из третьего стакана выливают вино в освободившийся второй. Аналогично решается задача и с элементами массива. Роль «третьего стакана» сыграет вспомогательная переменная b, а решение сведется к следующей последовательности операторов:
b:= a[i]; { «освобождаем» первый элемент, сохраняя его
содержимое в «третьем стакане»}
a[i]:= a[i+1]; { переписываем значение 2-го элемента в 1-й }
a[i+1]:=b; { восстанавливаем сохраненное содержимое }
Вернёмся к алгоритму упорядочивания. В результате выполнения всего алгоритма происходит как бы постепенное «проталкивание» наибольшего элемента в конец массива (как пузырек воздуха в воде всплывает наверх – отсюда название метода), причем функцию «толкача» в алгоритме выполняет внутренний цикл. Как только наибольший элемент массива займет предназначенное ему последнее 10-е место, описанную процедуру повторяют с оставшимися неупорядоченными 9-ю элементами, в результате чего наибольший из оставшихся элемент займет последнее место в массиве и т.д.
Для получения нужного результата такую процедуру повторяют до тех пор, пока после очередного просмотра массива не получим число перестановок kP = 0. Это означает, что весь массив упорядочен, и надо заканчивать выполнение программы.
const n = 10;
var i, kP,j: integer;
b: real;
a: array [1..n] of real;
Begin
write (‘введите массив‘);
for i:=1 to n do read (a[i]);
writeln (' исходный массив:);
for i:=1 to n do write (a[i]:5:2);
Дата добавления: 2015-07-18; просмотров: 118 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Пример 4.1 | | | Вводные понятия |