Wettsystem simulieren



  • #include <stdio.h> 
    
    #define MAX 200
    
    	int array[MAX]={1,2,3,4};
    	int indx = 3;
    	int kapital = 300;
    
    int main(void){
    
    	int wetthoehe = array[0]+array[indx];
    
    	while (kapital>wetthoehe) {
    		kapital = kapital - wetthoehe;						// wetteinsatz von kapital abziehen
    		int zufallszahl = rand()%37-1;						// 0 - 36 (Roulette) :-) 
    		if (zufallszahl > 18) {								// gewettet auf zahlen "19-36" 
    			kapital = kapital + wetthoehe + wetthoehe;					// gewonnen
    			array[0]=0;										//kleinster wert wird gelöscht				
    			array[indx]=0;									//höchster wert wird gelöscht
    			indx = indx - 2;								//minus 2, da zwei werte gelöscht werden
    			sortierearray();								//array neu sortieren, sodass kleinster wert auf arr[0] und höchster auf arr[index] ist
    
    			else {
    				array[indx+1] = wetthoehe;
    				indx++;
    			}
    
    		}
    	}
    
    }
    
    void sortierearray()
    {
    	int anzahlzahlen = indx + 1;
    	int i;
    	for (i=anzahlzahlen; i=1; i--)							//da array[0] leer ist, soll hiermit um eine stelle vorgerückt werden, 1 auf 0, 2 auf 1, usw..
    	{	
    		array[anzahlzahlen-i] = array[anzahlzahlen-i+1];
    	}
    }
    
    }
    }
    

    hab mal drauf los geschrieben..
    compile meckert : 1) implicit decleration of function rand..
    2) implicit decleration of function sortierarray
    3) expected expression before "else"

    eigentlich wollte ich nur wissen, ob meine IDEE vom sortierarray funktionieren kann.. will damit jedesmal wenn "höchste und niedrigste" gelöscht werden, die übrigen zahlen vorrücken, sodass in array[0] immer die nidrigste zahl drinnen steht!

    greets



  • nwp2 schrieb:

    Natürlich hat das Benutzen von Arrays und Listen mit dem Programmierstil zu tun. Benutzt man Listen mit dynamischem Speicher hat man Code der verständlich und anpassbar ist und er funktioniert.

    Listen sind schwieriger zu programmieren, erfordern einen größeren Aufwand, sind infolge dessen anfälliger für Fehler, benötigen eine längere Test- und Debugphase.

    nwp2 schrieb:

    Benutzt man Arrays im array[wirdschonreichen]-Stil hat man Speicherverschwendung, das Programm wird unlesbar und ab und zu gibts nen Segfault.

    Ganz im Gegenteil - weniger Zeiger, besser lesbar. Ein Programmierer sollte ruhig auch ein Programm in dem Arrays vorkommen lesen können. Warum sollte es eine Speicherverletzung geben, wenn man die Arraygrenzen absichert. Nen Segfault gibt auch bei fehlerhaft programmierten Listen.

    nwp2 schrieb:

    Macht bei 100 Zeilen Code noch nicht viel aus, aber man will ja mal über trivial hinauskommen. Nichts gegen Arrays, die haben ihren Nutzen, aber das Programm völlig zu verbuggen weil man zu faul für 3 Zeilen mehr Code ist kanns nicht sein.

    Auch bei 10000 Zeilen Code, über mehrere Dateien verteilt :D, ist noch lange nix verbuggt, wenn die Arrays sinnvoll eingesetzt werden.

    nwp2 schrieb:

    Aber ich will mich ja nicht streiten, wer solchen zusammengehackten Müll schön findet, bitte. Ich finde nur man sollte Neulingen sagen dass das auf Dauer nicht beherrschbar ist.

    'Wird schon reichen Arrays' sind durchaus beherrschbar, wenn sie sinnvoll benutzt werden:

    - Wenn die Anzahl der Arrayelemente konstant ist.
    - Lokal in einer Funktion für Benutzereingaben, bei denen die
    maximale Anzahl der einzugebenen Arrayelemente feststeht. Nach
    dem Verlassen der Funktion ist der Stackspeicher wieder frei, es
    gibt keine Speicherplatzverschwendung und alle sind glücklich.
    - etc.
    💡 Sinnvoll benutzte Arrays sind kein zusammengehackter Müll und leichter beherrschbar als verkettete Listen. 💡

    Ich will mich auch nicht streiten. Bin auch kein Freund von Ressourcenverschwendung. Ganz im Gegenteil. In Falle des Threaderöffners würde ich aus Funktionalitätsgründen zu einer doppelt verketteten Liste tendieren.
    Gruß,
    B.B.



  • lordvampire schrieb:

    eigentlich wollte ich nur wissen, ob meine IDEE vom sortierarray funktionieren kann..

    Nein.
    Falls du wissen willst warum, liest du weiter:
    Die for Schleife wird solange durchlaufen, wie ihr mittlerer Teil (hier: i=1), der als ein boolscher Ausdruck ausgewertet wird, wahr ist.
    Wäre also nur in genau einem Fall zutreffend - vermutlich nicht das, was du willst.

    Gruß,
    B.B.



  • Moment, sorry, habe deinen Kommentar übersehen:

    //da array[0] leer ist, soll hiermit um eine stelle vorgerückt werden, 1 auf 0, 2 auf 1, usw..

    Ja, die Idee funzt, bloß noch die Funktion anpassen.
    Ich weiß schon, warum ich Zeile 43 nicht ausgecodet habe - in mir schlummern wahrhaft didaktische Talente^^

    P.S.
    Tust du eingetlich auch gar nicht sortieren. Ist eher ein Rutscharray.
    Ansonsten sind noch Bugs im Code, aber wird schon.
    Gruß,
    B.B.
    🙂



  • wollte dir gerade erklären, warum ich denke dass die for-schleife schon funktionieren sollte... aber du hast ja mein kommentar gelesen... 🙂

    was meinste mit funkiton anpassen?

    und erklär mir bitte die bugs?? sonst brauch ich noch jahre!

    werde dann den weiteren fortschritt posten...

    greets



  • Die Idee funzt, die for Schleife geht so nicht.
    Mit Funktion anpassen meine ich eine Arrayrutschfunktion zu schreiben, die Funktioniert.
    Die Bugs sind: Der Wert 36 wird nie erreicht.
    Die Arraygrenzen sind nicht abgesichert, d.h. dein Programm stürzt irgendwann mal 100% ab,
    wenn es denn mal läuft.
    Dann ist da noch was mit deiner Klammerung faul, aber wird schon.

    Gruß,
    B.B.



  • @BigBro: meine for-schleife (rutschfunktion) funktioniert einwandfrei...
    bin meinem ziel (a bissarl simulieren) näher...
    weiß aber immer noch nicht, wie man array absichert und so... mal schauen, ob ich LAIE das irgendwann verstehe....

    greets

    #include <stdio.h> 
    #include <stdlib.h>
    #include <time.h>
    
    #define MAX 20
    
    int array[MAX]={1,2,3,4};
    int indx = 3;
    int startkapital = 300;
    int zufallszahl;
    int gespieltesysteme = 0;
    
    int main(){
    
    		int kapital = startkapital;
    	while (gespieltesysteme<10 && kapital>0) {
    		int wetthoehe;
    		if (array[1]>0) {
    			wetthoehe = array[0]+array[indx];
    		}
    		else {
    			wetthoehe=array[0];
    		}
    
    		kapital = kapital - wetthoehe;						// wetteinsatz von kapital abziehen
    		int zufallszahl=rand()%37;						// 0 - 36 (Roulette) :-) 
    		if (zufallszahl > 18) {								// gewettet auf zahlen "19-36" 
    			kapital = kapital + wetthoehe + wetthoehe;					// gewonnen
    			array[0]=0;										//kleinster wert wird gelöscht							array[indx]=0;									//höchster wert wird gelöscht
    			array[indx]=0;
    			indx = indx - 2;									//minus 2, da zwei werte gelöscht werden
    			if (array[1]>0) {
    				int anzahlzahlen = indx + 1;								//array neu sortieren, sodass kleinster wert auf arr[0] und höchster auf arr[index] ist
    				int i;
    				for (i=anzahlzahlen; i>0; i--)							//da array[0] leer ist, soll hiermit um eine stelle vorgerückt werden, 1 auf 0, 2 auf 1, usw..
    				{	
    					array[anzahlzahlen-i] = array[anzahlzahlen-i+1];
    				}
    				array[anzahlzahlen]=0;
    			}
    			else {
    				gespieltesysteme++;
    				array[0]=1;
    				array[1]=2;
    				array[2]=3;
    				array[3]=4;
    				indx=3;
    			}
    
    			printf ("GEWONNEN\t\t Einsatz: %d\t\t Zahl: %d\t\t Kapital: %d\n\n", wetthoehe, zufallszahl, kapital);
    		}
    		else
    			{
    				array[indx+1] = wetthoehe;
    				indx++;
    				printf ("VERLOREN\t\t Einsatz: %d\t\t Zahl: %d\t\t Kapital: %d\n\n", wetthoehe, zufallszahl, kapital);
    			}
    
    	}
    
    }
    


  • Mit absichern meinte ich dafür zu sorgen, das man nicht über Arraygrenzen hinaus zugreift.
    Was also noch zu tun wäre.



  • noch ne frage: warum bekomme ich nach dem kompilieren, jedesmal die gleichen zufallszahlen, wenn ich das programm laufen lasse??

    komisch! 🙂

    greets



  • lordvampire schrieb:

    noch ne frage: warum bekomme ich nach dem kompilieren, jedesmal die gleichen zufallszahlen, wenn ich das programm laufen lasse??

    komisch! 🙂

    Es fehlt srand, das Du am besten über einen Systemtimer aufrufst.



  • wenn ich srand verwende bekomme ich jedesmal die gleiche zufallszahl zB immer 28..
    wenn ich ohne srand mache bekomme ich immer die gleiche folge von zahlen zB. 9 dann 7 dann 4 dann 35 usw...

    mann oh mann



  • Was nimmst Du denn als seed für srand?



  • hat funktioniert, nachdem ich srand (time(NULL)); direkt unter main() gschrieben habe... hatte es vorher direkt über zufallszahl=rand()%37 hatte...

    jetzt klappts

    danke


Anmelden zum Antworten