Logo

רד-בורד: ארכיון

ראשי > תיכנות > [Pascal] איך אני מציב מספר אקראי?

06/09/2006 17:30:02 -casper-
טוב אז יש לי שאלה שהמורה שלי נתנה לי אבל אני לומד לבד פסקל ככה שהיא לא לימדה אותי את זה...
אז חלק מהשאלות אני יודע ואת זאת לא...
אז אם תוכלו לעזור לי אני ממש יודה לכם!!
טוב אז ככה:
-הצב במשתנה MIS מספר אקראי בין 0 ל-8.
זאת השאלה
ואני לא יודע איך להציב מספר אקראי בין 0 ל-8.
כאילו ממה שהבנתי אני צריך להציב מספר במשתנה MIS והמחשב בוחר לבד איזה מספר יהיה מוצב במשתנה הזה
אבל אני צריך לתת למחשב הגבלות ז"א שהמחשב יצטרך לבחור מספר בין 0 ל-8 והוא יבחר לבד באקראיות מספר ויציב אותו במשתנה MIS
הבנתי נכון בכלל??
האם מישהו יודע איך לעשות את זה?[ההודעה נערכה על-ידי tal ב-10/10/2006 01:36:29]
06/09/2006 18:05:01 newbez
אני יכול לענות לך אבל בערך כי לא נגעתי בזה מיזמן

