Алгоритм перестановки элементов (обмена значениями) прост. Для его выполнения достаточно воспользоваться "временной" переменной, в которую сначала помещают значение первой переменной. Затем в первую переменную заносят значение второй (если не воспользоваться "временной" - значение первой переменной будет потеряно). И сохраненное значение первой переменной во "временной" заносят во вторую переменную. Эту операцию образно можно сравнить с операцией по переливанию двух разных жидкостей из двух пробирок, воспользовавшись третьей - пустой пробиркой.
Рассмотрим задачу обмена максимального и минимального элементов местами.
i
Ai
-5
-2
1.1
-7
-1
2.6
-1.3
max
i_max
min
i_min
-7
i
Ai
-5
-2
-7
1.1
-1
2.6
-1.3
№ 12. ProgramPerestanovka;
Type
mass=array[1..20] of real;
Var
a: mass;
i , i_max, i_min : integer;
max, min, tmp : real;
Begin
randomize;
writeln (‘ Массив A ‘);
for i:=1 to 20 do
Begin
a[ i ]:=(random(201)-80)/(random(100)+1);
write (a[ i ]:6:2);
end;
max:=a[1];
i_max:=1;
min:=a[1];
i_min:=1;
for i:=2 to 20 do
Begin
if a[ i ]>max then
Begin
max:=a[ i ];
i_max:=i
end;
if a[ i ]<min then
Begin
min:=a[ i ];
i_min:=i
end;
end;
tmp:=a[i_min];
a[i_min]:=a[i_max];
a[i_max]:=tmp;
writeln (‘ Массив A c переставленными максимальным и минимальным эл-ми‘);
for i:=1 to 20 do
write (a[ i ]:6:2);
readln;
End.
Инвертирование массива. (№ 13)
Инвертирование массива - это запись его элементов в обратном порядке. Для решения этой задачи можно воспользоваться другим массивом, в который можно записать элементы из данного массива в обратном порядке. Однако целесообразнее сделать это за наименьшее количество перестановок и не использовать дополнительного массива. Как это сделать? Можно двигаться от первого элемента до середины массива и менять местами первый элемент с последним, второй - с предпоследним и т.д. Получается что в цикле будут обмениваться элемент с i-м индексом с элементом у которого индекс равен n-i+1 , где n- индекс последнего элемента.