freestuff.gr αρχική σελίδα
 FAQFAQ    ΑναζήτησηΑναζήτηση   Λίστα ΜελώνΛίστα Μελών   Ομάδες ΜελώνΟμάδες Μελών   <b>Εγγραφή Μέλους</b>Εγγραφή Μέλους 
 ΠροφίλΠροφίλ   Επιλογές μέλους Επιλογές   Τα bookmarks μου Τα bookmarks μου   Προσωπικά μηνύματαΠροσωπικά μηνύματα 
  διαφήμιση  

Καλώς ήρθατε στο forum μας! Για να συμμετάσχετε στις συζητήσεις θα πρέπει να είσαστε μέλος. Γίνετε μέλος τώρα!.

τυχαιοι αριθμοι


 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Moderators:  Super-Moderators, WebDev Moderators
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [8 Μηνύματα]       Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
ΑποστολέαςΜήνυμα
Kesmarag


Μέλος από: 13 Ιαν 2006
Μηνύματα: 256+
Περιοχή: Ηράκλειο Κρήτης
View users profile Send email to user
blog cv facebook 
ΜήνυμαΣτις: 14 Νοε 2007 22:06    Θέμα: τυχαιοι αριθμοι Απάντηση με παράθεση  Mark this post and the followings unread

θελω να φτιαξω ενα προγραμμα στη C στο οποιο χρειαζομαι να παραγει τυχαιους αριθμους.Υπαρχει καποια συναρτηση η πρεπει να κατασκευασω?
ALKIVIADES
Honorary Member

Μέλος από: 07 Απρ 2005
Νέα: 71
Μηνύματα: 256+


View users profile
ΜήνυμαΣτις: 14 Νοε 2007 23:31    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

..εάν εννοούμε δε pseudo-random rand() / srand() ,

τότες δες εδώ καθώς και ένα-δύο παράδειγματα με χρήση αυτώνε :

κώδικας:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
 
{
 
  printf( "%d\n", rand());
  printf( "%d\n", rand());
  printf( "%d\n", rand());

  system("PAUSE");   
  return 0;

}



κώδικας:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[])

{
  int i;
  int n=3;
  unsigned int fourthdimention = time(0);
 
  srand (fourthdimention);

  for (i=0; i<n; i++)
 
  {
    printf ("%d %d\n",i, rand ());
  }
 
  system("PAUSE");   
  return 0;
 
}

_________________
soteres2002
S. & H. Moderator

Μέλος από: 05 Μαρ 2004
Βοηθήματα: 1
Νέα: 1
Scripts: 1
Μηνύματα: 256+

Περιοχή: Ιωάννινα
View users profile
ΜήνυμαΣτις: 15 Νοε 2007 14:19    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Αν σε ενδιαφέρει περισσότερο ή θέλεις να κάνεις περισσότερα με τους ψευδοτυχαίους αριθμούς ασχολήσου με την γεννήτρια παραγωγής ψευδοτυχαίων Fast Mersenne Twister. Δες αυτό εδώ το λίνκ http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html . Υπάρχει έκδοση του αλγορίθμου σε γλώσσα C και παραδειγματικός κώδικας που παρουσιάζει όλες τις λειτουργίες της γλώσσας. Ο αλγόριθμος αυτός υπάρχει και στο PHP core, και είναι ορατός από την επέκταση standard μέσω των συναρτήσεων mt_* .

Υπάρχει τρόπος να παράγεις και "πραγματικά τυχαίους αριθμούς". αυτό γίνεται μέσω πολύπλοκων μαθηματικών συναρτήσεων (πχ Φουριέ μετασχηματισμούς) που εξομοιώνουν την φυσική διαδικασία παραγωγής τυχαίων αριθμών. Υπάρχει βιβλίο που ασχολείται με τα μαθηματικά της παραγωγής ψευοτυχαίων αριθμών και με σχετικούς αλγόριθμους. Αυτό θα ήταν χρήσιμο αν γράφεις τυχερά παιχνίδια, στα οποία χρειάζονται τυχαίοι αριθμοί και όχι ψευδοτυχαίοι. Η rand() συνάρτηση της C είναι πολύ αναποτελεσματική, διότι πρέπει να ξέρεις πώς δουλεύει παρά να την καλέις απλά. πχ υπάρχουν προβλήματα με την κατανομή των αριθμών που που παράγονται σε ένα κλειστό διάστημα (πχ αν έκανες μια εφαρμογή με ζάρια).
Kesmarag


