מספרים רנדומליים
מספרים רנדומליים (אקראים) שימושיים להרבה מאוד תחומים, כדוגמת משחקים.
הנושא הוא לא פשוט שכן איך יכול אלגוריתם קבוע ליצור דבר אקראי?
קיימות מספר דרכים. חלקן יותר מדויקות מאחרות, (במספר רב של ניסיונות), וכולן משתמשות באקראיות שנמצאת בטבע.
בשפת C נשתמש בפונקציות rand ו srand.
srand מקבלת את הפונקציה time שמחזירה את מספר השניות שעברו מאז 1970, ובאמצעות חישוב מתמטי מסוים על המספר הפונקציה rand מחזירה מספר רנדומלי. לא נפרט, אך תזכרו שכל פעם rand מחזירה מספר אקראי חדש (גדול או שווה 0).
ראו גם: מחולל מספרים אקראיים, true randomness
על מנת להשתמש במספרים רנדומליים יש להכליל גם את שתי הספריות:
<stdlib.h>
< time.h>
:ובתוכנית שלנו לכתוב פעם אחת את השורה
srand (time(0));
:אחריה, כל פעם שצריך מספר רנדומלי נשתמש ב
rand();
אחת הבעיות שלנו היא כשנרצה מספר אקראי מ X או עד X
לשם כך שימושי מאוד התו % (פעולת שארית)
לדוגמה:
p = rand()%100
עכשיו p שווה מספר אקראי בין 0 ל 99! (משום שהשארית של כל מספר לחלק ל 100 יכולה להיות רק בין 0 ל 99)
או:
p = rand()%91+10
עכשיו p שווה מספר אקראי בין 10 ל 100!
במשחק צריך לנחש מספר חיובי בין 0 ל 4. תוכלו לשנות את ערך z וכך להקל או להקשות את המשחק.
תרגול בשיעור:
/* #include <stdio.h> void main() { int i , j; for(i=0; i < 20 ; i++) { putchar('$'); for(j=0; j<10; j++) putchar('#'); printf("*\n"); } i=0; while( i < 20 ) { putchar('$'); j=0; while( j<10 ) { putchar('#'); j++; } printf("*\n"); i++; } } } ///////////////////////////////////////////////// #include <stdio.h> void main() { int i , j; for(i=1; i <= 10 ; i++) { for(j=1; j<=10; j++) printf("%-3d",i*j); putchar('\n'); } } */
משימות:
1) כתוב תוכנית אשר קולטת מספר שלם n ומדפיסה הצורות הבאות:
(הדוגמא עבור n=5 )
*****
*****
*****
*****
*****
***** * *****
**** ** * *
*** *** * *
** **** * *
* ***** *****
2) כתוב תוכנית אשר קולטת מספר שלם n ומדפיסה משולש המספרים הבא:
( דוגמא עבור n=4) :
1 4 3 2 1
2 2 3 2 1
3 3 3 2 1
4 4 4 4 1
3) כתוב תוכנית אשר קולטת מספר שלם ומוצאת המספר הראשוני הכי
קרוב למספר שנקלט מלמעלה.
לדוגמא, עבור 8 פלט : 11
עבור 13 פלט : 13
4) מספר מושלם הוא מספר ששווה לסכום כל מחלקיו (חוץ מהמספר עצמו).
לדוגמא: המחלקים של 6 הם: 1 , 2 , 3 1+2+3=6 , לכן 6 הוא מושלם.
כתוב תוכנית אשר קולטת מספרים עד קליטת המספר השלילי הראשון , ומוצאת כמות המספרים המושלמים שנקלטו.
למקרה שהתוכנית תמחק, הנה היא:
השבמחק#include
#include
#include
void main()
{
int num, x,z=4;
printf("Guess number between 0 and %d: ",z);
scanf("%d",&num);
srand(time(0));
x = rand()%(z+1);
if (num==x)
printf ("Right!\n\n",num);
else
printf("Wrong!\n\n");
}