קוד:var
a:integer;
begin
randomize; [אתה חייב לירשום את זה בהתחלה כדאי להגיד למחשב יש כאן מיספרים אקראיים]
a:=random(8)-1 ]עכשיו פה יש נוסחא שאני לא זוכר אבל זה ייתן לך מיספרים בין -1 לשמונה אם אני לא טועה]
writeln(a);
end.
06/09/2006 18:29:24 Admin
פסקת סיכום מתוך דף שקבלתי שנה שעברה במחשבים (וחפשתי במיוחד עכשיו בגלל התגובה של newbez):
ציטוט:מספר אקראי הוא מספר בלתי ידוע מראש
הפונקציה RANDOM מחזירה מספר אקראי
ערכו של הביטוי (RANDOM (N הוא מספר אקראי בין 0 ל-(N-1)
לדוגמה, ההוראה ((WRITELN (RANDOM (9 תגרום להדפסה של מספר אקראי בין 0 ל-8.


ובשבילך -casper-:
קוד:randomize;
MIS:=random(9);

הפקודה RANDOMIZE נחוצה בגלל שה-RANDOM אמנם מביא לך מספרים אקראיים, אבל יש להם סדר קבוע (תנסה להשתמש ב-RANDOM של אותו מספר בתוך לולאה שתציג את המספר, למשל ((FOR I:=1 TO 10 DO WRITELN(RANDOM (34, ותריץ את התוכנית כמה פעמים. אתה תראה שאתה מקבל את אותו סט מספרים), ואז הפקודה RANDOMIZE מערבבת את הסדר הזה ונותנת לך את האפקט של מספר אקראי באמת.[ההודעה נערכה על-ידי Admin ב-06/09/2006 18:30:23]
06/09/2006 19:53:20 -casper-
תודה רבה!!
עזרתם לי מאוד!!
נראה לי שהבנתי איך לעשות את זה ואני יתרגל את זה קצת.. :)
06/09/2006 20:01:58 newbez
ציטוט:פסקת סיכום מתוך דף שקבלתי שנה שעברה במחשבים (וחפשתי במיוחד עכשיו בגלל התגובה של newbez):
ציטוט:מספר אקראי הוא מספר בלתי ידוע מראש
הפונקציה RANDOM מחזירה מספר אקראי
ערכו של הביטוי (RANDOM (N הוא מספר אקראי בין 0 ל-(N-1)
לדוגמה, ההוראה ((WRITELN (RANDOM (9 תגרום להדפסה של מספר אקראי בין 0 ל-8.


ובשבילך -casper-:
קוד:randomize;
MIS:=random(9);

הפקודה RANDOMIZE נחוצה בגלל שה-RANDOM אמנם מביא לך מספרים אקראיים, אבל יש להם סדר קבוע (תנסה להשתמש ב-RANDOM של אותו מספר בתוך לולאה שתציג את המספר, למשל ((FOR I:=1 TO 10 DO WRITELN(RANDOM (34, ותריץ את התוכנית כמה פעמים. אתה תראה שאתה מקבל את אותו סט מספרים), ואז הפקודה RANDOMIZE מערבבת את הסדר הזה ונותנת לך את האפקט של מספר אקראי באמת.

[ההודעה נערכה על-ידי Admin ב-06/09/2006 18:30:23]
בידיוק את הנוסחא הזואת של n-1 חיפשתי פשוט לא הישתמשתי בזה הרבה ופרח מיזכרוני
06/09/2006 22:40:24 nel
בקשר לבגרויות אני לא בטוח אם חייבים להוסיף RANDOMIZE או לא...

אני לא זוכר מה אני עשיתי...

ד"א אני רק רוצה להזהיר כי אפשר לשכוח ולאכול אותה...
בהרבה שאלות מבקשים מספר מאחד עד מספר כלשהו...

ואז לא מספיק
קוד:random(5);

אלא צריך
קוד:random(4)+1;

אני אומר את זה כי אני כמעט שכחתי את זה בבגרות...
06/09/2006 22:54:55 -casper-
קוד:
random(4)+1;


אם אני כותב ככה אז זה מתחיל לספור לי מ-1 עד 4 ולא מ-0 עד 4 כמו בדוגמא הקודמת??
06/09/2006 23:02:40 nel
הוא יספור מ-1 עד 4 אבל בדוגמא הקודמת הוא יספור מ-0 עד 3...
06/09/2006 23:31:37 -casper-
???
התבלבלתי!
צריך להבהיר משהו!
קוד:
random(4)+1;

^ פה הוא יספור מ1 עד 4

קוד:
random(4);

^פה הוא יספור מ-0 עד 4

קוד:
random(4)-1;

^פה הוא יספור מ-(1-) עד 4

נכון?[ההודעה נערכה על-ידי -casper- ב-06/09/2006 23:32:21]
07/09/2006 00:12:36 Admin
לא נכון.

(random(4
יספור עד 3 (יתחיל ב-0)

random(4)+1
יספור עד 4 (יתחיל ב-1)

random(4)-1
יספור עד 2 (יתחיל ב-1-)

תמיד תזכור שהמספר שאתה מכניס ב-random זה המספר הסופי +1. זאת אומרת שאם אתה מכניס 4 אז זה יספור עד 3, אם 8 אז יספור עד 7 וכו’. ואז עם הפעולות חשבון (חיבור-חיסור) אני מאמין שעברת את כתה א’ ותצליח להסתדר איתן.

ננסה להסביר את זה בצורה יותר ברורה:
הפקודה RANDOM נותנת לך טווח מסויים. הטווח הזה הוא קבוע.
שים לב, כתבתי הטווח קבוע, לא המספרים. המספרים הם אקראיים, כן, אבל הטווח אם אתה כותב (RANDOM(6 יהיה של שישה מספרים, מ-0 עד 5.
עכשיו, העניין עם החיבור\חיסור הוא שהשינוי הוא לא על המספר עצמו שמתקבל על-ידי הפונקציה RANDOM, אלא על המספר הסופי שמוצג. זאת אומרת שכשאתה עושה RANDOM הוא יתן לך מספר מסויים, ואם תעשה RANDOM +5 אז ה-RANDOM עדיין יתן לך מספר מסויים, פשוט אחרי שהמספר הזה יתקבל הוא יעלה ב-5.
זה מוביל אותנו להבנה שהשינוי הוא לא על המספר שהפונקציה נותנת אלא על המספר הסופי שנשמר\מוצג, מה שמקשר אותנו לכך שהשינוי הוא על טווח המספרים.
לכן כשאתה עושה RANDOM(75)+5 זה יקח לך את הטווח של ה-75 מספרים ויוסיף עליהם 5, ככה שנגיד ה-RANDOM יתן לך את המספר 0, יתווסף לו 5 והמספר יהיה 5, ואם ה-RANDOM יתן לך 74, יתווסף לו 5 והמספר יהיה 79.

לסיכום, אם תוסיף ל-RANDOM מספר, אז אתה מוסיף אותו לא רק להתחלה (או לסוף) אלא גם להתחלה וגם לסוף.



אגב nel: גם לי היה איזה סיפור עם ה-RANDOM, נראה לי במבחן השני שנה שעברה.
מה שקרה זה שבתרגיל הייתי צריך לקחת מספר אקראי שלא מתחיל מ-0 אלא נגיד מ-25, ולא זכרתי שאפשר פשוט לכתוב +25 ולגמור את הסיפור. אז מה שעשיתי זה במקום להוסיף עוד 3 תווים הוספתי עוד כמה שורות של לולאה שבדקה מה המספר שמתקבל וקבעה אם הוא גדול או קטן מ-25 ובהתאם העלתה את המספר (או עשתה RANDOM חדש, לא זוכר מה עשיתי שם בדיוק).
בקיצור סיבוך שלם. בסוף באתי לקבל את המבחן המורה אמרה לי "אני לא מבינה מה עשית פה, בשביל מה עשית את כל זה?", ורק אז קלטתי בראש את התשובה של ה+25.
אגב בסוף נפלתי באותו תרגיל על אותו RANDOM, בגלל שהטווח היה צריך להיות נגיד עד המספר 56, אז כתבתי (RANDOM(56.
אפשר לאמר שלמדתי מטעויות.
07/09/2006 12:46:37 -casper-
תודה רבה!
הבנתי את הטעיות שהיו לי למעלה!!

נקווה שלי לא יקרה כאלה דברים חחח
07/09/2006 15:13:41 devil kide
לא קראתי הכל, אבל הייתי חייב לתקן.
שחף, הפקודה
randomize
לא מערבבת את הסדר של המספרים, היא בונה מספרים אקראיים דרך השעון.
היא עושה את זה בעיקרון כזה(לא ככה, אבל בגדול):
שעה+הדקות-התאריך\היום (ותדאג שיהיה מספר שלם, בטווח שנתנו לה).
13/09/2006 14:25:41 Udi
אני תמיד עבדתי ככה
random(H-L)+1
H=ערך עליון
L= ערך תחתון

ככה אם צריך מספר בין 20-60 זה עובד..
משהו כזה.. =]
13/09/2006 20:18:18 nel
זה בערך אותו דבר...

ככה באמת צריך לעשות אם אתה רוצה מספר אקראי שהטווח של הבחירה לא מתחיל מ-0...

כאילו הברירת מחדל של הערך התחתון הוא 0 אם רוצים מספר אחר צריך לשנות...
עמודים: 1