По теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) как вариант с одним циклом:
КоличествоКолонок = 6;
КоличествоСтрок = 5;
Матрица = Новый Массив(КоличествоКолонок, КоличествоСтрок);
ТекСтрока = 0;
ТекКолонка = 0;
Х = 1;
У = 0;
С = 0;
Позиции = КоличествоСтрок;
КоличествоЭлементовМассива = КоличествоКолонок*КоличествоСтрок;
к = 0;
Пока к < КоличествоЭлементовМассива Цикл
к = к +1;
Матрица[ТекКолонка][ТекСтрока] = к;
Позиции = Позиции-1;
Если Позиции <= 0 Тогда
Позиции = КоличествоСтрок * (С %2) + КоличествоКолонок * ((С+1)%2) - (С/2 - 1) - 2;
т = Х;
Х = -У;
У = т;
С = С + 1;
КонецЕсли;
ТекСтрока = ТекСтрока + Х;
ТекКолонка = ТекКолонка + У;
КонецЦикла;
Показать
(3)
&НаКлиенте
Процедура Команда1(Команда)
ВсегоСтолбцов = 5;
ВсегоСтолбцов1 = 5;
ВсегоСтрок = 4;
ВсегоСтрок1 = 4;
НачСтолбец = 1;
начстрока = 1;
м = Новый массив(ВсегоСтолбцов+1,ВсегоСтрок+1);
сч = 1;
//Внешний цикл
Пока Истина Цикл
//строка от начала до конца
Для стл = НачСтолбец По ВсегоСтолбцов Цикл
м[стл][НачСтрока] = сч;
сч = сч + 1;
КонецЦикла;
начстрока = начстрока + 1;
//столбец от начала до конца
Для стр = НачСтрока По ВсегоСтрок Цикл
м[ВсегоСтолбцов][стр] = сч;
сч = сч + 1;
КонецЦикла;
ВсегоСтолбцов = ВсегоСтолбцов - 1;
//строка обратно
стл = ВсегоСтолбцов;
Пока стл >= НачСтолбец Цикл
м[стл][ВсегоСтрок] = сч;
стл = стл-1;
сч = сч + 1;
КонецЦикла;
ВсегоСтрок = ВсегоСтрок - 1;
//столбец обратно
стр = ВсегоСтрок;
Пока стр >= НачСтрока Цикл
м[НачСтолбец][стр] = сч;
стр = стр-1;
сч = сч + 1;
КонецЦикла;
НачСтолбец = НачСтолбец + 1;
Если НачСтолбец >= ВсегоСтолбцов И начстрока >= ВсегоСтрок Тогда
Прервать;
КонецЕсли;
КонецЦикла;
//Вывод результата
Для к = 1 По ВсегоСтрок1 Цикл
Стр = "";
Для н = 1 По ВсегоСтолбцов1 Цикл
Стр = Стр + Строка(м[н][к]) + ",";
КонецЦикла;
Сообщить(стр);
КонецЦикла;
КонецПроцедуры
Показать
(5)Это почти работает, но есть расклад при котором количество строк и столбцов могут быть разными
и тогда он не выводит корректно, например так
и тогда он не выводит корректно, например так
1,2,3,4,
20,21,22,5,
19,32,23,6,
18,33,37,7,
38,34,36,8,
16,35,26,9,
15,28,27,10,
14,13,12,11,
Показать
Заполнял змейкой с увеличением на 1 по спирали матрицу 5х4
Массив в 1С начинается с 0, но я хотел чтобы все считалось с единицы. Поэтому во всех строках массива столбец[0] будет пустым.
Массив в 1С начинается с 0, но я хотел чтобы все считалось с единицы. Поэтому во всех строках массива столбец[0] будет пустым.
(8)У меня примерно так получается,
Строк и столбцов задаются пользователем, но выдает ошибку {ВнешняяОбработка.NewMassiv.Форма.Форма.Форма(526)}: Индекс находится за границами массива
ТЗ[стл][Строк] = сч;
НачСтолбец = 1;
НачСтрока = 1;
ВсегоСтолбцов1 = Строк-1;
ВсегоСтрок1 = Столбцов-1;
сч = 1;
//Внешний цикл
Пока Истина Цикл
//строка от начала до конца
Для стл = НачСтолбец По Столбцов Цикл
ТЗ[стл][Строк] = сч;
сч = сч + 1;
КонецЦикла;
НачСтрока = НачСтрока + 1;
//столбец от начала до конца
Для стр = НачСтрока По Строк Цикл
ТЗ[Столбцов][стр] = сч;
сч = сч + 1;
КонецЦикла;
Столбцов = Столбцов - 1;
//строка обратно
стл = Столбцов;
Пока стл >= НачСтолбец Цикл
ТЗ[стл][Строк] = сч;
стл = стл-1;
сч = сч + 1;
КонецЦикла;
Строк = Строк - 1;
//столбец обратно
стр = Строк;
Пока стр >= НачСтрока Цикл
ТЗ[НачСтолбец][стр] = сч;
стр = стр-1;
сч = сч + 1;
КонецЦикла;
НачСтолбец = НачСтолбец + 1;
Если НачСтолбец >= Столбцов И НачСтрока >= Строк Тогда
//Прервать;
КонецЕсли;
КонецЦикла;
//Вывод результата
Для к = 1 По ВсегоСтрок1 Цикл
Стр = "";
Для н = 1 По ВсегоСтолбцов1 Цикл
Стр = Стр + Строка(ТЗ[н][к]) + ",";
КонецЦикла;
Сообщить(стр);
КонецЦикла;
ПоказатьСтрок и столбцов задаются пользователем, но выдает ошибку {ВнешняяОбработка.NewMassiv.Форма.Форма.Форма(526)}: Индекс находится за границами массива
ТЗ[стл][Строк] = сч;
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот