• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Руками не бить!

  • Автор темы SeverBap
  • Дата начала
S

SeverBap

А ты проверку значения из интервала сделай, если отлично от значения по умолчанию... не говорю что ноль, т.к. возможно что измерение тоже будет ноль, то счетчику прибавь единицу. потом общую сумму дели на значие счетчика
Прикол что может несколько дней быть нулевым - это тоже дает свой результат при расчете среднего и подчете количество дней учета!

Точно математику отменили! Вы точно не путаете округление с выделением целой части?
Округление - это когда преобразование идет по правилу (алгоритму).
Выделение целой части - это когда просто отбрасывается дробная часть.
Ничего не путаю, мне нужны целые значения так как "1.5 человека - эт только в морге можно встретить!"
Без обид конечно!
наверно стоит опредилится что 1.5 в какую сторону!!! 1.534656 в 1, а 1.556234 в 2!!
Правильно думаю?

Всего возможно П(i=1 до 31){V|i} вариантов набора значений теста, где V - теоретически возможное количество различимых результатов измерения, | - знак возведения в степень.
V по определению конечно - датчик не может делать замеры в бесконечном диапазоне.
Следовательно, если не получается подобрать правило округления..... просто пропиши все возможные случаи!
Или все-таки настрой округление или хотя бы определись с алгоритмом.
:)
Поподробней!!!!!!
 
V

vbs

наверно стоит опредилится что 1.5 в какую сторону!!! 1.534656 в 1, а 1.556234 в 2!!
Правильно думаю?
интересный подход ! А где ж будет граница между округлением до 1 и до 2-х ? 1.54 что ли ?
Не проще ли округлять по известным правилам ?
 
G

Guest

Поподробней!!!!!!
Это ОЧЕНЬ трудоемкий способ, если подробней было для простого перебора
для справки: при двух различных результатов для единичного измерения число возможных исходов для последовательности составляет порядка 4290000000
Что касается правил округления, то могу только концептуально посоветовать
Определяешь диапазон значений , в который гарантировано попадает твое среднее
Гарантированно тебя устроит диапазон [минимальное_количество_измерений*минимально_возможное_значение_ЕИ] - [максимальное_количество_измерений*максимально_возможное_значение_ЕИ]
где ЕИ - значение единичного измерения
Для каждого отрезка [n,n+1], где n - любое целое число входящее в диапазон устанавливаешь порог p, 0<p<1
При превышении n+p округляться будет в большую сторону.
Куда округлять n+p, реши заранее.
Пропиши округление прямо набором условных операций либо с помощью выделения целой части.
Синтаксис конфигуратора 1С знаю плохо, так что код написать не могу.
Успеха.
 
S

SeverBap

Это ОЧЕНЬ трудоемкий способ, если подробней было для простого перебора
для справки: при двух различных результатов для единичного измерения число возможных исходов для последовательности составляет порядка 4290000000
Что касается правил округления, то могу только концептуально посоветовать
Определяешь диапазон значений , в который гарантировано попадает твое среднее
Гарантированно тебя устроит диапазон [минимальное_количество_измерений*минимально_возможное_значение_ЕИ] - [максимальное_количество_измерений*максимально_возможное_значение_ЕИ]
где ЕИ - значение единичного измерения
Для каждого отрезка [n,n+1], где n - любое целое число входящее в диапазон устанавливаешь порог p, 0<p<1
При превышении n+p округляться будет в большую сторону.
Куда округлять n+p, реши заранее.
Пропиши округление прямо набором условных операций либо с помощью выделения целой части.
Синтаксис конфигуратора 1С знаю плохо, так что код написать не могу.
Успеха.
Тоесть что из этого следует: минимальное_количество_измерений=1; минимально_возможное_значение_ЕИ=Минимальное_значению_из_массива и соответственно ... правельно думаю?
 
G

Guest

Тоесть что из этого следует: минимальное_количество_измерений=1; минимально_возможное_значение_ЕИ=Минимальное_значению_из_массива и соответственно ... правельно думаю?
Почти.
Минимальным значением из массива не стоит ограничиваться.
Например, у тебя в массиве числа от 3 до 15
Взяв как минимально возможное значение ЕИ 3, ты рискуешь пролетель со случаем (чисто гипотетическим), когда у тебя все значения в масиве будут равны, к примеру, 2.
Так что определить значения минимального и максимального значения ЕИ стоит исходя из априорных соображений.
Например, если меряешь посещаемость, то минимально ЕИ будет 0 (никто не пришел на работу;) ),
максимальное стоит задать с учетом потенциальных возможностей по расширению фирмы.
Эти данные должны взяться не из выборки, а из общих соображений.
Соответственно у тебя будет некий риск выхода за эти рамки.
Чем больший диапазон - тем меньше риск и тем больше работы тебе предстоит при написании функции.
Плюсом такого подхода является возможность прямо назначить уникальные правила округления для каждого диапазона.
Что как я понял тебе и надо
 
S

SeverBap

АлександрРостовский проблема в том что у меня максимальное значение нигде не хранится - значит прийдется брать максимальное из выборки!!! - возможно так?
 
V

vbs

Прикол что может несколько дней быть нулевым - это тоже дает свой результат при расчете среднего и подчете количество дней учета!
заполняй свой массив выборки СТРОКАМИ (Строка(измерение)), а при подсчете бери числовое значение строки, тогда отсутствие измерения даст пустое значение, а "0" превратится в значение 0,
вот и вся проблема
 
