Решенные задачи на языке Паскаль
Условие задачи - из "гостевой книги".
Составить программу для сортировки массива А из 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 условия.