Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2010, 23:19   #1
%$PROregRAMi$t%
Заблокирован
 
Регистрация: 28.05.2010
Сообщений: 65
По умолчанию Рассчет порядкового номера запроса

Задача такова:
На сервер поступают запросы с разных ПК.
Номер запроса зависит от известного номера предыдущего зарегистрированного и внесенного в таблицу запроса, известной даты и времени поступления предыдущего запроса, известной даты и времени поступления текущего запроса, который необходимо пронумеровать по порядковому номеру, и от количества запросов за некоторый известный промежуток времени, которое может изменятся в известном диапазоне.

Необходимо пронумеровать запросы в порядке возрастания, но повторятся порядковые номера запросов не должны, так как это не возможно логически (Сервер не может обработать два запроса как один.).
Если наименьшая единица времени поступления предыдущего запроса совпадает с наименьшей единицей времени поступления текущего запроса - тогда большим должен быть номер текущего запроса, так как в таблице он указан на нижней строчке, и соответственно зарегистрирован позже предыдущего.

Помогите решить это головоломку кто нибудь.



В примере ниже первый номер запроса известен. Даты известны. Далее порядковые номера запросов - неизвестны и подлежат расчету. 1440 - это количество минут в сутках, это значение не играет роли, а введено для корректной обработки даты как число - в минутах.
Количество поступающих, незарегистрированных запросов в минуту колеблется в пределах от 18 до 29.

В ячейках B2; B3 минута поступления предыдущего и текущего запроса одинакова. Следовательно виден баг в формуле (результаты вычислений в ячейках А2; А3) У меня вообще мозг кипит, но я чувствую, что решение где-то очень и очень близко... Все гениальное - просто, но блин ступор тут и все. Подтолкнёте кто нить к истине?..
Вложения
Тип файла: zip Excel.zip (5.1 Кб, 23 просмотров)

Последний раз редактировалось %$PROregRAMi$t%; 17.07.2010 в 23:40.
%$PROregRAMi$t% вне форума Ответить с цитированием
Старый 18.07.2010, 12:37   #2
Igor67
Пользователь
 
Регистрация: 09.12.2008
Сообщений: 56
По умолчанию

Попробуйте считать количество повторов.
Ведь у Вас при одинаковых значениях B3-B2 дает 0, и потом все умножается на этот нолик
Например так
=A2+(B3-B2+СЧЁТЕСЛИ($B$2:B3;B3)-1)*1440*СЛУЧМЕЖДУ(18;29)
обычно я на http://planetaexcel.ru/forum.php
Igor67 вне форума Ответить с цитированием
Старый 18.07.2010, 14:24   #3
%$PROregRAMi$t%
Заблокирован
 
Регистрация: 28.05.2010
Сообщений: 65
По умолчанию

В принципе так и есть все умножается на ноль в этом случае.


Igor67, к сожалению Ваша формула дает слишком большое значение в ячейке А3.

Вы можете объяснить зачем нужно фиксировать ячейку B2 ? Если эту формулу растянуть дальше - получается какая-то порнография. Результаты вообще некорректны, формат вычислений изначально ДАТА, и числа после преобразования формата в числовой без десятичных знаков получаются слишком большие...

Но проблема собственно в другом, а именно - СЛУЧМЕЖДУ(18;29) может давать одинаковые числа или числа которые при расчете двух результатов в разных ячейках выдают одинаковые значения, что недопустимо. Этот аспект можно как-то ограничить???

Кстати по этому поводу я создавал несколько тем на этом форуме. Уже не один месяц бьюсь над решением этой головоломки.

Последний раз редактировалось %$PROregRAMi$t%; 18.07.2010 в 15:41.
%$PROregRAMi$t% вне форума Ответить с цитированием
Старый 18.07.2010, 14:37   #4
%$PROregRAMi$t%
Заблокирован
 
Регистрация: 28.05.2010
Сообщений: 65
По умолчанию

