Да все там проще, я к примеру писал структуру(если много значений), из нее делал массив.
Далее так
IF VAR1 THEN (команда сдвига)
FOR Cn:= 30 TO 0 BY-1 DO ( к примеру архив на месяц от 31 до 0-текущей даты)
ARRAY[cn+1]:= ARRAY[cn];
END_FOR
END_IF
Да все там проще, я к примеру писал структуру(если много значений), из нее делал массив.
Далее так
IF VAR1 THEN (команда сдвига)
FOR Cn:= 30 TO 0 BY-1 DO ( к примеру архив на месяц от 31 до 0-текущей даты)
ARRAY[cn+1]:= ARRAY[cn];
END_FOR
END_IF
Господа, от перестановки слагаемых сумма не изменяется. Зачем двигать весь массив, если можно сдвинуть новое значение? Просто записывайте очередной элемент на место того, который надо удалить. Для этого всего-навсего нужен счётчик входящих элементов. Псевдокод:Для пущей аккуратности и безболезненности за размер массива в цикле усреднения можно брать минимум между счётчиком и, собственно, размером массива.Код:count := count + 1; array[count MOD size_of_array] := value; (* Считаем среднее по массиву *)
Последний раз редактировалось Yegor; 30.05.2012 в 06:32.
Верно, не удосужился дочитать.Про это уже ответилиА этот цикл зачем ?для последующего усреднения
А без цикла никак ?
Вот оно и есть. Прогрессирующая потеря точности.
А где прогрессирует ?
Всегда среднее последних 10-ти
PS
Для наглядности :
summ := summ -ar[nP] + yNew; (*ушел самый старый, на смену новый*)
averagwe:=summ / 10;
Последний раз редактировалось Валенок; 30.05.2012 в 11:33.
В арифметических операциях с плавающей запятой не гарантируется точность результата. Эту неточность вы накапливаете в average.