יום רביעי, 2 בנובמבר 2016

שפת C - מספרים רנדומליים, דוגמאות ומשימות לשימוש בלולאות (יום רביעי)

מספרים רנדומליים

מספרים רנדומליים (אקראים) שימושיים להרבה מאוד תחומים, כדוגמת משחקים.
הנושא הוא לא פשוט שכן איך יכול אלגוריתם קבוע ליצור דבר אקראי?
קיימות מספר דרכים. חלקן יותר מדויקות מאחרות, (במספר רב של ניסיונות), וכולן משתמשות באקראיות שנמצאת בטבע.

בשפת C נשתמש בפונקציות rand ו srand.
srand מקבלת את הפונקציה time שמחזירה את מספר השניות שעברו מאז 1970, ובאמצעות חישוב מתמטי מסוים על המספר הפונקציה rand מחזירה מספר רנדומלי. לא נפרט, אך תזכרו שכל פעם rand מחזירה מספר אקראי חדש (גדול או שווה 0).



על מנת להשתמש במספרים רנדומליים יש להכליל גם את שתי הספריות:
<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 הוא מושלם.
כתוב תוכנית אשר קולטת מספרים עד קליטת המספר השלילי הראשון , ומוצאת כמות המספרים המושלמים שנקלטו.



תגובה 1:

  1. למקרה שהתוכנית תמחק, הנה היא:


    #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");
    }

    השבמחק