התכנית שמופיעה למטה תכין "מספרים אקראיים" (הם לא באמת אקראיים אבל מספיק טוב לצרכים שלנו). צריך להעביר שני פרמטרים –
NUM – כמה מספרים להכין
MAX – טווח המספרים (כמה שיותר גדול – יותר טוב). במקרה שלך, זה כנראה יהיה מספר הפריטים שהוגדרו.
אני מציג תכנית שעומדת בפני עצמה אבל אני משער שתצטרך להתאים את הגרעין לצרכים שלך.
/* Generate pseudo random numbers */
ERRMSG 1 WHERE :$.NUM < 1;
:HOUR = ATOI (STRIND (DTOA (SQL.DATE, 'hh:mm'), 1, 2));
:MINS = ATOI (STRIND (DTOA (SQL.DATE, 'hh:mm'), 4, 2));
:TMP = 0.0;
:XSEED = ((YEAR (SQL.DATE8) MOD 100) + (MONTH (SQL.DATE8) * 493))
MOD 30269;
:YSEED = ((MONTH (SQL.DATE8) – 1) + (2417 * :HOUR) + (23 * :MINS))
MOD 30307;
:N = 0; /* LOOP COUNTER */
LABEL 1;
:XSEED = 171 * (:XSEED MOD 177) – 2 * ROUND ((:XSEED + 0.0) / 177);
SELECT (:XSEED < 0 ? 30269 : 0) + :XSEED INTO :XSEED FROM DUMMY;
:YSEED = 172 * (:YSEED MOD 176) – 35 * ROUND ((:YSEED + 0.0) / 176);
SELECT (:YSEED < 0 ? 30307 : 0) + :YSEED INTO :YSEED FROM DUMMY;
:TMP = :XSEED / 30269.0 + :YSEED / 30307.0;
:PAR1 = ITOA (ROUND (:$.MAX * ABSR (:TMP – ROUND (:TMP))));
WRNMSG 2;
:N = :N + 1;
LOOP 1 WHERE :N < :$.NUM;
LABEL 9;
כמובן, בעיות העיצוב באתר הזה הופכות חלק מהשרות להיות בעייתיות. למשל, השורה השלישית (חישוב מספר שעות) אמור להתחיל עם נקודותיים ולהסתיים עם שני סוגריים.
המספר האקראי מוצב לתוך המשתנה PAR1 ומוצג באמצעות הודעה – יכול להיות שתרצה לשנות זאת.