חילול מספר אקראי

פורומים אפיון ופיתוח פריוריטי חילול מספר אקראי

  • Post
    יואב
    משתתף
    היי,
    אני רוצה לכתוב פונקציה אשר תביא לי כל פעם 5 מק"טים שונים.
    הבעיה שלי היא ביצירת מספר אקראי….

    יש למישהו רעיון איך לחולל בכל פעם מספר אקראי??

    תודה,
    יואב רוזנברגר

מוצגות 3 תגובות – 1 עד 3 (מתוך 3 סה״כ)
  • Replies
    אלמוני
    אורח
    התכנית שמופיעה למטה תכין "מספרים אקראיים" (הם לא באמת אקראיים אבל מספיק טוב לצרכים שלנו). צריך להעביר שני פרמטרים –
    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 ומוצג באמצעות הודעה – יכול להיות שתרצה לשנות זאת.

    אלמוני
    אורח
    במחשבה שניה, כל הקשור ל-XSEED די מיותר מפני שהערך ההתחלתי ישתנה רק פעם בחודש. יהיה יותר טוב לקבוע את ערכו ההתחלתי כך
    523 * (XSEED = MONTH (SQL.DATE8) * 493 + DAY (SQL.DATE8ׁׁׁׁׁׂ ׁׁׁׂׂ ׁ
    לא צריך את ה-MOD כי הערך המירבי 22129
    לפחות כך תקבל ערכים שונים מדי יום.
    גם הייתי מחליף את ה-MONTH באתחול YSEED ב-DAY, אם כי כאן זה פחות חשוב.
    יואב
    משתתף
    איזה פורום מדהים, תודה על העזרה והמענה המהיר!!
מוצגות 3 תגובות – 1 עד 3 (מתוך 3 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.