τυχαία αλλαγή αλφαριθμητικών c++

...IDE, compilers, κλπ

Συντονιστής: konnn

τυχαία αλλαγή αλφαριθμητικών c++

Δημοσίευσηαπό elefher » 01 Σεπ 2010, 17:51

Θα ήθελα να μου πείτε εάν υπάρχει κάποια συνάρτηση στη c++ όπου να της δίνεις έναν πίνακα δεικτών και να αλλάζει θέση στα αλφαριθμητικά μέσα στο πίνακα.
Για την ακρίβεια αυτό που θέλω να κάνω είναι να εμφανίζω τα αλφαριθμητικά με τυχαία σειρά κάθε φορά.Δοκίμασα με τη rand() και ο αριθμός που επιστρέφει τον βάζω στο πίνακα αλλά μου επιστρέφει συχνά τους ίδιους αριθμούς
Μπορείτε να ρίξετε καμία ιδέα πως θα το κάνω?

Ευχαριστώ
⇛ Linux: Αρχάριος ┃ Προγραμματισμός:C/C++ ┃ Αγγλικά: χάλια
⇛ ubuntu 10.10 LTS 32-bit
⇛ Intel(R) core(TM)2 Duo CPU E4600@2.4GHz ┃ RAM:2GB DDR2 ┃ ATI SAPPHIRE HD 2400 PRO 250MB
⇛ Netbook ACER ASPIRE ONE D250 με ubuntu 10.10 LTS 32-bit
⇛ Turbo-X με ubuntu 12.04 LTS 32-bit Intel® Core™2 Duo CPU T8100 @ 2.10GHz × 2 VESA: M74
Άβαταρ μέλους
elefher
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 566
Εγγραφή: 03 Μάιος 2009, 03:15
Εκτύπωση

Re: τυχαία αλλαγή αλφαριθμιτκών c++

Δημοσίευσηαπό lostinmyworld » 05 Σεπ 2010, 19:32

Στη C αν θυμάμαι καλά για να μην βγαίνουν τα ίδια αποτελέσματα δίναμε πριν την rand() την srand(time(0)).. Βέβαια δεν νομίζω ότι η λύση είναι καθολική :| (μπορεί να βγαίνουν ξανά τα ίδια). Ψάξε για κάτι παρόμοιο στην C++
Spoiler: show
το google δεν βοήθησε;
http://lostinmyworld222.wordpress.com
http://lostinmyworld.e-science.gr/
Spoiler: show
Γνώσεις ⇛ Linux: Χαμηλό ┃ Προγραμματισμός: Ναι ┃C, Java (όσα μπορείς να μάθεις στη σχολή)┃Αγγλικά: Δεν μου χρειάζονται...
Ubuntu 10.04 σε Acer TravelMate 2492WLMi
Προδιαγραφές ⇛ Επεξεργαστής: Intel Celeron M 420 (1.60 GHz, 533 MHz FSB, 1 MB L2 cache) │
Μνήμη: 512 MB DDR2 │ Κάρτα Γραφικών: Intel Graphics Media Accelerator 950 │ Κάρτα Ασύρματη │ Κάρτα Ήχου │ Οθόνη & Ανάλυση: 15.4" WXGA wide TFT LCD
lostinmyworld
babeTUX
babeTUX
 
Δημοσιεύσεις: 107
Εγγραφή: 21 Ιούλ 2008, 14:20
Εκτύπωση

Re: τυχαία αλλαγή αλφαριθμιτκών c++

Δημοσίευσηαπό elefher » 05 Σεπ 2010, 20:18

Όντως και με την srand εάν παρατηρήσεις δεν είναι τελείως τυχαία βγάζει τα ίδια.Όσο και εάν έψαξα δεν βρήκα κάτι εκτός απο κάποια συνάρτησει που μάλλον την βάζεις εσεί αλλά λόγο κακόν αγγλικών δεν μπόρεσα να συνεχείσω έτσι έφτιαξα 2 εξόδους εγώ που διαλέγει ανάλογα με τον αριθμό που παράγει.
⇛ Linux: Αρχάριος ┃ Προγραμματισμός:C/C++ ┃ Αγγλικά: χάλια
⇛ ubuntu 10.10 LTS 32-bit
⇛ Intel(R) core(TM)2 Duo CPU E4600@2.4GHz ┃ RAM:2GB DDR2 ┃ ATI SAPPHIRE HD 2400 PRO 250MB
⇛ Netbook ACER ASPIRE ONE D250 με ubuntu 10.10 LTS 32-bit
⇛ Turbo-X με ubuntu 12.04 LTS 32-bit Intel® Core™2 Duo CPU T8100 @ 2.10GHz × 2 VESA: M74
Άβαταρ μέλους
elefher
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 566
Εγγραφή: 03 Μάιος 2009, 03:15
Εκτύπωση

Re: τυχαία αλλαγή αλφαριθμιτκών c++

Δημοσίευσηαπό michalis_pax » 19 Νοέμ 2010, 21:18

οπως ειπε και ο iostinmyworld η srand(seed) δημιουργει συνθηκες τυχαιοτητας. κανε το εξης : φτιαξε srand(time(0))
μετα ορισε π.χ. 1+rand() %2000 λογικα θα δουλεψει Υ.Γ, πρωτα πρεπει να κανεις #include<ctime>
using std::time;
Γνώσεις ⇛ Linux: Πολύ καλό┃ Προγραμματισμός:Ναι ┃ Αγγλικά: Καλά
Λειτουργικό σε Η/Υ ϰ μοντέλο: Ubuntu 10.10
Προδιαγραφές ⇛ intel core i5 760 2.8 Ghz │ DDR3 4GB 2000Mhz │ ATI RADEON VAPOR-X 1GB HD 5770 │LG 22inch 1920*1080
michalis_pax
babeTUX
babeTUX
 