Μέλος από: 13 Ιαν 2006
Μηνύματα: 256+
Περιοχή: Ηράκλειο Κρήτης
View users profile Send email to user
blog cv facebook 
ΜήνυμαΣτις: 16 Νοε 2007 00:41    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Ευχαριστω για τισ απαντησεις.Θελω πραγματικα τυχαιους αφου θελω να φτιαξω προγραμμα γενετικων αλγοριθμων και δεν θελω καθε φορα που τρεχει με τις ιδιες παραμετρους να βγαζει τα ιδια αποτελεσματα.

_________________
http://www.math24.gr
http://www.kesmarag.com
http://www.lpointer.com
nirvana


Μέλος από: 01 Σεπ 2005
Μηνύματα: 241
Περιοχή: Αγ. Παρασκευή
View users profile
ΜήνυμαΣτις: 19 Μαη 2008 17:35    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Ξεθαψα το θεμα για να μην ανοιγω καινουργιο χωρις λογο...
Προσπαθω να δημιουργησω τυχαιους αριθμους απο το 1 εως το 100 το οποιο σε γενικες γραμμες πετυχαινει.. Ο κωδικας ειναι ο εξης:

κώδικας:
int pseudonumbergenerator(void){
   srand(time(NULL) + getpid());
   int k=rand();
   k=k%100;   // to k pairnei pseudotyxaia times apo to 0 ews to 99
        if (k<50){
            return 0;
        }
        else{
            return 1;
        }
}
int main(int args, char *argv[]){
   // code
   // ...
   // code

   int tralala=pseudonumbergenerator();
   while(tralala == 1){
          // code
          tralala=pseudonumbergenerator();
   }
}


Το προβλημα πιο ειναι; Γενικα πετυχαινει στο να δεινει τυχαιους (ψευδοτυχαιους) αριθμους. Παρολα αυτα η τυχαιοτητα εξαρταται απο τον χρονο. Εχοντας το μεσα στο while (φανταζομαι εγω τωρα ) εκτελουνται τοσο γρηγορα τα διαδοχικα pseudonumbergenerator() που πρακτικα δεν αλλαζει ο χρονος και δινει τον ιδιο τυχαιο αριθμο(!). π.χ εκτελειται για πρωτη φορα και το pseudonumbergenerator δινει εστω κ=60 δηλαδη tralala=1. Αρχιζει το while και για 40 loop θα δινει παλι κ=60. Μετα θα αλλαζει και θα δωσει κατι αλλο. Ξερει κανεις καποιο τροπο να λυσω αυτο το θέμα?

Ευχαριστω
nirvana


Μέλος από: 01 Σεπ 2005
Μηνύματα: 241
Περιοχή: Αγ. Παρασκευή
View users profile
ΜήνυμαΣτις: 19 Μαη 2008 18:10    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Βασικα ψιλοελυσα το προβλημα μου κανοντας καποιες τυχαιες πραξεις καθε φορα και προσθετω το αποτελεσμα στο srand. Απλα η αληθεια ειναι οτι νιωθω πως δεν ειναι πολυ σωστη τεχνική..

Αν καποιος εχει καμια αλλη λυση...
dva_dev
Script Master

Μέλος από: 16 Σεπ 2005
Μηνύματα: 256+

View users profile Visit posters website
blog deviantART facebook linkedin 
ΜήνυμαΣτις: 19 Μαη 2008 20:30    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Τη srand το καλείς μία φορά στον πρόγραμμα σου, όταν αρχίζει, μετά καλείς μόνο τη rand.
nirvana


Μέλος από: 01 Σεπ 2005
Μηνύματα: 241
Περιοχή: Αγ. Παρασκευή
View users profile
ΜήνυμαΣτις: 20 Μαη 2008 10:21    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Σωστός! Την έβγαλα απ' την ρουτινα και επαιξε.. Thanks
Εμφάνιση Μηνυμάτων:   
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [8 Μηνύματα] Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Τώρα είναι 18 Ιαν 2017 11:59 | All times are UTC + 2


Email This Page to Someone! add to Favorites

     Powered by p h p B B © 2001,2005 p h p B B Group
Για άμεση επικοινωνία με τον διαχειριστή του freestuff.gr στο email: freestuff.gr(παπάκι)gmail.com


Copyright © 1999-2013 Freestuff.gr All Rights Reserved  
Version Aegean, designed by N. Tsaganos