powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите оптимизировать код. Access 2007
12 сообщений из 12, страница 1 из 1
Помогите оптимизировать код. Access 2007
    #40037906
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Помогите оптимизировать код. Access 2007
    #40037923
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
INT((SKOKA_MINUT - LIMIT_MINUT) / PERIOD_MINUT)
...
Рейтинг: 0 / 0
Помогите оптимизировать код. Access 2007
    #40037932
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
описание функции.
Час разделён на 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
Помогите оптимизировать код. Access 2007
    #40037933
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
наверна - ни савсем так...
А?
...
Рейтинг: 0 / 0
Помогите оптимизировать код. Access 2007
    #40037947
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Select Case True
...
Не?
...
Рейтинг: 0 / 0
Помогите оптимизировать код. Access 2007
    #40038013
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
час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
Помогите оптимизировать код. Access 2007
    #40038022
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
час58 , это идея. А плюс-минус единичка и проверка на диапазон - это ты и сам сможешь.
...
Рейтинг: 0 / 0
Помогите оптимизировать код. Access 2007
    #40038082
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

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

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

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



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

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

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


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


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