Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите оптимизировать код. Access 2007 / 12 сообщений из 12, страница 1 из 1
22.01.2021, 12:12
    #40037906
час58
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать код. Access 2007
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
Public Function FUN_SKOKA_PERIODOV_S_UCHETOM_LIMITA(SKOKA_MINUT As Integer) As Integer
'_LIMIT_VREMENI
    Dim LIMIT_MINUT As Integer
    Dim PERIOD_MINUT As Integer

    LIMIT_MINUT = FUN_LIMIT_VREMENI
    PERIOD_MINUT = FUN_SKOKA_MINUT_PERIOD

    If SKOKA_MINUT < LIMIT_MINUT Then
        FUN_SKOKA_PERIODOV_S_UCHETOM_LIMITA = 0
        Exit Function
    End If

    If SKOKA_MINUT > LIMIT_MINUT And SKOKA_MINUT <= PERIOD_MINUT + LIMIT_MINUT Then
        FUN_SKOKA_PERIODOV_S_UCHETOM_LIMITA = 1
        Exit Function
    End If

    If SKOKA_MINUT > PERIOD_MINUT + LIMIT_MINUT And SKOKA_MINUT <= PERIOD_MINUT * 2 + LIMIT_MINUT Then
        FUN_SKOKA_PERIODOV_S_UCHETOM_LIMITA = 2
        Exit Function
    End If

    If SKOKA_MINUT > PERIOD_MINUT * 2 + LIMIT_MINUT And SKOKA_MINUT <= PERIOD_MINUT * 3 + LIMIT_MINUT Then
        FUN_SKOKA_PERIODOV_S_UCHETOM_LIMITA = 3
        Exit Function
    End If

    If SKOKA_MINUT > PERIOD_MINUT * 3 + LIMIT_MINUT And SKOKA_MINUT <= PERIOD_MINUT * 4 + LIMIT_MINUT Then
        FUN_SKOKA_PERIODOV_S_UCHETOM_LIMITA = 4
        Exit Function
    End If


End Function



Можно ли всю эту функцию сделать в более компактном виде.
Рад любым идеям.
Уж больно громоздко у меня получилось
------------------------------------------------------------------------
Спасибо за ответ.
...
Рейтинг: 0 / 0
22.01.2021, 12:31
    #40037923
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать код. Access 2007
Код: vbnet
1.
INT((SKOKA_MINUT - LIMIT_MINUT) / PERIOD_MINUT)
...
Рейтинг: 0 / 0
22.01.2021, 12:37
    #40037932
час58
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать код. Access 2007
описание функции.
Час разделён на 4 периода.
0-15 минут - один период.
15-30 минут - 2 период
30-45 минут - 3 период
45-60 минут - 4 период

Но, ещё имеется не фиксированный(опционный) период - лимит времени, например 5 минут.
В таком случае периоды немного видоизменяются

5-15 минут - один период.
20-30 минут - 2 период
35-45 минут - 3 период
50-60 минут - 4 период

- лимит времени, например 1 минута.

1-15 минут - один период.
16-30 минут - 2 период
31-45 минут - 3 период
46-60 минут - 4 период
...
Рейтинг: 0 / 0
22.01.2021, 12:39
    #40037933
