Seite 1 von 1

random() & Wahrscheinlichkeitsrechnung

Verfasst: Fr 12.Aug, 2005 22:27
von lazka
Hi Leute & Programmierfreunde (Und die die in Mathe n bischen mehr aufgepasst haben ;) )
Ich stehe hier vor einer fuer mich unmoeglichen AUfgabe...
(btw. is nichts wichtiges, nur Hobbyherumgecode)
Also Problem:

Man nehme die Zahl 10.000.

1)es besteht 70% Chance dass sich der Wert um 20% verkleinert.
2)der Wert wird um einen fixen Betrag verkleinert und es besteht die Chance (z.B.: 30%) dass sich dieser verdoppelt (der Abzug)
3)der Wert wird verkleinert (-25%) wenn er groesser als der halbe Ausgangswert ist.

die Abzuege werden nicht addiert sondern nachd er reihe abgearbeitet.

und wissen moechte ich die anzahl der Durchlaeufe (durchschnittlich) bis der Wert <= 0 ist.
Also...zuerst hab ich mir gedacht: tust dir nichts an mit Wahrscheinlichkeitsrechung und machst das in C, mit rand().
Leichter gesagt als getan denn bei dem rand() muss man immer vor dem aufruf irgend ne zahl initialisieren.....blick da auch nicht ganz durch (nennt sich seed oda so ^1 :rolleyes: )
sonst kommt immer das gliche raus...


sooo 1) weis jemand wie man ne Random-Funktion macht (die einigermassen gut verteilt ist) an die ich zb.: 70% ebergebe und die mir 0 (30%) oder 1 (70%) zurueck gibt??

2) Geht das mit Wahrscheilichkeitsrechnungen?? sollte gehn...das schau ich jetzt nacher..

joa das wars ^a


btw. das mit Vorschau und dann abschicken :respect:

Verfasst: Fr 12.Aug, 2005 22:56
von Stoebi
Offtopic Anfang:
btw. das mit Vorschau und dann abschicken
Da es mal erwähnt wurde, erlaube ich mir mal eine Meinung dazu. Könnt mich gerne danach vierteilen. Kommt mir sogar recht.

Wieder mal ein Mausklick zuviel. Ich lese meinen Beitrag ins reine, wenn dieser Online gestellt ist. Und dann gibt es schliesslich noch den Edit Button, um mein Geschreibsel zu korrigieren. Viele Fehler von mir entdecke ich sogar noch Stunden später. Da hilft bei mir auch keine Vorschau.

Mich nerven halt diese unnötigen Klicks, und die Sanktionen helfen meiner Krankheit, die ich habe, auch nicht zu weniger Fehlern. Nützlich ist die Vorschau nur für mich, wenn ich BBCodes verwende, und ich sicher gehen will, dass diese auch "funktionieren". Schade, dass ich es nicht deaktivieren kann. Aber ich akzeptiere es natürlich, weil ich mich hier schliesslich wohlfühle.
Offtopic Ende:


Gruß Stöbi

Verfasst: Fr 12.Aug, 2005 23:47
von lazka
ich find das ganz ok (ich hab immer fehler)

nur die Seite mit Nutzungsbedingungen oder was das is (wo wenn man auf den Button klickt nichmal dort hinkommt wo man hin wollte sondern nichts passiert) ^1 ^1 ^a

Verfasst: Sa 13.Aug, 2005 09:56
von Bootenks
@lazka: Versuch es doch so mit C++

So müsste das Proggy in C++ aussehen, was du aber mitr dem letzten Satz meinst ist mir schleierhaft.

Code: Alles auswählen

#include <iostream>
using namespace std;

int main()
{
    float wert = 0;
    cout << "Geben Sie einen Anfangswert ein: ";
    cin >> wert;
    
    float neu_wert = wert;

    float fixer_wert = 0;
    cout << "Geben Sie einen fixen Abzugswert ein: ";
    cin >> fixer_wert;

    srand( time(NULL) ); // Startwert ist die Zeit so dass der Zufallswert neu generiert werden muss
    int zufallszahl = rand() % 10 + 1; // Zufallszahl zwischen 1 und 10
    int zufallszahl2 = rand() % 10 + 1; // Zufallszahl zwischen 1 und 10

    if ( zufallszahl <= 7 )            // Punkt 1
    neu_wert = neu_wert * 4 / 5;

    neu_wert -= fixer_wert;            // Punkt 2
    if ( zufallszahl2 <= 3 )           
    neu_wert -= fixer_wert;

    if ( neu_wert > ( wert / 2 ) )     // Punkt 3
    neu_wert = neu_wert / 4 * 3;
    
    cout << "Wert: " << neu_wert << endl;
    cin.get();
    cin.get();
}

Verfasst: Sa 13.Aug, 2005 19:33
von lazka
omg tu dir doch nich soviel an....jetzt hab ichn schlechtes gewissen... ;)

Das hab ich ja schon nur time(NULL) gibt nur die Sekunden (oder Millisek. ka) zurueck und ich will....


letzter Satz:
..das ganze in ne while(1) und mit break raus wenn neu_wert<=0

und das wiederum in ne for (mit sagen wir mal 100 Durchlaeufen) und dann den Mittelwert ermitteln...

...und da sind dann immer einige hundert Werte (rand()) hintereinander gleich. Gibts da nicht irgendwas besseres fuer rand() ausser time(NULL)??

Verfasst: Sa 13.Aug, 2005 19:48
von oxpus
Wenn Du rand(); verwendest, solltest Du den Generator mit

Code: Alles auswählen

srand ((double)microtime()*1000000);
vorher resetten, sonst kommen eben eine Vielzahl gleicher Werte raus...

Verfasst: Sa 13.Aug, 2005 20:20
von lazka
gleich ma l ausprobieren....

Edit:

Wo zum teufel hast du microtime() her
gibts nich in meiner time.h
Is die in ner anderen lib drinnen?

Edit2:

Hab einen RandomNumberGenerator gefunden (mit Beispiel...)
Alles mit OO programmiert, 3 Seiten lang ^1 *nixcheck*...jedenfalls es funktioniert jetzt.