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

Интересное задание с массивом

Автор TesterLenovo, 14 июн 2019, 14:52

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

TesterLenovo

Всем привет! :)

Ребят, вот такая задачка:

1 часть:
- Сгенерировать массив из 50 случайных целых чисел.
- Изменить каждый 6-ой элемент на 0.
- Каждый 11 элемент должен изменить свой знак, положительное должно стать отрицательным и наоборот.

2 часть:
- Перестроить массив таким образом, чтобы вначале следовали отрицательные элементы, затем нули и после располагались положительные элементы массива.
- Порядок следования среди положительных и отрицательных элементов должен быть сохранен прежним (пример 1 -2 -3 4 5 0, будет -2 -3 0 1 4 5).

Запнулся на 2 части, помогите пожалуйста, как это сделать?

KOI8-R

Проще всего загрузить массив в ТЗ и отсортировать, а потом выгрузить обратно в массив.

Z.spb

Вариант 1 Массив = Новый Массив;
Массив.Добавить(1);
Массив.Добавить(-2);
Массив.Добавить(-3);
Массив.Добавить(4);
Массив.Добавить(5);
Массив.Добавить(0);

///////////////////

НовыйМассив = Новый Массив;

сч = 0;
Пока сч < Массив.Количество() Цикл
ЭлементМассива = Массив[сч];
Если ЭлементМассива<0 Тогда
НовыйМассив.Добавить(ЭлементМассива);
Массив.Удалить(сч);
Иначе
сч = сч + 1;
КонецЕсли;
КонецЦикла;

сч = 0;
Пока сч < Массив.Количество() Цикл
ЭлементМассива = Массив[сч];
Если ЭлементМассива=0 Тогда
НовыйМассив.Добавить(ЭлементМассива);
Массив.Удалить(сч);
Иначе
сч = сч + 1;
КонецЕсли;
КонецЦикла;

Для каждого ЭлементМассива из Массив Цикл
НовыйМассив.Добавить(ЭлементМассива);
КонецЦикла;

Массив = НовыйМассив;

//////////////////////

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



Вариант 2

Массив = Новый Массив;
Массив.Добавить(1);
Массив.Добавить(-2);
Массив.Добавить(-3);
Массив.Добавить(4);
Массив.Добавить(5);
Массив.Добавить(0);

///////////////////

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("НомерСтроки");
ТЗ.Колонки.Добавить("Цифра");
ТЗ.Колонки.Добавить("Порядок");

Для сч=0 По Массив.Вграница() Цикл
НС = ТЗ.Добавить();
НС.НомерСтроки = сч;
НС.Цифра = Массив[сч];
НС.Порядок = ?(НС.Цифра<0,1,?(НС.Цифра=0,2,3));
КонецЦикла;

ТЗ.Сортировать("Порядок,НомерСтроки");

Массив = ТЗ.ВыгрузитьКолонку("Цифра");

//////////////////////

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


LexaK

используйте Список значений и его сортировки вот пример

//проверка массива

лкМассив = Новый Массив;
//1 -2 -3 4 5 0,
лкМассив.Добавить(1);
лкМассив.Добавить(-2);
лкМассив.Добавить(-3);
лкМассив.Добавить(4);
лкМассив.Добавить(5);
лкМассив.Добавить(0);

//сортировка по значению
лкСЗ = Новый СписокЗначений;
лкСЗ.ЗагрузитьЗначения(лкМассив);
лкСЗ.СортироватьПоЗначению();
рез = лкСЗ.ВыгрузитьЗначения();

//сортировка по представлению - как раз ваша задача
лкСЗ = Новый СписокЗначений;
Для каждого лкЗнач Из лкМассив Цикл
лкСтр = "0";
Если лкЗнач = 0 Тогда
лкСтр = "1";
ИначеЕсли лкЗнач > 0 Тогда
лкСтр = "2";
КонецЕсли;
лкСЗ.Добавить(лкЗнач,лкСтр);
КонецЦикла;

лкСЗ.СортироватьПоПредставлению();
рез = лкСЗ.ВыгрузитьЗначения();
если помогло нажмите: Спасибо!

TesterLenovo

Большое спасибо вам ребята! Всем нажал спасибо! :ooifh:
Сработал первый вариант решения который предложил Z.spb!

rekrok

Помогите таже задача, в чем ошибка?
1 часть:
- Сгенерировать массив из 50 случайных целых чисел.
- Изменить каждый 6-ой элемент на 0.
- Каждый 11 элемент должен изменить свой знак, положительное должно
стать отрицательным и наоборот.
2 часть:
- Перестроить массив таким образом, чтобы вначале
следовали отрицательные элементы, затем нули и после
располагались положительные элементы массива.
- Порядок следования среди положительных и отрицательных элементов
должен быть сохранен прежним (пример 1 -2 -3 4 5 0, будет -2 -3 0 1 4 5).
Снимок экрана 2024-03-28 172548.png

antoneus

В 1C нет шага в цикле Для. И да, индексация начинается с 0, так что индекс 6-го элемента будет 5.

rekrok

antoneus, как должно выглядеть решение в той части? напишите пожалуйста, а то непонятно

antoneus

Индекс = 5;
Пока Индекс < 50 Цикл
    МассивИз50Чисел[Индекс] = 0;
    Индекс = Индекс + 6
КонецЦикла;

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

Рейтинг@Mail.ru

Поиск