Evgenios1 Δημοσ. 20 Απριλίου 2009 Δημοσ. 20 Απριλίου 2009 Οπως λεει και ο τιτλος μου, θελω μια συναρτηση η οποια θα μου βγαζει τυχαια 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; } Αλλα δε μου κανει, επειδη μου βγαζει παντα το ιδιο αποτελεσμα....
Blondeamon Δημοσ. 20 Απριλίου 2009 Δημοσ. 20 Απριλίου 2009 H rand() δεν βγάζει ακριβώς τυχαια αποτελέσματα, μετα απο συγκεκριμενα βηματα επαναλαμβανεται. Κάπως θυμάμαι μπορούσες να το αλλάξεις αυτο, βάζοντας για seed τον χρόνο της συγκεκριμένη στιγμής.
Evgenios1 Δημοσ. 20 Απριλίου 2009 Μέλος Δημοσ. 20 Απριλίου 2009 H rand() δεν βγάζει ακριβώς τυχαια αποτελέσματα, μετα απο συγκεκριμενα βηματα επαναλαμβανεται. Κάπως θυμάμαι μπορούσες να το αλλάξεις αυτο, βάζοντας για seed τον χρόνο της συγκεκριμένη στιγμής. . Οποιος εχει την ιδια απορια.. > SYSTEMTIME d; srand(d.wSecond); BYTE=(BYTE) (rand()%255);//BYTE unsigned char
Directx Δημοσ. 20 Απριλίου 2009 Δημοσ. 20 Απριλίου 2009 Μπορείς να κάνεις το ίδιο δίχως 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.
Evgenios1 Δημοσ. 20 Απριλίου 2009 Μέλος Δημοσ. 20 Απριλίου 2009 Ευχαριστω για τη επισημανση του 256. Τωρα τα αλλα που μου λες περι broland etc.. δε τα ξερω και ουτε με ενδιαφερουν. Aπλος μετατρεπω ενα προγραμμα που εχω κανει σε .net2 σε win32. (το δουλευω με vs2008 ee, γιατι το vs 6 με επρηξε στα error:mad:)
Directx Δημοσ. 20 Απριλίου 2009 Δημοσ. 20 Απριλίου 2009 Ok, τότε απλά κράτησε το srand( time(NULL) ); και το 256 και είσαι φίνος. Καλή τύχη!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.