Beispiel #1
0
        public static AverageByBit[] CountAverage(ushort[] inCodes, ushort[] inValues, int inCountControllers)
        {
            AverageByBit[] answerData = new AverageByBit[inCountControllers];  //всего разных датчиков от 000 до 111 - 8 шт.

            for(ushort i = 0; i < inCountControllers; i++)
            {
                answerData[i].code = i;    // инициализируем сруктуру ответов
                answerData[i].value = 0.0;
            }

            int[] countValueForAverage = new int[inCountControllers];

            for (int i = 0; i < inCodes.Length ; i++)
            {
                ushort currentCode = inCodes[i];

                answerData[currentCode].value += inValues[i];
                countValueForAverage[currentCode]++;
            }

            for (int i = 0; i < inCountControllers; i++)
            {
                if (countValueForAverage[i] != 0)
                {
                    answerData[i].value /= countValueForAverage[i];
                }
                else
                {
                    answerData[i].value = 0.0;
                }
            }
            return answerData;
        }
Beispiel #2
0
        public AverageByBit[] CountAverage(int[] inCodes, int[] inValues, int inCountControllers)
        {
            AverageByBit[] answerData = new AverageByBit[inCountControllers];

            for (int i = 0; i < inCountControllers; i++)
            {
                answerData[i].code  = i;   // инициализируем сруктуру ответов
                answerData[i].value = 0.0;
            }

            int[] countValueForAverage = new int[inCountControllers];

            for (int i = 0; i < inCodes.Length; i++)
            {
                int currentCode = inCodes[i];

                answerData[currentCode].value += inValues[i];
                countValueForAverage[currentCode]++;
            }

            for (int i = 0; i < inCountControllers; i++)
            {
                if (countValueForAverage[i] != 0)
                {
                    answerData[i].value /= countValueForAverage[i];
                }
                else
                {
                    answerData[i].value = 0.0;
                }
            }
            return(answerData);
        }
Beispiel #3
0
        public List <IOutData> ProcessData(IReadOnlyList <IInData> inputData)
        {
            int maxNumberCode = 0;
            int index         = 0;

            foreach (IInData workData in inputData)
            {
                if (workData.IsValid)
                {
                    index++;
                    if (maxNumberCode < workData.Code)
                    {
                        maxNumberCode = workData.Code;  // максимальный №(код) контроллера
                    }
                }
            }

            int[] codes  = new int[index];
            int[] values = new int[index];

            index = 0;
            foreach (IInData workData in inputData)
            {
                if (workData.IsValid)
                {
                    codes[index]  = workData.Code;
                    values[index] = workData.Value;
                    index++;
                }
            }

            int inCountControllers = maxNumberCode + 1;                       // или вычисление количества возможных кодировок контроллеров, с нулевым значением.

            AverageByBit[] answerData = new AverageByBit[inCountControllers]; //всего разных датчиков от 000 до 111 - 8 шт.
            answerData = CountAverage(codes, values, inCountControllers);

            List <IOutData> outData = new List <IOutData>();

            for (int i = 0; i < inCountControllers; i++)
            {
                if (answerData[i].value != 0)
                {
                    outData.Add(new OutData {
                        Code = answerData[i].code, Average = answerData[i].value
                    });
                }
            }
            return(outData);
        }