Нахождение наибольшего числа в строке 1C

1. user1778623 27.04.22 19:50 Сейчас в теме
Цель задания: Пользователь вводит ряд чисел через пробел, вывести наибольшее из этих чисел. Помогите написать код
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. ishelper 27.04.22 20:18 Сейчас в теме
(1)
Помогите написать код
Помочь - значит, подать идею или указать на ошибки в вашем коде. Где ваш код? Нету? Значит, вы хотите, чтобы кто-то сделал работу (выполнил задание) за вас.
3. starik-2005 3033 27.04.22 21:03 Сейчас в теме
(1)
Пользователь вводит ряд чисел через пробел, вывести наибольшее из этих чисел. Помогите написать код
На котором языке?
1. Разделить числа в строке через сплит. На выходе массив чисел. В 1С есть соответствующая функция для строки, в JS есть .split(), в питоне есть тоже.
2. Взять первое число, как наибольшее.
3. Поиск максимального числа - это задача, в которой для неквантового компьютера нужно N итераций. Т.е. придется просмотреть весь массив.
4. Сравнить максимальное число и текущее число. Фактически "МаксЧисло = Макс(МаксЧисло, ЭлементМассива)", для строковых элементов массива нужно добавить "0+", чтобы произошло приведение типа.
5. После того, как все элементы массива пройдены, МаксЧисло будет содержать максимальный элемент массива.
EVKash; FatPanzer; +2 Ответить
7. FatPanzer 27.04.22 23:01 Сейчас в теме
(3) Камрад! Ты забыл про извращение - загрузить массив в ТЗ, ТЗ загнать в запрос, и пусть там уже SQL решает...
11. EVKash 14 28.04.22 08:16 Сейчас в теме
(8)
Если обернуть в Вычислить("Макс("+Строка+")") - вполне сработает )))
да, только это будет решение задачи третьеклассника через производные. И без проверки вводимых значений можно получить ошибку.
(1) В дополнение к (3)
Фактически "МаксЧисло = Макс(МаксЧисло, ЭлементМассива)"
там, надо "МаксЧисло = Макс(МаксЧисло, Число(ЭлементМассива))" и обернуть в попытку. А в исключении выводить, что ЭлементМассива не является числом. Плюс в условии нигде не сказано, что числа натуральные, т.е. по факту могут быть дробные числа. Через что они вводятся? Через точку? Или через запятую?
16. starik-2005 3033 28.04.22 10:36 Сейчас в теме
(11)
И без проверки вводимых значений можно получить ошибку.
Ну если про "производные" продолжать, то можно вот так:
Данные = "1 2 3 4 100 200 300 400 5 6 8 10";
ВЧисло = Новый ОписаниеТипов("Число");
Привести = "ВЧисло.ПривестиЗначение(""";
МаксЧисло = Вычислить("Макс(" + Привести + СтрЗаменить(Данные, " ", """), " + Привести)+"""))");

В итоге, если я угадал без отладки с запятыми, скобками и кавычками, у нас будет такая строка для вычислить:
Макс(ВЧисло.ПривестиЗначение("1"), ВЧисло.ПривестиЗначение("2"), ..., ВЧисло.ПривестиЗначение("10"))
Ну и если попадет туда абракадабра, то она будет в большинстве своем корректно обработана (если нет кавычек). Ну и для экранирования кавычек можно превентивно их заменить на двойные. А для разделителя, то если, допустим, это запятые, то никто не мешает эти запятые заменить на ".".
Но это - да, что-то типа мидла, которому уже надоело, но еще не совсем )))
4. Ivanov_OM 38 27.04.22 21:24 Сейчас в теме
(1) Код ля 1С
СтрокаПользователя = "25 45 13 456 128 256 12 21 144";
СтрокаДляПоискаМаксимума = СтрЗаменить(СтрокаПользователя," ",",");
МаксимальноеЗначение = Макс(СтрокаДляПоискаМаксимума);

Как-то так. Не проверял.
independ; +1 Ответить
5. ishelper 27.04.22 22:55 Сейчас в теме
(4)
Код ля 1С
Букву "б" где-то потеряли? :-)
Как-то так. Не проверял.
Не взлетит, можно даже и не проверять - достаточно заглянуть в Синтакс-помощник:
Синтаксис:
Макс(<Значение1>,...,<ЗначениеN>)
Параметры:
<Значение1>,...,<ЗначениеN> (обязательный)
Тип: Число, Строка, Дата, Булево.
Набор параметров, который определяет перечень значений для сравнения.
Возвращаемое значение:
Тип: Число, Строка, Дата, Булево.
Возвращается максимальное из полученных значений.
Вы в своем коде передаете одно строковое значение, а не перечень. Естессно, оно же и будет возвращено как максимальное: "25,45,13,456,128,256,12,21,144"

Сомневаюсь, что это то, чего хотел автор.
FatPanzer; +1 Ответить
10. starik-2005 3033 28.04.22 01:45 Сейчас в теме
(5)
Вы в своем коде передаете одно строковое значение, а не перечень. Естессно, оно же и будет возвращено как максимальное: "25,45,13,456,128,256,12,21,144"
Не хватает вам фантазии, а жаль )))
13. ishelper 28.04.22 09:51 Сейчас в теме
(10)
Не хватает вам фантазии, а жаль )))
Куда уж мне, не я ведь архиавтор!
(7)
Ты забыл про извращение - загрузить массив в ТЗ, ТЗ загнать в запрос, и пусть там уже SQL решает...

Я не настолько силен в извращениях (тем более - в архиизвращениях), поэтому мой алгоритм таков:
1. При помощи СтрРазложить() загнать строку в массив;
2. В цикле преобразовать значения массива из строк в числа;
3. Выгрузить массив в список значений;
4. Отсортировать список значений и последнее (или первое, по выбранному направлению) значение будет максимальным.
15. starik-2005 3033 28.04.22 10:05 Сейчас в теме
(13) учиться никогда не поздно, но это основная проблема тех, кто сдал на спеца - они дальше учиться зачастую неспособны)))
6. FatPanzer 27.04.22 22:59 Сейчас в теме
(4) Макс() для строкового значения? Где вас таких на Инфостарте набирают и кто вам плюсы ставит?
8. starik-2005 3033 28.04.22 01:42 Сейчас в теме
(6)
Макс() для строкового значения?
Если обернуть в Вычислить("Макс("+Строка+")") - вполне сработает )))
12. FatPanzer 28.04.22 09:41 Сейчас в теме
(8) Месье знает толк в извращениях )))
9. starik-2005 3033 28.04.22 01:43 Сейчас в теме
(4) Надо чуток подправить:
СтрокаПользователя = "25 45 13 456 128 256 12 21 144";
СтрокаДляПоискаМаксимума = СтрЗаменить(СтрокаПользователя," ",",");
МаксимальноеЗначение = Вычислить("Макс("+СтрокаДляПоискаМаксимума+")");
lostcay; collider; Ivanov_OM; +3 Ответить
14. МихаилМ 28.04.22 10:04 Сейчас в теме
коли строки ,то их надо обрабатывать текстовым процессором xslt
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)