Задача № 235 на Pascal
Составить программу для сортировки массива А из 10 элементов по следующему принципу: четные элементы по возрастанию, а не четные по убыванию.
VAR
a:array[1..10]of integer;
i,i1,tmp:integer;
BEGIN
{1). Создание исходного массива}
writeln('Исходный массив:');
randomize; for i:=1 to 10 do
begin
a[i]:=random(9);
write(' ',a[i]);
end;
writeln;
{2). Сортировка исходного массива} for i:=1 to 10-1 do for i1:=i+1 to 10 do
BEGIN
if (a[i]>a[i1])and(a[i1] mod 2=0)and(a[i] mod 2=0) then
begin
tmp:=a[i];
a[i]:=a[i1];
a[i1]:=tmp;
end;
if (a[i]<a[i1])and(a[i1] mod 2=1)and(a[i] mod 2=1) then
begin
tmp:=a[i];
a[i]:=a[i1];
a[i1]:=tmp;
end;
END;
{3). Вывод отсортированного массива} writeln;
writeln('Полученный массив:');
for i:=1 to 10 do write(' ',a[i]); END. |
· переменная a - исходный массив с числом элементов 10
· переменные i, i1 - переменные для цикла
· переменная tmp - для временного хранения одного элемента массива.
Решение этой задачи я разбил на 3 части: создание исходного массива, сортировка исходного массива, вывод отсортированного массива.
Первая и третья части очень просты и могут быть записаны по разному. А вот о третьей части я расскажу.
Сортировка исходного массива
Для сортировки массивов разработано несколько методов. Метод сортировки, который используется в этой программе называется "Линейная сортировка" или "Сортировка отбором". Он заключается в том, что последовательно берется один элемент и сравнивается с оставшимися элементами массива. И в зависимости от условия сравнения этих элементов они меняются друг с другом местами.
Например: 2,5,1 - нужно отсортировать по возрастанию.
Используя данный метод сравниваем 1-й элемент со 2-м и 3-м элементами. Выясняем, что 2>1, поэтому меняем их местами, получим: 1,5,2. Теперь сравниваем 2-й элемент с 3-м элементом. Выясняем, что 5>2, поэтому меняем их местами и получим результат такой сортировки: 1,2,5.
Теперь когда знаем как сортировать элементы массива, можно писать программу для сортировки. Она будет выглядеть таким образом:
...
for i:=1 to 10-1 do
for i1:=i+1 to 10 do
BEGIN
if (a[i]>a[i1]) then
begin
tmp:=a[i];
a[i]:=a[i1];
a[i1]:=tmp;
end;
END;
...
|
При условии a[i]>a[i1] - эти элементы поменяются друг с другом местами.
Вот эта часть программы будет сортировать массив по возрастанию. Другую часть программы для сортировки по убыванию просто написать - заменив знак > на <.
Теперь для того чтобы отсортировать четные элементы массива нужно добавить к уже готовой части для сортировки, еще 2 условия. Первое условие, что сравниваемый элемент - четный. Второе условие, что оставшиеся элементы, которые будут сравниваться с тем - тоже четные.
Для не четных элементов нужно добавить аналогичные 2 условия.