:: Visual Foxpro, Foxpro for DOS
Равные периоды в остатке месяцев с начала года
Baga
Автор

Сообщений: 535
Откуда: г. Махачкала
Дата регистрации: 03.06.2006
Здравствуйте форумчане.
В давно написанной программе возникла задача равномерного распределения остатков чего-либо до конца года.
Никак не могу сообразить, как это лучше сделать.
Вот более подробно:
Имеется некая головная таблица
CREATE CURSOR kur (npp N(6,0),kolpl N(1,0))
* где kolpl случайное число от 1 до 4
*Заполняем
FOR i=1 TO 10000
INSERT INTO kur (npp,kolpl) VALUES (i, 1 + 3 * RAND( ))
NEXT
*Убеждаемся, что kolpl между 1 и 4
SELECT MIN(kolpl) as mipl,MAX(kolpl) as mapl FROM kur
**Создаем подчиненную таблицу
CREATE CURSOR child (npp N(6,0), mpm N(2,0))
Задача состоит в том, чтобы записать значение npp и месяца mpm в дочернюю таблицу столько раз, сколько раз указано в поле kolpl головной таблицы. При этом значение поля mpm должно быть распределено примерно равными промежутками между оставшимися до конца года месяцами.
Если количество оставшихся месяцев до конца года меньше значения kolpl, то kolpl принимается равным количеству
оставшихся месяцев.
Например:
tm=1 && Текущий месяц
om=12-tm+1=12 && Количество оставшихся месяцев, включая текущий
*Если
kolpl=4
&&Количество записей в дочерней таблице 4, значения mpm 3,6,9,12
*Если
kolpl=1
&&Количество записей в дочерней таблице 1, значение 6
* и т.д.
*допускается ежемесячное указание значения mpm, если нет другого выходя или часть через какой-то промежуток, а часть ежемесячно
*Пример 2:
tm=10 && Текущий месяц
om=12-tm+1=3 && Количество оставшихся месяцев, включая текущий
*Если
kolpl=4
*то kolpl=3
*в дочерней таблице 3 записи 10, 11, 12
и т.д.
Пробовал различные подходы, но без ручной корректировки никак не удается справиться с ситуацией. В итоге получается очень большая разница количества записей в разных месяцах.
Помогите, пожалуйста, справиться с этой ситуацией.


------------------
Багавудин Мирзаев
Ratings: 0 negative/0 positive
Re: Равные периоды в остатке месяцев с начала года
Владимир Максимов

Сообщений: 14097
Откуда: Москва
Дата регистрации: 02.09.2000
Вас вводит в заблуждение "магия" месяцев

Какое же это равномерное распределение при значении 4 в виде 3,6,9,12. Здесь от начала интервала до первого значения = 3, а от последнего значения до конца интервала = 0. Это не есть "равномерное" распределение

Исходите из того, что kolpl - это количество значений. Но для равномерного распределения Вам нужно знать количество интервалов. А это будет на единицу больше = kolpl+1

Логика такая

kolpl = 4
Интервалов = 4 + 1 = 5

Оставшихся месяцев = 12 -> Средний интервал = 12 / 5 = 2,4

Число 1 = round(1*2.4, 0) = 2
Число 2 = round(2*2.4, 0) = 5
Число 3 = round(3*2.4, 0) = 7
Число 4 = round(4*2.4, 0) = 10

А вот если kolpl больше или равно количеству оставшихся месяцев, то равномерного распределения не будет. А будет просто перечисление оставшихся месяцев

Если в виде кода, то примерно так


kolpl = 4 && количество значений
tm = 1 && текущий месяц
* Оставшихся месяцев
om = 12 - tm + 1
if kolpl>=om
for i = 1 to om
?tm - 1 + i
endfor
else
stepM = om / (kolpl + 1)
for i = 1 to kolpl
?tm - 1 + round(i*stepM, 0)
endfor
endif

Если уж совсем алгоритм не выходит, то просто сделайте настроечную таблицу с правильным по вашем мнению распределением. Значений то не особо много. Если я правильно понял, то у Вас kolpl от 1 до 4, а tm от 1 до 12. Всего возможных комбинаций 4*12 = 48. Не более 4 значений. Вот и сделайте табличку

kolpl
tm
m1
m2
m3
m4
Ratings: 0 negative/0 positive
Re: Равные периоды в остатке месяцев с начала года
Baga
Автор

Сообщений: 535
Откуда: г. Махачкала
Дата регистрации: 03.06.2006
Спасибо, Владимир. Попробую переосмыслить.


------------------
Багавудин Мирзаев
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 22 kornienko_ru  (Гостей: 21)

© 2000-2024 Fox Club 
Яндекс.Метрика