Текущее время: Ср, июл 30 2025, 23:07

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Google [Bot]


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

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