Добрый день! Подскажите пожалуйста как удалить все четные числа массива? Заранее благодарю!

Дело в том, что мы сами создаем массив и должны потом удалить из него четные числа. При этом размер массива должен уменьшиться. После соответственно вывести что получится. Написал я вот так, выводятся четные числа, хотя надо нечетное.

```1c
    Процедура УдалитьЧетныеЧисла(Команда)
    Массив = Новый Массив;

    Массив.Добавить(1000);
    Массив.Добавить(2300);
    Массив.Добавить(2501);

    Количество = Массив.Количество();
    Смещение = 0;
    Для Сч = 1 По Массив.Количество() Цикл
    Если Сч%2 = 0 Тогда
    Массив.Удалить(Сч-Смещение);
    Смещение = Смещение + 1;
    КонецЕсли;
    КонецЦикла;

    Для Каждого ЭлементМассива из Массив Цикл
    Сообщить(ЭлементМассива);

    КонецЦикла;
    КонецПроцедуры
```
---
```1c
    Индекс = 0;
    Пока Индекс < Массив.Количество() Цикл
    Если Массив[Индекс] %2 = 0 Тогда
    Массив.Удалить(Индекс );
    Иначе
    Индекс = Индекс + 1;
    КонецЕсли;
    КонецЦикла;
```
---
```1c
    Смещение = 1;
    Для Сч = 1 По Массив.Количество() Цикл
    Если Сч%2 = 0 Тогда
    Массив.Удалить(Сч-Смещение);
    Смещение = Смещение + 1;
    КонецЕсли;
    КонецЦикла;
```
---
После удаления элемента индексы же все сдвинутся - это раз ))) И ошибка выскочит, когда их количество станет меньше чем итераций в цикле - это два...
---
Поэтому сделано смещение, смотри внимательней. Код рабочий. Но твой вариант конечно лучше.

```1c
    Количество = Массив.Количество();
    Сч = 1;
    Пока Сч < Количество Цикл
    Массив.Удалить(Сч);
    Количество = Количество - 1;
    Сч = Сч + 1;
    КонецЦикла;
```
---
```1c
    Количество = Окр(Массив.Количество()/2, 0) - 1;
    Для Индекс = 0 По Количество Цикл
    Массив.Удалить(Индекс);
    КонецЦикла;
```
---
Шикарно!
---
Сначала удаляешь нулевой, потом первый, потом второй... Нулевой - это же четный, да?

И не спеши ругаться - это правильное решение.
---
Дело в том, что мы сами создаем массив и должны потом удалить из него четные числа. При этом размер массива должен уменьшиться. После соответственно вывести что получится. Написал я вот так, выводятся четные числа, хотя надо нечетное.

```1c
    Процедура УдалитьЧетныеЭлементы(Команда)
    Массив = Новый Массив;

    Массив.Добавить(1000);
    Массив.Добавить(2300);
    Массив.Добавить(2501);

    Количество = Массив.Количество();
    Смещение = 0;
    Для Сч = 1 По Массив.Количество() Цикл
    Если Сч%2 = 0 Тогда
    Массив.Удалить(Сч-Смещение);
    Смещение = Смещение + 1;
    КонецЕсли;
    КонецЦикла;

    Для Каждого ЭлементМассива из Массив Цикл
    Сообщить(ЭлементМассива);

    КонецЦикла;
    КонецПроцедуры
```
---
Дело в том, что мы сами создаем массив и должны потом удалить из него четные числа. СТОПЭ! Так все-таки четные числа, или четные элементы??? Четные элементы - это элементы с четными индексами, и там внутри могут хоть картинки лежать!

Ставь задачу аккуратнее!
---
Виноват, не заметил, что написал элементы. Нужно четные числа удалить.
---
То же самое, с минимальными доработками

```1c
    Смещение = 0;
    Для Сч = 1 По Массив.Количество() Цикл
    Если Массив[Сч] %2 = 0 Тогда
    Массив.Удалить(Сч-Смещение);
    Смещение = Смещение + 1;
    КонецЕсли;
    КонецЦикла;
```
---
```1c
    Индекс = 0;
    Пока Индекс < Массив.Количество() Цикл
    Если Массив[Индекс] %2 = 0 Тогда
    Массив.Удалить(Индекс );
    Иначе
    Индекс = Индекс + 1;
    КонецЕсли;
    КонецЦикла;
```
---
Это уже не так идеально, как твой первый вариант, т.к. тут надо каждый раз дергать метод Количество().
---
Да, согласен - это явная потеря процессорного времени на вычисление (машинные итерации), но зато для чтения более наглядно.
Сам всегда ругаю за такие вещи, когда вычислительные методы в цикле дергают без необходимости...

