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

Tixeoi arithmoi stin C


Phoinix

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

Δημοσ.

Geia se olous,

 

Prospatho na ftiajo mia sinartisoula stin C opou tha pernei san orisma void(tipota) kai tha epistrefei enan tixeo arithmo apo to 0-100.

Koitaja sto biblio H Glossa Programatismou C toy Brian Kernighan-Dennis M. Ritchie kai eida oti i bibliothiki <stdlib.h> exei kati sxetikes sinartiseis.

Tis: int rand(void)

kai tin void srand(unigned int seed)

To problima einai oti den mporo na tis kano na doulepsoun!

I rand mou epistrefei 0 oti kai na tis kano!!!

Kai den mporo na katalabo pos douleuei i srand.

 

Prospatho na ftiajo to Paixnidi tis Zois, to exo san askisi sto Tei :(

Mou exei figei o kolos edo kai 2 meres!!!

Thnks

 

Akis Maziotis

[email protected]

www.epp.teiher.gr

Δημοσ.

 

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

 

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

 

Για να δημιουργήσεις τυχαίους αριθμούς στη C θα πρέπει να κάνεις κάτι σαν:

 

<pre><font class="small">code:</font><hr>

#include <time.h>

...

...

srand( (unsigned int)time( NULL ) );

...

...

int rnd;

 

for( i = 20; i > 0; i -= 1 )

{

rnd = rand() % i;

}

</pre><hr>

 

Στο παραπάνω παράδειγμα o "σπόρος" (seed) είναι η συγκεκριμένη ώρα του υπολογιστή.

Δημοσ.

mesa stin void main tha diloseis randomize(); kai tha exeis dilosei mia metavliti int g; as poume kai tha theseis g=random(101); kai tha sou epistrefei times apo to 0 mexri to 100, tin randomize tin vazeis oste kathe fora pou sou trexei to programa na min sou vgazei tous tixaious arithmous me tin idia seira enoite oti thelei kai #include<stdlib.h>. tha doulepsei sigoura etsi douleuei emena ena allo programa...cu...

Δημοσ.

Apo oti katalava mallon afto 8eleis.. :-)

 

int gen_rand(void)

/* returns random number in range of 0 to 99 */

{

int n;

n=random(100); /* n is random number in range of 0 - 99 */

return(n);

}

 

Δημοσ.
Apo oti katalava mallon afto 8eleis.. :-)<BR><BR>int gen_rand(void)<BR>/* returns random number in range of 0 to 99 */<BR>{<BR>int n;<BR>n=random(100); /* n is random number in range of 0 - 99 */<BR>return(n);<BR>}<BR><hr /></blockquote>

 

Sorry alla kaytera 8a htan na to deis oloklhro ti akrivws kanei.

 

#include <stdio.h>

#include <stdlib.h> /* Apaiteitai gai thn randomize() kai random() */

#include <conio.h> /* Apaithtai clrscr() */

 

int gen_rand(void); /* functions */

int find_max(int x, int y, int z);

int find_min(int x, int y, int z);

 

/* Gia eggrafi se arxeio */

FILE *f1;

 

void main(void)

{

int num1, num2, num3, max, min;

 

clrscr(); /* clear screen */

 

f1=fopen("/home/core/code/c/draft/output.dta", "wt"); /* output se arxeio */

 

randomize();

 

num1=gen_rand();

num2=gen_rand();

num3=gen_rand();

 

max=find_max(num1, num2, num3);

min=find_min(num1, num2, num3);

 

printf("Random numbers are %d, %d, and %d\n", num1, num2, num3);

fprintf(f1, "Random numbers are %d, %d, and %d\n", num1, num2, num3);

 

printf("Largest is %d. Smallest is %d.\n", max, min);

fprintf(f1, "Largest is %d. Smallest is %d.\n", max, min);

 

fclose(f1);

}

 

int gen_rand(void)

/* epistrefei tyxeous arithmous sto range 0 - 99 */

{

int n;

n=random(100); /* n einai tyxaios sto range 0 - 99 */

return(n);

}

 

int find_max( int x, int y, int z)

/* megalyteros arithmos */

{

int max;

if ((x>=y) && (x>=z))

{

max = x;

}

else if ((y>=x) && (y>=z))

{

max = y;

}

else

{

max = z;

}

return(max);

}

 

int find_min( int x, int y, int z)

/* mikroteros arithmos */

{

int min;

if ((x<=y) && (x<=z))

{

min = x;

}

else if ((y<=x) && (y<=z))

{

min = y;

}

else

{

min = y;

}

return(min);

}

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

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

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