=ЕСЛИ(B3=B2;A2+СЛУЧМЕЖДУ(1;17);A2+( B3-B2)*1440*СЛУЧМЕЖДУ(18;29))

Но это опять-же формула только исключающая равенство ДВУХ значений даты и времени регистрации предыдущего и текущего запроса.
А если совпадают значения дат и времени регистрации трех-четырех, десяти запросов??? (разумеется количество повторов не превышает среднее количество, указанное как число максимальное в функции СЛУЧМЕЖДУ(1;17).)

Следовательно есть еще один не менее важный вопрос для решения этой задачи:
Как ограничить повтор результата работы функции СЛУЧМЕЖДУ, если она в формуле?

В предыдущей, созданной мною теме дан ответ, но сугубо СЛУЧМЕЖДУ.

И еще одна фигня:
Если к примеру количество запросов находится в другом, более широком диапазоне, например от 18 до 37 запросов в минуту?

тогда результат работы функции СЛУЧМЕЖДУ(18;37) может выдавать как число 18, так и 36...
Что в двух смежных ячейках может привести к одинаковым значениям результата, что недопустимо. Это при условии, что время регистрации запроса текущего и предыдущего отличается на +1 минуту...


Как это все упаковать в одну формулу?

Последний раз редактировалось %$PROregRAMi$t%; 18.07.2010 в 15:50.
%$PROregRAMi$t% вне форума Ответить с цитированием
Старый 18.07.2010, 18:04   #5
Igor67
Пользователь
 
Регистрация: 09.12.2008
Сообщений: 56
По умолчанию

ИМХО
В примере было показано как избежать ситуации когда несколько запросов пришли в одно время. При этом формула корректно отработает любое количество одновременных и даст уникальное. Ведь каждое последующее будет на 1 больше.
Ну а то что результат большой, так это издержки того что 1 - в Вашем случае = 1440
сделайте так
(СЧЁТЕСЛИ($B$2:B3;B3)-1)/1440
Т.е
формула будет выглядеть наверно так
=A2+(B3-B2+(СЧЁТЕСЛИ($B$2:B3;B3)-1)/1440)*1440*СЛУЧМЕЖДУ(18;29)
обычно я на http://planetaexcel.ru/forum.php
Igor67 вне форума Ответить с цитированием
Старый 18.07.2010, 18:38   #6
Igor67
Пользователь
 
Регистрация: 09.12.2008
Сообщений: 56
По умолчанию

Держите пример, при повторе времени до 18 раз не дает одинаковых номеров, или что - то не учел.
Что бы числа не были большими увеличил разрядность делителя
в примере 14400, играйтесь
Вложения
Тип файла: rar Пример_Excel.rar (50.9 Кб, 16 просмотров)
обычно я на http://planetaexcel.ru/forum.php
Igor67 вне форума Ответить с цитированием
Старый 18.07.2010, 18:53   #7
Igor67
Пользователь
 
Регистрация: 09.12.2008
Сообщений: 56
По умолчанию

И просто вопрос. А то за Вашу формулу схватился.
Надо пронумеровать поступающие запросы по возрастанию отталкиваясь от значения в А2.
А просто добавляя единицу при поступлении очередного? Ни как?
Формула для ячейки А3
=ЕСЛИ(B3="";"";МАКС($A$2:A2)+1)
обычно я на http://planetaexcel.ru/forum.php
Igor67 вне форума Ответить с цитированием
Старый 19.07.2010, 01:54   #8
%$PROregRAMi$t%
Заблокирован
 
Регистрация: 28.05.2010
Сообщений: 65
Хорошо

Цитата:
Сообщение от Igor67 Посмотреть сообщение
при повторе времени до 18 раз не дает одинаковых номеров, или что - то не учел.
В том-то и дело. То что Вы не учли видно, если значение ячейки A2 взять равному например 1.