Δημοσιεύσεις: 3
Εγγραφή: 16 Νοέμ 2010, 22:27
Εκτύπωση

Re: τυχαία αλλαγή αλφαριθμητικών c++

Δημοσίευσηαπό kalakouentin » 20 Νοέμ 2010, 02:00

@elefher: Είναι επίτηδες σχεδιασμένη η C++ για να έχεις τους "ίδιους" ψευδοτυχαίους αριθμούς με την rand().
Η srand() με τον τρόπο που γίνεται seed θα σου δίνει κάποιους ίδιους αριθμούς, αφού παίρνει, ως "seed" την ώρα σε δευτερόλεπτα. Προφανώς αν γίνεται η εκτέλεση "αρκετά" γρήγορα θα έχεις το ίδιο seed άρα και τα ίδια αποτελέσματα.

Ως προφανή λύση θα σου πρότεινα αφού κάνεις seed την srand() να δημιουργείς όλο το σύνολο των τυχαίων αριθμών που θα χρειαστείς και από εκεί να παίρνεις όσους χρειάζεσαι... Επίσης μάλλον (δεν το έχω δοκιμάσει εκτενώς) αν βάλεις ένα delay κάποιων δευτερολέπτων επίσης δε θα πέσει στο ίδιο seed. (Αν δουλεύει σωστά αυτό δεν ξέρω σίγουρα πάντως...)

Κώδικας: Επιλογή όλων

#include <time.h>
#include <unistd.h>

using namespace std;
int main(){
....
sleep(2);
srand ( time(NULL) );
....


Επίσης αυστηρά μιλώντας η native rand() δε θεωρείται και πολύ καλή. H GSL αν και μανουρά σου εγγυάται καλύτερα αποτελέσματα. (Αυτό το λέω για μελλοντικές καταστάσεις όπου πχ. αν κάνεις mcmc sampling η rand() είναι ανεπαρκής). Εγώ πάντως GSL χρησιμοποιώ.
Εικόνα
Γνώσεις ⇛ Linux: Συμπαθητικές ┃ Προγραμματισμός: Συμπαθητικότερες ┃ Αγγλικά: Αστέρι
Λειτουργικό ⇛ Ubuntu 10.04 32bit σε HP nw9440 ┃ Ubuntu 10.04 32bit σε Toshiba Satellite U400┃ SLED 11 64bit σε Dell OptiPlex 780
kalakouentin
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 545
Εγγραφή: 05 Ιούλ 2008, 05:50
Εκτύπωση

Re: τυχαία αλλαγή αλφαριθμητικών c++

Δημοσίευσηαπό elefher » 20 Νοέμ 2010, 02:22

φίλε μου μπορείς να μου δώσεις περισσότερες πληροφορίες για τη GSL που λες ίσος κάτι από το google???
Ευχαριστώ
⇛ Linux: Αρχάριος ┃ Προγραμματισμός:C/C++ ┃ Αγγλικά: χάλια
⇛ ubuntu 10.10 LTS 32-bit
⇛ Intel(R) core(TM)2 Duo CPU E4600@2.4GHz ┃ RAM:2GB DDR2 ┃ ATI SAPPHIRE HD 2400 PRO 250MB
⇛ Netbook ACER ASPIRE ONE D250 με ubuntu 10.10 LTS 32-bit
⇛ Turbo-X με ubuntu 12.04 LTS 32-bit Intel® Core™2 Duo CPU T8100 @ 2.10GHz × 2 VESA: M74
Άβαταρ μέλους
elefher
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 566
Εγγραφή: 03 Μάιος 2009, 03:15
Εκτύπωση

Re: τυχαία αλλαγή αλφαριθμητικών c++

Δημοσίευσηαπό kalakouentin » 20 Νοέμ 2010, 03:15

Έχει γίνει μια παρουσίαση της GSL στο τεύχος 9. Πάντως δεδομένου ότι λες αγγλικά "χάλια" θα σου πρότεινα να κοιτάξεις αυτό που ανέφερα σχετικά με την ώρα και τα seeds. Η GSL θέλει να ψάξεις documentation αρκετά συχνά. Aυτό το link είναι που πρέπει να ακολουθήσεις >> http://www.gnu.org/software/gsl/manual/ ... ation.html
Για το αρχικό πρόβλημα που προτείνεις ίσως είναι και λίγο υπερβολικά "ισχυρή"...

Γενικά να ξέρεις ότι ο αφορισμός του von Neumann ισχύει πάντως : “Anyone who attempts to generate random numbers by deterministic means is, of course, living in a state of sin.”
Εικόνα
Γνώσεις ⇛ Linux: Συμπαθητικές ┃ Προγραμματισμός: Συμπαθητικότερες ┃ Αγγλικά: Αστέρι
Λειτουργικό ⇛ Ubuntu 10.04 32bit σε HP nw9440 ┃ Ubuntu 10.04 32bit σε Toshiba Satellite U400┃ SLED 11 64bit σε Dell OptiPlex 780
kalakouentin
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 545
Εγγραφή: 05 Ιούλ 2008, 05:50
Εκτύπωση


  • ΣΧΕΤΙΚΑ ΘΕΜΑΤΑ
    ΑΠΑΝΤΗΣΕΙΣ
    ΠΡΟΒΟΛΕΣ
    ΣΥΓΓΡΑΦΕΑΣ

Επιστροφή στο Εφαρμογές για Ανάπτυξη Λογισμικού