Προς το περιεχόμενο

Με ποια συναρτηση μπορω να βγαλω τυχαιους αριθμους στη c++


Evgenios1

Προτεινόμενες αναρτήσεις

Δημοσ.

Οπως λεει και ο τιτλος μου, θελω μια συναρτηση η οποια θα μου βγαζει τυχαια byte (unsigned char) στη c++.

Εχω δοκιμασει το παρακατω

>#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
for(int i =0;i<44;i++)
	printf("%d\n",(rand()%255));
return 0;
}

Αλλα δε μου κανει, επειδη μου βγαζει παντα το ιδιο αποτελεσμα:mad:....

Δημοσ.

H rand() δεν βγάζει ακριβώς τυχαια αποτελέσματα, μετα απο συγκεκριμενα βηματα επαναλαμβανεται.

 

Κάπως θυμάμαι μπορούσες να το αλλάξεις αυτο, βάζοντας για seed τον χρόνο της συγκεκριμένη στιγμής.

Δημοσ.
H rand() δεν βγάζει ακριβώς τυχαια αποτελέσματα, μετα απο συγκεκριμενα βηματα επαναλαμβανεται.

 

Κάπως θυμάμαι μπορούσες να το αλλάξεις αυτο, βάζοντας για seed τον χρόνο της συγκεκριμένη στιγμής.

 

:-D. Οποιος εχει την ιδια απορια..

>
SYSTEMTIME d;
srand(d.wSecond);
BYTE=(BYTE) (rand()%255);//BYTE unsigned char

Δημοσ.

Μπορείς να κάνεις το ίδιο δίχως OS depended κώδικα ορίζοντας το seed της srand ως srand( time(NULL) );

 

Τώρα αν χρησιμοποιείς κάποιον Borland/CodeGear/ET compiler και δεν σε ενδιαφέρει η ANSI C συμβατότητα μπορείς να χρησιμοποιήσεις την εντολή randomize (stdlib.h) που κάνει την παραπάνω κλήση αυτόματα. Επίσης σε αυτή την περίπτωση μπορείς αντί της "rand() % τιμή" να χρησιμοποιήσεις την εντολή random που κάνει το ίδιο αλλά με ποιο κομψό τρόπο (πχ. random(256)).

 

Επίσης το (%)255 περιορίζει την μέγιστη τυχαία τιμή στο 254 (0xFE) οπότε καλύτερα γύρισε το σε (%)256 ώστε να μπορείς να λάβεις και 255 (0xFF) byte.

 

Υ.Γ.

Για την ιστορία.. το θέμα (τυχαίοι αριθμοί & C) έχει συζητηθεί διεξοδικά σε πολλά παλαιότερα θέματα του παρόντος subforum.

Δημοσ.

Ευχαριστω για τη επισημανση του 256.

Τωρα τα αλλα που μου λες περι broland etc.. δε τα ξερω και ουτε με ενδιαφερουν.

Aπλος μετατρεπω ενα προγραμμα που εχω κανει σε .net2 σε win32. (το δουλευω με vs2008 ee, γιατι το vs 6 με επρηξε στα error:mad:)

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...