час58
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать код. Access 2007
Akina,
наверна - ни савсем так...
А?
...
Рейтинг: 0 / 0
22.01.2021, 12:51
    #40037947
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать код. Access 2007
Select Case True
...
Не?
...
Рейтинг: 0 / 0
22.01.2021, 14:16
    #40038013
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать код. Access 2007
час58
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
............
    If SKOKA_MINUT > LIMIT_MINUT And SKOKA_MINUT <= PERIOD_MINUT + LIMIT_MINUT Then
        FUN_SKOKA_PERIODOV_S_UCHETOM_LIMITA = 1
        Exit Function
    End If

   If SKOKA_MINUT > PERIOD_MINUT + LIMIT_MINUT And SKOKA_MINUT <= PERIOD_MINUT * 2 + LIMIT_MINUT Then
        FUN_SKOKA_PERIODOV_S_UCHETOM_LIMITA = 2
        Exit Function
    End If

    If SKOKA_MINUT > PERIOD_MINUT * 2 + LIMIT_MINUT And SKOKA_MINUT <= PERIOD_MINUT * 3 + LIMIT_MINUT Then
        FUN_SKOKA_PERIODOV_S_UCHETOM_LIMITA = 3
        Exit Function
    End If

    If SKOKA_MINUT > PERIOD_MINUT * 3 + LIMIT_MINUT And SKOKA_MINUT <= PERIOD_MINUT * 4 + LIMIT_MINUT Then
        FUN_SKOKA_PERIODOV_S_UCHETOM_LIMITA = 4
        Exit Function
    End If
............



.... сделать в более компактном виде.
.......

Этот кусок можно так укоротить:
Код: vbnet
1.
2.
3.
4.
5.
6.
For i = 1 To 4
   If SKOKA_MINUT > PERIOD_MINUT * (i - 1) + LIMIT_MINUT And SKOKA_MINUT <= PERIOD_MINUT * i + LIMIT_MINUT Then
        FUN_SKOKA_PERIODOV_S_UCHETOM_LIMITA = i
        Exit Function
   End If
Next
...
Рейтинг: 0 / 0
22.01.2021, 14:24
    #40038022
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать код. Access 2007
час58 , это идея. А плюс-минус единичка и проверка на диапазон - это ты и сам сможешь.
...
Рейтинг: 0 / 0
22.01.2021, 16:58
    #40038082
час58
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать код. Access 2007
Akina,

Блин.
Забыл подписаться на тему....

Спасибо за идеи...
Если, кто ещё что предложит, не откажуся
...
Рейтинг: 0 / 0
22.01.2021, 23:22
    #40038195
Stupid_BOT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать код. Access 2007
час58,
судя по примерам,
если лимит не нулевой, то он добавляется в начало каждого периода,
включая первый.

При таком алгоритме функция сокращается до одного выражения.
Код: sql
1.
int ( skoka / ( limit + period )  )



Если лимит добавляется только между периодами, то

Код: sql
1.
int ( ( skoka + limit ) / ( limit + period )  )
...
Рейтинг: 0 / 0
23.01.2021, 10:34
    #40038228
час58
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать код. Access 2007
Stupid_BOT,

похоже я тут намудрил.
и всё иначе.
Лимит всегда добавляется к прошедшему времени..
То есть прошёл час, у тебя есть поблажка в 5 минут....
прошло 1 час и 16 минут у тебя так же есть поблажка на 5 минут,
но за 1 период, ты всё же уже должен доплатить.
Вот над чем надо поломать голову.
Есть идеи как тут подойти к решению задачи?
...
Рейтинг: 0 / 0
26.01.2021, 01:02
    #40038834
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать код. Access 2007
час58
Есть идеи как тут подойти к решению задачи?


решению какой задачи ?
два раза перечитал сверху в низ и не понял что тебе нужно...
Не можешь сформулировать, дай пример: вход - > выход
хрен знает, может я уже супер стар?
хоть кто-то понял что нужно было ?
---------------------------------------
ну есть 4 жестких периода...
есть событие, ожидаемое в определенный период...
если событие произошло не ранее 5 минут до начала периода или не позднее 5 минут конца периода то это нормально...
Это я так... для примера... в нем нет запросов, операторов и формул, но тупо понятно о чем речь вообще...
...
Рейтинг: 0 / 0
26.01.2021, 10:47
    #40038899
час58
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать код. Access 2007
vmag,
:-)))
А всё из за того, что я не смог сформулировать так, что бы было ясно и понятно.
Решение появилось, благодаря подсказкам в этой ветке.
Потыкали носом и из двух примеров родился один.
Годный и компактный.
-------------------------
Я, в следующий раз, опишу задачу добросовестнее.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите оптимизировать код. Access 2007 / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]