Текущее время: Пн, июл 21 2025, 14:47

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Генератор случайных чисел
СообщениеДобавлено: Ср, янв 03 2007, 09:15 
Начинающий
Начинающий

Зарегистрирован:
Ср, янв 03 2007, 08:45
Сообщения: 9
Подскажите оператор, генерирующий случайные числа (ABAP-4)
p.s. С новым годом!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Генератор случайных чисел
СообщениеДобавлено: Ср, янв 03 2007, 09:35 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Gribanov написал(а):
Подскажите оператор, генерирующий случайные числа (ABAP-4)
p.s. С новым годом!

Random number generator, CL_ABAP_RANDOM class?

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Генератор случайных чисел
СообщениеДобавлено: Ср, янв 03 2007, 10:43 
Начинающий
Начинающий

Зарегистрирован:
Ср, янв 03 2007, 08:45
Сообщения: 9
sy-uname написал(а):
Gribanov написал(а):
Подскажите оператор, генерирующий случайные числа (ABAP-4)
p.s. С новым годом!

Random number generator, CL_ABAP_RANDOM class?


этот класс недоступен, может другой есть или ФМ какой?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, янв 03 2007, 10:56 
Начинающий
Начинающий

Зарегистрирован:
Ср, янв 03 2007, 08:45
Сообщения: 9
есть не очень еффективный ФМ

FUNCTION QF05_RANDOM_INTEGER.
*"----------------------------------------------------------------------
*"Lokale Schnittstelle:
*" IMPORTING
*" RAN_INT_MAX LIKE QF00-RAN_INT DEFAULT 100
*" RAN_INT_MIN LIKE QF00-RAN_INT DEFAULT 1
*" EXPORTING
*" RAN_INT LIKE QF00-RAN_INT
*" EXCEPTIONS
*" INVALID_INPUT
*"----------------------------------------------------------------------
DATA:
L_RAN_INT LIKE QF00-RAN_INT,
L_RAN_NUMBER LIKE QF00-RAN_NUMBER.

*-- Berechnung erforderlich?
IF RAN_INT_MIN = RAN_INT_MAX.
RAN_INT = RAN_INT_MIN.
EXIT. "FROM CALL
ENDIF.

*-- Input prќfen
IF RAN_INT_MIN > RAN_INT_MAX.
RAISE INVALID_INPUT.
ENDIF.

L_RAN_INT = RAN_INT_MIN - 1.

*-- Der Bereich wird fќr die Berechnung erweitert, um
* Randeffekte zu unterdrќcken. Nicht gewќnschte
* Ergebnisse werden geskipt.
WHILE L_RAN_INT > RAN_INT_MAX
OR L_RAN_INT < RAN_INT_MIN.
*-- Zufallszahl zwischen 0 und 1 erzeugen
CALL FUNCTION 'QF05_RANDOM'
IMPORTING
RAN_NUMBER = L_RAN_NUMBER.
*-- Zufallszahl auf den gewќnschten Bereich transformieren
L_RAN_INT = L_RAN_NUMBER * ( RAN_INT_MAX - RAN_INT_MIN + 2 )
+ RAN_INT_MIN - 1.
ENDWHILE.

MOVE L_RAN_INT TO RAN_INT.

ENDFUNCTION.

FUNCTION QF05_RANDOM.
*"----------------------------------------------------------------------
*"Lokale Schnittstelle:
*" IMPORTING
*" RAN_SEED LIKE QF00-RAN_SEED DEFAULT G_RAN_SEED
*" EXPORTING
*" RAN_NUMBER LIKE QF00-RAN_NUMBER
*" RAN_SEED LIKE QF00-RAN_SEED
*"----------------------------------------------------------------------

DATA:
LC_RAN_A(4) TYPE P VALUE 67301, "Multiplikator
LC_RAN_M(6) TYPE P VALUE 4294967296, "Modulus 2**32
LC_RAN_C(1) TYPE P VALUE 01. "Inkrement

