THMMY.gr

Μαθήματα Βασικού Κύκλου => Δομημένος Προγραμματισμός => Topic started by: Emfanever on April 23, 2008, 17:50:41 pm



Title: [Δομημένος Προγραμ.] Ερώτηση πάνω στη rand( )
Post by: Emfanever on April 23, 2008, 17:50:41 pm
Πειραματιζόμουν σήμερα με τη rand( ) και πρόσεξα τα εξής:
'Εφτιαξα αρχικά αυτό το πρόγραμμα:
Code:
#include <stdio.h>
#include <stdlib.h>
#define MAX 10

void main()
{
  int x,i;
  double counter=1;

  for (i=0;i<MAX;i++){
      x=rand();
      while (x!=500){
  x=rand();
  counter++;
      }
      printf("%f\n",counter);
  }
}
Κάθε φορά μου έβγαζε τους αριθμούς
16596
55260
121535
188292
222272
238498
241478
313367
345274
405776

Δλδ, κάθε φορά μετά από 16596 επαναλήψεις η rand( ) δίνει τον αριθμό 500.
Άρα υπέθεσα ότι η rand( ) βγάζει τους αριθμούς με μια συγκεκριμένη σειρά και όχι τόσο τυχαία.

Στη συνέχεια έφτιαξα αυτό το πρόγραμμα
Code:
#include <stdio.h>
#include <stdlib.h>

void main()
{
   int x;
   double i;
 

  for (i=1;i<=16596;i++)
  x=rand();

  printf("%d\n",x);
}

και όπως περίμενα έβγαλε σαν αποτέλεσμα τον αριθμό 500.

Και τελικά με αυτό
Code:
#include <stdio.h>
#include <stdlib.h>

void main()
{
   int x;
   double i;
 

  for (i=1;i<=10;i++){
      x=rand();
      printf("%d\n",x);
  }
}

είδα ότι κάθε φορά που τρέχει η rand( ) για πρώτη φορά δίνει τον αριθμό 346,
αν τρέξει 2η φορά στο ίδιο πρόγραμμα δίνει τον 130 κ.τ.λ.
Είναι λογικό αυτό??


Title: Re: [Δομημένος Προγραμ.] Ερώτηση πάνω στη rand( )
Post by: Wanderer on April 23, 2008, 22:08:57 pm
Νομίζω ναι. Στηρίζεται σε έναν τύπο η rand() για να παράγει τιμές, για αυτό από ό,τι θυμάμαι από ένα παράδειγμα που είχα δει και χρησιμοποιούσε τη rand(), έτρεχε ένας ατέρμων βρόγχος μέχρι ο χρήστης να πατήσει ένα πλήκτρο. Σε κάθε επανάληψη του βρόγχου, αποδίδονταν μία τιμή στη rand(). Αφού δεν ξέρει τί τιμή θα αποδίδει η rand() αν πατήσει το κουμπί σε π.χ. 2.01 δευτερόλεπτα, πρακτικά η επιλογή θα είναι τυχαία.

Πρέπει να δώσεις ένα τρόπο στη συνάρτηση να παράγει τιμές με τυχαίο (φαινομενικά διότι στην πραγματικότητα δεν είναι τυχαίο, απλά εσύ δεν μπορείς να ξέρεις τί τιμή θα δώσει) τρόπο.

Από ό,τι θυμάμαι από το help του borland C++ υπάρχει η εντολή randomize(); που τρέχεις πριν τη rand() και η srand(..). Στην τελευταία μπορείς να δώσεις παράμετρο ctime (πρέπει να κάνεις include το time.h) για να δώσει τιμές με βάση την ένδειξη του ρολογιού του υπολογιστή.