Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zufallsfunktion..

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] [ 2 ] [ 3 ] [ 4 ] > 5 < [ 6 ]
040
24.03.2004, 16:48 Uhr
Fraenky



naja ich hab ne Würfel Klasse und ne Mensch Klasse.
so es soll überprüft werden wer gewonnen hat: Mensch oder Computer
Diese Funktion ist Bestandteil der Würfelklasse: CWurfel::gewonnen();
Wenn der Mensch gewonnen hat, soll sein Name ausgeben werden. Die Namen funktion ist aber in der Klasse Mensch..

*Idee..ah ich glaub ich weiß wie ich es mache..
*bastel* ok es klappt ich habs jetzt so geamcht:
eine Funktion returnName in der Klasse Mensch definiert, die den Namen zurückgibt.
Den Namen dann in einer Variablen im Hauptprogramm übergeben:
string sname=Mensch.returnName();
Dann die Variabkle der gewonnen Funktion als Parameter überegeben:
gewonnen(sname);

und zack! hat geklappt...

jetzt nur noch (immer noch) die Zufallsfunktion...

cya
MfG
Fraenky
--
Welcome to the real World.

www.fraenkysweb.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
041
24.03.2004, 16:51 Uhr
Fraenky



hä?
*sorry*

also zB
(ja ich arbeite gerade Parallel an zwo Progs..)

CKarte::setzeSymbol()
{
//und dann??
hier kommt die Zufallsfunktion mit srand(time(NULL));
rand....
}

wenn ich sie dreimal aufrufe, dann bekomm ich die 3 gleichen Symbole wieda..

MfG
Fraenky
--
Welcome to the real World.

www.fraenkysweb.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
042
24.03.2004, 16:55 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


du darst nur einmal beim initialiesieren srand aufrufen...
z.b. im konsturktor
der initialisiert den "zufall" (auf dem rechner gibt es kein zufall sondern das ist auch nur ne errechnete folge von pseudorandom numbers...

das selbe kommt immer raus weil er bei initialiseren nur die minuten der uhrzeit nimmt und die zeit nicht so schnell vergeht wie dein programm durchläuft...

deswegen nur im konstruktor srand(time(NULL)) aufrufen dann funzt das auch
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
043
25.03.2004, 13:30 Uhr
Fraenky



wie nur im Konstruktor??

also so: (??)

CKarte.h:

C++:
class CKarte
{
public:
CKarte();
void setzeSymbol();
}


CKarte.cpp:

C++:
CKarte::CKarte()
{
srand(time(NULL));
};

void CKArte::setzeSymbol();
{
rand();
};



das mit der zeit war mir schon klar...deswegen dächt ich dass ich irgendwas mit getttimeofday oder so nehmen könnte, weil das so da erwähnt worden ist, wenn man die Funktion mehrmals pro Sekunde aufrufen will..

cya
THX!

MfG
Fraenky
--
Welcome to the real World.

www.fraenkysweb.de

Dieser Post wurde am 25.03.2004 um 13:31 Uhr von Fraenky editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
044
25.03.2004, 13:45 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


jo zum beispiel....
du kannst es auch einfach aufrufen in deinem programm bevor du objecte von der klasse instantierst....
ist wahrscheinlich auch sinnvoller wenn man mehrer objekte der klasse anlegen will. wenn man eh nur ein object erstellt würd ichs im konstruktor lassen....
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
045
25.03.2004, 13:57 Uhr
Fraenky



noch bevor ich instanziere? also davor:

...
/*
hier vor:
srand(time(NULL));
*/
CKarte eineKarte;
...

Und das klappt?? muss ich nachher gleich mal ausprobieren..

cya
--
Welcome to the real World.

www.fraenkysweb.de

Dieser Post wurde am 25.03.2004 um 13:57 Uhr von Fraenky editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
046
25.03.2004, 15:34 Uhr
Fraenky



ok hat alles soweit geklappt wie ichs wollte...nu hab ich schon die nächste Frage (oder soll ich nen neuen Thread aufmachen??)

Kann ich per User Eingabe bestimmen wie viele Instanzen einer Klasse erzeugt werden sollen??

zB Wie viele Mitspieler?
Eingabe: 5

und dann 5 Klasse CMensch Instanzen erzeugen..ich dachte da so an Mensch1, Mensch2, ..., Mensch5;

geht so was??

THX!

MfG
Fraenky
--
Welcome to the real World.

www.fraenkysweb.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
047
25.03.2004, 15:46 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


sowas heisst ein array....
entweder nimmst du z.b. ne stlklasse (würd ich am anfang eher nicht machen)
oder du machst das z.b. so


C++:
int anzahl;
//hier musst du halt irgendwie anzahl einlesen

CMensch **menscharray;
menscharray=new CMensch*[anzahl];

for(i=0;i<anzahl;++i)menscharray[i]=new Mensch(......)// welchen Konstruktor auch immer du dazu verwenden willst...


angenommen du willst jetzt mensch 3 ansprechen (anmerkung hierzu arrays gehen in c immer von 0 bis anzahl-1, das heisst mensch nummer drei würdest du mit arrayindex 2 ansprechen...)


C++:
menscharray[2]->set..... /oder welche memberfunktion bzw.memberattribut auch immer du ansprechen willst



am ende nicht vergessen den speicher wieder freizugeben

C++:
for(i=0;i<anzahl;++i)delete menscharray[i];
delete [] menscharray;


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
048
25.03.2004, 16:21 Uhr
Fraenky



wie immer versteh ich nur die Hälfte davon...

was bedeuten die sternchen: ** bzw * (sprechen die den Speicher der variable an??)

Muss ich zwingend ein Konstruktor verwenden ich habe nämlich bei der Mensch Klasse keinen...

Was ist eine Memberfunktion? und was bedeuted ->set...

THX
--
Welcome to the real World.

www.fraenkysweb.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
049
25.03.2004, 16:56 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Was ist eine Memberfunktion? und was bedeuted ->set...


das ist eine funktion die zu deiner klasse gehört also z.b. deine setSymbol funktion von CKarte ist eine memberfunktion deiner klasse CKarte



Zitat:

was bedeuten die sternchen: ** bzw * (sprechen die den Speicher der variable an??)



das ist ein doppelter pointer....

so und nun mal zu dem warum ich das gemacht habe...
wenn du nur mit dem defaultkonstruktor arbeitest tuts auch ein einfacher pointer weil du dann gleich so allokieren kannst

C++:
CMensch *menscharray=new CMensch[anzahl];



dabei werden dann anzahl CMensch-objecte mit dem defaultkonstruktor erstellt....

meist will man aber seinen oder irgend einen (man kann mehrer konstruktoren definieren) verwenden und dass geht dann nicht weil c++ nicht sowas vorsieht


C++:
CMensch *menscharray=new CMensch(.....)[anzahl];



deshalb bist du in diesem falle dann auf das doppelpointerarray angewiesen...


so und nun zu dem -> operator.... wenn du ein public member eines objectes einer klasse ansprechen willst nimmst du den .-operator....

dann man oft pointer von bzw. auf objecte hat müsste man immer erst dereferenzieren und dann denn punkt verwenden

also so (*pointer_auf_object).member

das ist auf dauer ziemlich nervig und deshalb gibt des den -> operator der das gleich macht wie (*pointer_auf_object).member
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] [ 3 ] [ 4 ] > 5 < [ 6 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: