Округлить число между интервалом чисел

1. Johney20 04.08.20 15:29 Сейчас в теме
Всем привет.

Есть три значения сложности для задачи, например:

Сложная - 16
Средняя - 8
Простая - 4

И в зависимости от сложности задаче подставляется норма часов - 4,8 или 16.

Необходимо, чтобы это работало в обратную сторону, то есть, если я выбираю задачу и ставлю ей 9, о должна подобраться подходящая сложность, в данном случае "Средняя", если ставлю задаче 14, то должна подобраться сложность "Сложная" и т.д.

И вот как лучше написать такой механизм? Может в запросе это можно как-то обыграть?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. DmitriyTih 04.08.20 15:35 Сейчас в теме
(1) В запросе так:
Выбор
Когда &Сложность < 6
Тогда 4
Когда &Сложность >= 6 И &Сложность < 12
Тогда 8
Иначе 16
Конец

Только нужно определится к какой сложности относить задачи с цифрами 6 и 12.
7. Johney20 04.08.20 16:42 Сейчас в теме
(4) Логика понятна, но ведь значения этих сложностей могут быть абсолютно разными.. Нужно в таком случае как-то середину определить.
9. Sashares 34 04.08.20 16:49 Сейчас в теме
(7)Как-то середину определить?
В каком смысле "как-то"?
У вас проблемы с математикой?
Из большего вычесть меньшее разделить на 2.
11. DmitriyTih 04.08.20 17:11 Сейчас в теме
(7) Согласен с (9).
Вот вам совет на скорую руку. Можно, например вести справочник сложностей, в котором указываем значение с, значение по. Например Простая, 0, 6; Средняя, 6, 12 и т.п. далее в запросе выбираем данные из справочника и соединяем с задачами. При соединении указываем условие попадания сложности задачи в интервал нашего классификатора сложностей. как-то так.
2. Pryanishnikov_Vladimir 04.08.20 15:33 Сейчас в теме
Поделить и выбрать минимальное не?
8. Johney20 04.08.20 16:47 Сейчас в теме
(2) Что на что поделить? Что Вы имеете ввиду?
3. QuickMix 04.08.20 15:34 Сейчас в теме
Если Значение <= 4 Тогда 
Простая
ИначеЕсли Значение > 4 и Значение <=8 Тогда
Средняя
Иначе
Сложная
КонецЕсли;
Показать
5. Johney20 04.08.20 15:49 Сейчас в теме
(3) Не подходит, а если, например, Значение = 7? В таком случае должна подобраться сложность со значением 8.
6. FetisovAN 04.08.20 16:16 Сейчас в теме
(5)
Прикрепленные файлы:
Pryanishnikov_Vladimir; Sashares; +2 Ответить
10. SlavaKron 04.08.20 16:50 Сейчас в теме
Выбрать уровень с минимальным отклонением. Теоретически так:
Результат = Неопределено;
МинимальнаяРазница = 10000;
Для Каждого Уровень Из МассивУровней Цикл
	Разница = Pow(Уровень - Значение, 2);
	Если Разница < МинимальнаяРазница Тогда
		МинимальнаяРазница = Разница;
		Результат = Уровень;
	КонецЕсли;
КонецЦикла;
Возврат Результат;
Показать
12. Bazin 5 05.08.20 05:40 Сейчас в теме
Запрос:
ВЫБРАТЬ
	4 КАК Показатель,
	"Простая" КАК Представление
ПОМЕСТИТЬ ВТ_Сложности

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	8,
	"Средняя"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	16,
	"Сложная"
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ ПЕРВЫЕ 1
	ВЫБОР
		КОГДА ВТ_Сложности.Показатель - &ТекущийПоказатель > 0
			ТОГДА ВТ_Сложности.Показатель - &ТекущийПоказатель
		ИНАЧЕ &ТекущийПоказатель - ВТ_Сложности.Показатель
	КОНЕЦ КАК Дельта,
	ВТ_Сложности.Показатель КАК Результат,
	ВТ_Сложности.Представление КАК Представление
ИЗ
	ВТ_Сложности КАК ВТ_Сложности

УПОРЯДОЧИТЬ ПО
	Дельта
Показать
13. starik-2005 3036 06.08.20 01:39 Сейчас в теме
Функция НаСколькоСложно(Значение)

  Сложность = Новый Массив;
  Сложность.Добавить( Новый Структура("Сложность, Значение", "Просто", 4) );
  Сложность.Добавить( Новый Структура("Сложность, Значение", "Средне", 8) );
  Сложность.Добавить( Новый Структура("Сложность, Значение", "Сложно", 16) );

  Минимум = Сложность[0];

  Для Каждого Ст ИЗ Сложность Цикл

    Если Значение < Ст.Значение Тогда
      Если (Ст.Значение - Минимум.Значение) / 2 + Минимум.Значение > Значение Тогда
        Возврат Минимум.Сложность
      Иначе
        Возврат Ст.Сложность
      КонецЕсли;
    КонецЕсли;

    Минимум = Ст;

  КонецЦикла;

  Возврат Ст.Сложность

КонецФункции;

Показать


Не проверял.
14. PiotrLoginov 07.08.20 14:37 Сейчас в теме
Еще вариант:

Перем Значение; //вместо этой строки присвоить переменной Значение сложность текущей задачи, напр.: Значение = 9

Сложная = 16;
Средняя = 8;
Простая = 4;

Результат = ?(Значение <= Простая, "Простая",
	?(Значение = Средняя, "Средняя",
		?(Значение >= Сложная, "Сложная",
			Неопределено)));

Если Результат = Неопределено Тогда
	НижняяГраница = ?(Значение < Средняя, 4, 8);
	ВерхняяГраница = ?(Значение < Средняя, 8, 16);
	
	Результат = ?(Окр(10 + 10 / ((ВерхняяГраница - НижняяГраница) / (Значение - НижняяГраница))) = 10,
				?(НижняяГраница = 4, "Простая", "Средняя"),
				?(НижняяГраница = 4, "Средняя", "Сложная"));
КонецЕсли;
Показать
15. PiotrLoginov 07.08.20 14:38 Сейчас в теме
+ (14) этот же алгоритм можно реализовать в запросе
Оставьте свое сообщение

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