Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Сортировка массива.

Автор: dff 3.05.2011 22:25

Отсортировать элементы с нечетными значениями в порядке
– возрастания, если сумма элементов с четными значениями больше суммы эле-ментов с нечетными;
– убывания, если сумма элементов с четными значениями меньше суммы эле-ментов с нечетнымими.

Вопрос,как из массива выделить четные и нечетные элементы для дальнейшего сумирования?


Автор: IUnknown 3.05.2011 22:39

Будь внимательнее: элементы с нечетными значениями, или элементы с нечетными индексами? Обычно тут многие ошибаются...

Цитата
как из массива выделить четные и нечетные элементы для дальнейшего сумирования?
А не надо ничего выделять. Заводи два счетчика: один для четных значений, другой - для нечетных. А потом проходи по массиву циклом и суммируй элементы. Четность элементов проверяется любым из способов: либо (a[ i ] and 1 = 0), либо (a[ i ] mod 2 = 0), можно и так: not odd(a[ i ]). И добавляй, в зависимости от выполнения условия, либо к одному счетчику, либо к другому.

В поиске, кстати, можно поискать, реализация подобной сортировки мной выкладывалась. Как минимум один раз; может, кто-то еще свою постил - не помню.

Автор: -TarasBer- 3.05.2011 23:18

> – возрастания, если сумма элементов с четными значениями больше суммы эле-ментов с нечетными;
> – убывания, если сумма элементов с четными значениями меньше суммы эле-ментов с нечетнымими.

А если равно?

Автор: dff 3.05.2011 23:26

ну циклом например

for i:=1 to N do
begin
if odd(i) then a:=b{нечет}
else a:=c{чет};
b:=b+1;
c:=c+1

end;


как то так?



Добавлено через 1 мин.
Цитата(-TarasBer- @ 3.05.2011 19:18) *

> – возрастания, если сумма элементов с четными значениями больше суммы эле-ментов с нечетными;
> – убывания, если сумма элементов с четными значениями меньше суммы эле-ментов с нечетнымими.

А если равно?


не сортировать

Автор: IUnknown 4.05.2011 1:08

Цитата
как то так?
Лучше - вот так:

s_even := 0;  // сумма четных
s_odd := 0; // сумма нечетных
for i := 1 to n do
if odd(a[ i ]) then // нечетный элемент ?
s_odd := s_odd + a[ i ]
else
s_even := s_even + a[ i ];