* -- Startwertbehandlung
IF RAN_SEED EQ CP_NULL.
IF G_RAN_SEED EQ CP_NULL.
PERFORM RANINI.
G_RAN_SEED = G_RAN_SEED MOD LC_RAN_M.
ENDIF.
RAN_SEED = G_RAN_SEED.
ENDIF.

* -- Kernfunktion
RAN_SEED = ( RAN_SEED * LC_RAN_A + LC_RAN_C ) MOD LC_RAN_M.
* -- Der Wert 0 wird durch RAN_M ersetzt,
* um beim nфchsten Aufruf eine neue Initialisierung
* zu verhindern
IF RAN_SEED EQ CP_NULL.
MOVE LC_RAN_M TO RAN_SEED.
ENDIF.

* -- Zufallszahl 0 < RAN_NUMBER <= 1
RAN_NUMBER = RAN_SEED / LC_RAN_M.

* -- Startwert in globale Variable sichern
MOVE RAN_SEED TO G_RAN_SEED.

ENDFUNCTION.

*eject
*---------------------------------------------------------------------*
* FORM RANINI *
*---------------------------------------------------------------------*
* Diese Form besetzt den Startwert des Zufallszahlengenerators *
* Ist kein Startwert aus dem SPA/GPA-Memory vorhanden dann, so wird *
* ein Startwert aus der System-Uhrzeit und dem System-Datum berechnet.*
*---------------------------------------------------------------------*
FORM RANINI.

DATA:
LC_FAKTOR TYPE P VALUE 86400, "= 24 * 60 * 60
L_DATUM TYPE P.

GET PARAMETER ID C_RAN_PARAMID FIELD G_RAN_SEED.
CHECK G_RAN_SEED = 0.
MOVE SY-DATUM TO L_DATUM.
* -- L_DATUM enthфlt die Anzahl Tage seit 01.01.1900
G_RAN_SEED = L_DATUM * LC_FAKTOR + SY-UZEIT.
* -- G_RAN_SEED enthфlt die Anzahl Sekunden seit 01.01.1900

ENDFORM.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, янв 03 2007, 11:23 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пн, янв 24 2005, 16:22
Сообщения: 749
Пол: Мужской
Gribanov написал(а):
есть не очень еффективный ФМ

FUNCTION QF05_RANDOM_INTEGER.


А почему считаете его не очень эффективным?

в ветке https://www.sdn.sap.com/irj/sdn/thread?threadID=180300 кто-то даже самостоятельно написанные модули предлагает

_________________
Счастье есть!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, янв 03 2007, 11:26 
Начинающий
Начинающий

Зарегистрирован:
Ср, янв 03 2007, 08:45
Сообщения: 9
Tetty написал:
Gribanov написал(а):
есть не очень еффективный ФМ

FUNCTION QF05_RANDOM_INTEGER.


А почему считаете его не очень эффективным?

в ветке https://www.sdn.sap.com/irj/sdn/thread?threadID=180300 кто-то даже самостоятельно написанные модули предлагает


при первом старте всегда выдает одно и то-же число
последующие уже идут RND


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, янв 03 2007, 11:42 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пн, янв 24 2005, 16:22
Сообщения: 749
Пол: Мужской
Gribanov написал(а):
при первом старте всегда выдает одно и то-же число
последующие уже идут RND


Как и для всех генераторов псевдослучайных чисел необходимо задавать первое число или инициализировать последовательность каким-либо специальным методом.

Беглый взгляд на модуль группу функций QF05 показывает, что такой ФМ существует - QF05_RANDOM_SAVE_SEED. Можете воспользоваться им, а для инициализации и GET TIME STAMP FIELD lc_time. подойдет

_________________
Счастье есть!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: re
СообщениеДобавлено: Ср, янв 03 2007, 12:53 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
случайные числа используются тут:

группа функций F052 (генерация случайных чисел)
в пакете FBAS (financial accounting basis) ..


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB