Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 мая 2024, 00:40

УДАЛИТЬ КАЖДЫЙ 3-Й ЭЛЕМЕНТ МАССИВА

Автор Артём Сурмин, 25 мар 2020, 16:10

0 Пользователей и 1 гость просматривают эту тему.

Артём Сурмин

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

wise

(0) попробуйте ТАК:
{
МаксНомер = ВашМассив.Количество();
Пока МаксНомер >= 0 Цикл
    Если МаксНомер%3 = 0 Тогда
        ВашМассив.Удалить(МаксНомер-1);
    КонецЕсли;
    МаксНомер = МаксНомер - 1;
КонецЦикла;

}
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

Артём Сурмин

wise, пишет индекс находится за пределами массива,как мне правильно вывести (

Процедура УдалитьТретийЭлемент(Команда)
   
   Массив = Новый Массив(Объект.ПолеВвода);
        
   //ОбработатьМассив2(Массив);
   
   
   МаксНомер = Массив.Количество();
Пока МаксНомер >= 0 Цикл
    Если МаксНомер%3 = 0 Тогда
        Массив.Удалить(МаксНомер-1);
      Сообщить(Массив[МаксНомер]) ;
    КонецЕсли;
    МаксНомер = МаксНомер - 1;
КонецЦикла;

wise

(2) СНАЧАЛА сообщить, а ПОТОМ удалить.
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

Артём Сурмин

wise, он я так понял вывод каждый третий элемент , а надо чтобы удалял каждый третий пока не останется 2 элемента в массиве я так понял


wise

(4) {нужно удалять каждый третий элемент} ЭТО же Вы писали...
мой код и удаляет каждый третий элемент...
если надо - "пока не останется 2 элемента в массиве"
поставьте условие ПОСЛЕ цикла на проверку количества элементов
и рекурсивно вызывайте ЭТУ процедуру.
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

Артём Сурмин

wise,    КоличествоЭлементов = Массив.Количество();
   Если КоличествоЭлементов < 3 Тогда
      Сообщить("В массиве недостаточно элементов для анализа");
      Возврат;
   КонецЕсли;
    Разделитель = ",";
   Пока КоличествоЭлементов > 5 Цикл
      Пока КоличествоЭлементов > 1 Цикл
         //Сообщить(СтрСоединить(КоличествоЭлементов,Разделитель));

         Если Цел((КоличествоЭлементов)/3) = (КоличествоЭлементов)/3 Тогда 
            
            Массив.Удалить( КоличествоЭлементов-1);
            //Сообщить(СтрСоединить(КоличествоЭлементов,Разделитель));
            Сообщить(КоличествоЭлементов);

         КонецЕсли;     
         КоличествоЭлементов = КоличествоЭлементов -1;
      КонецЦикла;
      
   КонецЦикла;

сейчас вот так, но считает вообще не правильно , ввожу 12 элементов, ответ 3.6.9 12

а нужно чтобы выводило в строку через запятую 1,2,4,5,7,8,10,11,
                                              1,2,5,7,8,11
                                              1,2,7,8,11
ну и т.д пока не останется три элемента

alex0402

МаксНомер = Массив.Количество();
Пока МаксНомер >= 3 Цикл
    Пока МаксНомер >= 0 Цикл
        Если (МаксНомер+1)%3 = 0 Тогда
            Массив.Удалить(МаксНомер);
        КонецЕсли;
        МаксНомер = МаксНомер - 1;
    КонецЦикла;
    Строка = "";
    Для ш = 0 По Массив.Количество()-1 Цикл
        Строка = Строка + Массив [ш] + ",";
    КонецЦикла;
    Сообщить(Строка);
    МаксНомер = Массив.Количество();
КонецЦикла
Спасибо за Сказать спасибо

Артём Сурмин

alex0402, {Обработка.Массив.Форма.Форма.Форма(26)}: Ошибка при вызове метода контекста (Удалить)
            Массив.Удалить(МаксНомер-1);
по причине:
Значение индекса выходит за границы диапазона


вот это пишет

alex0402

Цитата: Артём Сурмин от 27 мар 2020, 16:32
alex0402, {Обработка.Массив.Форма.Форма.Форма(26)}: Ошибка при вызове метода контекста (Удалить)
            Массив.Удалить(МаксНомер-1);
по причине:
Значение индекса выходит за границы диапазона


вот это пишет
изменил
Спасибо за Сказать спасибо

Похожие темы (5)

Рейтинг@Mail.ru

Поиск