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

1. user1778623 27.04.22 19:50 Сейчас в теме
Цель задания: Пользователь вводит ряд чисел через пробел, вывести наибольшее из этих чисел. Помогите написать код
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ishelper 27.04.22 20:18 Сейчас в теме
(1)
Помогите написать код
Помочь - значит, подать идею или указать на ошибки в вашем коде. Где ваш код? Нету? Значит, вы хотите, чтобы кто-то сделал работу (выполнил задание) за вас.
3. starik-2005 3088 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 16 28.04.22 08:16 Сейчас в теме
(8)
Если обернуть в Вычислить("Макс("+Строка+")") - вполне сработает )))
да, только это будет решение задачи третьеклассника через производные. И без проверки вводимых значений можно получить ошибку.
(1) В дополнение к (3)
Фактически "МаксЧисло = Макс(МаксЧисло, ЭлементМассива)"
там, надо "МаксЧисло = Макс(МаксЧисло, Число(ЭлементМассива))" и обернуть в попытку. А в исключении выводить, что ЭлементМассива не является числом. Плюс в условии нигде не сказано, что числа натуральные, т.е. по факту могут быть дробные числа. Через что они вводятся? Через точку? Или через запятую?
16. starik-2005 3088 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 3088 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 3088 28.04.22 10:05 Сейчас в теме
(13) учиться никогда не поздно, но это основная проблема тех, кто сдал на спеца - они дальше учиться зачастую неспособны)))
6. FatPanzer 27.04.22 22:59 Сейчас в теме
(4) Макс() для строкового значения? Где вас таких на Инфостарте набирают и кто вам плюсы ставит?
8. starik-2005 3088 28.04.22 01:42 Сейчас в теме
(6)
Макс() для строкового значения?
Если обернуть в Вычислить("Макс("+Строка+")") - вполне сработает )))
12. FatPanzer 28.04.22 09:41 Сейчас в теме
(8) Месье знает толк в извращениях )))
9. starik-2005 3088 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
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот