random() & Wahrscheinlichkeitsrechnung

PHP, Ajax, CSS, HTML, Javascript
Eben für die wirklich Harten, die alles selber machen.
Antworten
Benutzeravatar
lazka
Beiträge: 51
Registriert: Do 24.Mär, 2005 09:54
Wohnort: Graz
Kontaktdaten:

random() & Wahrscheinlichkeitsrechnung

Beitrag 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:
Zuletzt geändert von lazka am Fr 12.Aug, 2005 22:29, insgesamt 1-mal geändert.
Stoebi
Beiträge: 447
Registriert: Do 24.Feb, 2005 16:35
Wohnort: Berlin
Kontaktdaten:

Beitrag 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
Zuletzt geändert von Stoebi am Fr 12.Aug, 2005 23:06, insgesamt 6-mal geändert.
Benutzeravatar
lazka
Beiträge: 51
Registriert: Do 24.Mär, 2005 09:54
Wohnort: Graz
Kontaktdaten:

Beitrag 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
Benutzeravatar
Bootenks
Beiträge: 1836
Registriert: Sa 29.Mai, 2004 23:36
Wohnort: G?rlitz (?stlichste Stadt Deutschlands)

Beitrag 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();
}
Zuletzt geändert von Bootenks am Sa 13.Aug, 2005 10:34, insgesamt 7-mal geändert.
Nur ein Informatik Student. ^^
Benutzeravatar
lazka
Beiträge: 51
Registriert: Do 24.Mär, 2005 09:54
Wohnort: Graz
Kontaktdaten:

Beitrag 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)??
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
lazka
Beiträge: 51
Registriert: Do 24.Mär, 2005 09:54
Wohnort: Graz
Kontaktdaten:

Beitrag 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.
Zuletzt geändert von lazka am Sa 13.Aug, 2005 20:53, insgesamt 2-mal geändert.
Antworten