Но это уже вопрос к оптимальности прикладного решения. Для решения теоретической задачи - так намного лучше, показывает ширину мысли.
Это как вычисление факториала. Если мне на собеседовании соискатель напишет рекурсию из одной строчки - это будет ему плюс за мышление. Но в реальной работе он за такую рекурсию люлей получит, без сомнения.
---
Если я правильно понял, то лучше использовать второй массив для сохранения результата условия Массив[Индекс] %2 = 0 имхо.
---
Задача стояла удалить из текущего, а не скопировать в другой массив.
---
Если дело не в результате тогда да.
---
Да, это классическая теоретическая задача на умение строить алгоритмы. Здесь важен процесс и соблюдение установленных ограничений..
---
del
---
Удалил пост, была ошибка, так как использовался во 2-м алгоритме тот же массив. Данные не корректны. Результаты примерно одинаковые.
---
Случайно не с codewars.com задачка ?
---
Любые работы по удалению элементов массива нужно проводить с конца массива. Иначе это индусский код.

```1c
    нмакс - Массив.Количество()-1;
    Для к = 0 по нмакс Цикл
    Индекс = нмакс - к;
    Если Индекс % 2 = 0 Тогда
    Массив.Удалить(Индекс);
    КонецЕсли;
    КонецЦикла;
```
---
Кто такую чушь сказал? Все зависит от задачи, от умения оперировать индексами, и понимания того, что происходит с индексами при удалении элемента... Но никто не устанавливал "удаление с конца" как единственную панацею.

Да и сам-то ты в своем коде удаляешь начиная с начала массива.
---
потому что это поведение неочевидно.
Я в своем коде удаляю с конца, посмотрите внимательнее.
---
Да, сорян. Не заметил, что индекс и итератор у тебя - разные переменные.

Поведение как раз таки абсолютно очевидно. И именно этой очевидностью можно с успехом пользоваться при умении.
---
А что этот код должен делать?
---
какой?
---
а прочитать условие задачи ТП, посмотреть свой код и понять, что он не для решения этой задачи.
---
Прочти название темы и сравни с условием задачи. Не соответствие названия и содержания - проблема того, кто создал тему, а не того, кто решает задачу. Принцип решения - верный, а удаление четных элементов или четных чисел в элементах массива - это уже лирика
---
а вы все ТЗ делаете по названию не читая?
---
А это не ТЗ все-таки, а оказание помощи в вопросе. Так что это тот, кто спрашивает заинтересован, чтобы его правильно поняли, а не наоборот.
---
и да, вы наверно спутали с четным индексом элемента массива. Бывает.
---
Каждый четный элемент массива - может быть понять по разному. Либо каждый второй элемент, либо каждый элемент, имеющий четный индекс, либо каждый элемент, являющийся четным числом. Если бы тема была "Удалить все четные числа из массива чисел", то вопросов бы не возникало.
Автор сам запутался, что ему нужно было сделать. Посмотри код, который написал автор и какую задачу обрисовал.
---
Каждый четный элемент массива - может быть понять по разному
Уже прогресс. Значит не однозначно для вас оказалось определение. Но сам вопрос игнорируем. Однако.
---
Какой ты нудный)
Возможно я имел ввиду каждый второй элемент массива, а не каждый элемент с четным индексом, а возможно каждый элемент с четным индексом, какая разница-то?
Вопрос в том, зачем докапываться до решения, если задающий вопрос в заголовке пишет "Помогите удалить каждый четный элемент массива", в задаче пишет, что нужно удалить четные числа из массива, а в коде пытается удалить элементы, имеющие четный индекс?
---
сорри, посмотрел на заголовок и не посмотрел текст темы
---
да все с кодом нормально. Я просто объяснил что в данном случае он не совсем подходит. Чтобы другие кто будет смотреть не пытались его копипастить не думая.
---
Любые работы по удалению элементов массива нужно проводить с конца массива. Иначе это индусский код.
Не всегда это возможно. Например удалять нужно по мере вычислений с начала массива. Т.е. если сумма n первых элементов превысила определенной число, то удалить текущий элемент. И такое бывает.
Так что не надо делать такие громкие заявление.
Все зависит от задач и умений пользоваться программным кодом.
---
кстати, для просто удаления четных индексов элементов массива можно совсем просто, но не очевидно )

```1c
    КоличествоУдаляемых = Цел(Массив.Количество()/2);
    Для Индекс = 0 По КоличествоУдаляемых Цикл
    Массив.Удалить(Индекс);
    КонецЦикла;
```
---
См. самые первые ответы - (3) и (7).
---
тема большая не увидел (7). Только не понял зачем там Окр?
---
Чтобы увеличить например 9/2 = 4,5 до 5.
---
Если это тестовое задание, то нужно сдвигать массив влево.

```1c
    Инд1 = 1; Инд2 = 2;
    Пока Инд2 < Мас.ВГраница() Цикл
    Мас[Инд1] = Мас[Инд2];
    Инд1 += 1; Инд2 += 2;
    КонецЦикла;

    Пока Инд2 > Инд1 Цикл
    Мас.Удалить(Инд2--);
    КонецЦикла;
```
ЗЫ: в коде есть неточности, сами их исправьте.