S

SeverBap

vbs такой пример: 77 77 77 80 77 73 73 73 72 73 73 73 71 71 71 71 71 71 71 0 0 0 0 0 0 0 0 0 0 0 0 - это когда срез по 19 число месяца;
А такой как тебе: 62 62 62 62 62 0 0 0 0 0 66 66 62 66 65 65 65 62 62 61 62 62 0 0 0 0 62 0 0 0 0 - на 31!!!!!!
и как подсчитать?? и какое среднее ??? когда незнаешь где что почем (в смысле в отчете)!!!
 
V

vbs

vbs такой пример: 77 77 77 80 77 73 73 73 72 73 73 73 71 71 71 71 71 71 71 0 0 0 0 0 0 0 0 0 0 0 0 - это когда срез по 19 число месяца;
А такой как тебе: 62 62 62 62 62 0 0 0 0 0 66 66 62 66 65 65 65 62 62 61 62 62 0 0 0 0 62 0 0 0 0 - на 31!!!!!!
и как подсчитать?? и какое среднее ??? когда незнаешь где что почем (в смысле в отчете)!!!
если в первом примере 19 значений (а 0 - их отсутствие) - вычисляй по 19-ти.
То же и во втором - если 0 - значение - вычисляем по 31, нет - по тем же 19-ти.
Или я чего-то не понимаю ?
Тогда приведи пример из жизни (31 не надо, покажи на трех - пяти)
 
S

SeverBap

Код:
Функция СреднееЧисло(МассивДанных)
Перем ЗначениеВозврата;

Возврат ЗначениеВозврата;
КонецФункции
МассивДанных - список значений размером 31
как дальше писать я незнаю, все остальное решил!!!

vbs
Вот смотри: 1 нормальный (тоесть все забиты из десяти) 1 1 1 1 1 1 1 1 1 1;
2 когда не доконца заполнен 1 1 1 1 1 1 0 0 0 0; (0 - незаполнено)
3 когда заполнен до конца 1 1 1 1 1 1 0 0 0 0; (0 - заполнено)
разницу усек? как я буду расчитывать я незнаю!
 
K

kaa

используй вместо списка значений таблицу значений
1 колонка строка
2 колонка значение число
3 колонка признак расчета 0 не считать 1 считать

тогда ТаблицаЗначений.Итог(3); - будет количество чисел участвующих в расчете
 
V

vbs

Вот смотри: 1 нормальный (тоесть все забиты из десяти) 1 1 1 1 1 1 1 1 1 1;
2 когда не доконца заполнен 1 1 1 1 1 1 0 0 0 0; (0 - незаполнено)
3 когда заполнен до конца 1 1 1 1 1 1 0 0 0 0; (0 - заполнено)
используй вместо списка значений таблицу значений
1 колонка строка
2 колонка значение число
3 колонка признак расчета 0 не считать 1 считать

тогда ТаблицаЗначений.Итог(3); - будет количество чисел участвующих в расчете
О.Господи. А я не то же самое предложил ?
"1" "1" "1" "1" "1" "1" "" "" "" "" - второй случай
"1" "1" "1" "1" "1" "1" "0" "0" "0" "0" - третий случай
И при обработке преобразуем строковый массив в числовой - там, где пустые значения - не включаем в расчет
 
V

vbs

по моему нет
Для Инд=1 по Список.РазмерСписка() Цикл
// и так далее
N = 0; // - количество чисел в расчете
S = 0; // - Сумма
for i = 1 to 31 do
Value = Список.GetValue(i);
if EmptyValue(Value) = 0 then
N = N + 1;
S = S + Number(Value);
endif;
Среднее = S/N // ну или как там он хочет округлять
enddo
Согласен, вариант с таблицей значений гораздо оптимальнее - но и мой даст правильный результат
 
X

XOXOJI

Вот смотри: 1 нормальный (тоесть все забиты из десяти) 1 1 1 1 1 1 1 1 1 1;
2 когда не доконца заполнен 1 1 1 1 1 1 0 0 0 0; (0 - незаполнено)
3 когда заполнен до конца 1 1 1 1 1 1 0 0 0 0; (0 - заполнено)

если по 3-му варианту пояснишь, может че и пойму...

а так все вышесказанное правильно...

почитав выше, понял что если месяц не заполнен, то нули не считаются, а если уже заполнен(закрыт), то считаются...

так вот, кто тебе мешает, получить количество дней в месяце и количество значений в списке... при их различии считать без нулей, а если совпадают, то с нулями...
 
V

vbs

Что тут долго копья ломать - самая точная рекомендация уже дана
используй вместо списка значений таблицу значений
1 колонка строка
2 колонка значение число
3 колонка признак расчета 0 не считать 1 считать
тогда ТаблицаЗначений.Итог(3); - будет количество чисел участвующих в расчете
Среднее = ТаблицаЗначений.Итог(2)/ТаблицаЗначений.Итог(3);
первая колонка, на мой взгляд, просто не нужна
 
S

SeverBap

XOXOJI да именно так!

vbs не важно списком или таблицей у меня проблема в другом!!!!
 
S

SeverBap

vitfil в проблеме разобрался только XOXOJI, у меня все данные берутся из регистра - проблема в определении количества элементов массива для подчета! формулу мне уже подсказали (тут на форуме)....
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!