Помощь - Поиск - Пользователи - Календарь
Полная версия: Сортировка массива.
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
dff
Отсортировать элементы с нечетными значениями в порядке
– возрастания, если сумма элементов с четными значениями больше суммы эле-ментов с нечетными;
– убывания, если сумма элементов с четными значениями меньше суммы эле-ментов с нечетнымими.

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

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

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

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

А если равно?
dff
ну циклом например

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
Цитата
как то так?
Лучше - вот так:

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 ];
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.