declaration of `taktiken' as array of functions
-
Das gab er mir als Fehler zurück, dabei wollte ich doch gerade das erreichen.
Code:bool taktiken[]() = {taktik1,taktik2,taktik3,taktik4}; srand(time(NULL)); long guthaben[] = {0,0,0,0}; int MSchlecht,MGut,Verlust,Gewinn; for(int i=0;i<10000;++i) { MSchlecht=rand(); MGut =rand(); Verlust =rand(); Gewinn =rand(); for(char spieler=0;i<4;++spieler) { if(taktiken[spieler](Verlust,Gewinn,MSchlecht,MGut)) { if gewonnen(MSchlecht,MGut) { guthaben[spieler] += Gewinn; } else { guthaben[spieler] -= Verlust; } } } }...
bool taktik1(int Verlust, int Gewinn, int MoeglSchlecht, int MoeglGut) { //draufgänger return true; }; bool taktik2(int Verlust, int Gewinn, int MoeglSchlecht, int MoeglGut) { //Angsthase: return false; }; //...Wie kann man ein Array aus Funktionen machen?
-
probiers mal mit
typdef (bool(*TAKTIK))(int Verlust, int Gewinn, int MoeglSchlecht, int MoeglGut); TAKTIKEN[] = {taktik1,taktik2,taktik3,....,taktikn};Der Code ist nicht getestet im grunde ist das ein array aus zeigern auf boolfunktionen mit eben dem aussehen was du dur wünschst.
-
Es funktioniert weder, noch verstehe ich es.
Wenn ich es so mache:
int main(int argc, char *argv[]) { void* taktiken[] = {(void*)taktik1,(void*)taktik2,(void*)taktik3,(void*)taktik4}; /*typdef (bool(*))(int Verlust, int Gewinn, int MoeglSchlecht, int MoeglGut); taktiken[] = {taktik1,taktik2,taktik3}; */ srand(time(NULL)); int guthaben[] = {0,0,0,0}; unsigned int MSchlecht,MGut,Verlust,Gewinn; for(int i=0;i<10000;++i) { MSchlecht=rand(); MGut =rand(); Verlust =rand(); Gewinn =rand(); for(char spieler=0;i<4;++spieler) { if((taktiken[spieler])(Verlust,Gewinn,MSchlecht,MGut)) { if gewonnen(MSchlecht,MGut) { guthaben[spieler] += Gewinn; //...Sagt er, dass er taktiken[] nicht als Funktion benutzen kann.
`taktiken[((int)spieler)]' cannot be used as a function
Was ist denn der Typ von einer Funktion?
Wahrscheinlich irgend eine Art von Zeiger, aber welche?
-
Probier es so:
typedef bool (*Taktik)(int, int, int, int); Taktik taktiken[] = {taktik1,taktik2,taktik3,taktik4};
-
OK. Danke, das klappt.
Jetzt habe ich ein anderes Problem:Projekt1.exe schrieb:
Projekt1.exe hat ein Problem festgestellt und muss beendet werden.
Ich denke, das hat was mit zeigern zu tun.
Oder mit der falschen Benutzung von den Zufallsfunktionen.Ich hab mal gehört, das, wenn man rand() mit Modulo aufruft, die Ergebnisse nicht gleichmäßig verteilt sind, und das leuchtet mir auch ein. Deshalb die große "Ergebnis-Spanne".
Kompletter Code:
#include <cstdlib> #include <iostream> using namespace std; //geht der Spieler das Risiko ein? bool taktik1(int Verlust, int Gewinn, int MoeglSchlecht, int MoeglGut); bool taktik2(int Verlust, int Gewinn, int MoeglSchlecht, int MoeglGut); bool taktik3(int Verlust, int Gewinn, int MoeglSchlecht, int MoeglGut); bool taktik4(int Verlust, int Gewinn, int MoeglSchlecht, int MoeglGut); //kommt ein positives Ergebnis raus? bool gewonnen(int MoeglSchlecht, int MoeglGut); int main(int argc, char *argv[]) { //void* taktiken[] = {(void*)taktik1,(void*)taktik2,(void*)taktik3,(void*)taktik4}; typedef bool (*Taktik)(int, int, int, int); Taktik taktiken[] = {taktik1,taktik2,taktik3,taktik4}; srand(time(NULL)); int guthaben[] = {0,0,0,0}; int MSchlecht,MGut,Verlust,Gewinn; for(int i=0;i<100;++i) { MSchlecht=rand(); MGut =rand(); Verlust =rand(); Gewinn =rand(); for(char spieler=0;i<4;++spieler) { if((taktiken[spieler])(Verlust,Gewinn,MSchlecht,MGut)) { if (gewonnen(MSchlecht,MGut)) { guthaben[spieler] += Gewinn; } else { guthaben[spieler] -= Verlust; } } } } for(char sp=1;sp<4;++sp) cout<<"Nr."<<sp<<" hat "<<guthaben[sp]<<endl; system("PAUSE"); return EXIT_SUCCESS; }; bool gewonnen(int MoeglSchlecht, int MoeglGut) { long Moegl = MoeglSchlecht+MoeglGut; double faktor = 4294967296/Moegl; if((rand()*faktor)<MoeglSchlecht) return true; return false; }; bool taktik1(int Verlust, int Gewinn, int MoeglSchlecht, int MoeglGut) { return true; }; bool taktik2(int Verlust, int Gewinn, int MoeglSchlecht, int MoeglGut) { return true; }; bool taktik3(int Verlust, int Gewinn, int MoeglSchlecht, int MoeglGut) { return true; }; bool taktik4(int Verlust, int Gewinn, int MoeglSchlecht, int MoeglGut) { return true; };Später will ich damit testen, mit welcher Taktik man am erfolgreichsten ist. Im Moment sind noch alle Spieler "Draufgänger".
-
Vergesst es...
Mit den Zufallszahlen muss ich mich nochmal selbst näher befassen.

Ich muss den Bereich kleiner kriegen.
-
Gerade Zufaellig aufgrund eines Hinweises von CStoll mir mal die Signatur von TactX genauer angesehen. bez. der Zufallszahlen kann dir das vielleicht helfen: http://eternallyconfuzzled.com/arts/jsw_art_rand.aspx .