Разница последнего и первого номера запроса, даты и время поступления которых совпадают - не должна превышать максимальное количество запросов поступающих на сервер. Иначе будет мега-ультра-супер-DDoS

Грубо-говоря: я писал - СЛУЧМЕЖДУ(1;17) - это от 1 до 17 запросов поступает за период от 1 до 59 секунд. (т. е. если время поступления повторяется).
В этом случае исключение повторений номеров запросов при максимально возможном, и даже критическом (17) количестве повторений времени и даты поступления - как раз даст +1 к каждому запросу.

(Физический смысл этой критической ситуации с повторами таков: в течении этого промежутка времени, который менее минуты - только с моего компьютера поступали запросы на сервер. И ни с одного другого. Эти запросы зарегистрированы мною.)

СЛУЧМЕЖДУ(18;29) - это же значит что в максимально-возможный период, который может давать разницу даты - одну минуту, а именно период от 1:00 до 1:59 - поступает на сервер от 18 до 29 запросов.

Благодарю Вас Igor67 за исключение равенства, но представленная Вами формула производит расчеты с датой в случае повторения, а затем делит на некий постоянный делитель. Видимо поэтому в первоначальном поданном Вами примере фотмат ячеек с копированной формулой являлся ДАТОЙ.

Для решения этой задачи нужен сугубо числовой формат и числа при повторах даты и времени поступления запросов должны быть случайны...


Цитата:
Сообщение от Igor67 Посмотреть сообщение
А просто добавляя единицу при поступлении очередного? Ни как?
Формула для ячейки А3
=ЕСЛИ(B3="";"";МАКС($A$2:A2)+1)
Еще раз спасибо, но и тут никак. Иначе в этом случае физический смысл таков:
Запросы поступают только с моего ПК, и тут же регистрируются. Задача же рассматривает зарегистрированные в таблице запросы как часть из массы поступающих на сервер.

Пронумеровать их нужно уникальными числами в порядке возрастания максимального и минимального пределов количества поступления запросов.

Последний раз редактировалось %$PROregRAMi$t%; 19.07.2010 в 02:18.
%$PROregRAMi$t% вне форума Ответить с цитированием
Старый 19.07.2010, 22:19   #9
Igor67
Пользователь
 
Регистрация: 09.12.2008
Сообщений: 56
По умолчанию

Имхо
расчетов с датами в приведенной мною формуле нет. Она просто считает количество одинаковых данных.
В Вашей формуле Вы обрабатываете дату и время
(B3-B2)
все это происходит не явно, поэтому Вы не обращаете на это внимания. затем Вы переводите полученные минуты Ехс в десятичную систему *1440
это легко проверить введя Ваши B3-B2 в свободную ячейку и в числовом формате 1мин=0,000694444446708076
Ну а так, как 1 для Ехс это 24 часа, одни сутки - как желаете для приведения к единому знаменателю и требуется деление.
в общем я отвечаю на 1 вопрос. как избежать повторения ID при нескольких данных в единицу времени.
обычно я на http://planetaexcel.ru/forum.php
Igor67 вне форума Ответить с цитированием
Старый 20.07.2010, 23:53   #10
%$PROregRAMi$t%
Заблокирован
 
Регистрация: 28.05.2010
Сообщений: 65
По умолчанию

Т. е. задачу решить невозможно, или все-таки есть способы решения этой задачи с помощью Excel ? Если есть, то какие?
%$PROregRAMi$t% вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск порядкового номера в pascale счастливая Помощь студентам 1 17.05.2010 19:07
Физический рассчет сил. meizy Паскаль, Turbo Pascal, PascalABC.NET 2 12.04.2010 09:40
Паскаль. Перечислимый тип. Определение порядкового номера дня високосного года. katya36 Помощь студентам 9 02.05.2009 13:56
исключение повторения номера акта за этот год ГОСЕАН БД в Delphi 9 09.03.2008 02:50
Рассчет времени по координатам Квэнди Свободное общение 5 28.12.2006 12:59